Organisationsstruktur
Doggy bietet vollständige Verwaltungsfunktionen für Unternehmensorganisationen. Über Gedmo Nested Set wird eine Baumstruktur realisiert, die Mehrfirmen, Mehrfachabteilungen und Stellenpläne unterstützt.
Entitätsmodell
Die Entitäten der Organisationsstruktur befinden sich unter src/Entity/Organization/:
| Entität | Tabellenname | Beschreibung |
|---|---|---|
Corporation | — | Konzern/Unternehmensgruppe |
Company | — | Unternehmen |
Department | org_department | Abteilung (Gedmo NestedTree) |
Position | — | Stelle |
PositionLevel | — | Besoldungsgruppe |
Employee | — | Mitarbeiter (gleichzeitig Systembenutzer) |
Abteilungsverwaltung
Abteilungen nutzen Gedmo NestedTree für eine Baumstruktur mit unbegrenzter Tiefe (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;
}Abteilungseigenschaften
| Feld | Typ | Beschreibung |
|---|---|---|
| name | string | Abteilungsname |
| code | string | Eindeutiger Code |
| parent | self (NestedTree) | Übergeordnete Abteilung |
| manager | ManyToMany(Employee) | Abteilungsleiter |
| company | ManyToOne(Company) | Zugehöriges Unternehmen |
| type | string | Abteilungstyp |
| state | string | Aktiviert/Deaktiviert |
| sortOrder | integer | Sortiergewicht |
Verwaltungsoberfläche
Backend-Einstieg: App\Controller\Admin\OrgController
- Visuelle Baumdarstellung (
templates/admin/org/department.html.twig) - Abteilungsbearbeitung (
departmentEdit.html.twig) - Baumknoten-Komponente der Abteilung (
department_node.html.twig) - Abteilungsauswahl (
department/singleSelect.html.twig)
Stellenverwaltung
Stellen sind Positionsdefinitionen innerhalb der Organisation, die mit Abteilungen verknüpft sind. Der Verwaltungseinstieg liegt in templates/admin/org/position/:
- Stellenliste (
index.html.twig) - Stellen anlegen/bearbeiten (
create_drawer.html.twig,edit_drawer.html.twig) - Besoldungsgruppen-Verwaltung (
level_index.html.twig) - Stellenauswahl (
position_modal.html.twig,position_multi_modal.html.twig)
Unternehmensverwaltung
Unterstützt Mehrfirmenstrukturen:
Corporation: Top-Ebene der UnternehmensgruppeCompany: Tochterunternehmen, verknüpft übercorporation/companyimCommonTrait- Verwaltungsoberfläche:
corporation.html.twig,companyEdit.html.twig
Caching
Die Organisationsstruktur verwendet eine semantische Caching-Strategie. Über Doctrine-Event-Listener wird die Cache-Konsistenz automatisch gewahrt.