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