src/Containers/SettingSection/ListContainer/Entities/InsuranceProductEntity.php line 84

Open in your IDE?
  1. <?php
  2. namespace App\Containers\SettingSection\ListContainer\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\BooleanFilter;
  15. use ApiPlatform\Doctrine\Orm\Filter\OrderFilter;
  16. use Symfony\Component\Serializer\Annotation\Groups;
  17. use Doctrine\ORM\Mapping as ORM;
  18. use Doctrine\DBAL\Types\Types;
  19. use Gedmo\Mapping\Annotation as Gedmo;
  20. use Doctrine\Common\Collections\ArrayCollection;
  21. use Doctrine\Common\Collections\Collection;
  22. use App\Containers\SettingSection\ListContainer\Data\Repositories\InsuranceProductRepository;
  23. use App\Containers\SettingSection\ListContainer\Entities\RiskEntity;
  24. use App\Containers\SettingSection\ListContainer\Entities\InsuranceProductBenefitEntity;
  25. use App\Containers\SettingSection\ListContainer\Entities\TariffInsuranceProductEntity;
  26. use App\Containers\SettingSection\IndexContainer\Entities\TranslationEntity;
  27. use App\Ship\ApiPlatform\Filter\SimpleSearchFilter;
  28. /** 
  29.  * Страховые продукты
  30. */
  31. #[ApiResource(
  32.     routePrefix'/list',
  33.     normalizationContext: ['groups' => 'read'],
  34.     operations: [
  35.         new Get(
  36.             uriTemplate'/insurance_products/{id}'requirements: ['id' => '\d+'],
  37.             security"is_granted('ROLE_ADMIN') or is_granted('ROLE_USER_CLIENT') or is_granted('ROLE_READONLY')"
  38.         ),
  39.         new Patch(
  40.             uriTemplate'/insurance_products/{id}'requirements: ['id' => '\d+'],
  41.             security"is_granted('ROLE_ADMIN')"
  42.         ),
  43.         // new Put(
  44.         //     uriTemplate: '/insurance_products/{id}', requirements: ['id' => '\d+'],
  45.         //     security: "is_granted('ROLE_ADMIN')"
  46.         // ),
  47.         new Delete(
  48.             uriTemplate'/insurance_products/{id}'requirements: ['id' => '\d+'],
  49.             security"is_granted('ROLE_ADMIN')"
  50.         ),
  51.         new Post(
  52.             uriTemplate'/insurance_products',
  53.             security"is_granted('ROLE_ADMIN')"
  54.         ),
  55.         new GetCollection(
  56.             uriTemplate'/insurance_products',
  57.             security"is_granted('ROLE_ADMIN') or is_granted('ROLE_USER_CLIENT') or is_granted('ROLE_READONLY')"
  58.         ),
  59.     ],
  60.     shortName'List_InsuranceProducts'
  61. )]
  62. #[ApiFilter(SearchFilter::class, properties: [
  63.     'id' => 'exact'
  64.     'risks' => 'exact',
  65.     'tariffs' => 'exact',
  66.     'benefits' => 'exact'
  67.     'name' => 'partial'
  68.     'code' => 'partial'
  69.     'shortDescription' => 'partial'
  70.     'description' => 'partial'
  71. ])]
  72. #[ApiFilter(NumericFilter::class, properties: ['id''sorting''mileage'])]
  73. #[ApiFilter(RangeFilter::class, properties: ['id''sorting''mileage''priceUAH'])]
  74. #[ApiFilter(BooleanFilter::class, properties: ['isActive''isUseFixedPrice''isInactiveHijacked'])]
  75. #[ApiFilter(OrderFilter::class)]
  76. #[ApiFilter(filterClassSimpleSearchFilter::class, properties: ['name''code''shortDescription''description'])]
  77. #[ORM\Entity(repositoryClassInsuranceProductRepository::class)]
  78. #[ORM\Table(name'`list_insurance_products`')]
  79. #[ORM\Index(columns: ['code'], name'list_insurance_products_custom_idx')]
  80. #[Gedmo\TranslationEntity(class: TranslationEntity::class)]
  81. class InsuranceProductEntity
  82. {   
  83.     #[ORM\Id]
  84.     #[ORM\GeneratedValue]
  85.     #[ORM\Column(typeTypes::INTEGER)]
  86.     #[Groups(['read'])]
  87.     private ?int $id null;
  88.     // Название
  89.     #[ORM\Column(typeTypes::STRINGlength255)]
  90.     #[Gedmo\Translatable]
  91.     #[Groups(['read'])]
  92.     private string $name;
  93.     // Символьный код
  94.     #[ORM\Column(typeTypes::STRINGlength255nullabletrueuniquetrue)]
  95.     #[Groups(['read'])]
  96.     private ?string $code null;
  97.     // Сортування
  98.     #[ORM\Column(typeTypes::INTEGERlength10options: ['default' => 500])]
  99.     #[Groups(['read'])]
  100.     private ?int $sorting 500;
  101.     // Активность
  102.     #[ORM\Column(typeTypes::BOOLEANoptions: ['default' => true])]
  103.     #[Groups(['read'])]
  104.     private bool $isActive true;
  105.     // Количество километража
  106.     #[ORM\Column(typeTypes::INTEGERlength10options: ['default' => 0])]
  107.     #[Groups(['read'])]
  108.     private ?int $mileage 0;
  109.     // Использовать фиксированную стоимость
  110.     #[ORM\Column(typeTypes::BOOLEANoptions: ['default' => false])]
  111.     #[Groups(['read'])]
  112.     private bool $isUseFixedPrice false;
  113.     // Фиксированная стоимость в ГРН
  114.     #[ORM\Column(typeTypes::FLOATscale3nullabletrue)]
  115.     #[Groups(['read'])]
  116.     private ?float $priceUAH null;
  117.     // Риски
  118.     #[ORM\JoinTable(name'binding_insurance_products_risks')]
  119.     #[ORM\JoinColumn(name'insurance_product_id'referencedColumnName'id'nullablefalse)]
  120.     #[ORM\InverseJoinColumn(name'risk_id'referencedColumnName'id'nullablefalse)]
  121.     #[ORM\ManyToMany(targetEntityRiskEntity::class)]
  122.     #[Groups(['read'])]
  123.     private Collection $risks;
  124.     // Краткое описание
  125.     #[ORM\Column(typeTypes::TEXTnullabletrue)]
  126.     #[Gedmo\Translatable]
  127.     #[Groups(['read'])]
  128.     private ?string $shortDescription null;
  129.     // Описание
  130.     #[ORM\Column(typeTypes::TEXTnullabletrue)]
  131.     #[Gedmo\Translatable]
  132.     #[Groups(['read'])]
  133.     private ?string $description null;
  134.     // Код цвета блока
  135.     #[ORM\Column(typeTypes::STRINGnullabletrue)]
  136.     #[Groups(['read'])]
  137.     private ?string $codeColor 'green';
  138.     // Неактивно для угоняемых авто
  139.     #[ORM\Column(typeTypes::BOOLEANoptions: ['default' => false])]
  140.     #[Groups(['read'])]
  141.     private bool $isInactiveHijacked false;
  142.     // Максимальная стоимость угоняемого авто в ГРН
  143.     #[ORM\Column(typeTypes::INTEGERnullabletrue)]
  144.     #[Groups(['read'])]
  145.     private ?int $inactiveHijackedMaxCarPriceUAH null;
  146.     // Преимущества
  147.     #[ORM\JoinTable(name'binding_insurance_products_benefits')]
  148.     #[ORM\JoinColumn(name'insurance_product_id'referencedColumnName'id'nullablefalse)]
  149.     #[ORM\InverseJoinColumn(name'benefit_id'referencedColumnName'id'nullablefalse)]
  150.     #[ORM\ManyToMany(targetEntityInsuranceProductBenefitEntity::class)]
  151.     #[Groups(['read'])]
  152.     private ?Collection $benefits null;
  153.     // Тарифы
  154.     #[ORM\JoinColumn(nullablefalse)]
  155.     #[ORM\OneToMany(targetEntityTariffInsuranceProductEntity::class, mappedBy'insuranceProduct')] 
  156.     #[Groups(['read'])]
  157.     private Collection $tariffs;
  158.     #[Gedmo\Timestampable(on'create')]
  159.     #[ORM\Column(typeTypes::DATETIME_IMMUTABLE)]
  160.     protected $createdAt;
  161.     #[Gedmo\Timestampable(on'update')]
  162.     #[ORM\Column(typeTypes::DATETIME_IMMUTABLE)]
  163.     protected $updatedAt;
  164.     /**
  165.      * Used locale to override Translation listener`s locale
  166.      * this is not a mapped field of entity metadata, just a simple property
  167.      */
  168.     #[Gedmo\Locale]
  169.     private $locale;
  170.     public function __construct()
  171.     {
  172.         $this->risks = new ArrayCollection();
  173.         $this->benefits = new ArrayCollection();
  174.         $this->tariffs = new ArrayCollection();
  175.     }
  176.     public function getId(): ?int
  177.     {
  178.         return $this->id;
  179.     }
  180.     public function getName()
  181.     {
  182.         return $this->name;
  183.     }
  184.     public function setName($name)
  185.     {
  186.         $this->name $name;
  187.         return $this;
  188.     }
  189.  
  190.     public function getCode()
  191.     {
  192.         return $this->code;
  193.     }
  194.     public function setCode($code)
  195.     {
  196.         $this->code $code;
  197.         return $this;
  198.     }
  199.     public function getSorting()
  200.     {
  201.         return $this->sorting;
  202.     }
  203.     public function setSorting($sorting)
  204.     {
  205.         $this->sorting $sorting;
  206.         return $this;
  207.     }
  208.     public function getIsActive()
  209.     {
  210.         return $this->isActive;
  211.     }
  212.     public function setIsActive($isActive)
  213.     {
  214.         $this->isActive $isActive;
  215.         return $this;
  216.     }
  217.  
  218.     public function getMileage()
  219.     {
  220.         return $this->mileage;
  221.     }
  222.  
  223.     public function setMileage($mileage)
  224.     {
  225.         $this->mileage $mileage;
  226.         return $this;
  227.     }
  228.     public function getIsUseFixedPrice()
  229.     {
  230.         return $this->isUseFixedPrice;
  231.     }
  232.     public function setIsUseFixedPrice($isUseFixedPrice)
  233.     {
  234.         $this->isUseFixedPrice $isUseFixedPrice;
  235.         return $this;
  236.     }
  237.     public function getPriceUAH()
  238.     {
  239.         return $this->priceUAH;
  240.     }
  241.     public function setPriceUAH($price)
  242.     {
  243.         $this->priceUAH = ($price round($price3) : null);
  244.         return $this;
  245.     }
  246.     public function getRisks()
  247.     {
  248.         return $this->risks->getValues();
  249.     }
  250.  
  251.     public function addRisk(RiskEntity $risk)
  252.     {
  253.         $this->risks[] = $risk;
  254.         
  255.         return $this;
  256.     }
  257.     public function removeRisk(RiskEntity $risk)
  258.     {
  259.         $this->risks->removeElement($risk);
  260.     }
  261.     public function getShortDescription()
  262.     {
  263.         return $this->shortDescription;
  264.     }
  265.     public function setShortDescription($text)
  266.     {
  267.         $this->shortDescription $text;
  268.         return $this;
  269.     }
  270.  
  271.     public function getDescription()
  272.     {
  273.         return $this->description;
  274.     }
  275.     public function setDescription($text)
  276.     {
  277.         $this->description $text;
  278.         return $this;
  279.     }
  280.     public function getCodeColor()
  281.     {
  282.         return $this->codeColor;
  283.     }
  284.     public function setCodeColor($code)
  285.     {
  286.         $this->codeColor $code;
  287.         return $this;
  288.     }
  289.     public function getIsInactiveHijacked()
  290.     {
  291.         return $this->isInactiveHijacked;
  292.     }
  293.     public function setIsInactiveHijacked($isInactiveHijacked)
  294.     {
  295.         $this->isInactiveHijacked $isInactiveHijacked;
  296.         return $this;
  297.     }
  298.     public function getInactiveHijackedMaxCarPriceUAH()
  299.     {
  300.         return $this->inactiveHijackedMaxCarPriceUAH;
  301.     }
  302.     public function setInactiveHijackedMaxCarPriceUAH($price)
  303.     {
  304.         $this->inactiveHijackedMaxCarPriceUAH $price;
  305.         return $this;
  306.     }
  307.     public function getBenefits()
  308.     {
  309.         return $this->benefits->getValues();
  310.     }
  311.  
  312.     public function addBenefit(InsuranceProductBenefitEntity $benefit)
  313.     {
  314.         $this->benefits[] = $benefit;
  315.         
  316.         return $this;
  317.     }
  318.     public function removeBenefit(InsuranceProductBenefitEntity $benefit)
  319.     {
  320.         $this->benefits->removeElement($benefit);
  321.     }
  322.     public function getTariffs()
  323.     {
  324.         return $this->tariffs->getValues();
  325.     }
  326.     public function addTariff(TariffInsuranceProductEntity $tariff)
  327.     {
  328.         $this->tariffs[] = $tariff;
  329.     }
  330.     public function removeTariff(TariffInsuranceProductEntity $tariff)
  331.     {
  332.         $this->tariffs->removeElement($tariff);
  333.     }
  334.     public function setTranslatableLocale($locale)
  335.     {
  336.         $this->locale $locale;
  337.     }
  338. }