src/Entity/Employee.php line 47
<?phpnamespace App\Entity;use ApiPlatform\Metadata\ApiResource;use ApiPlatform\Metadata\GetCollection;use ApiPlatform\Metadata\Get;use ApiPlatform\Metadata\Link;use App\Controller\Api\Employee\ApiEstablishmentEmployeeStatsController;use App\Controller\Api\Order\ApiEmployeeOrdersController;use App\Kimia;use App\Model\Wallet\WalletInterface;use App\Repository\EmployeeRepository;use App\Trait\ActivableTrait;use App\Trait\DateTrait;use App\Trait\DeletableTrait;use App\Trait\WalletTrait;use DateTimeImmutable;use Doctrine\Common\Collections\ArrayCollection;use Doctrine\Common\Collections\Collection;use Doctrine\DBAL\Types\Types;use Doctrine\ORM\Mapping as ORM;use Symfony\Component\Serializer\Annotation\Groups;#[ORM\Entity(repositoryClass: EmployeeRepository::class)]#[ApiResource(operations: [new GetCollection(normalizationContext: ['groups' => ['employee:list']]),new GetCollection(uriTemplate: "/departments/{departmentId}/employees",uriVariables: ['departmentId' => new Link(toProperty: 'department', fromClass: Department::class),],normalizationContext: ['groups' => ['employee:list']]),new Get(),new Get(uriTemplate: "/employees/{id}/stats",controller: ApiEstablishmentEmployeeStatsController::class,normalizationContext: ['groups' => ['order:list']]),],normalizationContext: ['groups' => ['employee:list', 'employee:view']])]class Employee implements WalletInterface{use DateTrait {DateTrait::__construct as dateConstruct;}use ActivableTrait;use DeletableTrait;use WalletTrait;#[ORM\Id]#[ORM\GeneratedValue]#[ORM\Column]#[Groups(['employee:list', 'flow:list', 'attendance:list'])]private ?int $id = null;#[ORM\Column(length: 255)]#[Groups(['employee:list', 'flow:list', 'attendance:list'])]private ?string $firstname = null;#[ORM\Column(length: 255)]#[Groups(['employee:list', 'flow:list', 'attendance:list'])]private ?string $lastname = null;#[ORM\Column(length: 180, nullable: true)]#[Groups(['employee:list', 'flow:list', 'attendance:list'])]private ?string $email = null;#[ORM\Column(length: 15)]#[Groups(['employee:list', 'flow:list', 'attendance:list'])]private ?string $phone = null;#[ORM\Column(type: Types::JSON)]#[Groups(['employee:view'])]private array $permissions = [];#[ORM\Column(length: 255)]private ?string $status;#[ORM\ManyToOne(cascade: ["persist"])]#[ORM\JoinColumn(nullable: true)]private ?Invitation $invitation = null;#[ORM\ManyToOne]private ?User $user = null;#[ORM\ManyToOne(inversedBy: 'employees')]private ?Department $department = null;#[ORM\OneToMany(mappedBy: 'employee', targetEntity: Attendance::class, orphanRemoval: true)]private Collection $attendances;#[ORM\OneToMany(mappedBy: 'waiter', targetEntity: Order::class)]private Collection $orders;#[ORM\Column]private ?int $quota;#[ORM\ManyToOne(inversedBy: 'employees')]private ?Establishment $establishment = null;#[ORM\OneToMany(mappedBy: 'user', targetEntity: FlowUser::class)]private Collection $flowUsers;#[ORM\Column]private ?bool $paymentQuota = null;#[ORM\Column(nullable: true)]private ?float $percentQuota = null;#[ORM\ManyToOne(inversedBy: 'employees')]private ?Role $function = null;#[ORM\OneToMany(mappedBy: 'employee', targetEntity: Document::class)]private Collection $documents;#[ORM\OneToMany(mappedBy: 'employee', targetEntity: EmployeeContract::class, orphanRemoval: true)]private Collection $contracts;#[ORM\OneToMany(mappedBy: 'employee', targetEntity: Address::class)]private Collection $addresses;#[ORM\OneToMany(mappedBy: 'employee', targetEntity: Card::class)]private Collection $cards;#[ORM\OneToMany(mappedBy: 'employee', targetEntity: Mutuality::class)]private Collection $mutualities;public function __construct(){$this->dateConstruct();$this->quota = 0;$this->attendances = new ArrayCollection();$this->orders = new ArrayCollection();$this->flowUsers = new ArrayCollection();$this->documents = new ArrayCollection();$this->contracts = new ArrayCollection();$this->addresses = new ArrayCollection();$this->cards = new ArrayCollection();$this->mutualities = new ArrayCollection();}public function getId(): ?int{return $this->id;}public function getFullname(): ?string{return "$this->firstname $this->lastname";}public function getName(): ?string{return "$this->firstname $this->lastname";}public function getFirstname(): ?string{return $this->firstname;}public function setFirstname(string $firstname): self{$this->firstname = $firstname;return $this;}public function getLastname(): ?string{return $this->lastname;}public function setLastname(string $lastname): self{$this->lastname = $lastname;return $this;}public function getEmail(): ?string{return $this->email;}public function setEmail(?string $email): self{$this->email = $email;return $this;}public function getPhone(): ?string{return $this->phone;}public function setPhone(string $phone): self{$this->phone = preg_replace('/^(\+243|0|00243)([0-9]{9})$/', '243$2', $phone);return $this;}public function getPermissions(): array{return $this->permissions;}public static function getPermissionList(): array{return ["Voir les départements" => Kimia::ROLE_VIEW_DEPARTMENT,"Créer les départements" => Kimia::ROLE_CREATE_DEPARTMENT,"Modifier les départements" => Kimia::ROLE_EDIT_DEPARTMENT,"Supprimer les départements" => Kimia::ROLE_DELETE_DEPARTMENT,"Activer les départements" => Kimia::ROLE_ACTIVATE_DEPARTMENT,"Désactiver les départements" => Kimia::ROLE_DEACTIVATE_DEPARTMENT,"Voir les articles" => Kimia::ROLE_VIEW_ARTICLE,"Créer les articles" => Kimia::ROLE_CREATE_ARTICLE,"Modifier les articles" => Kimia::ROLE_EDIT_ARTICLE,"Supprimer les articles" => Kimia::ROLE_DELETE_ARTICLE,"Activer les articles" => Kimia::ROLE_ACTIVATE_ARTICLE,"Désactiver les articles" => Kimia::ROLE_DEACTIVATE_ARTICLE,"Voir les collections" => Kimia::ROLE_VIEW_COLLECTION,"Créer les collections" => Kimia::ROLE_CREATE_COLLECTION,"Modifier les collections" => Kimia::ROLE_EDIT_COLLECTION,"Supprimer les collections" => Kimia::ROLE_DELETE_COLLECTION,"Activer les collections" => Kimia::ROLE_ACTIVATE_COLLECTION,"Désactiver les collections" => Kimia::ROLE_DEACTIVATE_COLLECTION,"Gérer les finances" => Kimia::ROLE_VIEW_FINANCE,"Analyser les données" => Kimia::ROLE_VIEW_DATA_ANALYST,"Voir le profile" => Kimia::ROLE_VIEW_PROFILE,"Voir les réductions" => Kimia::ROLE_VIEW_REDUCTION,"Créer les réductions" => Kimia::ROLE_CREATE_REDUCTION,"Modifier les réductions" => Kimia::ROLE_EDIT_REDUCTION,"Supprimer les réductions" => Kimia::ROLE_DELETE_REDUCTION,"Activer les réductions" => Kimia::ROLE_ACTIVATE_REDUCTION,"Desactiver les réductions" => Kimia::ROLE_DEACTIVATE_REDUCTION,"Voir les stocks" => Kimia::ROLE_VIEW_STOCK,"Créer les stocks" => Kimia::ROLE_CREATE_STOCK,"Modifier les stocks" => Kimia::ROLE_EDIT_STOCK,"Supprimer les stocks" => Kimia::ROLE_DELETE_STOCK,"Approuver les stocks" => Kimia::ROLE_APPROVE_STOCK,"Annuler les stocks" => Kimia::ROLE_CANCEL_STOCK,"Voir les commandes" => Kimia::ROLE_VIEW_ORDER,"Créer les commandes" => Kimia::ROLE_CREATE_ORDER,"Modifier les commandes" => Kimia::ROLE_EDIT_ORDER,"Supprimer les commandes" => Kimia::ROLE_DELETE_ORDER,"Annuler les commandes" => Kimia::ROLE_CANCEL_ORDER,"Voir les planning" => Kimia::ROLE_VIEW_PLANNING,"Créer les planning" => Kimia::ROLE_CREATE_PLANNING,"Modifier les planning" => Kimia::ROLE_EDIT_PLANNING,"Supprimer les planning" => Kimia::ROLE_DELETE_PLANNING,"Activer les planning" => Kimia::ROLE_ACTIVATE_PLANNING,"Désactiver les planning" => Kimia::ROLE_DEACTIVATE_PLANNING,"Voir les employés" => Kimia::ROLE_VIEW_EMPLOYEE,"Ajouter des employés" => Kimia::ROLE_CREATE_EMPLOYEE,"Modifier des employés" => Kimia::ROLE_EDIT_EMPLOYEE,"Supprimer des employés" => Kimia::ROLE_DELETE_EMPLOYEE,"Voir les clients" => Kimia::ROLE_VIEW_CLIENT,"Créer les clients" => Kimia::ROLE_CREATE_CLIENT,"Modifier les clients" => Kimia::ROLE_EDIT_CLIENT,"Supprimer les clients" => Kimia::ROLE_DELETE_CLIENT,"Voir les présences" => Kimia::ROLE_VIEW_PRESENCE,"Créer les présences" => Kimia::ROLE_CREATE_PRESENCE,"Modifier les présences" => Kimia::ROLE_EDIT_PRESENCE,"Supprimer les présences" => Kimia::ROLE_DELETE_PRESENCE,"Voir les modèles des factures" => Kimia::ROLE_VIEW_FACTURE,"Créer les modèles des factures" => Kimia::ROLE_CREATE_FACTURE,"Modifier les modèles des factures" => Kimia::ROLE_EDIT_FACTURE,"Supprimer les modèles des factures" => Kimia::ROLE_DELETE_FACTURE,"Serveur" => Kimia::ROLE_WAITER,];}public static function getGroupPermissionList(): array{return [Kimia::GROUP_ROLE_DEPARTMENT => Kimia::GROUP_ROLE_DEPARTMENT_LIST,Kimia::GROUP_ROLE_ARTICLE => Kimia::GROUP_ROLE_ARTICLE_LIST,Kimia::GROUP_ROLE_COLLECTION => Kimia::GROUP_ROLE_COLLECTION_LIST,Kimia::GROUP_ROLE_REDUCTION => Kimia::GROUP_ROLE_REDUCTION_LIST,Kimia::GROUP_ROLE_STOCK => Kimia::GROUP_ROLE_STOCK_LIST,Kimia::GROUP_ROLE_ORDER => Kimia::GROUP_ROLE_ORDER_LIST,Kimia::GROUP_ROLE_PLANNING => Kimia::GROUP_ROLE_PLANNING_LIST,Kimia::GROUP_ROLE_EMPLOYEE => Kimia::GROUP_ROLE_EMPLOYEE_LIST,Kimia::GROUP_ROLE_CLIENT => Kimia::GROUP_ROLE_CLIENT_LIST,Kimia::GROUP_ROLE_PRESENCE => Kimia::GROUP_ROLE_PRESENCE_LIST,Kimia::GROUP_ROLE_FACTURE => Kimia::GROUP_ROLE_FACTURE_LIST];}public function setPermissions(array $permissions): self{$this->permissions = $permissions;return $this;}public function getIsGranted($role){if (in_array($role, $this->getPermissions())) return true;return false;}public function getIsGrantedGroup($group){foreach (self::getGroupPermissionList()[$group] as $r) {if (in_array($r, $this->getPermissions())) return true;}return false;}public function getStatus(): ?string{return $this->status;}public function setStatus(string $status): self{$this->status = $status;return $this;}public function getInvitation(): ?Invitation{return $this->invitation;}public function setInvitation(?Invitation $invitation): self{$this->invitation = $invitation;return $this;}public function getUser(): ?User{return $this->user;}public function setUser(?User $user): self{$this->user = $user;return $this;}public function getDepartment(): ?Department{return $this->department;}public function setDepartment(?Department $department): self{$this->department = $department;return $this;}/*** @return Collection<int, Attendance>*/public function getAttendances(): Collection{return $this->attendances;}public function addAttendance(Attendance $attendance): self{if (!$this->attendances->contains($attendance)) {$this->attendances->add($attendance);$attendance->setEmployee($this);}return $this;}public function removeAttendance(Attendance $attendance): self{if ($this->attendances->removeElement($attendance)) {if ($attendance->getEmployee() === $this) {$attendance->setEmployee(null);}}return $this;}/*** @return Collection<int, Order>*/public function getOrders(): Collection{return $this->orders;}public function addOrder(Order $order): self{if (!$this->orders->contains($order)) {$this->orders->add($order);$order->setWaiter($this);}return $this;}public function removeOrder(Order $order): self{if ($this->orders->removeElement($order)) {// set the owning side to null (unless already changed)if ($order->getWaiter() === $this) {$order->setWaiter(null);}}return $this;}public function getQuota(): ?int{return $this->quota;}public function incrementQuota(int $quota = 1): self{$this->quota += $quota;return $this;}public function decrementQuota(int $quota = 1): self{$this->quota -= $quota;return $this;}public function getQuotaOfDay(): ?int{$quota = 0;$now = new DateTimeImmutable();/** @var Order $order */foreach ($this->orders as $order) {if ($order->getCreatedAt()->format('d M Y') === $now->format('d M Y')) {if ($order->getStatus() === Kimia::STATUS_SUCCESS) $quota++;}}return $quota;}public function setQuota(int $quota): self{$this->quota = $quota;return $this;}public function getEstablishment(): ?Establishment{return $this->establishment;}public function setEstablishment(?Establishment $establishment): self{$this->establishment = $establishment;return $this;}/*** @return Collection<int, FlowUser>*/public function getFlowUsers(): Collection{return $this->flowUsers;}public function addFlowUser(FlowUser $flowUser): self{if (!$this->flowUsers->contains($flowUser)) {$this->flowUsers->add($flowUser);$flowUser->setUser($this);}return $this;}public function removeFlowUser(FlowUser $flowUser): self{if ($this->flowUsers->removeElement($flowUser)) {// set the owning side to null (unless already changed)if ($flowUser->getUser() === $this) {$flowUser->setUser(null);}}return $this;}public function isPaymentQuota(): ?bool{return $this->paymentQuota;}public function setPaymentQuota(bool $paymentQuota): self{$this->paymentQuota = $paymentQuota;return $this;}public function getPercentQuota(): ?float{return $this->percentQuota;}public function setPercentQuota(?float $percentQuota): self{$this->percentQuota = $percentQuota;return $this;}public function __toString(): string{return $this->getFullname();}public function getFunction(): ?Role{return $this->function;}public function setFunction(?Role $function): static{$this->function = $function;return $this;}/*** @return Collection<int, Document>*/public function getDocuments(): Collection{return $this->documents;}public function addDocument(Document $document): static{if (!$this->documents->contains($document)) {$this->documents->add($document);$document->setEmployee($this);}return $this;}public function removeDocument(Document $document): static{if ($this->documents->removeElement($document)) {// set the owning side to null (unless already changed)if ($document->getEmployee() === $this) {$document->setEmployee(null);}}return $this;}public function getContract(): ?Contract{return $this->contract;}public function setContract(?Contract $contract): static{$this->contract = $contract;return $this;}/*** @return Collection<int, EmployeeContract>*/public function getContracts(): Collection{return $this->contracts;}public function addContract(EmployeeContract $contract): static{if (!$this->contracts->contains($contract)) {$this->contracts->add($contract);$contract->setEmployee($this);}return $this;}public function removeContract(EmployeeContract $contract): static{if ($this->contracts->removeElement($contract)) {// set the owning side to null (unless already changed)if ($contract->getEmployee() === $this) {$contract->setEmployee(null);}}return $this;}/*** @return Collection<int, Address>*/public function getAddresses(): Collection{return $this->addresses;}public function addAddress(Address $address): static{if (!$this->addresses->contains($address)) {$this->addresses->add($address);$address->setEmployee($this);}return $this;}public function removeAddress(Address $address): static{if ($this->addresses->removeElement($address)) {// set the owning side to null (unless already changed)if ($address->getEmployee() === $this) {$address->setEmployee(null);}}return $this;}/*** @return Collection<int, Card>*/public function getCards(): Collection{return $this->cards;}public function addCard(Card $card): static{if (!$this->cards->contains($card)) {$this->cards->add($card);$card->setEmployee($this);}return $this;}public function removeCard(Card $card): static{if ($this->cards->removeElement($card)) {// set the owning side to null (unless already changed)if ($card->getEmployee() === $this) {$card->setEmployee(null);}}return $this;}/*** @return Collection<int, Mutuality>*/public function getMutualities(): Collection{return $this->mutualities;}public function addMutuality(Mutuality $mutuality): static{if (!$this->mutualities->contains($mutuality)) {$this->mutualities->add($mutuality);$mutuality->setEmployee($this);}return $this;}public function removeMutuality(Mutuality $mutuality): static{if ($this->mutualities->removeElement($mutuality)) {// set the owning side to null (unless already changed)if ($mutuality->getEmployee() === $this) {$mutuality->setEmployee(null);}}return $this;}}