src/Entity/Sales/Asset.php line 75

  1. <?php
  2. namespace App\Entity\Sales;
  3. use ApiPlatform\Doctrine\Orm\Filter\SearchFilter;
  4. use ApiPlatform\Metadata\ApiFilter;
  5. use ApiPlatform\Metadata\ApiProperty;
  6. use ApiPlatform\Metadata\ApiResource;
  7. use ApiPlatform\Metadata\Delete;
  8. use ApiPlatform\Metadata\Get;
  9. use ApiPlatform\Metadata\GetCollection;
  10. use ApiPlatform\Metadata\Link;
  11. use ApiPlatform\Metadata\Patch;
  12. use ApiPlatform\Metadata\Post;
  13. use ApiPlatform\Metadata\Put;
  14. use App\Doctrine\Type\Sales\AssetStatus;
  15. use App\Dto\Common\LogoInput;
  16. use App\Dto\Sales\AssetExtendedInput;
  17. use App\Dto\Sales\AssetInput;
  18. use App\Dto\Sales\AssetStatusInput;
  19. use App\Entity\Common;
  20. use App\Entity\Common\Company;
  21. use App\Entity\File\Upload;
  22. use App\Entity\Places\Address;
  23. use App\Processor\Common\LogoInputProcessor;
  24. use App\Processor\Sales\AssetInputProcessor;
  25. use App\Processor\Sales\AssetStatusInputProcessor;
  26. use Doctrine\Common\Collections\ArrayCollection;
  27. use Doctrine\Common\Collections\Collection;
  28. use Doctrine\DBAL\Types\Types;
  29. use Doctrine\ORM\Mapping as ORM;
  30. use Gedmo\Mapping\Annotation as Gedmo;
  31. use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
  32. use Symfony\Component\Validator\Constraints as Assert;
  33. #[ORM\Table(name'company_asset')]
  34. #[ORM\Index(columns: ['client_id'], name'company_asset_client_id_idx')]
  35. #[ORM\Index(columns: ['place_id'], name'company_asset_place_id_idx')]
  36. #[ORM\Index(columns: ['logo_id'], name'company_asset_logo_id_idx')]
  37. #[ORM\Index(columns: ['created_by'], name'company_asset_created_by_idx')]
  38. #[ORM\Index(columns: ['updated_by'], name'company_asset_updated_by_idx')]
  39. #[ORM\UniqueConstraint(name'company_asset_slug_key'columns: ['slug'])]
  40. #[ORM\UniqueConstraint(name'company_asset_code_key'columns: ['code'])]
  41. #[ORM\Entity]
  42. #[UniqueEntity('code')]
  43. #[ApiResource(
  44.     operations: [
  45.         new Get(),
  46.         new Delete(),
  47.         new GetCollection(),
  48.         new Post(uriTemplate'/assets/{slug}/logo'inputFormats: ['multipart' => ['multipart/form-data']], inputLogoInput::class, processorLogoInputProcessor::class),
  49.         new Post(uriTemplate'/assets/{slug}/status'inputFormats: ['json' => ['application/json']], inputAssetStatusInput::class, processorAssetStatusInputProcessor::class),
  50.         new Post(inputFormats: ['json' => ['application/json'], 'multipart' => ['multipart/form-data']], inputAssetExtendedInput::class),
  51.         new Patch(inputFormats: ['json' => ['application/merge-patch+json'], 'multipart' => ['multipart/form-data']]),
  52.         new Put(inputFormats: ['json' => ['application/json'], 'multipart' => ['multipart/form-data']]),
  53.     ],
  54.     routePrefix'/sales',
  55.     inputAssetInput::class,
  56.     processorAssetInputProcessor::class,
  57. )]
  58. #[ApiResource(
  59.     uriTemplate'/sales/contracts/{contract}/assets',
  60.     operations: [
  61.         new GetCollection(),
  62.     ],
  63.     uriVariables: [
  64.         'contract' => new Link(toProperty'contracts'fromClassContract::class),
  65.     ],
  66. )]
  67. #[ApiFilter(SearchFilter::class, properties: [
  68.     'client.code' => 'exact',
  69.     'name' => 'ipartial',
  70.     'code' => 'ipartial',
  71. ])]
  72. class Asset
  73. {
  74.     use Common\Blameable;
  75.     use Common\Trackable;
  76.     #[ORM\Id]
  77.     #[ORM\GeneratedValue(strategy'IDENTITY')]
  78.     #[ORM\SequenceGenerator(sequenceName'company_asset_id_seq')]
  79.     #[ORM\Column(typeTypes::INTEGER)]
  80.     #[ApiProperty(identifierfalse)]
  81.     private ?int $id null;
  82.     #[Gedmo\Slug(fields: ['name'])]
  83.     #[ORM\Column(typeTypes::STRING)]
  84.     #[ApiProperty(identifiertrue)]
  85.     private string $slug;
  86.     #[Assert\NotNull]
  87.     #[ORM\ManyToOne(targetEntityCompany::class)]
  88.     #[ORM\JoinColumn(name'client_id'nullablefalse)]
  89.     #[ApiProperty(readableLinktrue)]
  90.     private ?Company $client null;
  91.     /** @var Collection<int, Contract> */
  92.     #[ORM\ManyToMany(targetEntityContract::class, mappedBy'assets')]
  93.     protected Collection $contracts;
  94.     #[Assert\NotBlank]
  95.     #[ORM\Column(typeTypes::STRING)]
  96.     private ?string $name null;
  97.     #[Assert\NotBlank]
  98.     #[ORM\Column(typeTypes::STRING)]
  99.     private ?string $code null;
  100.     #[Assert\NotNull]
  101.     #[ORM\Column(typeTypes::STRINGenumTypeAssetStatus::class, options: ['default' => 'ACTIVE'])]
  102.     private ?AssetStatus $status AssetStatus::ACTIVE;
  103.     #[ORM\ManyToOne(targetEntityAddress::class, cascade: ['persist''remove'])]
  104.     #[ORM\JoinColumn(name'place_id')]
  105.     #[ApiProperty(readableLinktrue)]
  106.     private ?Address $address null;
  107.     #[ORM\ManyToOne(targetEntityUpload::class, cascade: ['persist''remove'])]
  108.     #[ORM\JoinColumn(name'logo_id')]
  109.     #[ApiProperty(readableLinktrue)]
  110.     private ?Upload $logo null;
  111.     public function __construct()
  112.     {
  113.         $this->contracts = new ArrayCollection();
  114.     }
  115.     public function getId(): ?int
  116.     {
  117.         return $this->id;
  118.     }
  119.     public function getSlug(): ?string
  120.     {
  121.         return $this->slug;
  122.     }
  123.     public function setSlug(string $slug): self
  124.     {
  125.         $this->slug $slug;
  126.         return $this;
  127.     }
  128.     public function getClient(): ?Company
  129.     {
  130.         return $this->client;
  131.     }
  132.     public function setClient(?Company $client): self
  133.     {
  134.         $this->client $client;
  135.         return $this;
  136.     }
  137.     /**
  138.      * @return Collection<int, Contract>
  139.      */
  140.     public function getContracts(): Collection
  141.     {
  142.         return $this->contracts;
  143.     }
  144.     public function addContract(Contract $contract): self
  145.     {
  146.         if (!$this->contracts->contains($contract)) {
  147.             $this->contracts->add($contract);
  148.             $contract->addAsset($this);
  149.         }
  150.         return $this;
  151.     }
  152.     public function removeContract(Contract $contract): self
  153.     {
  154.         if ($this->contracts->removeElement($contract)) {
  155.             $contract->removeAsset($this);
  156.         }
  157.         return $this;
  158.     }
  159.     public function getName(): ?string
  160.     {
  161.         return $this->name;
  162.     }
  163.     public function setName(string $name): self
  164.     {
  165.         $this->name $name;
  166.         return $this;
  167.     }
  168.     public function getCode(): ?string
  169.     {
  170.         return $this->code;
  171.     }
  172.     public function setCode(string $code): self
  173.     {
  174.         $this->code $code;
  175.         return $this;
  176.     }
  177.     public function getStatus(): ?AssetStatus
  178.     {
  179.         return $this->status;
  180.     }
  181.     public function setStatus(AssetStatus $status): self
  182.     {
  183.         $this->status $status;
  184.         return $this;
  185.     }
  186.     public function getAddress(): ?Address
  187.     {
  188.         return $this->address;
  189.     }
  190.     public function setAddress(?Address $address): self
  191.     {
  192.         $this->address $address;
  193.         return $this;
  194.     }
  195.     public function getLogo(): ?Upload
  196.     {
  197.         return $this->logo;
  198.     }
  199.     public function setLogo(?Upload $logo): self
  200.     {
  201.         $this->logo $logo;
  202.         return $this;
  203.     }
  204. }