|
|
@@ -1,368 +0,0 @@ |
|
|
|
<?php |
|
|
|
|
|
|
|
namespace Lc\ShopBundle\Services; |
|
|
|
|
|
|
|
use Doctrine\Common\Collections\Collection; |
|
|
|
use Lc\ShopBundle\Context\OrderProductInterface; |
|
|
|
use Lc\ShopBundle\Context\OrderShopInterface; |
|
|
|
use Lc\ShopBundle\Context\ProductFamilyInterface; |
|
|
|
use Lc\ShopBundle\Context\ProductInterface; |
|
|
|
use Lc\ShopBundle\Context\ProductPropertyInterface; |
|
|
|
use Lc\ShopBundle\Context\ReductionCatalogInterface; |
|
|
|
|
|
|
|
class PriceUtilsOld |
|
|
|
{ |
|
|
|
|
|
|
|
public function getPrice($entity) |
|
|
|
{ |
|
|
|
if ($entity instanceof ProductPropertyInterface) { |
|
|
|
if ($entity->getBehaviorPriceInherited() == 'by-piece') { |
|
|
|
return $entity->getPriceInherited(); |
|
|
|
} elseif ($entity->getBehaviorPriceInherited() == 'by-reference-unit') { |
|
|
|
if ($entity->getQuantityInherited() > 0) { |
|
|
|
return $entity->getPriceByRefUnitInherited() * ($entity->getQuantityInherited() / $entity->getUnitInherited()->getCoefficient()); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
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->getPrice($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); |
|
|
|
} |
|
|
|
if ($entity instanceof OrderShopInterface) { |
|
|
|
$total = 0; |
|
|
|
foreach ($entity->getOrderProducts() as $orderProduct) { |
|
|
|
$total += $this->getTotal($orderProduct); |
|
|
|
} |
|
|
|
return $total; |
|
|
|
} |
|
|
|
return null; |
|
|
|
} |
|
|
|
|
|
|
|
public function getTotalWithTax($entity) |
|
|
|
{ |
|
|
|
if ($entity instanceof OrderProductInterface) { |
|
|
|
return $this->applyTax( |
|
|
|
$this->getTotal($entity), |
|
|
|
$entity->getTaxRateInherited()->getValue() |
|
|
|
); |
|
|
|
} |
|
|
|
if ($entity instanceof OrderShopInterface) { |
|
|
|
$total = 0; |
|
|
|
foreach ($entity->getOrderProducts() as $orderProduct) { |
|
|
|
$total += $this->getTotalWithTax($orderProduct); |
|
|
|
} |
|
|
|
return $total; |
|
|
|
} |
|
|
|
|
|
|
|
//C'est bizzare ce truc là |
|
|
|
//if($entity instanceof OrderShopInterface) { |
|
|
|
// return $this->getTotalOrderProducts($entity->getOrderProducts(), true) ; |
|
|
|
//} |
|
|
|
return null; |
|
|
|
} |
|
|
|
|
|
|
|
public function getTotalWithTaxAndReduction($entity) |
|
|
|
{ |
|
|
|
if ($entity instanceof OrderProductInterface) { |
|
|
|
return $this->getPriceWithTaxAndReductionCatalog( |
|
|
|
$entity, |
|
|
|
$this->getTotal($entity), |
|
|
|
$this->getTotalWithTax($entity) |
|
|
|
); |
|
|
|
} |
|
|
|
|
|
|
|
if ($entity instanceof OrderShopInterface) { |
|
|
|
return $this->getTotalOrderProductsWithTaxAndReduction($entity->getOrderProducts(), true, true); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
public function getTotalWithReduction($entity) |
|
|
|
{ |
|
|
|
if ($entity instanceof OrderProductInterface) { |
|
|
|
return $this->getPriceWithReductionCatalog( |
|
|
|
$entity, |
|
|
|
$this->getTotal($entity), |
|
|
|
$this->getTotalWithTax($entity) |
|
|
|
); |
|
|
|
} |
|
|
|
|
|
|
|
if ($entity instanceof OrderShopInterface) { |
|
|
|
return $this->getTotalOrderProductsWithReduction($entity->getOrderProducts(), true, true); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
public function getTotalOrderProductsWithReductionCart(OrderShopInterface $order) |
|
|
|
{ |
|
|
|
$this->_getTotalOrderProductsWithReductionCartGeneric($order, false); |
|
|
|
} |
|
|
|
|
|
|
|
public function getTotalOrderProductsWithTaxAndReductionCart(OrderShopInterface $order) |
|
|
|
{ |
|
|
|
$this->_getTotalOrderProductsWithReductionCartGeneric($order, true); |
|
|
|
} |
|
|
|
|
|
|
|
private function _getTotalOrderProductsWithReductionCartGeneric(OrderShopInterface $order, $withTax = true) |
|
|
|
{ |
|
|
|
|
|
|
|
if ($withTax) { |
|
|
|
$priceToReturn = $this->getTotalOrderProductsWithTaxAndReductionCatalog($order); |
|
|
|
} |
|
|
|
else { |
|
|
|
$priceToReturn = $this->getTotalOrderProductsWithReductionCatalog($order); |
|
|
|
} |
|
|
|
foreach ($order->getOrderReductionCarts() as $orderReductionCart) { |
|
|
|
if ($orderReductionCart->getUnit() == 'percent') { |
|
|
|
|
|
|
|
$priceToReturn = $this->applyReductionPercent( |
|
|
|
$priceToReturn, |
|
|
|
$orderReductionCart->getValue |
|
|
|
); |
|
|
|
} else if ($orderReductionCart->getUnit() == 'amount') { |
|
|
|
if ($orderReductionCart->getBehaviorTaxRate() == 'tax-inlcluded') { |
|
|
|
$priceToReturn = |
|
|
|
$this->applyReductionAmount( |
|
|
|
$priceToReturn, |
|
|
|
$orderReductionCart->getValue() |
|
|
|
); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public function getTotalOrderProducts($entity) |
|
|
|
{ |
|
|
|
return $this->getSumOrderProductsDispatch($entity); |
|
|
|
} |
|
|
|
|
|
|
|
public function getTotalOrderProductsWithTax($entity) |
|
|
|
{ |
|
|
|
return $this->getSumOrderProductsDispatch($entity, true); |
|
|
|
} |
|
|
|
|
|
|
|
public function getTotalOrderProductsWithReduction($entity) |
|
|
|
{ |
|
|
|
return $this->getTotalOrderProductsWithReductionCatalog($entity); |
|
|
|
} |
|
|
|
|
|
|
|
public function getTotalOrderProductsWithTaxAndReduction($entity) |
|
|
|
{ |
|
|
|
return $this->getTotalOrderProductsWithTaxAndReductionCatalog($entity); |
|
|
|
} |
|
|
|
|
|
|
|
public function getTotalOrderProductsWithReductionCatalog($entity) |
|
|
|
{ |
|
|
|
return $this->getSumOrderProductsDispatch($entity, false, true); |
|
|
|
} |
|
|
|
|
|
|
|
public function getTotalOrderProductsWithTaxAndReductionCatalog($entity) |
|
|
|
{ |
|
|
|
return $this->getSumOrderProductsDispatch($entity, true, true); |
|
|
|
} |
|
|
|
|
|
|
|
public function getSumOrderProductsDispatch($entity, $withTax = false, $withReductionCatalog = false) |
|
|
|
{ |
|
|
|
if ($entity instanceof OrderShopInterface) { |
|
|
|
return $this->getSumOrderProducts($entity->getOrderProducts(), $withTax, $withReductionCatalog); |
|
|
|
} |
|
|
|
if ($entity instanceof Collection || is_array($entity)) { |
|
|
|
return $this->getSumOrderProducts($entity, $withTax, $withReductionCatalog); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
public function getSumOrderProducts($orderProducts, $withTax = false, $withReductionCatalog = false) |
|
|
|
{ |
|
|
|
$total = 0; |
|
|
|
foreach ($orderProducts as $orderProduct) { |
|
|
|
if ($withTax && $withReductionCatalog) { |
|
|
|
$total += $this->getTotalWithTaxAndReduction($orderProduct); |
|
|
|
} elseif ($withTax) { |
|
|
|
$total += $this->getTotalWithTax($orderProduct); |
|
|
|
} elseif ($withReductionCatalog) { |
|
|
|
$total += $this->getTotalWithReduction($orderProduct); |
|
|
|
} else { |
|
|
|
$total += $this->getTotal($orderProduct); |
|
|
|
} |
|
|
|
} |
|
|
|
return $total; |
|
|
|
} |
|
|
|
|
|
|
|
public function getPriceWithTaxAndReductionCatalog($entity, $price, $priceWithTax, $reductionCatalog = null) |
|
|
|
{ |
|
|
|
return $this->getPriceWithReductionCatalogGeneric($entity, $price, $priceWithTax, $reductionCatalog, true); |
|
|
|
} |
|
|
|
|
|
|
|
public function getPriceWithReductionCatalog($entity, $price, $priceWithTax, $reductionCatalog = null) |
|
|
|
{ |
|
|
|
return $this->getPriceWithReductionCatalogGeneric($entity, $price, $priceWithTax, $reductionCatalog, false); |
|
|
|
} |
|
|
|
|
|
|
|
public function getPriceWithReductionCatalogGeneric($entity, $price, $priceWithTax, $reductionCatalog = null, $withTax = true): ?float |
|
|
|
{ |
|
|
|
if ($reductionCatalog) { |
|
|
|
$reductionCatalogValue = $reductionCatalog->getValue(); |
|
|
|
$reductionCatalogUnit = $reductionCatalog->getUnit(); |
|
|
|
$reductionCatalogBehaviorTaxRate = $reductionCatalog->getBehaviorTaxRate(); |
|
|
|
} else { |
|
|
|
if ($entity instanceof ProductPropertyInterface) { |
|
|
|
$reductionCatalog = $entity->getReductionCatalogInherited(); |
|
|
|
|
|
|
|
if ($reductionCatalog) { |
|
|
|
$reductionCatalogValue = $reductionCatalog->getValue(); |
|
|
|
$reductionCatalogUnit = $reductionCatalog->getUnit(); |
|
|
|
$reductionCatalogBehaviorTaxRate = $reductionCatalog->getBehaviorTaxRate(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if ($entity instanceof OrderProductInterface) { |
|
|
|
$orderProductReductionCatalog = $entity->getOrderProductReductionCatalog(); |
|
|
|
if ($orderProductReductionCatalog) { |
|
|
|
$reductionCatalogValue = $orderProductReductionCatalog->getValue(); |
|
|
|
$reductionCatalogUnit = $orderProductReductionCatalog->getUnit(); |
|
|
|
$reductionCatalogBehaviorTaxRate = $orderProductReductionCatalog->getBehaviorTaxRate(); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if (isset($reductionCatalogValue) && isset($reductionCatalogUnit) && isset($reductionCatalogBehaviorTaxRate)) { |
|
|
|
if ($reductionCatalogUnit == 'percent') { |
|
|
|
$priceWithTax = $this->applyReductionPercent( |
|
|
|
$priceWithTax, |
|
|
|
$reductionCatalogValue |
|
|
|
); |
|
|
|
} elseif ($reductionCatalogUnit == 'amount') { |
|
|
|
if ($reductionCatalogBehaviorTaxRate == 'tax-excluded') { |
|
|
|
$priceWithTax = $this->applyTax( |
|
|
|
$this->applyReductionAmount( |
|
|
|
$price, |
|
|
|
$reductionCatalogValue |
|
|
|
), |
|
|
|
$entity->getTaxRateInherited()->getValue() |
|
|
|
); |
|
|
|
} elseif ($reductionCatalogBehaviorTaxRate == 'tax-included') { |
|
|
|
$priceWithTax = $this->applyReductionAmount( |
|
|
|
$priceWithTax, |
|
|
|
$reductionCatalogValue |
|
|
|
); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if ($withTax) { |
|
|
|
$priceReturn = $priceWithTax; |
|
|
|
} else { |
|
|
|
$priceReturn = $this->applyPercentNegative($priceWithTax, $entity->getTaxRateInherited()->getValue()); |
|
|
|
} |
|
|
|
|
|
|
|
return $this->round($priceReturn); |
|
|
|
} |
|
|
|
|
|
|
|
public function getTotalTaxes($entity) |
|
|
|
{ |
|
|
|
if ($entity instanceof OrderProductInterface) { |
|
|
|
return $this->getTotalWithReduction($entity) * ($entity->getTaxRateInherited()->getValue() / 100); |
|
|
|
} |
|
|
|
|
|
|
|
if ($entity instanceof OrderShopInterface) { |
|
|
|
$totalTaxes = 0; |
|
|
|
foreach ($entity->getOrderProducts() as $orderProduct) { |
|
|
|
$totalTaxes += $this->getTotalTaxes($orderProduct); |
|
|
|
} |
|
|
|
return $totalTaxes; |
|
|
|
} |
|
|
|
|
|
|
|
return 0; |
|
|
|
} |
|
|
|
|
|
|
|
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 applyPercentNegative($price, $percentage) |
|
|
|
{ |
|
|
|
return $price / ($percentage / 100 + 1); |
|
|
|
} |
|
|
|
|
|
|
|
public function round($price) |
|
|
|
{ |
|
|
|
return round((($price * 100)) / 100, 2); |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|