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