|
- <?php
-
- namespace Lc\CaracoleBundle\Solver\Order;
-
- use Lc\CaracoleBundle\Model\File\DocumentInterface;
- use Lc\CaracoleBundle\Model\File\DocumentModel;
- use Lc\CaracoleBundle\Model\Order\OrderShopInterface;
- use Lc\CaracoleBundle\Model\Order\OrderStatusInterface;
- use Lc\CaracoleBundle\Model\Order\OrderStatusModel;
- use Lc\CaracoleBundle\Model\Product\ProductFamilyInterface;
- use Lc\CaracoleBundle\Model\Product\ProductFamilyModel;
- use Lc\CaracoleBundle\Model\Product\ProductInterface;
- use Lc\CaracoleBundle\Solver\Price\PriceSolver;
-
- class OrderShopSolver
- {
- protected PriceSolver $priceSolver;
-
- public function __construct(PriceSolver $priceSolver)
- {
- $this->priceSolver = $priceSolver;
- }
-
- public function countQuantities(OrderShopInterface $orderShop): int
- {
- return $this->countQuantitiesByOrderProducts($orderShop->getOrderProducts());
- }
-
- public function countQuantitiesByOrderProducts($orderProducts = []): int
- {
- $count = 0;
-
- foreach ($orderProducts as $orderProduct) {
- $count += $orderProduct->getQuantityOrder();
- }
-
- return $count;
- }
-
- public function getOrderProductsByParentCategory(OrderShopInterface $orderShop): array
- {
- $categoriesArray = [];
-
- foreach ($orderShop->getOrderProducts() as $orderProduct) {
- $productCategories = $orderProduct->getProduct()->getProductFamily()->getProductCategories();
- $category = $productCategories[0]->getParentCategory();
- $labelCategory = $category->getTitle();
- if (!isset($categoriesArray[$labelCategory])) {
- $categoriesArray[$labelCategory] = [];
- }
- $categoriesArray[$labelCategory][] = $orderProduct;
- }
-
- return $categoriesArray;
- }
-
- // getOrderProductsByProductFamily
- public function getOrderProductsByProductFamily(
- OrderShopInterface $orderShop,
- ProductFamilyInterface $productFamily
- ): array {
- $arrayOrderProducts = [];
-
- foreach ($orderShop->getOrderProducts() as $orderProduct) {
- if ($orderProduct->getProduct()->getProductFamily() == $productFamily) {
- $arrayOrderProducts[] = $orderProduct;
- }
- }
-
- return $arrayOrderProducts;
- }
-
- public function getQuantityOrderByProduct(
- OrderShopInterface $orderShop,
- ProductInterface $product,
- $byWeight = false
- ): int {
- $quantity = 0;
- $productFamily = $product->getProductFamily();
- $behaviorCountStock = $productFamily->getBehaviorCountStock();
-
- foreach ($orderShop->getOrderProducts() as $orderProduct) {
- if ($orderProduct->getProduct()->getId() == $product->getId()
- || (($behaviorCountStock == ProductFamilyModel::BEHAVIOR_COUNT_STOCK_BY_PRODUCT_FAMILY || $behaviorCountStock == ProductFamilyModel::BEHAVIOR_COUNT_STOCK_BY_MEASURE)
- && $orderProduct->getProduct()->getProductFamily()->getId() == $productFamily->getId())) {
- if ($byWeight) {
- $quantity += $orderProduct->getQuantityOrder() * ($orderProduct->getQuantityProduct(
- ) / $orderProduct->getProduct()->getUnitInherited()->getCoefficient());
- } else {
- $quantity += $orderProduct->getQuantityOrder();
- }
- }
- }
-
- return $quantity;
- }
-
- public function getTotalOrderPayments(OrderShopInterface $orderShop, $mergeComplementaryOrderShop = false): float
- {
- $totalAmount = floatval(0);
- foreach ($orderShop->getOrderPayments() as $orderPayment) {
- $totalAmount = $orderPayment->getAmount() + $totalAmount;
- }
- if ($mergeComplementaryOrderShop) {
- foreach ($orderShop->getComplementaryOrderShops() as $complementaryOrderShop) {
- foreach ($complementaryOrderShop->getOrderPayments() as $orderPayment) {
- $totalAmount = $orderPayment->getAmount() + $totalAmount;
- }
- }
- }
-
- return $totalAmount;
- }
-
- public function getTotalRemainingToBePaid(OrderShopInterface $orderShop): float
- {
- return $this->priceSolver->getTotalWithTax($orderShop) - $this->getTotalOrderPayments($orderShop);
- }
-
- public function getOrderStatusHistory(OrderShopInterface $orderShop, OrderStatusInterface $status)
- {
- $orderStatusHistories = $orderShop->getOrderStatusHistories();
- if (count($orderStatusHistories) > 0) {
- foreach ($orderStatusHistories as $orderStatusHistory) {
- if ($orderStatusHistory->getOrderStatus() === $status) {
- return $orderStatusHistory;
- }
- }
- }
-
- return null;
- }
-
- public function getDocumentInvoice(OrderShopInterface $orderShop): ?DocumentInterface
- {
- foreach ($orderShop->getDocuments() as $document) {
- if ($document->getType() == DocumentModel::TYPE_INVOICE) {
- return $document;
- }
- }
-
- return null;
- }
-
- }
|