Estrutura organizacional
O Doggy fornece capacidades completas de gestão da estrutura organizacional empresarial, implementando a estrutura de árvore com base no Gedmo Nested Set, com suporte para múltiplas empresas, departamentos e quadros de pessoal por posição.
Modelo de entidades
As entidades relacionadas com a estrutura organizacional localizam-se em src/Entity/Organization/:
| Entidade | Nome da tabela | Descrição |
|---|---|---|
Corporation | — | Grupo/consórcio empresarial |
Company | — | Empresa |
Department | org_department | Departamento (Gedmo NestedTree) |
Position | — | Posição |
PositionLevel | — | Nível |
Employee | — | Empregado (também utilizador do sistema) |
Gestão de departamentos
Os departamentos usam o Gedmo NestedTree para implementar uma estrutura de árvore de profundidade ilimitada (src/Entity/Organization/Department.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;
}Propriedades do departamento
| Campo | Tipo | Descrição |
|---|---|---|
| name | string | Nome do departamento |
| code | string | Código único |
| parent | self (NestedTree) | Departamento superior |
| manager | ManyToMany(Employee) | Responsáveis do departamento |
| company | ManyToOne(Company) | Empresa a que pertence |
| type | string | Tipo de departamento |
| state | string | Ativado/desativado |
| sortOrder | integer | Peso de ordenação |
Interface de administração
Entrada no backoffice: App\Controller\Admin\OrgController
- Visualização da estrutura de árvore (
templates/admin/org/department.html.twig) - Edição de departamentos (
departmentEdit.html.twig) - Componente de nós da árvore de departamentos (
department_node.html.twig) - Seletor de departamentos (
department/singleSelect.html.twig)
Gestão de posições
As posições são definições de funções na organização, associadas a departamentos, com gestão em templates/admin/org/position/:
- Lista de posições (
index.html.twig) - Criação/edição de posições (
create_drawer.html.twig,edit_drawer.html.twig) - Gestão de níveis (
level_index.html.twig) - Seletor de posições (
position_modal.html.twig,position_multi_modal.html.twig)
Gestão de empresas
Suporta estruturas com múltiplas empresas:
Corporation: topo do grupo empresarialCompany: empresas subsidiárias, associadas através dos camposcorporation/companydoCommonTrait- Interface de administração:
corporation.html.twig,companyEdit.html.twig
Cache
A estrutura organizacional adota uma estratégia de cache semântica, mantendo automaticamente a consistência da cache através de listeners de eventos Doctrine.