src/Entity/AdditionalCost.php line 48

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Entity;
  4. use ApiPlatform\Core\Annotation\ApiProperty;
  5. use ApiPlatform\Core\Annotation\ApiResource;
  6. use App\Trait\TimestampableEntity;
  7. use Doctrine\ORM\Mapping as ORM;
  8. use Symfony\Component\Serializer\Annotation\Groups;
  9. use Symfony\Component\Validator\Constraints as Assert;
  10. use Symfony\Component\Serializer\Annotation\MaxDepth;
  11. use Ramsey\Uuid\Uuid;
  12. use Ramsey\Uuid\UuidInterface;
  13. /**
  14.  * The most generic type of item.
  15.  *
  16.  * @see https://schema.org/Thing
  17.  *
  18.  * @author Jordi Fernandes Alves <jfadev@gmail.com>
  19.  */
  20. #[ORM\Entity]
  21. #[ApiResource(
  22.     iri'AdditionalCost',
  23.     itemOperations: [
  24.         'get' => ['normalization_context' => ['groups' => 'additional_cost:item:get''enable_max_depth' => true]],
  25.         'put' => [
  26.             'normalization_context' => ['groups' => 'additional_cost:item:put''enable_max_depth' => true],
  27.             'denormalization_context' => ['groups' => 'additional_cost:item:put''enable_max_depth' => true],
  28.         ],
  29.         'delete' => [],
  30.     ],
  31.     collectionOperations: [
  32.         'get' => [
  33.             'normalization_context' => [
  34.                 'groups' => ['additional_cost:collection:get''createdAt'],
  35.                 'enable_max_depth' => true,
  36.             ],
  37.         ],
  38.         'post' => [
  39.             'normalization_context' => ['groups' => 'additional_cost:collection:post''enable_max_depth' => true],
  40.             'denormalization_context' => ['groups' => 'additional_cost:collection:post''enable_max_depth' => true],
  41.         ],
  42.     ],
  43. )]
  44. class AdditionalCost
  45. {
  46.     use TimestampableEntity;
  47.     public const COST_TYPES = [
  48.         'PMT',
  49.         'LUMPSUM'
  50.     ];
  51.     
  52.     #[ORM\Id]
  53.     #[ORM\GeneratedValue(strategy'NONE')]
  54.     #[ORM\Column(type'uuid'uniquetrue)]
  55.     #[ApiProperty(iri'https://schema.org/identifier')]
  56.     #[Groups(['additional_cost:collection:get''additional_cost:item:get'])]
  57.     private ?UuidInterface $id null;
  58.     #[ORM\Column(type'string'nullabletrue)]
  59.     #[Assert\Type('string')]
  60.     #[ApiProperty(iri'https://schema.org/additionalCost')]
  61.     #[Groups(['additional_cost:item:get''additional_cost:item:put''additional_cost:collection:get''additional_cost:collection:post''contract:collection:post''contract:item:get''contract:item:put'])]
  62.     private ?string $additionalCost null;
  63.     #[ORM\Column(type'string'nullabletrue)]
  64.     #[Assert\Type('string')]
  65.     #[ApiProperty(iri'https://schema.org/currency')]
  66.     #[Groups(['additional_cost:item:get''additional_cost:item:put''additional_cost:collection:get''additional_cost:collection:post''contract:collection:post''contract:item:get''contract:item:put'])]
  67.     private ?string $additionalCostCurrency null;
  68.     #[ORM\Column(type'string'nullabletrue)]
  69.     #[Assert\Type('string')]
  70.     #[Assert\Choice(choicesself::COST_TYPESmessage'The type is not valid.')]
  71.     #[ApiProperty(iri'https://schema.org/additionalType')]
  72.     #[Groups(['additional_cost:item:get''additional_cost:item:put''additional_cost:collection:get''additional_cost:collection:post''contract:collection:post''contract:item:get''contract:item:put'])]
  73.     private ?string $additionalType null;
  74.     #[ORM\Column(type'string'nullabletrue)]
  75.     #[ApiProperty(iri'https://schema.org/description')]
  76.     #[Assert\Type('string')]
  77.     #[Groups(['additional_cost:collection:get''additional_cost:collection:post''additional_cost:item:get''additional_cost:item:put''contract:collection:post''contract:item:get''contract:item:put'])]
  78.     private ?string $description null;
  79.     #[ORM\ManyToOne(targetEntity'App\Entity\Contract'inversedBy'additionalCosts')]
  80.     #[ORM\JoinColumn(nullabletrue)]
  81.     #[ApiProperty(iri'https://schema.org/Contract')]
  82.     #[Groups(['additional_cost:collection:get''additional_cost:collection:post''additional_cost:item:get''additional_cost:item:put'])]
  83.     #[MaxDepth(1)]
  84.     private ?Contract $contract null;
  85.     public function __construct()
  86.     {
  87.         $this->id Uuid::uuid4();
  88.     }
  89.     public function getId(): ?UuidInterface
  90.     {
  91.         return $this->id;
  92.     }
  93.     public function getAdditionalCost(): ?string
  94.     {
  95.         return $this->additionalCost;
  96.     }
  97.     public function setAdditionalCost(?string $additionalCost): void
  98.     {
  99.         $this->additionalCost $additionalCost;
  100.     }
  101.     public function getAdditionalCostCurrency(): ?string
  102.     {
  103.         return $this->additionalCostCurrency;
  104.     }
  105.     public function setAdditionalCostCurrency(?string $additionalCostCurrency): void
  106.     {
  107.         $this->additionalCostCurrency $additionalCostCurrency;
  108.     }
  109.     public function getAdditionalType(): ?string
  110.     {
  111.         return $this->additionalType;
  112.     }
  113.     public function setAdditionalType(?string $additionalType): void
  114.     {
  115.         $this->additionalType $additionalType;
  116.     }
  117.     public function setDescription(?string $description): void
  118.     {
  119.         $this->description $description;
  120.     }
  121.     public function getDescription(): ?string
  122.     {
  123.         return $this->description;
  124.     }
  125.     public function setContract(?Contract $contract): void
  126.     {
  127.         $this->contract $contract;
  128.     }
  129.     public function getContract(): ?Contract
  130.     {
  131.         return $this->contract;
  132.     }
  133. }