src/Containers/OscpvSection/PaymentContainer/Entities/PaymentEntity.php line 100

Open in your IDE?
  1. <?php
  2. namespace App\Containers\OscpvSection\PaymentContainer\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\OscpvSection\PaymentContainer\Data\Repositories\PaymentRepository;
  25. use App\Containers\SettingSection\ListContainer\Entities\StatusEntity;
  26. use App\Containers\SettingSection\ListContainer\Entities\PaymentTypeEntity;
  27. use App\Containers\CrmSection\ClientContainer\Entities\ClientEntity;
  28. use App\Containers\CrmSection\CarContainer\Entities\CarEntity;
  29. use App\Containers\OscpvSection\ContractContainer\Entities\ContractEntity;
  30. use App\Ship\ApiPlatform\Filter\SimpleSearchFilter;
  31. /** 
  32.  * Оплата
  33. */
  34. #[ApiResource(
  35.     routePrefix'/oscpv',
  36.     normalizationContext: [
  37.         'groups' => 'read',
  38.         'enable_max_depth' => true
  39.     ],
  40.     operations: [
  41.         new Get(
  42.             uriTemplate'/payments/{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'/payments/{id}'requirements: ['id' => '\d+'],
  47.             security"is_granted('ROLE_ADMIN') or is_granted('ROLE_USER_CLIENT') or is_granted('ROLE_READONLY')"
  48.         ),
  49.         // new Put(
  50.         //     uriTemplate: '/payments/{id}', requirements: ['id' => '\d+'],
  51.         //     security: "is_granted('ROLE_ADMIN') or is_granted('ROLE_USER_CLIENT')"
  52.         // ),
  53.         new Delete(
  54.             uriTemplate'/payments/{id}'requirements: ['id' => '\d+'],
  55.             security"is_granted('ROLE_ADMIN')"
  56.         ),
  57.         // new Post(
  58.         //     uriTemplate: '/payments',
  59.         //     security: "is_granted('ROLE_ADMIN') or is_granted('ROLE_USER_CLIENT')"
  60.         // ),
  61.         new GetCollection(
  62.             uriTemplate'/payments',
  63.             security"is_granted('ROLE_ADMIN') or is_granted('ROLE_USER_CLIENT') or is_granted('ROLE_READONLY')"
  64.         ),
  65.     ],
  66.     shortName'OSCPV_Payments'
  67. )]
  68. #[ApiFilter(SearchFilter::class, properties: [
  69.     'id' => 'exact'
  70.     'externalCode' => 'partial',
  71.     'client' => 'exact',
  72.     'contract' => 'exact',
  73.     'contractVI' => 'exact',
  74.     'paymentType' => 'exact',
  75.     'status' => 'exact',
  76.     'number' => 'partial'
  77.     'paymentType.name' => 'partial'
  78.     'paymentType.externalCode' => 'partial'
  79.     'status.id' => 'exact',
  80.     'status.name' => 'partial',
  81.     'status.externalCode' => 'exact',
  82.     'comment' => 'partial',
  83.     'error' => 'exact',
  84.     'purpose' => 'exact',
  85.     'merchantGUID' => 'exact',
  86.     'externalCodePaymentSystem' => 'exact',
  87. ])]
  88. #[ApiFilter(NumericFilter::class, properties: ['id''paymentType.id''client.id''contract.id''contractVI.id''car.id'])]
  89. #[ApiFilter(RangeFilter::class, properties: ['id''paymentUAH''paymentType.id''client.id''contract.id''contractVI.id''car.id'])]
  90. #[ApiFilter(DateFilter::class, properties: ['dateIssue''datePayment''dateError'])]
  91. #[ApiFilter(BooleanFilter::class, properties: ['isHide'])]
  92. #[ApiFilter(OrderFilter::class)]
  93. #[ApiFilter(filterClassSimpleSearchFilter::class, properties: ['number''comment'])]
  94. #[ORM\Entity(repositoryClassPaymentRepository::class)]
  95. #[ORM\Table(name'`oscpv_payments`')]
  96. #[ORM\Index(columns: ['number'], name'oscpv_payments_custom_idx')]
  97. class PaymentEntity
  98. {
  99.     #[ORM\Id]
  100.     #[ORM\GeneratedValue]
  101.     #[ORM\Column(typeTypes::INTEGER)]
  102.     #[Groups(['read'])]
  103.     private ?int $id null;
  104.     // Внешний код
  105.     #[ORM\Column(typeTypes::STRINGlength255nullabletrueuniquetrue)]
  106.     #[Groups(['read'])]
  107.     private ?string $externalCode null;
  108.     // Номер счета
  109.     #[ORM\Column(typeTypes::STRINGlength50nullabletrueuniquetrue)]
  110.     #[Groups(['read'])]
  111.     private ?string $number null;
  112.     // Дата выставления
  113.     #[ORM\Column(typeTypes::DATETIME_IMMUTABLEnullabletrue)]
  114.     #[Context(
  115.         normalizationContext: [DateTimeNormalizer::FORMAT_KEY => 'Y-m-d H:i:s'],
  116.         denormalizationContext: [DateTimeNormalizer::FORMAT_KEY => 'Y-m-d H:i:s']
  117.     )]
  118.     #[Groups(['read'])]
  119.     private ?\DateTimeInterface $dateIssue null;
  120.     // Клиент
  121.     #[ORM\ManyToOne(targetEntityClientEntity::class)]
  122.     #[ORM\JoinColumn(name'client_id'referencedColumnName'id'nullablefalse)]
  123.     #[Groups(['read'])]
  124.     private ClientEntity $client;
  125.     // Договор
  126.     #[ORM\ManyToOne(targetEntityContractEntity::class)]
  127.     #[ORM\JoinColumn(name'contract_id'referencedColumnName'id'nullablefalse)]
  128.     #[Groups(['read'])]
  129.     #[MaxDepth(1)]
  130.     private ContractEntity $contract;
  131.     // Договор дополнительного добровольного страхования
  132.     #[ORM\ManyToOne(targetEntityContractEntity::class)]
  133.     #[ORM\JoinColumn(name'contract_vi_id'referencedColumnName'id'nullabletrue)]
  134.     #[Groups(['read'])]
  135.     #[MaxDepth(1)]
  136.     private ?ContractEntity $contractVI null;
  137.     // Тип оплаты
  138.     #[ORM\ManyToOne(targetEntityPaymentTypeEntity::class)]
  139.     #[ORM\JoinColumn(name'payment_type_id'referencedColumnName'id'nullablefalse)]
  140.     #[Groups(['read'])]
  141.     private PaymentTypeEntity $paymentType;
  142.     // Статус
  143.     #[ORM\ManyToOne(targetEntityStatusEntity::class)]
  144.     #[ORM\JoinColumn(name'status_id'referencedColumnName'id'nullabletrue)]
  145.     #[Groups(['read'])]
  146.     private ?StatusEntity $status null;
  147.     // Дата оплаты
  148.     #[ORM\Column(typeTypes::DATETIME_IMMUTABLEnullabletrue)]
  149.     #[Context(
  150.         normalizationContext: [DateTimeNormalizer::FORMAT_KEY => 'Y-m-d H:i:s'],
  151.         denormalizationContext: [DateTimeNormalizer::FORMAT_KEY => 'Y-m-d H:i:s']
  152.     )]
  153.     #[Groups(['read'])]
  154.     private ?\DateTimeInterface $datePayment null;
  155.     // Сумма платежа в ГРН
  156.     #[ORM\Column(typeTypes::FLOATscale3nullablefalse)]
  157.     #[Groups(['read'])]
  158.     private float $paymentUAH;
  159.     // Назначение платежа
  160.     #[ORM\Column(typeTypes::STRINGlength255nullabletrue)]
  161.     #[Groups(['read'])]
  162.     private ?string $purpose null;
  163.     // Код оплаты с платежной системы
  164.     #[ORM\Column(typeTypes::STRINGlength255nullabletrue)]
  165.     #[Groups(['read'])]
  166.     private ?string $externalCodePaymentSystem null;
  167.     // GUID оплаты в платежной системе
  168.     #[ORM\Column(typeTypes::STRINGlength255nullabletrueuniquetrue)]
  169.     private ?string $merchantGUID null;
  170.     // Комментарий
  171.     #[ORM\Column(typeTypes::STRINGlength255nullabletrue)]
  172.     #[Groups(['read'])]
  173.     private ?string $comment null;
  174.     // Дата получения ошибки
  175.     #[ORM\Column(typeTypes::DATETIME_IMMUTABLEnullabletrue)]
  176.     #[Context(
  177.         normalizationContext: [DateTimeNormalizer::FORMAT_KEY => 'Y-m-d H:i:s'],
  178.         denormalizationContext: [DateTimeNormalizer::FORMAT_KEY => 'Y-m-d H:i:s']
  179.     )]
  180.     #[Groups(['read'])]
  181.     private ?\DateTimeInterface $dateError null;
  182.     // Ошибка
  183.     #[ORM\Column(typeTypes::STRINGlength255nullabletrue)]
  184.     #[Groups(['read'])]
  185.     private ?string $error null;
  186.     // Автомобиль
  187.     #[ORM\ManyToOne(targetEntityCarEntity::class)]
  188.     #[ORM\JoinColumn(name'car_id'referencedColumnName'id'nullabletrue)]
  189.     #[MaxDepth(2)]
  190.     #[Groups(['read'])]
  191.     private ?CarEntity $car null;
  192.     // Скрыть
  193.     #[ORM\Column(typeTypes::BOOLEAN)]
  194.     #[Groups(['read'])]
  195.     private ?bool $isHide false;
  196.     #[Gedmo\Timestampable(on'create')]
  197.     #[ORM\Column(typeTypes::DATETIME_IMMUTABLE)]
  198.     #[Context(
  199.         normalizationContext: [DateTimeNormalizer::FORMAT_KEY => 'Y-m-d H:i:s']
  200.     )]
  201.     #[Groups(['read'])]
  202.     protected $createdAt;
  203.     #[Gedmo\Timestampable(on'update')]
  204.     #[ORM\Column(typeTypes::DATETIME_IMMUTABLE)]
  205.     #[Context(
  206.         normalizationContext: [DateTimeNormalizer::FORMAT_KEY => 'Y-m-d H:i:s']
  207.     )]
  208.     #[Groups(['read'])]
  209.     protected $updatedAt;
  210.     public function getId(): ?int
  211.     {
  212.         return $this->id;
  213.     }
  214.     public function getExternalCode()
  215.     {
  216.         return $this->externalCode;
  217.     }
  218.     public function setExternalCode($code)
  219.     {
  220.         $this->externalCode $code;
  221.         return $this;
  222.     }
  223.     public function getNumber()
  224.     {
  225.         return $this->number;
  226.     }
  227.     public function setNumber($number)
  228.     {
  229.         $this->number $number;
  230.         return $this;
  231.     }
  232.     
  233.     public function setDateIssue(\DateTimeImmutable|null $date)
  234.     {
  235.         $this->dateIssue $date;
  236.         return $this;
  237.     }
  238.     public function getDateIssue()
  239.     {
  240.         return $this->dateIssue;
  241.     }
  242.     public function getClient()
  243.     {
  244.         return $this->client;
  245.     }
  246.     public function setClient($client)
  247.     {
  248.         $this->client $client;
  249.         return $this;
  250.     }
  251.     public function getContract()
  252.     {
  253.         return $this->contract;
  254.     }
  255.     public function setContract($contract)
  256.     {
  257.         $this->contract $contract;
  258.         return $this;
  259.     }
  260.     public function getContractVI()
  261.     {
  262.         return $this->contractVI;
  263.     }
  264.     public function setContractVI($contract)
  265.     {
  266.         $this->contractVI $contract;
  267.         return $this;
  268.     }
  269.     public function getPaymentType()
  270.     {
  271.         return $this->paymentType;
  272.     }
  273.     public function setPaymentType($type)
  274.     {
  275.         $this->paymentType $type;
  276.         return $this;
  277.     }
  278.     public function getStatus()
  279.     {
  280.         return $this->status;
  281.     }
  282.     public function setStatus($status)
  283.     {
  284.         $this->status $status;
  285.         return $this;
  286.     }
  287.     public function setDatePayment(\DateTimeImmutable|null $date)
  288.     {
  289.         $this->datePayment $date;
  290.         return $this;
  291.     }
  292.     public function getDatePayment()
  293.     {
  294.         return $this->datePayment;
  295.     }
  296.     public function getPaymentUAH()
  297.     {
  298.         return $this->paymentUAH;
  299.     }
  300.     public function setPaymentUAH($value)
  301.     {
  302.         $this->paymentUAH = ($value !== null round($value3) : null);
  303.         return $this;
  304.     }
  305.     public function getPurpose()
  306.     {
  307.         return $this->purpose;
  308.     }
  309.     public function setPurpose($purpose)
  310.     {
  311.         $this->purpose $purpose;
  312.         return $this;
  313.     }
  314.     public function getExternalCodePaymentSystem()
  315.     {
  316.         return $this->externalCodePaymentSystem;
  317.     }
  318.     public function setExternalCodePaymentSystem($code)
  319.     {
  320.         $this->externalCodePaymentSystem $code;
  321.         return $this;
  322.     }
  323.     public function getMerchantGUID()
  324.     {
  325.         return $this->merchantGUID;
  326.     }
  327.     public function setMerchantGUID($guid)
  328.     {
  329.         $this->merchantGUID $guid;
  330.         return $this;
  331.     }
  332.     public function getComment()
  333.     {
  334.         return $this->comment;
  335.     }
  336.     public function setComment($comment)
  337.     {
  338.         $this->comment $comment;
  339.         return $this;
  340.     }
  341.     public function setDateError(\DateTimeImmutable|null $date)
  342.     {
  343.         $this->dateError $date;
  344.         return $this;
  345.     }
  346.     public function getDateError()
  347.     {
  348.         return $this->dateError;
  349.     }
  350.     public function getError()
  351.     {
  352.         return $this->error;
  353.     }
  354.     public function setError($error)
  355.     {
  356.         $this->error $error;
  357.         return $this;
  358.     }
  359.     public function getCar()
  360.     {
  361.         return $this->car;
  362.     }
  363.     public function setCar($car)
  364.     {
  365.         $this->car $car;
  366.         return $this;
  367.     }
  368.     public function getIsHide()
  369.     {
  370.         return $this->isHide;
  371.     }
  372.     public function setIsHide($value)
  373.     {
  374.         $this->isHide $value;
  375.         return $this;
  376.     }
  377.     public function getCreatedAt()
  378.     {
  379.         return $this->createdAt;
  380.     }
  381.     public function getUpdatedAt()
  382.     {
  383.         return $this->updatedAt;
  384.     }    
  385. }