134 lines
3.1 KiB
PHP
134 lines
3.1 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Entity;
|
|
|
|
use ApiPlatform\Metadata\ApiProperty;
|
|
use ApiPlatform\Metadata\ApiResource;
|
|
use App\Repository\EmployeeRepository;
|
|
use App\State\EmployeeWriteProcessor;
|
|
use DateTimeImmutable;
|
|
use Doctrine\ORM\Mapping as ORM;
|
|
use Symfony\Component\Serializer\Attribute\Groups;
|
|
|
|
#[ApiResource(
|
|
normalizationContext: ['groups' => ['employee:read', 'site:read']],
|
|
denormalizationContext: ['groups' => ['employee:write']],
|
|
paginationEnabled: false,
|
|
security: "is_granted('ROLE_ADMIN')",
|
|
processor: EmployeeWriteProcessor::class,
|
|
)]
|
|
#[ORM\Entity(repositoryClass: EmployeeRepository::class)]
|
|
#[ORM\Table(name: 'employees')]
|
|
class Employee
|
|
{
|
|
#[ORM\Id]
|
|
#[ORM\GeneratedValue]
|
|
#[ORM\Column(type: 'integer')]
|
|
#[Groups(['absence:read', 'employee:read'])]
|
|
private ?int $id = null;
|
|
|
|
#[ORM\Column(type: 'string', length: 100)]
|
|
#[Groups(['absence:read', 'employee:read', 'employee:write'])]
|
|
private string $firstName = '';
|
|
|
|
#[ORM\Column(type: 'string', length: 100)]
|
|
#[Groups(['absence:read', 'employee:read', 'employee:write'])]
|
|
private string $lastName = '';
|
|
|
|
#[ApiProperty(readableLink: true)]
|
|
#[ORM\ManyToOne(targetEntity: Site::class)]
|
|
#[ORM\JoinColumn(nullable: true)]
|
|
#[Groups(['employee:read', 'employee:write'])]
|
|
private ?Site $site = null;
|
|
|
|
#[ApiProperty(readableLink: true)]
|
|
#[ORM\ManyToOne(targetEntity: Contract::class)]
|
|
#[ORM\JoinColumn(nullable: false)]
|
|
#[Groups(['employee:read', 'employee:write'])]
|
|
private ?Contract $contract = null;
|
|
|
|
#[ORM\Column(type: 'integer', options: ['default' => 0])]
|
|
#[Groups(['employee:read', 'employee:write'])]
|
|
private int $displayOrder = 0;
|
|
|
|
#[ORM\Column(type: 'datetime_immutable')]
|
|
private DateTimeImmutable $createdAt;
|
|
|
|
public function __construct()
|
|
{
|
|
$this->createdAt = new DateTimeImmutable();
|
|
}
|
|
|
|
public function getId(): ?int
|
|
{
|
|
return $this->id;
|
|
}
|
|
|
|
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 getSite(): ?Site
|
|
{
|
|
return $this->site;
|
|
}
|
|
|
|
public function setSite(?Site $site): self
|
|
{
|
|
$this->site = $site;
|
|
|
|
return $this;
|
|
}
|
|
|
|
public function getContract(): ?Contract
|
|
{
|
|
return $this->contract;
|
|
}
|
|
|
|
public function setContract(?Contract $contract): self
|
|
{
|
|
$this->contract = $contract;
|
|
|
|
return $this;
|
|
}
|
|
|
|
public function getCreatedAt(): DateTimeImmutable
|
|
{
|
|
return $this->createdAt;
|
|
}
|
|
|
|
public function getDisplayOrder(): int
|
|
{
|
|
return $this->displayOrder;
|
|
}
|
|
|
|
public function setDisplayOrder(int $displayOrder): self
|
|
{
|
|
$this->displayOrder = $displayOrder;
|
|
|
|
return $this;
|
|
}
|
|
}
|