src/WebserviceBundle/Controller/Wms/Production/ProductionorderController.php line 80

Open in your IDE?
  1. <?php
  2. namespace WebserviceBundle\Controller\Wms\Production;
  3. use FOS\RestBundle\Controller\Annotations as FOS;
  4. use FOS\RestBundle\Controller\Annotations\QueryParam;
  5. use FOS\RestBundle\Request\ParamFetcher;
  6. use FOS\RestBundle\Routing\ClassResourceInterface;
  7. use FOS\RestBundle\Util\Codes;
  8. use FOS\RestBundle\View\View;
  9. use Symfony\Component\HttpFoundation\Request;
  10. use Symfony\Component\HttpFoundation\Response;
  11. use Symfony\Component\HttpFoundation\StreamedResponse;
  12. use WebserviceBundle\Controller\WmsController;
  13. use WebserviceBundle\Forms\ExportableType;
  14. use WebserviceBundle\Forms\ExportLocationsType;
  15. use WebserviceBundle\Forms\Production\ProductionOrderType;
  16. use WebserviceBundle\Response\SingleProductionOrderResponse;
  17. use WebserviceBundle\Security\WmsVoter;
  18. use WebserviceBundle\Forms\Production\UpdateProductionOrderType;
  19. use WmsBundle\Doctrine\Interfaces\ExportableInterface;
  20. use WmsBundle\Doctrine\Interfaces\Production\ProductionOrderInterface;
  21. use WmsBundle\Entity\Production\ProductionOrder;
  22. use WmsBundle\Services\Entity\PrinterService;
  23. use WmsBundle\Services\Entity\Production\ProductionOrderService;
  24. use WmsBundle\Services\FileService;
  25. use WmsBundle\Services\ImageService;
  26. use WmsBundle\States\ProductionOrder\CompletedState;
  27. use WmsBundle\States\ProductionOrder\ProductionOrderStateInterface;
  28. /**
  29.  * Class ProductionOrderController
  30.  * @FOS\View(serializerEnableMaxDepthChecks=true)
  31.  *
  32.  * @package WmsBundle\Controller
  33.  */
  34. class ProductionorderController extends WmsController implements ClassResourceInterface
  35. {
  36.     /**
  37.      * Get all orders
  38.      * @QueryParam(name="search", description="Search term to look for")
  39.      * @QueryParam(name="sort", description="Sort production orders")
  40.      * @QueryParam(name="customer", description="Customer to look for")
  41.      * @QueryParam(name="customer_code", description="Customer to look for")
  42.      * @QueryParam(name="reference", description="internal reference to look for")
  43.      * @QueryParam(name="relation", description="Relation to look for")
  44.      * @QueryParam(name="show_active", description="Show completed/cancelled production orders")
  45.      * @QueryParam(name="external_reference", description="external reference to look for")
  46.      * @QueryParam(name="status", description="Order status")
  47.      *
  48.      * @param ParamFetcher $params
  49.      *
  50.      * @return View
  51.      */
  52.     public function cgetAction(ParamFetcher $params): View
  53.     {
  54.         $service $this->get(ProductionOrderService::class);
  55.         /** @var ProductionOrderInterface[] $productionOrders */
  56.         $productionOrders $service->getByProperties($params->all());
  57.         return $this->groupedView($productionOrders, ['production_orders''production_issues''production_order_state_logs']);
  58.     }
  59.     /**
  60.      * @param ProductionOrder $productionOrder
  61.      * @return View
  62.      */
  63.     public function getAction(ProductionOrder $productionOrder): View
  64.     {
  65.         /** @var ProductionOrderService $service */
  66.         $service $this->get(ProductionOrderService::class);
  67.         $productionOrderResponse = new SingleProductionOrderResponse($productionOrder$service);
  68.         return $this->groupedView($productionOrderResponse, ['production_orders''production_order_lines''location']);
  69.     }
  70.     /**
  71.      * @param Request $request
  72.      * @return View
  73.      */
  74.     public function postAction(Request $request): View
  75.     {
  76.         /** @var ProductionOrderService $service */
  77.         $service $this->get(ProductionOrderService::class);
  78.         /** @var ProductionOrderInterface $productionOrder */
  79.         $productionOrder $service->new();
  80.         $form $this->createForm(
  81.             ProductionOrderType::class,
  82.             $productionOrder,
  83.             ['method' => 'POST']
  84.         );
  85.         $form->handleRequest($request);
  86.         if (!$form->isValid()) {
  87.             return $this->view($form->getErrors(), Codes::HTTP_BAD_REQUEST);
  88.         }
  89.         $productionOrder $service->create($productionOrder);
  90.         if (!$productionOrder) {
  91.             return $this->view(nullCodes::HTTP_BAD_REQUEST);
  92.         }
  93.         return $this->groupedView($productionOrder, ['production_order''production_order_lines'], Codes::HTTP_CREATED);
  94.     }
  95.     /**
  96.      * @param Request         $request
  97.      * @param ProductionOrder $productionOrder
  98.      * @return View
  99.      * @throws \Exception
  100.      */
  101.     public function patchAction(Request $requestProductionOrder $productionOrder): View
  102.     {
  103.         /** @var ProductionOrderService $service */
  104.         $service $this->get(ProductionOrderService::class);
  105.         $form $this->createForm(
  106.             UpdateProductionOrderType::class,
  107.             $productionOrder,
  108.             ['method' => 'PATCH']
  109.         );
  110.         $form->handleRequest($request);
  111.         if (!$form->isValid()) {
  112.             return $this->view($form->getErrors(), Response::HTTP_BAD_REQUEST);
  113.         }
  114.         $service->update($productionOrder->getId(), $productionOrder);
  115.         return $this->groupedView($productionOrder);
  116.     }
  117.     /**
  118.      * @param ProductionOrder $productionOrder
  119.      * @return View
  120.      */
  121.     public function putTransferAction(ProductionOrder $productionOrder): View
  122.     {
  123.         /** @var ProductionOrderService $service */
  124.         $service $this->get(ProductionOrderService::class);
  125.         $service->transfer($productionOrder);
  126.         return $this->groupedView($productionOrder, ['production_order']);
  127.     }
  128.     /**
  129.      * @param ProductionOrder $productionOrder
  130.      * @return View
  131.      */
  132.     public function completeAction(ProductionOrder $productionOrder): View
  133.     {
  134.         $service $this->get(ProductionOrderService::class);
  135.         $service->complete($productionOrder);
  136.         return $this->groupedView($productionOrder, ['production_orders''production_order_lines']);
  137.     }
  138.     public function postPrintAction(Request $requestProductionOrder $productionOrder)
  139.     {
  140.         if ($productionOrder->getStatus()->getName() !== CompletedState::NAME) {
  141.             return $this->view(nullCodes::HTTP_BAD_REQUEST);
  142.         }
  143.         $form $this->createForm(ExportableType::class, null, ['method' => 'POST',]);
  144.         $form->handleRequest($request);
  145.         /** @var PrinterService $printerService */
  146.         $printerService $this->get('wms.services.printer');
  147.         /** @var $productionOrderService $productionOrderService */
  148.         $productionOrderService $this->get(ProductionOrderService::class);
  149.         $locations $productionOrderService->getLocationsAtProductionLocation($productionOrder);
  150.         $printer $form->getData()['printer'];
  151.         try {
  152.             $files = [];
  153.             foreach ($locations as $location) {
  154.                $files[] = $printerService->download($printer$location'label'1);
  155.             }
  156.             /** @var string $file contains PDF */
  157.             $file $this->get(FileService::class)->mergePdfFiles($files);
  158.             $pdf $printerService->download($printer$file);
  159.         } catch (PrintException $e) {
  160.             return $this->view(['error' => $e->getMessage(),], Codes::HTTP_INTERNAL_SERVER_ERROR);
  161.         }
  162.         return $this->streamedFileView($pdf);
  163.     }
  164.     public function getLocationsAction(Request $requestProductionOrder $productionOrder)
  165.     {
  166.         if ($productionOrder->getStatus()->getName() !== CompletedState::NAME) {
  167.             return $this->view(nullCodes::HTTP_BAD_REQUEST);
  168.         }
  169.         /** @var $productionOrderService $productionOrderService */
  170.         $productionOrderService $this->get(ProductionOrderService::class);
  171.         $locations $productionOrderService->getLocationsAtProductionLocation($productionOrder);
  172.         return $this->groupedView($locations, ['location']);
  173.     }
  174.     /**
  175.      * @param Request         $request
  176.      * @param ProductionOrder $productionOrder
  177.      * @return View
  178.      */
  179.     public function putCancelAction(Request $requestProductionOrder $productionOrder): View
  180.     {
  181.         $service $this->get(ProductionOrderService::class);
  182.         $note $request->request->get('note');
  183.         $productionOrder $service->cancel($productionOrder$note);
  184.         if (!$productionOrder) {
  185.             return $this->view(nullCodes::HTTP_CONFLICT);
  186.         }
  187.         return $this->groupedView($productionOrder, ['production_order']);
  188.     }
  189.     /**
  190.      * @param ProductionOrder $productionOrder
  191.      * @return StreamedResponse
  192.      */
  193.     public function getBarcodeAction(ProductionOrder $productionOrder): StreamedResponse
  194.     {
  195.         /** @var ImageService $service */
  196.         $service $this->get('wms.common.image');
  197.         return $this->streamedFileView(
  198.             $service->getBarcodeForExportable($productionOrder),
  199.             $productionOrder->getFullReference(),
  200.             ExportableInterface::RESPONSE_IMAGE
  201.         );
  202.     }
  203.     /**
  204.      * @FOS\Put("/productionOrders/{id}/start")
  205.      * @param $id
  206.      * @return View
  207.      */
  208.     public function putStartAction(ProductionOrder $productionOrder)
  209.     {
  210.         $this->denyAccessUnlessGranted(WmsVoter::BOTH);
  211.         $service $this->get(ProductionOrderService::class);
  212.         $result $service->startProgress($productionOrder);
  213.         return $this->view(null204);
  214.     }
  215. }