Skip to content

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ätTabellennameBeschreibung
CorporationKonzern/Unternehmensgruppe
CompanyUnternehmen
Departmentorg_departmentAbteilung (Gedmo NestedTree)
PositionStelle
PositionLevelBesoldungsgruppe
EmployeeMitarbeiter (gleichzeitig Systembenutzer)

Abteilungsverwaltung

Abteilungen nutzen Gedmo NestedTree für eine Baumstruktur mit unbegrenzter Tiefe (src/Entity/Organization/Department.php):

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

FeldTypBeschreibung
namestringAbteilungsname
codestringEindeutiger Code
parentself (NestedTree)Übergeordnete Abteilung
managerManyToMany(Employee)Abteilungsleiter
companyManyToOne(Company)Zugehöriges Unternehmen
typestringAbteilungstyp
statestringAktiviert/Deaktiviert
sortOrderintegerSortiergewicht

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 Unternehmensgruppe
  • Company: Tochterunternehmen, verknüpft über corporation/company im CommonTrait
  • 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.

Open Source unter MIT | Copyright © 2026 Doggy