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
Corporation—Konzern/Unternehmensgruppe
Company—Unternehmen
Departmentorg_departmentAbteilung (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):

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