src/Containers/CrmSection/InsuranceCaseContainer/Entities/InsuranceCaseEntity.php line 99

Open in your IDE?
  1. <?php
  2. namespace App\Containers\CrmSection\InsuranceCaseContainer\Entities;
  3. use ApiPlatform\Metadata\ApiResource;
  4. use ApiPlatform\Metadata\Delete;
  5. use ApiPlatform\Metadata\Get;
  6. use ApiPlatform\Metadata\GetCollection;
  7. use ApiPlatform\Metadata\Patch;
  8. use ApiPlatform\Metadata\Put;
  9. use ApiPlatform\Metadata\Post;
  10. use ApiPlatform\Metadata\ApiFilter;
  11. use ApiPlatform\Doctrine\Orm\Filter\SearchFilter;
  12. use ApiPlatform\Doctrine\Orm\Filter\NumericFilter;
  13. use ApiPlatform\Doctrine\Orm\Filter\RangeFilter;
  14. use ApiPlatform\Doctrine\Orm\Filter\DateFilter;
  15. use ApiPlatform\Doctrine\Orm\Filter\BooleanFilter;
  16. use ApiPlatform\Doctrine\Orm\Filter\OrderFilter;
  17. use Doctrine\ORM\Mapping as ORM;
  18. use Doctrine\DBAL\Types\Types;
  19. use Gedmo\Mapping\Annotation as Gedmo;
  20. use Symfony\Component\Serializer\Annotation\Groups;
  21. use Symfony\Component\Serializer\Annotation\MaxDepth;
  22. use Symfony\Component\Serializer\Annotation\Context;
  23. use Symfony\Component\Serializer\Normalizer\DateTimeNormalizer;
  24. use App\Containers\CrmSection\InsuranceCaseContainer\Data\Repositories\InsuranceCaseRepository;
  25. use App\Containers\CrmSection\ClientContainer\Entities\ClientEntity;
  26. use App\Containers\CrmSection\ContractContainer\Entities\ContractEntity;
  27. use App\Containers\OscpvSection\ContractContainer\Entities\ContractEntity as OscpvContractEntity;
  28. use App\Containers\CrmSection\CarContainer\Entities\CarEntity;
  29. use App\Containers\SettingSection\ListContainer\Entities\StatusEntity;
  30. use App\Ship\ApiPlatform\Filter\SimpleSearchFilter;
  31. /** 
  32.  * Страховой случай
  33. */
  34. #[ApiResource(
  35.     routePrefix'/crm',
  36.     normalizationContext: [
  37.         'groups' => 'read',
  38.         'enable_max_depth' => true
  39.     ],
  40.     operations: [
  41.         new Get(
  42.             uriTemplate'/insurance_cases/{id}'requirements: ['id' => '\d+'],
  43.             security"is_granted('ROLE_ADMIN') or is_granted('ROLE_USER_CLIENT') or is_granted('ROLE_READONLY')"
  44.         ),
  45.         new Patch(
  46.             uriTemplate'/insurance_cases/{id}'requirements: ['id' => '\d+'],
  47.             security"is_granted('ROLE_ADMIN') or is_granted('ROLE_USER_CLIENT')"
  48.         ),
  49.         // new Put(
  50.         //     uriTemplate: '/insurance_cases/{id}', requirements: ['id' => '\d+'],
  51.         //     security: "is_granted('ROLE_ADMIN') or is_granted('ROLE_USER_CLIENT')"
  52.         // ),
  53.         new Delete(
  54.             uriTemplate'/insurance_cases/{id}'requirements: ['id' => '\d+'],
  55.             security"is_granted('ROLE_ADMIN')"
  56.         ),
  57.         new Post(
  58.             uriTemplate'/insurance_cases',
  59.             security"is_granted('ROLE_ADMIN')"
  60.         ),
  61.         new GetCollection(
  62.             uriTemplate'/insurance_cases',
  63.             security"is_granted('ROLE_ADMIN') or is_granted('ROLE_USER_CLIENT') or is_granted('ROLE_READONLY')"
  64.         ),
  65.     ],
  66.     shortName'CRM_InsuranceCases'
  67. )]
  68. #[ApiFilter(SearchFilter::class, properties: [
  69.     'id' => 'exact',
  70.     'externalCode' => 'exact'
  71.     'client' => 'exact',
  72.     'contract' => 'exact',
  73.     'oscpvContract' => 'exact',
  74.     'car' => 'exact',
  75.     'status' => 'exact',
  76.     'car.name' => 'partial'
  77.     'car.carNumber' => 'partial'
  78.     'client.name' => 'partial'
  79.     'client.lastName' => 'partial'
  80.     'client.patronymic' => 'partial'
  81.     'client.externalCode' => 'partial'
  82.     'client.phone' => 'exact'
  83.     'client.email' => 'exact'
  84.     'client.inn' => 'exact'
  85. ])]
  86. #[ApiFilter(NumericFilter::class, properties: ['id'])]
  87. #[ApiFilter(RangeFilter::class, properties: ['id'])]
  88. #[ApiFilter(BooleanFilter::class, properties: ['isEasyPeasy''isOscpv'])]
  89. #[ApiFilter(DateFilter::class, properties: ['date''createdAt''updatedAt'])]
  90. #[ApiFilter(OrderFilter::class)]
  91. #[ApiFilter(filterClassSimpleSearchFilter::class, properties: [
  92.     'externalCode''description'
  93. ])]
  94. #[ORM\Entity(repositoryClassInsuranceCaseRepository::class)]
  95. #[ORM\Table(name'`crm_insurance_cases`')]
  96. class InsuranceCaseEntity
  97. {   
  98.     #[ORM\Id]
  99.     #[ORM\GeneratedValue]
  100.     #[ORM\Column(typeTypes::INTEGER)]
  101.     #[Groups(['read'])]
  102.     private ?int $id null;
  103.     #[ORM\Column(typeTypes::STRINGlength255nullabletrueuniquetrue)]
  104.     #[Groups(['read'])]
  105.     private ?string $externalCode null;
  106.     // Клиент
  107.     #[ORM\ManyToOne(targetEntityClientEntity::class)]
  108.     #[ORM\JoinColumn(name'client_id'referencedColumnName'id'nullablefalse)]
  109.     #[Groups(['read'])]
  110.     #[MaxDepth(2)]
  111.     private ClientEntity $client;
  112.     // Договор
  113.     #[ORM\ManyToOne(targetEntityContractEntity::class)]
  114.     #[ORM\JoinColumn(name'contract_id'referencedColumnName'id'nullabletrue)]
  115.     #[Groups(['read'])]
  116.     #[MaxDepth(1)]
  117.     private ?ContractEntity $contract null;
  118.     // Easy Peasy
  119.     #[ORM\Column(typeTypes::BOOLEAN)]
  120.     #[Groups(['read'])]
  121.     private ?bool $isEasyPeasy false;
  122.     // Договор ОСЦПВ
  123.     #[ORM\ManyToOne(targetEntityOscpvContractEntity::class)]
  124.     #[ORM\JoinColumn(name'oscpv_contract_id'referencedColumnName'id'nullabletrue)]
  125.     #[Groups(['read'])]
  126.     #[MaxDepth(1)]
  127.     private ?OscpvContractEntity $oscpvContract null;
  128.     // ОСЦПВ
  129.     #[ORM\Column(typeTypes::BOOLEAN)]
  130.     #[Groups(['read'])]
  131.     private ?bool $isOscpv false;
  132.     // Автомобиль
  133.     #[ORM\ManyToOne(targetEntityCarEntity::class)]
  134.     #[ORM\JoinColumn(name'car_id'referencedColumnName'id'nullablefalse)]
  135.     #[Groups(['read'])]
  136.     #[MaxDepth(2)]
  137.     private CarEntity $car;
  138.     // Статус
  139.     #[ORM\ManyToOne(targetEntityStatusEntity::class)]
  140.     #[ORM\JoinColumn(name'status_id'referencedColumnName'id'nullablefalse)]
  141.     #[Groups(['read'])]
  142.     #[MaxDepth(1)]
  143.     private StatusEntity $status;
  144.     // Дата случая
  145.     #[ORM\Column(typeTypes::DATETIME_IMMUTABLEnullablefalse)]
  146.     #[Context(
  147.         normalizationContext: [DateTimeNormalizer::FORMAT_KEY => 'Y-m-d H:i:s'],
  148.         denormalizationContext: [DateTimeNormalizer::FORMAT_KEY => 'Y-m-d H:i:s']
  149.     )]
  150.     #[Groups(['read'])]
  151.     private \DateTimeInterface $date;
  152.     // Описание случая
  153.     #[ORM\Column(typeTypes::TEXTnullablefalse)]
  154.     #[Groups(['read'])]
  155.     private string $description;
  156.     // Галерея
  157.     #[Groups(['read'])]
  158.     public ?array $gallery null;
  159.     #[Gedmo\Timestampable(on'create')]
  160.     #[ORM\Column(typeTypes::DATETIME_IMMUTABLE)]
  161.     #[Groups(['read'])]
  162.     protected $createdAt;
  163.     #[Gedmo\Timestampable(on'update')]
  164.     #[ORM\Column(typeTypes::DATETIME_IMMUTABLE)]
  165.     #[Groups(['read'])]
  166.     protected $updatedAt;
  167.     public function getId(): ?int
  168.     {
  169.         return $this->id;
  170.     }
  171.     public function getExternalCode()
  172.     {
  173.         return $this->externalCode;
  174.     }
  175.     public function setExternalCode($code)
  176.     {
  177.         $this->externalCode $code;
  178.         return $this;
  179.     }
  180.  
  181.     public function getClient()
  182.     {
  183.         return $this->client;
  184.     }
  185.     public function setClient($client)
  186.     {
  187.         $this->client $client;
  188.         return $this;
  189.     }
  190.     public function getContract()
  191.     {
  192.         return $this->contract;
  193.     }
  194.     public function setContract($contract)
  195.     {
  196.         $this->contract $contract;
  197.         return $this;
  198.     }
  199.     public function getIsEasyPeasy()
  200.     {
  201.         return $this->isEasyPeasy;
  202.     }
  203.     public function setIsEasyPeasy($isEasyPeasy)
  204.     {
  205.         $this->isEasyPeasy $isEasyPeasy;
  206.         return $this;
  207.     }
  208.     public function getOscpvContract()
  209.     {
  210.         return $this->oscpvContract;
  211.     }
  212.     public function setOscpvContract($contract)
  213.     {
  214.         $this->oscpvContract $contract;
  215.         return $this;
  216.     }
  217.     public function getIsOscpv()
  218.     {
  219.         return $this->isOscpv;
  220.     }
  221.     public function setIsOscpv($isOscpv)
  222.     {
  223.         $this->isOscpv $isOscpv;
  224.         return $this;
  225.     }
  226.     public function getCar()
  227.     {
  228.         return $this->car;
  229.     }
  230.     public function setCar($car)
  231.     {
  232.         $this->car $car;
  233.         return $this;
  234.     }
  235.     public function getStatus()
  236.     {
  237.         return $this->status;
  238.     }
  239.     public function setStatus($status)
  240.     {
  241.         $this->status $status;
  242.         return $this;
  243.     }
  244.     public function setDate(\DateTimeImmutable|null $date)
  245.     {
  246.         $this->date $date;
  247.         return $this;
  248.     }
  249.     public function getDate()
  250.     {
  251.         return $this->date;
  252.     }
  253.     public function getDescription()
  254.     {
  255.         return $this->description;
  256.     }
  257.     public function setDescription($text)
  258.     {
  259.         $this->description $text;
  260.         return $this;
  261.     }
  262.     public function getCreatedAt()
  263.     {
  264.         return $this->createdAt;
  265.     }
  266.     public function getUpdatedAt()
  267.     {
  268.         return $this->updatedAt;
  269.     }
  270. }