Structure organisationnelle
Doggy fournit des capacités complètes de gestion de la structure organisationnelle d'entreprise, avec arborescence implémentée via Gedmo Nested Set, et prise en charge de plusieurs sociétés, départements et effectifs de postes.
Modèle d'entités
Les entités de la structure organisationnelle se trouvent dans src/Entity/Organization/ :
| Entité | Nom de table | Description |
|---|---|---|
Corporation | — | Groupe/entreprise |
Company | — | Société |
Department | org_department | Département (Gedmo NestedTree) |
Position | — | Poste |
PositionLevel | — | Niveau |
Employee | — | Employé (également utilisateur système) |
Gestion des départements
Les départements utilisent Gedmo NestedTree pour implémenter une arborescence à niveaux illimités (src/Entity/Organization/Department.php) :
#[ORM\Entity]
#[ORM\Table(name: 'org_department')]
#[Gedmo\Tree(type: 'nested')]
class Department implements GedmoNode
{
use CommonTrait;
#[ORM\Id]
#[ORM\Column(type: 'uuid', unique: true)]
#[ORM\GeneratedValue(strategy: 'CUSTOM')]
#[ORM\CustomIdGenerator(class: 'doctrine.uuid_generator')]
private $id;
#[ORM\Column(length: 100)]
private string $name;
#[ORM\Column(length: 50, nullable: true)]
private ?string $code = null;
#[Gedmo\TreeLeft]
#[ORM\Column(type: 'integer')]
private int $lft;
#[Gedmo\TreeLevel]
#[ORM\Column(type: 'integer')]
private int $lvl;
#[Gedmo\TreeRight]
#[ORM\Column(type: 'integer')]
private int $rgt;
#[Gedmo\TreeRoot]
#[ORM\Column(type: 'integer', nullable: true)]
private ?int $root = null;
#[Gedmo\TreeParent]
#[ORM\ManyToOne(targetEntity: self::class, inversedBy: 'children')]
private ?self $parent = null;
#[ORM\OneToMany(targetEntity: self::class, mappedBy: 'parent')]
private Collection $children;
/** Many-to-Many with Employee for managers */
#[ORM\ManyToMany(targetEntity: Employee::class)]
private Collection $manager;
}Attributs du département
| Champ | Type | Description |
|---|---|---|
| name | string | Nom du département |
| code | string | Code unique |
| parent | self (NestedTree) | Département parent |
| manager | ManyToMany(Employee) | Responsable du département |
| company | ManyToOne(Company) | Société de rattachement |
| type | string | Type de département |
| state | string | Actif/désactivé |
| sortOrder | integer | Poids de tri |
Interface d'administration
Point d'entrée de l'administration : App\Controller\Admin\OrgController
- Affichage visuel de l'arborescence (
templates/admin/org/department.html.twig) - Édition d'un département (
departmentEdit.html.twig) - Composant de nœud d'arborescence (
department_node.html.twig) - Sélecteur de département (
department/singleSelect.html.twig)
Gestion des postes
Les postes sont des définitions de fonctions au sein de l'organisation, associées aux départements. Le point d'entrée de gestion se trouve dans templates/admin/org/position/ :
- Liste des postes (
index.html.twig) - Création/édition de poste (
create_drawer.html.twig,edit_drawer.html.twig) - Gestion des niveaux (
level_index.html.twig) - Sélecteur de poste (
position_modal.html.twig,position_multi_modal.html.twig)
Gestion des sociétés
Prise en charge de structures multi-sociétés :
Corporation: sommet du groupe d'entreprisesCompany: société de rattachement, liée viacorporation/companydansCommonTrait- Interface d'administration :
corporation.html.twig,companyEdit.html.twig
Cache
La structure organisationnelle utilise une stratégie de cache sémantique ; la cohérence du cache est maintenue automatiquement via des écouteurs d'événements Doctrine.