src/Services/ForecastingManager.php line 73

Open in your IDE?
  1. <?php
  2. namespace App\Services;
  3. use App\Entity\Paper;
  4. use App\Repository\CustomerOrderItemRepository;
  5. use App\Repository\PaperStockGroupRepository;
  6. use App\Repository\ProviderOrderItemRepository;
  7. class ForecastingManager 
  8. {   
  9.     protected $paperStockGroupRepository;
  10.     protected $customerOrderItemRepository;
  11.     protected $providerOrderItemRepository;
  12.     public function __construct(PaperStockGroupRepository $paperStockGroupRepositoryCustomerOrderItemRepository $customerOrderItemRepositoryProviderOrderItemRepository $providerOrderItemRepository)
  13.     {   
  14.         $this->paperStockGroupRepository $paperStockGroupRepository;
  15.         $this->customerOrderItemRepository $customerOrderItemRepository;
  16.         $this->providerOrderItemRepository $providerOrderItemRepository;
  17.     }
  18.     public function updateOutOfStocks(Paper $paper, array $stockOrders) {
  19.         $outOfStockQuantity null;
  20.         $outOfStockAt null;
  21.         $lowestOutOfStockQuantity null;
  22.         $lowestOutOfStockAt null;
  23.         foreach ($stockOrders as $stock) {
  24.             $quantity $stock->getQuantity();
  25.             $date $stock->getStockDate();
  26.             $now = new \DateTimeImmutable();
  27.             if ($date $now$date $now;
  28.             if ($quantity $paper->getQuantityMin()) continue;
  29.             if (!$outOfStockQuantity) {
  30.                 $outOfStockQuantity $quantity;
  31.                 $outOfStockAt $date;
  32.             } elseif (!$lowestOutOfStockQuantity || $quantity $lowestOutOfStockQuantity) {
  33.                 $lowestOutOfStockQuantity $quantity;
  34.                 $lowestOutOfStockAt $date;
  35.             }
  36.                 
  37.         }
  38.         $paper->setOutOfStock$paper->getQuantity() <= $paper->getQuantityMin());
  39.         $paper->setOutOfStockAt($outOfStockAt);
  40.         $paper->setOutOfStockQuantity($outOfStockQuantity);
  41.         $paper->setLowestOutOfStockAt($lowestOutOfStockAt);
  42.         $paper->setLowestOutOfStockQuantity($lowestOutOfStockQuantity);
  43.     }
  44.     public function getStocks(Paper $paper, array $filters): array
  45.     {
  46.         $stocks = [];
  47.         $groups $this->paperStockGroupRepository->findForecasting($paper$filters);
  48.         if (count($groups)) $stocks[] = $groups[0]->getPaperStocks()->first();
  49.         for ($i 0$i count($groups); $i++) {
  50.             $previousQuantity $i == $stocks[$i]->getQuantityPrevious() : $stocks[$i]->getQuantityTmp();
  51.             $group $groups[$i];
  52.             $group->setQuantityTmp($previousQuantity $group->getQuantityMovement());
  53.             $stocks[] = $group;
  54.         }
  55.         return $stocks;
  56.     }
  57.     public function getStockOrders(Paper $paperint $previousQuantity, array $filters): array
  58.     {
  59.         $providerOrderItems $this->providerOrderItemRepository->findForecasting($paper$filters);
  60.         $customerOrderItems $this->customerOrderItemRepository->findForecasting($paper$filters);
  61.         $orders \array_merge($providerOrderItems$customerOrderItems);
  62.         usort($orders, function ($a$b) {
  63.             return $a->getStockDate() > $b->getStockdate();
  64.         });
  65.         // Parse orders into stocks
  66.         $stockOrders = [];
  67.         for ($i 0$i count($orders); $i++) {
  68.             $order $orders[$i];
  69.             if (!$order->getArchived()) {
  70.                 $order->setQuantityTmp($previousQuantity $order->getQuantityMovement());
  71.                 $previousQuantity $order->getQuantityTmp();
  72.             }
  73.             $stockOrders[] = $order;
  74.         }
  75.         return $stockOrders;
  76.     }
  77. }