|
- <?php
-
- namespace Lc\CaracoleBundle\Solver\Price;
-
- use Lc\CaracoleBundle\Model\Order\OrderProductInterface;
- use Lc\CaracoleBundle\Solver\Product\ProductFamilySolver;
- use Lc\CaracoleBundle\Solver\Product\ProductSolver;
-
- class OrderProductPriceSolver
- {
- use PriceSolverTrait;
-
- protected ProductSolver $productSolver;
- protected ProductFamilySolver $productFamilySolver;
- protected ProductPriceSolver $productPriceSolver;
-
- public function __construct(
- ProductPriceSolver $productPriceSolver,
- ProductSolver $productSolver,
- ProductFamilySolver $productFamilySolver
- ) {
- $this->productPriceSolver = $productPriceSolver;
- $this->productSolver = $productSolver;
- $this->productFamilySolver = $productFamilySolver;
- }
-
- public function getPrice(OrderProductInterface $orderProduct, $round = false)
- {
- if ($round) {
- return $this->round($orderProduct->getPrice());
- } else {
- return $orderProduct->getPrice();
- }
- }
-
- public function getBuyingPrice(OrderProductInterface $orderProduct, $round = false)
- {
- if ($round) {
- return $this->round($orderProduct->getBuyingPrice());
- } else {
- return $orderProduct->getBuyingPrice();
- }
- }
-
- public function getPriceWithTax(OrderProductInterface $orderProduct)
- {
- return $this->applyTax(
- $this->getPrice($orderProduct),
- $orderProduct->getTaxRate()->getValue()
- );
- }
-
- public function getPriceWithTaxAndReduction(OrderProductInterface $orderProduct)
- {
- return $this->applyReductionCatalog(
- $orderProduct,
- $this->getPrice($orderProduct),
- $this->getPriceWithTax($orderProduct)
- );
- }
-
- public function getPriceWithReduction(OrderProductInterface $orderProduct, $round = true)
- {
- return $this->applyReductionCatalog(
- $orderProduct,
- $this->getPrice($orderProduct),
- $this->getPriceWithTax($orderProduct),
- 1,
- null,
- false,
- $round
- );
- }
-
- public function getTotal(OrderProductInterface $orderProduct)
- {
- return $orderProduct->getQuantityOrder() * $this->getPrice($orderProduct);
- }
-
- public function getTotalBuyingPrice(OrderProductInterface $orderProduct)
- {
- return $orderProduct->getQuantityOrder() * $this->getBuyingPrice($orderProduct);
- }
-
- public function getMargin(OrderProductInterface $orderProduct)
- {
- return $this->round($this->getPriceWithReduction($orderProduct, false) - $this->getBuyingPrice($orderProduct));
- }
-
- public function getMarginPercent(OrderProductInterface $orderProduct)
- {
- if ($this->getBuyingPrice($orderProduct) && $this->getPriceWithReduction($orderProduct)) {
- return $this->round(($this->getMargin($orderProduct) / $this->getPriceWithReduction($orderProduct)) * 100);
- } else {
- return 0;
- }
- }
-
- public function getTotalMargin(OrderProductInterface $orderProduct)
- {
- return $orderProduct->getQuantityOrder() * $this->getMargin($orderProduct);
- }
-
-
- public function getTotalWithReduction(OrderProductInterface $orderProduct)
- {
- return $this->applyReductionCatalog(
- $orderProduct,
- $this->getTotal($orderProduct),
- $this->getTotalWithTax($orderProduct),
- $orderProduct->getQuantityOrder(),
- null,
- false
- );
- }
-
- public function getTotalWithTax(OrderProductInterface $orderProduct)
- {
-
- return $this->applyTax(
- $this->getTotal($orderProduct),
- $orderProduct->getTaxRate()->getValue()
- );
- }
-
- public function getTotalWithTaxAndReduction(OrderProductInterface $orderProduct)
- {
- return $this->applyReductionCatalog(
- $orderProduct,
- $this->getTotal($orderProduct),
- $this->getTotalWithTax($orderProduct),
- $orderProduct->getQuantityOrder()
- );
- }
-
- public function getTotalBuyingPriceWithTax(OrderProductInterface $orderProduct)
- {
- return $this->applyTax(
- $this->getTotalBuyingPrice($orderProduct),
- $orderProduct->getTaxRate()->getValue()
- );
- }
-
- //inclus toujours les réductions catalogues
- public function getTotalTaxes(OrderProductInterface $orderProduct)
- {
- return $this->getTotalWithTaxAndReduction($orderProduct) - $this->getTotalWithReduction($orderProduct);
- }
- }
|