src/Containers/CrmSection/CalculationContainer/Entities/CalculationEntity.php line 102

Open in your IDE?
  1. <?php
  2. namespace App\Containers\CrmSection\CalculationContainer\Entities;
  3. use ApiPlatform\Metadata\ApiResource;
  4. use ApiPlatform\Metadata\Get;
  5. use ApiPlatform\Metadata\Delete;
  6. use ApiPlatform\Metadata\GetCollection;
  7. use ApiPlatform\Metadata\Patch;
  8. use ApiPlatform\Metadata\Put;
  9. use ApiPlatform\Metadata\ApiFilter;
  10. use ApiPlatform\Doctrine\Orm\Filter\SearchFilter;
  11. use ApiPlatform\Doctrine\Orm\Filter\NumericFilter;
  12. use ApiPlatform\Doctrine\Orm\Filter\RangeFilter;
  13. use ApiPlatform\Doctrine\Orm\Filter\DateFilter;
  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 App\Containers\CrmSection\CalculationContainer\Data\Repositories\CalculationRepository;
  21. use App\Containers\CrmSection\ClientContainer\Entities\ClientEntity;
  22. use App\Containers\SettingSection\PartnerContainer\Entities\PartnerEntity;
  23. use App\Containers\CrmSection\CarContainer\Entities\CarEntity;
  24. use App\Containers\SettingSection\ListContainer\Entities\CarBrandEntity;
  25. use App\Containers\SettingSection\ListContainer\Entities\CarModelEntity;
  26. use App\Containers\SettingSection\ListContainer\Entities\SourceEntity;
  27. use App\Containers\SettingSection\ListContainer\Entities\StatusEntity;
  28. use App\Containers\SettingSection\ListContainer\Entities\FuelTypeEntity;
  29. use App\Containers\SettingSection\ListContainer\Entities\CarTypeEntity;
  30. use App\Ship\ApiPlatform\Filter\SimpleSearchFilter;
  31. /** 
  32.  * Расчет
  33. */
  34. #[ApiResource(
  35.     routePrefix'/crm',
  36.     normalizationContext: ['groups' => 'read'],
  37.     operations: [
  38.         new Get(
  39.             uriTemplate'/calculations/{id}'requirements: ['id' => '\d+'],
  40.             security"is_granted('ROLE_ADMIN') or is_granted('ROLE_USER_CLIENT') or is_granted('ROLE_USER_GUEST') or is_granted('ROLE_READONLY')"
  41.         ),
  42.         new Patch(
  43.             uriTemplate'/calculations/{id}'requirements: ['id' => '\d+'],
  44.             security"is_granted('ROLE_ADMIN')"
  45.         ),
  46.         // new Put(
  47.         //     uriTemplate: '/calculations/{id}', requirements: ['id' => '\d+'],
  48.         //     security: "is_granted('ROLE_ADMIN')"
  49.         // ),
  50.         new Delete(
  51.             uriTemplate'/calculations/{id}'requirements: ['id' => '\d+'],
  52.             security"is_granted('ROLE_ADMIN')"
  53.         ),
  54.         new GetCollection(
  55.             uriTemplate'/calculations',
  56.             security"is_granted('ROLE_ADMIN') or is_granted('ROLE_USER_CLIENT') or is_granted('ROLE_READONLY')"
  57.         ),
  58.     ],
  59.     shortName'CRM_Calculations'
  60. )]
  61. #[ApiFilter(SearchFilter::class, properties: [
  62.     'id' => 'exact',
  63.     'carNumber' => 'partial',
  64.     'dateProduction' => 'exact',
  65.     'externalCode' => 'exact'
  66.     'carFuelType' => 'exact',
  67.     'carType' => 'exact',
  68.     'client' => 'exact',
  69.     'email' => 'partial',
  70.     'phone' => 'partial',
  71.     'carBrand' => 'exact',
  72.     'carModel' => 'exact',
  73.     'source' => 'exact',
  74.     'car' => 'exact',
  75.     'client.name' => 'partial',
  76.     'client.lastName' => 'partial',
  77.     'client.patronymic' => 'partial',
  78.     'client.externalCode' => 'partial',
  79.     'partner' => 'exact',
  80.     'status' => 'exact',
  81.     'status.name' => 'partial',
  82.     'status.externalCode' => 'partial',
  83.     'carFuelType.name' => 'exact',
  84.     'carColor' => 'exact',
  85.     'carBrand.name' => 'exact',
  86.     'carModel.name' => 'exact'
  87. ])]
  88. #[ApiFilter(NumericFilter::class, properties: ['id'])]
  89. #[ApiFilter(RangeFilter::class, properties: ['id''carPriceUSD''carPriceUAH''carEngineVolume'])]
  90. #[ApiFilter(BooleanFilter::class, properties: ['isOwnPrice''isMailSent'])]
  91. #[ApiFilter(DateFilter::class, properties: ['createdAt''updatedAt'])]
  92. #[ApiFilter(OrderFilter::class)]
  93. #[ApiFilter(filterClassSimpleSearchFilter::class, properties: [
  94.     'externalCode''carNumber''carVIN''carNumber''email''phone',
  95. ])]
  96. #[ORM\Entity(repositoryClassCalculationRepository::class)]
  97. #[ORM\Table(name'`crm_calculations`')]
  98. #[ORM\Index(columns: ['car_number'], name'crm_calculations_custom_idx')]
  99. class CalculationEntity
  100. {   
  101.     #[ORM\Id]
  102.     #[ORM\GeneratedValue]
  103.     #[ORM\Column(typeTypes::INTEGER)]
  104.     #[Groups(['read'])]
  105.     private ?int $id null;
  106.     #[ORM\Column(typeTypes::STRINGlength255nullabletrueuniquetrue)]
  107.     #[Groups(['read'])]
  108.     private ?string $externalCode null;
  109.     // Клиент
  110.     #[ORM\ManyToOne(targetEntityClientEntity::class)]
  111.     #[ORM\JoinColumn(name'client_id'referencedColumnName'id'nullabletrue)]
  112.     #[Groups(['read'])]
  113.     private ?ClientEntity $client null;
  114.     // Партнер
  115.     #[ORM\ManyToOne(targetEntityPartnerEntity::class)]
  116.     #[ORM\JoinColumn(name'partner_id'referencedColumnName'id'onDelete'SET NULL')]
  117.     #[Groups(['read'])]
  118.     private ?PartnerEntity $partner;
  119.     // Почта
  120.     #[ORM\Column(typeTypes::STRINGlength150nullabletrue)]
  121.     #[Groups(['read'])]
  122.     private ?string $email null;
  123.     #[ORM\Column(typeTypes::STRINGlength50nullabletrue)]
  124.     #[Groups(['read'])]
  125.     private ?string $phone null;
  126.     // Статус
  127.     #[ORM\ManyToOne(targetEntityStatusEntity::class)]
  128.     #[ORM\JoinColumn(name'status_id'referencedColumnName'id'nullabletrue)]
  129.     #[Groups(['read'])]
  130.     private ?StatusEntity $status null;
  131.     // Номер авто
  132.     #[ORM\Column(typeTypes::STRINGlength50nullablefalse)]
  133.     #[Groups(['read'])]
  134.     private string $carNumber;
  135.     // Год выпуска
  136.     #[ORM\Column(typeTypes::INTEGERlength4nullablefalse)]
  137.     #[Groups(['read'])]
  138.     private int $dateProduction;
  139.     // Стоимость авто в USD
  140.     #[ORM\Column(typeTypes::INTEGERnullablefalse)]
  141.     #[Groups(['read'])]
  142.     private int $carPriceUSD;
  143.     // Стоимость авто в ГРН
  144.     #[ORM\Column(typeTypes::INTEGERnullabletrue)]
  145.     #[Groups(['read'])]
  146.     private ?int $carPriceUAH null;
  147.     // Объем двигателя
  148.     #[ORM\Column(typeTypes::FLOATscale3nullabletrue)]
  149.     #[Groups(['read'])]
  150.     private ?float $carEngineVolume null;
  151.     // Тип топлива
  152.     #[ORM\ManyToOne(targetEntityFuelTypeEntity::class)]
  153.     #[ORM\JoinColumn(name'car_fuel_type_id'referencedColumnName'id'nullabletrue)]
  154.     #[Groups(['read'])]
  155.     private ?FuelTypeEntity $carFuelType null;
  156.     // Тип транспорта
  157.     #[ORM\ManyToOne(targetEntityCarTypeEntity::class)]
  158.     #[ORM\JoinColumn(name'car_type_id'referencedColumnName'id'nullabletrue)]
  159.     #[Groups(['read'])]
  160.     private ?CarTypeEntity $carType null;
  161.     // Цвет
  162.     #[ORM\Column(typeTypes::STRINGlength150nullabletrue)]
  163.     #[Groups(['read'])]
  164.     private ?string $carColor null;
  165.     // VIN
  166.     #[ORM\Column(typeTypes::STRINGlength150nullabletrue)]
  167.     #[Groups(['read'])]
  168.     private ?string $carVIN null;
  169.     // Марка
  170.     #[ORM\ManyToOne(targetEntityCarBrandEntity::class)]
  171.     #[ORM\JoinColumn(name'car_brand_id'referencedColumnName'id'nullabletrue)]
  172.     #[Groups(['read'])]
  173.     private ?CarBrandEntity $carBrand null;
  174.     // Модель
  175.     #[ORM\ManyToOne(targetEntityCarModelEntity::class)]
  176.     #[ORM\JoinColumn(name'car_model_id'referencedColumnName'id'nullabletrue)]
  177.     #[Groups(['read'])]
  178.     private ?CarModelEntity $carModel null;
  179.     // Cобственная цена
  180.     #[ORM\Column(typeTypes::BOOLEAN)]
  181.     #[Groups(['read'])]
  182.     private ?bool $isOwnPrice false;
  183.     #[ORM\Column(typeTypes::BOOLEAN)]
  184.     #[Groups(['read'])]
  185.     private bool $isMailSent false;
  186.     // Источник
  187.     #[ORM\ManyToOne(targetEntitySourceEntity::class)]
  188.     #[ORM\JoinColumn(name'source_id'referencedColumnName'id'nullabletrue)]
  189.     #[Groups(['read'])]
  190.     private ?SourceEntity $source null;
  191.     // Автомобиль
  192.     #[ORM\ManyToOne(targetEntityCarEntity::class)]
  193.     #[ORM\JoinColumn(name'car_id'referencedColumnName'id'nullabletrue)]
  194.     #[Groups(['read'])]
  195.     private ?CarEntity $car null;
  196.     #[Gedmo\Timestampable(on'create')]
  197.     #[ORM\Column(typeTypes::DATETIME_IMMUTABLE)]
  198.     #[Groups(['read'])]
  199.     protected $createdAt;
  200.     #[Gedmo\Timestampable(on'update')]
  201.     #[ORM\Column(typeTypes::DATETIME_IMMUTABLE)]
  202.     #[Groups(['read'])]
  203.     protected $updatedAt;
  204.     public function getId(): ?int
  205.     {
  206.         return $this->id;
  207.     }
  208.     public function getExternalCode()
  209.     {
  210.         return $this->externalCode;
  211.     }
  212.  
  213.     public function setExternalCode($code)
  214.     {
  215.         $this->externalCode $code;
  216.         return $this;
  217.     }
  218.     public function getClient()
  219.     {
  220.         return $this->client;
  221.     }
  222.     public function setClient($client)
  223.     {
  224.         $this->client $client;
  225.         return $this;
  226.     }
  227.     public function getPartner()
  228.     {
  229.         return $this->partner;
  230.     }
  231.     public function setPartner(?PartnerEntity $partner)
  232.     {
  233.         $this->partner $partner;
  234.         return $this;
  235.     }
  236.     public function setEmail($email)
  237.     {
  238.         $this->email $email;
  239.         return $this;
  240.     }
  241.     public function getEmail()
  242.     {
  243.         return $this->email;
  244.     }
  245.     public function setPhone($phone)
  246.     {
  247.         $this->phone $phone;
  248.         return $this;
  249.     }
  250.     public function getPhone()
  251.     {
  252.         return $this->phone;
  253.     }
  254.     public function getStatus()
  255.     {
  256.         return $this->status;
  257.     }
  258.     public function setStatus($status)
  259.     {
  260.         $this->status $status;
  261.         return $this;
  262.     }
  263.     public function getCarNumber()
  264.     {
  265.         return $this->carNumber;
  266.     }
  267.     public function setCarNumber($number)
  268.     {
  269.         $this->carNumber = ($number !== null str_replace(' ',''trim($number)) : null);
  270.         return $this;
  271.     }
  272.     public function setDateProduction($year)
  273.     {
  274.         $this->dateProduction $year;
  275.         return $this;
  276.     }
  277.     public function getDateProduction()
  278.     {
  279.         return $this->dateProduction;
  280.     }
  281.  
  282.     public function getCarPriceUSD()
  283.     {
  284.         return $this->carPriceUSD;
  285.     }
  286.     public function setCarPriceUSD($price)
  287.     {
  288.         $this->carPriceUSD $price;
  289.         return $this;
  290.     }
  291.     public function getCarPriceUAH()
  292.     {
  293.         return $this->carPriceUAH;
  294.     }
  295.     public function setCarPriceUAH($price)
  296.     {
  297.         $this->carPriceUAH $price;
  298.         return $this;
  299.     }
  300.     public function getCarEngineVolume()
  301.     {
  302.         return $this->carEngineVolume;
  303.     }
  304.     public function setCarEngineVolume($value)
  305.     {
  306.         $this->carEngineVolume = ($value !== null round($value3) : null);
  307.         return $this;
  308.     }
  309.     public function getCarFuelType()
  310.     {
  311.         return $this->carFuelType;
  312.     }
  313.     public function setCarFuelType($type)
  314.     {
  315.         $this->carFuelType $type;
  316.         return $this;
  317.     }
  318.     public function getCarType()
  319.     {
  320.         return $this->carType;
  321.     }
  322.     public function setCarType($type)
  323.     {
  324.         $this->carType $type;
  325.         return $this;
  326.     }
  327.     public function getCarColor()
  328.     {
  329.         return $this->carColor;
  330.     }
  331.     public function setCarColor($color)
  332.     {
  333.         $this->carColor $color;
  334.         return $this;
  335.     }
  336.     public function getCarVIN()
  337.     {
  338.         return $this->carVIN;
  339.     }
  340.  
  341.     public function setCarVIN($VIN)
  342.     {
  343.         $this->carVIN $VIN;
  344.         return $this;
  345.     }
  346.     public function getCarBrand()
  347.     {
  348.         return $this->carBrand;
  349.     }
  350.     public function setCarBrand($brand)
  351.     {
  352.         $this->carBrand $brand;
  353.         return $this;
  354.     }
  355.  
  356.     public function getCarModel()
  357.     {
  358.         return $this->carModel;
  359.     }
  360.  
  361.     public function setCarModel($model)
  362.     {
  363.         $this->carModel $model;
  364.         return $this;
  365.     }
  366.     public function getIsOwnPrice()
  367.     {
  368.         return $this->isOwnPrice;
  369.     }
  370.     public function setIsOwnPrice($value)
  371.     {
  372.         $this->isOwnPrice $value;
  373.         return $this;
  374.     }
  375.     public function getIsMailSent()
  376.     {
  377.         return $this->isMailSent;
  378.     }
  379.     public function setIsMailSent($value)
  380.     {
  381.         $this->isMailSent $value;
  382.         return $this;
  383.     }
  384.  
  385.     public function getSource()
  386.     {
  387.         return $this->source;
  388.     }
  389.     public function setSource($source)
  390.     {
  391.         $this->source $source;
  392.         return $this;
  393.     }
  394.     public function getCar()
  395.     {
  396.         return $this->car;
  397.     }
  398.     public function setCar($car)
  399.     {
  400.         $this->car $car;
  401.         return $this;
  402.     }
  403.     public function getCreatedAt()
  404.     {
  405.         return $this->createdAt;
  406.     }
  407.     public function getUpdatedAt()
  408.     {
  409.         return $this->updatedAt;
  410.     }
  411. }