/** * @Route("/receive-stock", name="stock_notify", methods={"POST"}) * @param Request $request * @return Response * @internal param Request $request */ public function receiveStockAction(Request $request) { // Receber um title e um quantity $title = $request->get('title'); $quantity = $request->get('quantity'); if (!$title) { return new Response("Parameter 'title' not found ", 400); } else { if (!$quantity) { return new Response("Parameter 'quantity' not found ", 400); } } // Criar se necessario o livro $book = $this->get('doctrine_mongodb')->getRepository('AppBundle:Book')->findOneBy(['title' => $title]); if (!$book) { return new Response("Book {$book} not found", 400); } // Adicionar stock ao livro $book->stock += $quantity; $this->get('doctrine_mongodb')->getManager()->persist($book); $orders = $this->get('doctrine_mongodb')->getRepository('AppBundle:Order')->findBy(['title' => $title, 'state' => Order::WAITING_EXPEDITION]); // Se nao há orders pendentes (Waiting_expedition) if (count($orders) == 0) { return new JsonResponse([]); } /** @var Order $order */ foreach ($orders as $order) { if ($order->quantity <= $book->stock) { $book->stock -= $order->quantity; $order->state = Order::TO_BE_DISPATCHED; $this->get('doctrine_mongodb')->getManager()->persist($order); Email::orderReadyToBeDispatched($order); } if ($book->stock == 0) { break; } } $this->get('doctrine_mongodb')->getManager()->flush(); return new JsonResponse([]); }