Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

183 Zeilen
9.0KB

  1. <?php
  2. namespace Lc\ShopBundle\Services\Order;
  3. use Lc\ShopBundle\Context\OrderProductInterface;
  4. use Lc\ShopBundle\Model\Product;
  5. use Lc\ShopBundle\Model\ProductFamily;
  6. trait OrderUtilsStockTrait
  7. {
  8. public function deductAvailabilityProduct(\Lc\ShopBundle\Model\OrderShop $orderShop)
  9. {
  10. foreach ($orderShop->getOrderProducts() as $orderProduct) {
  11. //Si ce n'esrt pas une relivraison OU si c'est une relivraison + relivraison + ce n'est pas une erruer producteur
  12. if (!$orderProduct->isRedelivery() || ($orderProduct->isRedelivery() && $orderProduct->isRedeliverySupplierOrder() && !$orderProduct->isRedeliverySupplierMistake())) {
  13. switch ($orderProduct->getProduct()->getProductFamily()->getBehaviorCountStock()) {
  14. case ProductFamily::BEHAVIOR_COUNT_STOCK_BY_MEASURE :
  15. //Disponibilité par unité de référence
  16. $oldAvailability = $orderProduct->getProduct()->getAvailableQuantityInherited();
  17. $newAvailability = $oldAvailability - ($orderProduct->getQuantityOrder() * ($orderProduct->getQuantityProduct() / $orderProduct->getUnit()->getCoefficient()));
  18. $productFamily = $orderProduct->getProduct()->getProductFamily();
  19. $productFamily->setAvailableQuantity($newAvailability);
  20. $productFamily->setUpdatedBy($orderShop->getUser());
  21. $this->em->persist($productFamily);
  22. break;
  23. case ProductFamily::BEHAVIOR_COUNT_STOCK_BY_PRODUCT_FAMILY :
  24. $oldAvailability = $orderProduct->getProduct()->getAvailableQuantityInherited();
  25. $newAvailability = $oldAvailability - $orderProduct->getQuantityOrder();
  26. $productFamily = $orderProduct->getProduct()->getProductFamily();
  27. $productFamily->setAvailableQuantity($newAvailability);
  28. $productFamily->setUpdatedBy($orderShop->getUser());
  29. $this->em->persist($productFamily);
  30. break;
  31. case ProductFamily::BEHAVIOR_COUNT_STOCK_BY_PRODUCT :
  32. $oldAvailability = $orderProduct->getProduct()->getAvailableQuantityInherited();
  33. $newAvailability = $oldAvailability - $orderProduct->getQuantityOrder();
  34. $product = $orderProduct->getProduct();
  35. $product->setAvailableQuantity($newAvailability);
  36. $product->setUpdatedBy($orderShop->getUser());
  37. $this->em->persist($product);
  38. break;
  39. }
  40. $this->em->flush();
  41. }
  42. }
  43. }
  44. public function isProductAvailable(Product $product, $quantityOrder = 0, $checkCart = false, $orderShop = null)
  45. {
  46. if ($product->getStatus() != 1 || $product->getProductFamily()->getStatus() != 1 || $product->getProductFamily()->getSaleStatus()!=1) {
  47. return false;
  48. }
  49. $allCategoriesSalesOff = true;
  50. foreach ($product->getProductFamily()->getProductCategories() as $category){
  51. if($category->getSaleStatus())$allCategoriesSalesOff = false;
  52. }
  53. if($allCategoriesSalesOff)return false;
  54. if (!$orderShop) {
  55. $orderShop = $this->getCartCurrent();
  56. }
  57. $productFamily = $product->getProductFamily();
  58. $quantityAsked = $quantityOrder;
  59. if ($productFamily->getBehaviorCountStock() == ProductFamily::BEHAVIOR_COUNT_STOCK_BY_MEASURE) {
  60. if (!$quantityOrder) {
  61. $quantityAsked = $this->getQuantityOrderByProduct($orderShop, $product, true);
  62. } else {
  63. $quantityAsked = ($product->getQuantityInherited() / $product->getUnitInherited()->getCoefficient()) * $quantityOrder;
  64. }
  65. if ($checkCart) {
  66. $quantityAsked += $this->getQuantityOrderByProduct($orderShop, $product, true);
  67. }
  68. }
  69. if (($productFamily->getBehaviorCountStock() == ProductFamily::BEHAVIOR_COUNT_STOCK_BY_PRODUCT_FAMILY
  70. || $productFamily->getBehaviorCountStock() == ProductFamily::BEHAVIOR_COUNT_STOCK_BY_PRODUCT)) {
  71. if (!$quantityOrder) {
  72. $quantityAsked = $this->getQuantityOrderByProduct($orderShop, $product);
  73. }
  74. if ($checkCart) {
  75. $quantityAsked += $this->getQuantityOrderByProduct($orderShop, $product);
  76. }
  77. }
  78. if ($product->getAvailableQuantityInherited() >= $quantityAsked
  79. || $productFamily->getBehaviorCountStock() == ProductFamily::BEHAVIOR_COUNT_STOCK_UNLIMITED) {
  80. return true;
  81. } else {
  82. return false;
  83. }
  84. }
  85. public function isOneProductAvailableAddCart($products): bool
  86. {
  87. foreach ($products as $product) {
  88. if ($this->isProductAvailable($product, 1, true)) {
  89. return true;
  90. }
  91. }
  92. return false;
  93. }
  94. public function isOrderProductAvailable(OrderProductInterface $orderProduct)
  95. {
  96. return $this->isProductAvailable($orderProduct->getProduct(), $orderProduct->getQuantityOrder());
  97. }
  98. public function isOrderProductAvailableAddCart(OrderProductInterface $orderProduct, $orderShop = null)
  99. {
  100. $product = $orderProduct->getProduct();
  101. return $this->isProductAvailable($product, $orderProduct->getQuantityOrder(), true, $orderShop);
  102. }
  103. public function getQuantityOrderByProduct($orderShop, $product, $byWeight = false)
  104. {
  105. $quantity = 0;
  106. $productFamily = $product->getProductFamily();
  107. $behaviorCountStock = $productFamily->getBehaviorCountStock();
  108. if ($orderShop) {
  109. foreach ($orderShop->getOrderProducts() as $orderProduct) {
  110. if ($orderProduct->getProduct()->getId() == $product->getId()
  111. || (($behaviorCountStock == ProductFamily::BEHAVIOR_COUNT_STOCK_BY_PRODUCT_FAMILY || $behaviorCountStock == ProductFamily::BEHAVIOR_COUNT_STOCK_BY_MEASURE)
  112. && $orderProduct->getProduct()->getProductFamily()->getId() == $productFamily->getId())) {
  113. if ($byWeight) {
  114. $quantity += $orderProduct->getQuantityOrder() * ($orderProduct->getQuantityProduct() / $orderProduct->getProduct()->getUnitInherited()->getCoefficient());
  115. } else {
  116. $quantity += $orderProduct->getQuantityOrder();
  117. }
  118. }
  119. }
  120. }
  121. return $quantity;
  122. }
  123. public function getProductQuantityMaxAddCart($product)
  124. {
  125. $orderShop = $this->getCartCurrent();
  126. $productFamily = $product->getProductFamily();
  127. $byWeight = false;
  128. if ($productFamily->getBehaviorCountStock() == ProductFamily::BEHAVIOR_COUNT_STOCK_BY_MEASURE) {
  129. $byWeight = true;
  130. }
  131. return $product->getAvailableQuantityInherited() - $this->getQuantityOrderByProduct($orderShop, $product, $byWeight);
  132. }
  133. public function getProductQuantity($product)
  134. {
  135. $productFamily = $product->getProductFamily();
  136. if ($productFamily->getBehaviorCountStock() == ProductFamily::BEHAVIOR_COUNT_STOCK_BY_MEASURE) {
  137. return $product->getQuantityInherited() / $product->getUnitInherited()->getCoefficient();
  138. } else {
  139. return 1;
  140. }
  141. }
  142. }