src/Entity/Shipping.php line 16

Open in your IDE?
  1. <?php
  2. namespace App\Entity;
  3. use App\Repository\ShippingRepository;
  4. use Doctrine\Common\Collections\ArrayCollection;
  5. use Doctrine\Common\Collections\Collection;
  6. use Doctrine\ORM\Mapping as ORM;
  7. use Gedmo\Blameable\Traits\BlameableEntity;
  8. use Gedmo\Timestampable\Traits\TimestampableEntity;
  9. use Symfony\Component\Serializer\Annotation\Groups;
  10. use Symfony\Component\Validator\Constraints as Assert;
  11. #[ORM\Entity(repositoryClassShippingRepository::class)]
  12. class Shipping
  13. {
  14.     use BlameableEntity//Hook blameable behaviour. Updates createdBy, updatedBy fields
  15.     use TimestampableEntity//Hook timestampable behaviour. Updates createdAt, updatedAt fields 
  16.     #[ORM\Id]
  17.     #[ORM\GeneratedValue(strategy"IDENTITY")]
  18.     #[ORM\Column]
  19.     #[Groups("serial")]
  20.     private ?int $id null;
  21.     #[ORM\Column(length255)]
  22.     #[Assert\NotNull()]
  23.     #[Assert\Length(max255)]
  24.     #[Groups("serial")]
  25.     private ?string $name null;
  26.     /**
  27.      * Cost of each increment ('repeatKgsNumber') after last scaleShipping
  28.      */
  29.     #[ORM\Column]
  30.     #[Assert\NotNull()]
  31.     #[Assert\PositiveOrZero()]
  32.     private ?float $cost null;
  33.     /**
  34.      * Size in Kgs. of each increment ('repeatKgsNumber') after last scaleShipping
  35.      */
  36.     #[ORM\Column()]
  37.     #[Assert\PositiveOrZero()]
  38.     private ?int $repeatKgsNumber null;
  39.     #[ORM\OneToMany(mappedBy'shipping'targetEntityShippingScale::class, cascade: ["persist""remove"], orphanRemovaltrue)]
  40.     #[ORM\OrderBy(["minWeight" => "ASC"])]
  41.     #[Assert\Count(min1)]
  42.     #[Assert\Valid]
  43.     private Collection $shippingScales;
  44.     #[ORM\OneToMany(mappedBy'shipping'targetEntityProductUnique::class)]
  45.     private Collection $productUniques;
  46.     #[ORM\OneToMany(mappedBy'shipping'targetEntityProduct::class)]
  47.     private Collection $products;
  48.     public function __construct()
  49.     {
  50.         $this->shippingScales = new ArrayCollection();
  51.         $this->productUniques = new ArrayCollection();
  52.         $this->products = new ArrayCollection();
  53.     }
  54.     /**
  55.      * Calculate Cost depending of the kgs.
  56.      *
  57.      * @param float $kgs
  58.      * @return float|null
  59.      */
  60.     public function getCostByKgs(float $kgs): ?float
  61.     {
  62.         $cost null;
  63.         $shippingScale null;
  64.         
  65.         //Search for the shippingScale
  66.         /** @var ShippingScale */
  67.         foreach ($this->shippingScales as $auxShippingScale) {
  68.             $shippingScale $auxShippingScale;
  69.             if (
  70.                 ($kgs >= $auxShippingScale->getMinWeight()) &&
  71.                 ($kgs <= $auxShippingScale->getMaxWeight())
  72.             ) {
  73.                 $cost $auxShippingScale->getCost();
  74.                 break;
  75.             }
  76.         }
  77.         if (!$cost) {
  78.             // If shippingScale wasn't found, apply the extra Cost for each repeatKgsNumber
  79.             $differenceKgs ceil($kgs $shippingScale->getMaxWeight());
  80.             $cost $shippingScale->getCost() + ($differenceKgs $this->repeatKgsNumber $this->cost);
  81.         }
  82.         return $cost;
  83.     }
  84.     public function getId(): ?int
  85.     {
  86.         return $this->id;
  87.     }
  88.     public function getName(): ?string
  89.     {
  90.         return $this->name;
  91.     }
  92.     public function setName(?string $name): self
  93.     {
  94.         $this->name $name;
  95.         return $this;
  96.     }
  97.     public function getCost(): ?float
  98.     {
  99.         return $this->cost;
  100.     }
  101.     public function setCost(?float $cost): self
  102.     {
  103.         $this->cost $cost;
  104.         return $this;
  105.     }
  106.     public function getRepeatKgsNumber(): ?int
  107.     {
  108.         return $this->repeatKgsNumber;
  109.     }
  110.     public function setRepeatKgsNumber(?int $repeatKgsNumber): self
  111.     {
  112.         $this->repeatKgsNumber $repeatKgsNumber;
  113.         return $this;
  114.     }
  115.     /**
  116.      * @return Collection<int, ShippingScale>
  117.      */
  118.     public function getShippingScales(): Collection
  119.     {
  120.         return $this->shippingScales;
  121.     }
  122.     public function addShippingScale(ShippingScale $shippingScale): self
  123.     {
  124.         if (!$this->shippingScales->contains($shippingScale)) {
  125.             $this->shippingScales->add($shippingScale);
  126.             $shippingScale->setShipping($this);
  127.         }
  128.         return $this;
  129.     }
  130.     public function removeShippingScale(ShippingScale $shippingScale): self
  131.     {
  132.         if ($this->shippingScales->removeElement($shippingScale)) {
  133.             // set the owning side to null (unless already changed)
  134.             if ($shippingScale->getShipping() === $this) {
  135.                 $shippingScale->setShipping(null);
  136.             }
  137.         }
  138.         return $this;
  139.     }
  140.     /**
  141.      * @return Collection<int, ProductUnique>
  142.      */
  143.     public function getProductUniques(): Collection
  144.     {
  145.         return $this->productUniques;
  146.     }
  147.     public function addProductUnique(ProductUnique $productUnique): self
  148.     {
  149.         if (!$this->productUniques->contains($productUnique)) {
  150.             $this->productUniques->add($productUnique);
  151.             $productUnique->setShipping($this);
  152.         }
  153.         return $this;
  154.     }
  155.     public function removeProductUnique(ProductUnique $productUnique): self
  156.     {
  157.         if ($this->productUniques->removeElement($productUnique)) {
  158.             // set the owning side to null (unless already changed)
  159.             if ($productUnique->getShipping() === $this) {
  160.                 $productUnique->setShipping(null);
  161.             }
  162.         }
  163.         return $this;
  164.     }
  165.     /**
  166.      * @return Collection<int, Product>
  167.      */
  168.     public function getProducts(): Collection
  169.     {
  170.         return $this->products;
  171.     }
  172.     public function addProduct(Product $product): self
  173.     {
  174.         if (!$this->products->contains($product)) {
  175.             $this->products->add($product);
  176.             $product->setShipping($this);
  177.         }
  178.         return $this;
  179.     }
  180.     public function removeProduct(Product $product): self
  181.     {
  182.         if ($this->products->removeElement($product)) {
  183.             // set the owning side to null (unless already changed)
  184.             if ($product->getShipping() === $this) {
  185.                 $product->setShipping(null);
  186.             }
  187.         }
  188.         return $this;
  189.     }
  190. }