الهيكل التنظيمي
يوفر Doggy قدرات كاملة لإدارة الهيكل التنظيمي للمؤسسات، مع بنية شجرية مبنية على Gedmo Nested Set، ودعم الشركات المتعددة والأقسام المتعددة ومخصصات المناصب.
نموذج الكيانات
تقع الكيانات المتعلقة بالهيكل التنظيمي في src/Entity/Organization/:
| الكيان | اسم الجدول | الوصف |
|---|---|---|
Corporation | — | المجموعة/مجموعة الشركات |
Company | — | الشركة |
Department | org_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;
}خصائص القسم
| الحقل | النوع | الوصف |
|---|---|---|
| name | string | اسم القسم |
| code | string | الرمز الفريد |
| parent | self (NestedTree) | القسم الأعلى |
| manager | ManyToMany(Employee) | مسؤول القسم |
| company | ManyToOne(Company) | الشركة التابع لها |
| type | string | نوع القسم |
| state | string | مفعّل/معطّل |
| sortOrder | integer | وزن الترتيب |
واجهة الإدارة
نقطة دخول لوحة الإدارة: 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.