|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149 |
- <?php
-
- namespace Lc\ShopBundle\Model ;
-
- use Lc\ShopBundle\Context\UnitInterface;
-
- trait PriceTrait
- {
- /**
- * @ORM\Column(type="float", nullable=true)
- */
- protected $price;
-
- /**
- * @ORM\ManyToOne(targetEntity="Lc\ShopBundle\Context\UnitInterface")
- * @ORM\JoinColumn(nullable=true)
- */
- protected $unit;
-
- /**
- * @ORM\ManyToOne(targetEntity="Lc\ShopBundle\Context\TaxRateInterface")
- * @ORM\JoinColumn(nullable=true)
- */
- protected $taxRate;
-
- public function getPrice(): ?float
- {
- return $this->price;
- }
-
- public function getPriceInherited(): ?float
- {
- return $this->getPrice() ;
- }
-
- public function getUnitInherited(): ?Unit
- {
- return $this->getUnit() ;
- }
-
- public function getTaxRateInherited(): ?TaxRate
- {
- return $this->getTaxRate() ;
- }
-
- public function getPriceWithTax(): ?float
- {
- return $this->calculatePriceWithTax($this->getPriceInherited(), $this->getTaxRateInherited()->getValue()) ;
- }
-
- public function getPriceByUnitRef(): ?float
- {
- return $this->calculatePriceByUnitRef($this->getPriceInherited()) ;
- }
-
- public function getPriceByUnitRefWithTax(): ?float
- {
- return $this->calculatePriceByUnitRef($this->getPriceWithTax()) ;
- }
-
-
- public function getPriceWithTaxAndReduction(): ?float
- {
- if ($this->reductionCatalog) {
- return $this->getPriceWithTaxAndReductionCatalog($this->reductionCatalog);
- } else {
- return null;
- }
- }
-
- public function getPriceWithTaxAndReductionCatalog(ReductionInterface $reductionCatalog): ?float
- {
-
- if ($reductionCatalog->getUnit() == 'percent') {
- //Théoriquement que la réduction s'applique sur le prixHT ou le prixTTC le résultat est le même,j'ai laisser mon code au cas où ;)
- return $this->calculatePriceWithReductionPercent($this->getPriceWithTax(), $reductionCatalog->getValue());
- /*if ($reductionCatalog->getBehaviorTaxRate() == 'tax-excluded') {
- $priceReductionHT = $this->calculatePriceWithReductionPercent($this->getPriceInherited(), $reductionCatalog->getValue());
- return $this->calculatePriceWithTax($priceReductionHT, $this->getTaxRateInherited()->getValue());
- } else if ($reductionCatalog->getBehaviorTaxRate() == 'tax-included') {
-
- return $this->calculatePriceWithReductionPercent($this->getPriceWithTax(), $reductionCatalog->getValue());
- }*/
- }elseif ($reductionCatalog->getUnit() == 'amount') {
- if ($reductionCatalog->getBehaviorTaxRate() == 'tax-excluded') {
- $priceReductionHT = $this->calculatePriceWithReductionAmount($this->getPriceInherited(), $reductionCatalog->getValue());
- return $this->calculatePriceWithTax($priceReductionHT, $this->getTaxRateInherited()->getValue());
- }else if ($reductionCatalog->getBehaviorTaxRate() == 'tax-included') {
- return $this->calculatePriceWithReductionAmount($this->getPriceWithTax(), $reductionCatalog->getValue());
- }
- }
- }
-
- public function setPrice(float $price): self
- {
- $this->price = $price;
-
- return $this;
- }
-
- public function getUnit(): ?Unit
- {
- return $this->unit;
- }
-
- public function setUnit(Unit $unit): self
- {
- $this->unit = $unit;
-
- return $this;
- }
-
- public function getTaxRate(): ?TaxRate
- {
- return $this->taxRate;
- }
-
- public function setTaxRate(?TaxRate $taxRate): self
- {
- $this->taxRate = $taxRate;
-
- return $this;
- }
-
- private function calculatePriceWithTax($priceWithoutTax, $taxRateValue): ?float
- {
- $price = floatval($priceWithoutTax) * ($taxRateValue / 100 + 1);
- $price = round((($price * 100)) / 100, 2);
- return $price;
- }
-
- public function calculatePriceWithReductionPercent($price, $percentValue): ?float
- {
- $price = floatval($price) * (1 - $percentValue / 100);
- $price = round((($price * 100)) / 100, 2);
- return $price;
- }
- public function calculatePriceWithReductionAmount($price, $amountValue): ?float
- {
- $price = floatval($price) - $amountValue;
- $price = round((($price * 100)) / 100, 2);
- return $price;
- }
-
- private function calculatePriceByUnitRef($price)
- {
- return ($price * $this->getUnitInherited()->getCoefficient()) / $this->getQuantityInherited() ;
- }
- }
|