src/Entity/InsuredInsurer.php line 74

Open in your IDE?
  1. <?php
  2. namespace App\Entity;
  3. use ApiPlatform\Core\Annotation\ApiProperty;
  4. use ApiPlatform\Core\Annotation\ApiResource;
  5. use ApiPlatform\Core\Annotation\ApiFilter;
  6. use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\SearchFilter;
  7. use ApiPlatform\Core\Bridge\Doctrine\Orm\Filter\OrderFilter;
  8. use App\Trait\TimestampableEntity;
  9. use Doctrine\ORM\Mapping as ORM;
  10. use Symfony\Component\Validator\Constraints as Assert;
  11. use Symfony\Component\Serializer\Annotation\Groups;
  12. use Symfony\Component\Serializer\Annotation\MaxDepth;
  13. use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
  14. #[ORM\Entity]
  15. #[UniqueEntity(fields: ['insured''insurer'])]
  16. #[ApiResource(
  17.     iri'InsuredInsurer',
  18.     itemOperations: [
  19.         'get' => [
  20.             // 'security' => "is_granted('ROLE_USER')",
  21.             'normalization_context' => [
  22.                 'groups' => 'insured_insurer:item:get',
  23.                 'enable_max_depth' => true
  24.             ]
  25.         ],
  26.         'put' => [
  27.             // 'security' => "is_granted('ROLE_USER')",
  28.             'normalization_context' => [
  29.                 'groups' => 'insured_insurer:item:put',
  30.                 'enable_max_depth' => true
  31.             ],
  32.             'denormalization_context' => [
  33.                 'groups' => 'insured_insurer:item:put',
  34.                 'enable_max_depth' => true
  35.             ]
  36.         ],
  37.         'delete' => [
  38.             // 'security' => "is_granted('ROLE_USER')",
  39.         ]
  40.     ],
  41.     collectionOperations: [
  42.         'get' => [
  43.             // 'security' => "is_granted('ROLE_USER')",
  44.             'normalization_context' => [
  45.                 'groups' => ['insured_insurer:collection:get''createdAt'],
  46.                 'enable_max_depth' => true
  47.             ]
  48.         ],
  49.         'post' => [
  50.             // 'security' => "is_granted('ROLE_USER')",
  51.             'normalization_context' => [
  52.                 'groups' => 'insured_insurer:collection:post',
  53.                 'enable_max_depth' => true
  54.             ],
  55.             'denormalization_context' => [
  56.                 'groups' => 'insured_insurer:collection:post',
  57.                 'enable_max_depth' => true
  58.             ]
  59.         ],
  60.     ]
  61. )]
  62. #[ApiFilter(SearchFilter::class, properties: [
  63.     'insured' => 'exact',
  64.     'insurer' => 'exact',
  65.     'submodality' => 'exact'
  66. ])]
  67. #[ApiFilter(OrderFilter::class, properties: [
  68.     'name'
  69. ])]
  70. class InsuredInsurer
  71. {
  72.     use TimestampableEntity;
  73.     
  74.     #[ORM\Id]
  75.     #[ORM\GeneratedValue]
  76.     #[ORM\Column(type'integer')]
  77.     #[Groups([
  78.         'insured_insurer:collection:get',
  79.         'insured_insurer:item:get',
  80.     ])]
  81.     private $id;
  82.     #[ORM\Column(type'string'length255nullabletrue)]
  83.     #[Groups([
  84.         'insured_insurer:collection:get',
  85.         'insured_insurer:item:get',
  86.         'insured:item:get',
  87.     ])]
  88.     private $name;
  89.     #[ORM\ManyToOne(targetEntityInsured::class, inversedBy'insurers')]
  90.     #[Groups([
  91.         'insured_insurer:collection:get',
  92.         'insured_insurer:collection:post',
  93.         'insured_insurer:item:get',
  94.         'insured_insurer:item:put',
  95.         'insurer:collection:post',
  96.     ])]
  97.     #[MaxDepth(1)]
  98.     private $insured;
  99.     #[ORM\ManyToOne(targetEntityInsurer::class, inversedBy'insureds')]
  100.     #[Groups([
  101.         'insured_insurer:collection:get',
  102.         'insured_insurer:collection:post',
  103.         'insured_insurer:item:get',
  104.         'insured_insurer:item:put',
  105.         'insured:item:get',
  106.     ])]
  107.     #[MaxDepth(1)]
  108.     private $insurer;
  109.     #[ORM\ManyToOne(targetEntitySubmodality::class, inversedBy'insureds')]
  110.     #[Groups([
  111.         'insured_insurer:collection:get',
  112.         'insured_insurer:collection:post',
  113.         'insured_insurer:item:get',
  114.         'insured_insurer:item:put',
  115.         'insurer:collection:post',
  116.         'insured:item:get',
  117.     ])]
  118.     #[MaxDepth(1)]
  119.     private $submodality;
  120.     #[ORM\Column(type'float'nullabletrue)]
  121.     #[Groups([
  122.         'import:insurer',
  123.         'import:insured',
  124.         'insured_insurer:collection:get',
  125.         'insured_insurer:collection:post',
  126.         'insured_insurer:item:get',
  127.         'insured_insurer:item:put',
  128.         'insured:item:get',
  129.         'insured:item:put',
  130.     ])]
  131.     private $approvedValue;
  132.     // #[ORM\Column(type: 'float', nullable: true)]
  133.     // #[Groups([
  134.     //     'insured_insurer:collection:get',
  135.     //     'insured_insurer:collection:post',
  136.     //     'insured_insurer:item:get',
  137.     //     'insured_insurer:item:put',
  138.     //     'insured:item:get',
  139.     //     'insured:item:put',
  140.     // ])]
  141.     // private $interestRate;
  142.     #[ORM\Column(type'float'nullabletrue)]
  143.     #[Groups([
  144.         'import:insurer',
  145.         'import:insured',
  146.         'insured_insurer:collection:get',
  147.         'insured_insurer:collection:post',
  148.         'insured_insurer:item:get',
  149.         'insured_insurer:item:put',
  150.         'insured:item:get',
  151.         'insured:item:put',
  152.     ])]
  153.     private $approvedLimit;
  154.     #[ORM\Column(type'float'nullabletrue)]
  155.     #[Groups([
  156.         'insured_insurer:collection:get',
  157.         'insured_insurer:collection:post',
  158.         'insured_insurer:item:get',
  159.         'insured_insurer:item:put',
  160.         'insured:item:get',
  161.         'insured:item:put',
  162.     ])]
  163.     private $usedLimit;
  164.     #[ORM\Column(type'float'nullabletrue)]
  165.     #[Groups([
  166.         'insured_insurer:collection:get',
  167.         'insured_insurer:collection:post',
  168.         'insured_insurer:item:get',
  169.         'insured_insurer:item:put',
  170.         'insured:item:get',
  171.         'insured:item:put',
  172.     ])]
  173.     private $availableLimit;
  174.     #[ApiProperty()]
  175.     #[Groups([
  176.         'insured_insurer:collection:get',
  177.         'insured_insurer:item:get',
  178.         'insured:item:get',
  179.     ])]
  180.     private $comissionRate;
  181.     #[ORM\Column(type'boolean')]
  182.     #[Assert\Type('boolean')]
  183.     #[Groups([
  184.         'import:insurer',
  185.         'import:insured',
  186.         'insured_insurer:collection:get',
  187.         'insured_insurer:collection:post',
  188.         'insured_insurer:item:get',
  189.         'insured_insurer:item:put',
  190.         'insured:item:get',
  191.         'insured:item:put',
  192.     ])]
  193.     private bool $isSelected false;
  194.     #[ApiProperty()]
  195.     #[Groups([
  196.         'insured:item:get',
  197.         'insured_insurer:collection:get',
  198.     ])]
  199.     private $insurerName;
  200.     #[ApiProperty()]
  201.     #[Groups([
  202.       'import:insured',
  203.       'insured:item:get',
  204.       'insured_insurer:collection:get',
  205.     ])]
  206.     private $insurerDefaultEndTime;    
  207.     #[ApiProperty()]
  208.     #[Groups([
  209.         'import:insured',
  210.         'insured:item:get',
  211.         'insured_insurer:collection:get',
  212.     ])]
  213.     private $insurerTaxID;
  214.     #[ApiProperty()]
  215.     #[Groups([
  216.         'import:insurer',
  217.     ])]
  218.     private $insuredTaxID;
  219.     #[ApiProperty()]
  220.     #[Groups([
  221.         'import:insurer',
  222.         'import:insured',
  223.         'insured:item:get',
  224.         'insured_insurer:collection:get',
  225.     ])]
  226.     private $modalityName;
  227.     #[ApiProperty()]
  228.     #[Groups([
  229.         'insured:item:get',
  230.         'insured_insurer:collection:get',
  231.     ])]
  232.     private $isModalitySelected;
  233.     #[ApiProperty()]
  234.     #[Groups([
  235.         'insured:item:get',
  236.         'insured_insurer:collection:get',
  237.     ])]
  238.     private $isSubmodalitySelected;
  239.     
  240.     #[ApiProperty()]
  241.     #[Groups([
  242.         'import:insurer',
  243.         'import:insured',
  244.         'insured:item:get',
  245.         'insured_insurer:collection:get',
  246.     ])]
  247.     private $submodalityName;
  248.     #[ApiProperty()]
  249.     #[Groups([
  250.         'insured:item:get',
  251.         'insured_insurer:collection:get',
  252.     ])]
  253.     private $modalityLimitValue;
  254.     public function getId(): ?int
  255.     {
  256.         return $this->id;
  257.     }
  258.     public function setName(): void
  259.     {
  260.         $this->name "{$this->getInsurerName()} / {$this->getModalityName()} / {$this->getSubmodalityName()}";
  261.     }
  262.     public function getName(): ?string
  263.     {
  264.         return $this->name;
  265.     }
  266.     public function getInsured(): ?Insured
  267.     {
  268.         return $this->insured;
  269.     }
  270.     public function setInsured(?Insured $insured): self
  271.     {
  272.         $this->insured $insured;
  273.         return $this;
  274.     }
  275.     public function getInsurer(): ?Insurer
  276.     {
  277.         return $this->insurer;
  278.     }
  279.     public function setInsurer(?Insurer $insurer): self
  280.     {
  281.         $this->insurer $insurer;
  282.         return $this;
  283.     }
  284.     public function getSubmodality(): ?Submodality
  285.     {
  286.         return $this->submodality;
  287.     }
  288.     public function setSubmodality(?Submodality $submodality): self
  289.     {
  290.         $this->submodality $submodality;
  291.         return $this;
  292.     }
  293.     public function getApprovedValue(): ?float
  294.     {
  295.         return $this->approvedValue;
  296.     }
  297.     public function setApprovedValue(?float $approvedValue): self
  298.     {
  299.         $this->approvedValue $approvedValue;
  300.         return $this;
  301.     }
  302.     // public function getInterestRate(): ?float
  303.     // {
  304.     //     return $this->interestRate;
  305.     // }
  306.     // public function setInterestRate(?float $interestRate): self
  307.     // {
  308.     //     $this->interestRate = $interestRate;
  309.     //     return $this;
  310.     // }
  311.     public function getApprovedLimit(): ?float
  312.     {
  313.         return $this->approvedLimit;
  314.     }
  315.     public function setApprovedLimit(?float $approvedLimit): self
  316.     {
  317.         $this->approvedLimit $approvedLimit;
  318.         return $this;
  319.     }
  320.     public function getUsedLimit(): ?float
  321.     {
  322.         return $this->usedLimit;
  323.     }
  324.     public function setUsedLimit(?float $usedLimit): self
  325.     {
  326.         $this->usedLimit $usedLimit;
  327.         return $this;
  328.     }
  329.     public function getAvailableLimit(): ?float
  330.     {
  331.         return $this->availableLimit;
  332.     }
  333.     public function setAvailableLimit(?float $availableLimit): self
  334.     {
  335.         $this->availableLimit $availableLimit;
  336.         return $this;
  337.     }
  338.     public function getComissionRate(): ?float
  339.     {
  340.         $insurerGlobals $this->getInsured()->getInsurerGlobals();
  341.         $insurerGlobal $insurerGlobals->filter(function($element) {
  342.             return $element->getInsurer()->getId() === $this->getInsurer()->getId();
  343.         })->first();
  344.         return $insurerGlobal $insurerGlobal->getComissionRate() : null;
  345.     }
  346.     // public function setComissionRate(?float $comissionRate): self
  347.     // {
  348.     //     $this->comissionRate = $comissionRate;
  349.     //     return $this;
  350.     // }
  351.     public function setIsSelected($isSelected): self
  352.     {
  353.         $this->isSelected $isSelected;
  354.         return $this;
  355.     }
  356.     public function getIsSelected(): ?bool
  357.     {
  358.         return $this->isSelected;
  359.     }
  360.     public function getInsurerName(): ?string
  361.     {
  362.         return $this->getInsurer()->getName();
  363.     }
  364.     public function getInsurerDefaultEndTime(): ?\DateTimeInterface
  365.     {
  366.       return $this->getInsurer()->getDefaultEndTime();
  367.     }    
  368.     public function getInsurerTaxID(): ?string
  369.     {
  370.         return $this->getInsurer()->getTaxID();
  371.     }
  372.     public function getInsuredTaxID(): ?string
  373.     {
  374.         return $this->getInsured()->getTaxID();
  375.     }
  376.     public function getModalityName(): ?string
  377.     {
  378.         return $this->getSubmodality()->getModality()->getName();
  379.     }
  380.     public function getSubmodalityName(): ?string
  381.     {
  382.         return $this->getSubmodality()->getName();
  383.     }
  384.     public function getModalityLimitValue(): ?string
  385.     {
  386.         $submodality $this->getSubmodality();
  387.         $submodalities $this->getInsurer()->getSubmodalities();
  388.         $collection $submodalities->filter(function($element) use ($submodality) {
  389.             return $element->getSubmodality()->getId() === $submodality->getId();
  390.         });
  391.         if (count($collection) === 0) {
  392.             return null;
  393.         }
  394.         $modality $collection->first()->getSubmodality()->getModality();
  395.         $modalities $this->getInsurer()->getModalities();
  396.         $collection2 $modalities->filter(function($element) use ($modality) {
  397.             return $element->getModality()->getId() === $modality->getId();
  398.         });
  399.         if (count($collection2) === 0) {
  400.             return null;
  401.         }
  402.         $limitValue $collection2->first()->getLimitValue();
  403.         
  404.         return $limitValue;
  405.     }
  406.     public function getIsModalitySelected(): bool
  407.     {
  408.         $submodality $this->getSubmodality();
  409.         $submodalities $this->getInsurer()->getSubmodalities();
  410.         $collection $submodalities->filter(function($element) use ($submodality) {
  411.             return $element->getSubmodality()->getId() === $submodality->getId();
  412.         });
  413.         if (count($collection) === 0) {
  414.             return null;
  415.         }
  416.         $modality $collection->first()->getSubmodality()->getModality();
  417.         $modalities $this->getInsurer()->getModalities();
  418.         $collection2 $modalities->filter(function($element) use ($modality) {
  419.             return $element->getModality()->getId() === $modality->getId();
  420.         });
  421.         if (count($collection2) === 0) {
  422.             return null;
  423.         }
  424.         $selected $collection2->first()->getIsSelected();
  425.         
  426.         return $selected;
  427.     }
  428.     public function getIsSubmodalitySelected(): bool
  429.     {
  430.         $submodality $this->getSubmodality();
  431.         $submodalities $this->getInsurer()->getSubmodalities();
  432.         $collection $submodalities->filter(function($element) use ($submodality) {
  433.             return $element->getSubmodality()->getId() === $submodality->getId();
  434.         });
  435.         if (count($collection) === 0) {
  436.             return null;
  437.         }
  438.         $selected $collection->first()->getIsSelected();
  439.         
  440.         return $selected;
  441.     }
  442. }