Skip to content

الهيكل التنظيمي

يوفر Doggy قدرات كاملة لإدارة الهيكل التنظيمي للمؤسسات، مع بنية شجرية مبنية على Gedmo Nested Set، ودعم الشركات المتعددة والأقسام المتعددة ومخصصات المناصب.

نموذج الكيانات

تقع الكيانات المتعلقة بالهيكل التنظيمي في src/Entity/Organization/:

الكياناسم الجدولالوصف
Corporationالمجموعة/مجموعة الشركات
Companyالشركة
Departmentorg_departmentالقسم (Gedmo NestedTree)
Positionالمنصب
PositionLevelالمستوى الوظيفي
Employeeالموظف (وهو أيضًا مستخدم النظام)

إدارة الأقسام

تنفّذ الأقسام بنية شجرية بلا حدود من المستويات عبر Gedmo NestedTree (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;
}

خصائص القسم

الحقلالنوعالوصف
namestringاسم القسم
codestringالرمز الفريد
parentself (NestedTree)القسم الأعلى
managerManyToMany(Employee)مسؤول القسم
companyManyToOne(Company)الشركة التابع لها
typestringنوع القسم
statestringمفعّل/معطّل
sortOrderintegerوزن الترتيب

واجهة الإدارة

نقطة دخول لوحة الإدارة: App\Controller\Admin\OrgController

  • عرض مرئي للبنية الشجرية (templates/admin/org/department.html.twig)
  • تحرير القسم (departmentEdit.html.twig)
  • مكوّن عقد الشجرة (department_node.html.twig)
  • منتقي الأقسام (department/singleSelect.html.twig)

إدارة المناصب

المنصب هو تعريف للوظيفة داخل المؤسسة ويرتبط بالقسم، ونقطة الدخول الإدارية في templates/admin/org/position/:

  • قائمة المناصب (index.html.twig)
  • إنشاء/تعديل المناصب (create_drawer.html.twig, edit_drawer.html.twig)
  • إدارة المستويات الوظيفية (level_index.html.twig)
  • منتقي المناصب (position_modal.html.twig, position_multi_modal.html.twig)

إدارة الشركات

دعم بنية الشركات المتعددة:

  • Corporation: المستوى الأعلى لمجموعة الشركات
  • Company: الشركات التابعة، مرتبطة عبر corporation/company في CommonTrait
  • واجهة الإدارة: corporation.html.twig، companyEdit.html.twig

التخزين المؤقت

يعتمد الهيكل التنظيمي إستراتيجية تخزين مؤقت دلالية، مع الحفاظ التلقائي على اتساق التخزين المؤقت عبر مستمعي أحداث Doctrine.

مصدر مفتوح برخصة MIT | حقوق النشر © 2026 Doggy