getBehaviorPriceInherited() == 'by-piece') { return $entity->getPriceInherited() ; } elseif($entity->getBehaviorPriceInherited() == 'by-reference-unit') { if($entity->getQuantityInherited() > 0) { return $entity->getPriceByRefUnitInherited() * $entity->getQuantityInherited() ; } } } if($entity instanceof OrderProductInterface) { return $entity->getPrice() ; } return null ; } public function getPriceWithTax($entity) { return $this->applyTax( $this->getPrice($entity), $entity->getTaxRateInherited()->getValue() ) ; } public function getPriceWithTaxAndReduction($entity) { return $this->getPriceWithTaxAndReductionCatalog( $entity, $this->getPrice($entity), $this->getPriceWithTax($entity) ); } public function getPriceByRefUnit($entity) { if($entity instanceof ProductPropertyInterface) { if($entity->getBehaviorPriceInherited() == 'by-piece') { return ($this->getPriceInherited($entity) * $entity->getUnitInherited()->getCoefficient()) / $entity->getQuantityInherited() ; } elseif($entity->getBehaviorPriceInherited() == 'by-reference-unit') { return $entity->getPriceByRefUnitInherited() ; } } if($entity instanceof OrderProductInterface) { return ($this->getPrice($entity) * $entity->getUnitInherited()->getCoefficient()) / $entity->getQuantityProduct() ; } return null ; } public function getPriceByRefUnitWithTax($entity) { return $this->applyTax( $this->getPriceByRefUnit($entity), $entity->getTaxRateInherited()->getValue() ) ; } public function getPriceByRefUnitWithTaxAndReduction($entity) { return $this->getPriceWithTaxAndReductionCatalog( $entity, $this->getPriceByRefUnit($entity), $this->getPriceByRefUnitWithTax($entity) ); } public function getTotal($entity) { if($entity instanceof OrderProductInterface) { return $entity->getQuantityOrder() * $this->getPrice($entity) ; } return null ; } public function getTotalWithTax($entity) { if($entity instanceof OrderProductInterface) { return $this->applyTax( $this->getTotal($entity), $entity->getTaxRateInherited()->getValue() ) ; } return null ; } public function getTotalWithTaxAndReduction($entity) { if($entity instanceof OrderProductInterface) { return $this->getPriceWithTaxAndReductionCatalog( $entity, $this->getTotal($entity), $this->getTotalWithTax($entity) ) ; } } private function getPriceWithTaxAndReductionCatalog($entity, $price, $priceWithTax): ?float { if($entity instanceof ProductPropertyInterface) { $reductionCatalog = $entity->getReductionCatalogInherited() ; if($reductionCatalog) { $reductionCatalogValue = $reductionCatalog->getValue() ; $reductionCatalogUnit = $reductionCatalog->getUnit() ; $reductionCatalogBehaviorTaxRate = $reductionCatalog->getBehaviorTaxRate() ; } } if($entity instanceof OrderProductInterface) { // OrderProductReductionCatalog $reductionCatalog = null ; } if(isset($reductionCatalogValue) && isset($reductionCatalogUnit) && isset($reductionCatalogBehaviorTaxRate)) { if ($reductionCatalogUnit == 'percent') { return $this->applyReductionPercent( $priceWithTax, $reductionCatalogValue ); } elseif ($reductionCatalogUnit == 'amount') { if($reductionCatalogBehaviorTaxRate == 'tax-excluded') { return $this->applyTax( $this->applyReductionAmount( $price, $reductionCatalogValue ), $this->getTaxRateInherited()->getValue() ); } elseif($reductionCatalogBehaviorTaxRate == 'tax-included') { return $this->applyReductionAmount( $priceWithTax, $reductionCatalogValue ); } } } return $priceWithTax ; } public function applyTax($price, $taxRateValue) { return $this->round($this->applyPercent($price, $taxRateValue)) ; } public function applyReductionPercent($price, $percentage) { return $this->applyPercent($price, -$percentage) ; } public function applyReductionAmount($price, $amount) { return $price - $amount ; } public function applyPercent($price, $percentage) { return $price * ($percentage / 100 + 1) ; } public function round($price) { return round((($price * 100)) / 100, 2); } }