custom/plugins/wosoBulkOrder/src/Controller/bulkOrderStorefrontController.php line 38

Open in your IDE?
  1. <?php
  2. namespace wosoBulkOrder\Controller;
  3. use Shopware\Core\Framework\Routing\Annotation\RouteScope;
  4. use Shopware\Core\System\SalesChannel\SalesChannelContext;
  5. use Shopware\Storefront\Controller\StorefrontController;
  6. use Symfony\Component\HttpFoundation\Response;
  7. use Symfony\Component\Routing\Annotation\Route;
  8. use Symfony\Component\HttpFoundation\Request;
  9. use Shopware\Storefront\Page\GenericPageLoader;
  10. use Shopware\Storefront\Page\Product\ProductPage;
  11. use wosoBulkOrder\Entity\bulkorderEntity;
  12. use wosoBulkOrder\Service\bulkorderDataService;
  13. use Symfony\Component\HttpFoundation\JsonResponse;
  14. use Shopware\Core\Framework\Routing\Exception\MissingRequestParameterException;
  15. use wosoBulkorder\Exception\BulkorderNotFoundException;
  16. use Symfony\Component\HttpFoundation\File\Exception\AccessDeniedException;
  17. /**
  18.  * @RouteScope(scopes={"storefront"})
  19.  */
  20. class bulkOrderStorefrontController extends \Shopware\Storefront\Controller\StorefrontController
  21. {
  22.     const extAccessToken '068707119324472397519469e8b4b643';
  23.     const extAccessIPs = [];
  24.     protected $genericPageLoader;
  25.     protected $bulkorderDataService;
  26.     public function __construct(
  27.         GenericPageLoader $genericPageLoader,
  28.         bulkorderDataService $bulkorderDataService
  29.     ) {
  30.         $this->genericPageLoader $genericPageLoader;
  31.         $this->bulkorderDataService $bulkorderDataService;
  32.     }
  33.     /**
  34.      * generates List of bulk orders for current logged-in customer.
  35.      * standard-endpoint for bulk-order-account-module
  36.      * @Route("/getBulkOrders", name="frontend.wosoBulkOrder.getBulkOrderList", methods={"GET"})
  37.      */
  38.     public function getBulkOrders(Request $requestSalesChannelContext $context): Response
  39.     {
  40.         $customer $context->getCustomer();
  41.         if ($customer === null || $customer->getGuest() === true) {
  42.             $parameters=['redirectTo'=>'frontend.wosoBulkOrder.getBulkOrderList'];
  43.             return $this->redirectToRoute('frontend.account.login.page'$parameters);
  44.         }
  45.         $page $this->genericPageLoader->load($request$context);
  46.         $itemList $this->bulkorderDataService->getBulkOrderByCustomerID($customer->getId(), $context, ($this->bulkorderDataService::C_BO_ENRICH_GROUPS $this->bulkorderDataService::C_BO_ENRICH_PRODUCTS) );
  47.         return $this->renderStorefront('@wosoBulkOrder/storefront/page/account/bulk-order-main.html.twig', [
  48.             'page' => $page,
  49.             'wosoBulkOrderData' => [
  50.                 'orderList' => $itemList,
  51.                 'orderListCount' => $itemList->getTotal()
  52.             ]
  53.         ]);
  54.     }
  55.     /**
  56.      * generates List of bulk orders for current logged-in customer.
  57.      * standard-endpoint for bulk-order-account-module
  58.      * @Route("/getBulkorderDetail/{id}", name="frontend.wosoBulkOrder.getDetailData", methods={"GET"}, options={"seo"="false"}, defaults={"XmlHttpRequest"=true})
  59.      */
  60.     public function getBulkorderDetail(Request $requestSalesChannelContext $context) {
  61.         $bulkorderId = (string) $request->get('id');
  62.         if ($bulkorderId === '') {
  63.             throw new MissingRequestParameterException('id');
  64.         }
  65.         $bulkorder $this->bulkorderDataService->getBulkOrderByID($bulkorderId$context );
  66.         if (!$bulkorder) {
  67.             throw new BulkorderNotFoundException("Bulkorder $bulkorderId not found");
  68.         }
  69.         $customerIsOwner $this->bulkorderDataService->hasAccessToBulkorder($bulkorder$context);
  70.         if (! ($customerIsOwner)) {
  71.             throw new AccessDeniedException($bulkorderId);
  72.         }
  73.         var_dump($bulkorder);
  74.     }
  75.     /**
  76.      * sets up the array of formfields for bulkorder-input
  77.      * returns an array of fields->parameters/values
  78.      * @param array|null $values - predefined values
  79.      * @return array|array[]
  80.      */
  81.     private function getBulkorderFormFields(?array $values) : array {
  82.         $result = [
  83.             'id' => ['type' => 'string''value'=>'''mandatory'=>1'errorMsg' => '''isError'=>0],
  84.             'title' => ['type' => 'string''value'=>'''mandatory'=>1'errorMsg' => '''isError'=>0],
  85.             'descr' => ['type' => 'text''value'=>'''mandatory'=>0'errorMsg' => '''isError'=>0],
  86.             'shippingTogether' => ['type' => 'intbool''value'=>0'mandatory'=>0'errorMsg' => '''isError'=>0],
  87.             'packagePerMember' => ['type' => 'intbool''value'=>0'mandatory'=>0'errorMsg' => '''isError'=>0],
  88.             'members' => ['type' => 'int''value'=>0'mandatory'=>0'errorMsg' => '''isError'=>0],
  89.             'paymentDate1' => ['type' => 'date''value'=>0'mandatory'=>0'errorMsg' => '''isError'=>0],
  90.             'paymentDate2' => ['type' => 'date''value'=>0'mandatory'=>0'errorMsg' => '''isError'=>0],
  91.             'fulfillmentDate' => ['type' => 'date''value'=>0'mandatory'=>0'errorMsg' => '''isError'=>0],
  92.             'parentId' => ['type' => 'string''value'=>null'mandatory'=>0'errorMsg' => '''isError'=>0],
  93.             'parentCode' => ['type' => 'string''value'=>'''mandatory'=>0'errorMsg' => '''isError'=>0]
  94.             ];
  95.         if (!is_null($values)) {
  96.             if (isset($values['id'])) { $result['id']['value'] = $values['id']; }
  97.             if (!empty($values['title'])) { $result['title']['value'] = $values['title']; }
  98.             if (!empty($values['descr'])) { $result['descr']['value'] = $values['descr']; }
  99.             if (isset($values['shippingTogether'])) { $result['shippingTogether']['value'] = intval($values['shippingTogether']); }
  100.             if (isset($values['packagePerMember'])) { $result['packagePerMember']['value'] = intval($values['packagePerMember']); }
  101.             if (isset($values['paymentDate1'])) { $result['paymentDate1']['value'] = $values['paymentDate1']; }
  102.             if (isset($values['paymentDate2'])) { $result['paymentDate2']['value'] = $values['paymentDate2']; }
  103.             if (isset($values['fulfillmentDate'])) { $result['fulfillmentDate']['value'] = $values['fulfillmentDate']; }
  104.             if (isset($values['members'])) { $result['members']['value'] = $values['members']; }
  105.             if (isset($values['parentId'])) { $result['parentId']['value'] = $values['parentId']; }
  106.             if (isset($values['parentCode'])) { $result['parentCode']['value'] = $values['parentCode']; }
  107.         }
  108.         return $result;
  109.     }
  110.     private function checkBulkorderUpdateInputValues(array &$inputsint $chkType=1) : int {
  111.         $result 1;
  112.         if (trim($inputs['title']['value'])=='') {
  113.             $result=-1;
  114.             $inputs['title']['isError'] = 1;
  115.             $inputs['title']['errorMsg'] = 'Title is mandatory';
  116.         }
  117.         if ($chkType==2) {
  118.             if (!empty($inputs['members']['value'])) { $inputs['members']['value'] = (int) $inputs['members']['value']; }
  119.             if ((int) ($inputs['members']['value']) < 0) {
  120.                 $result=-1;
  121.                 $inputs['members']['isError'] = 1;
  122.                 $inputs['members']['errorMsg'] = 'members is mandatory and should be > 0';
  123.             }
  124.         }
  125.         return $result;
  126.     }
  127.     private function getFormFieldsFromBulkorderEditRequest(Request $request$chkType=1string $parentId=''string $parentCode='') : array {
  128.         $v=[
  129.             'id' => $request->get('id'''),
  130.             'title' => $request->get('title'''),
  131.             'descr' => $request->get('descr'''),
  132.             'paymentDate1' => $request->get('paymentDate1'0),
  133.             'paymentDate2' => $request->get('paymentDate2'0),
  134.             'fulfillmentDate' => $request->get('fulfillmentDate'0),
  135.             'shippingTogether' => $request->get('shippingTogether'0),
  136.             'packagePerMember' => $request->get('packagePerMember'0),
  137.         ];
  138.         if ($chkType==2) {
  139.             $v['members'] = $request->get('members'0);
  140.             $v['parentId'] = $parentId;
  141.             $v['parentCode'] = $parentCode;
  142.         }
  143.         return $this->getBulkorderFormFields($v);
  144.     }
  145.     /**
  146.      * Update a bulkorder
  147.      *
  148.      * @Route(
  149.      *     "/bulkorder/updateBulkorder",
  150.      *     name="frontend.wosoBulkOrder.updateBulkorder",
  151.      *     options={"seo"="false"}, methods={"POST"}
  152.      * )
  153.      *
  154.      * @param Request $request
  155.      * @param SalesChannelContext $context
  156.      *
  157.      * @return Response
  158.      *
  159.      * @throws InconsistentCriteriaIdsException
  160.      */
  161.     public function updateBulkorder(Request $requestSalesChannelContext $context): Response
  162.     {
  163.         $customer $context->getCustomer();
  164.         if ($customer === null || $customer->getGuest() === true) {
  165.             $parameters=['redirectTo'=>'frontend.wosoBulkOrder.getBulkOrderList'];
  166.             return $this->redirectToRoute('frontend.account.login.page'$parameters);
  167.         }
  168.         $bulkorderId = (string) $request->get('id');
  169.         if ($bulkorderId === '') {
  170.             $doCreate = (int) $request->get('doCreate');
  171.             $ajax = (int) $request->get('ajax');
  172.             if ($doCreate == 1) {
  173.                 $formfields $this->getFormFieldsFromBulkorderEditRequest($request);
  174.                 $error $this->checkBulkorderUpdateInputValues($formfields);
  175.                 if ($error 0) {
  176.                     $this->bulkorderDataService->createBulkOrderFromFormFields($context$formfields$context->getSalesChannelId());
  177.                     $this->addFlash('success'$this->trans('wosoBulkOrder.account.forms.bulkorderMainForm.msg.update.success'));
  178.                 } else {
  179.                     $this->addFlash('danger'$this->trans('wosoBulkOrder.account.forms.bulkorderMainForm.msg.update.error'));
  180.                 }
  181.                 return $this->redirectToRoute('frontend.wosoBulkOrder.getBulkOrderList');
  182.             } else {
  183.                 throw new MissingRequestParameterException('id');
  184.             }
  185.         }
  186.         $bulkorder $this->bulkorderDataService->getBulkOrderByID($bulkorderId$context);
  187.         if (!$bulkorder) {
  188.             throw new BulkorderNotFoundException("Bulkorder $bulkorderId not found");
  189.         }
  190.         $formfields $this->getFormFieldsFromBulkorderEditRequest($request);
  191.         $error $this->checkBulkorderUpdateInputValues($formfields);
  192.         if ($error 0) {
  193.             $this->bulkorderDataService->updateBulkOrderFromFormFields($context$formfields$context->getSalesChannelId());
  194.             $this->addFlash('success'$this->trans('wosoBulkOrder.account.forms.bulkorderMainForm.msg.update.success'));
  195.         } else {
  196.             $this->addFlash('danger'$this->trans('wosoBulkOrder.account.forms.bulkorderMainForm.msg.update.error'));
  197.         }
  198.         return $this->redirectToRoute('frontend.wosoBulkOrder.getBulkOrderList');
  199.     }
  200.     /**
  201.      * request to remove a bulkorder
  202.      *
  203.      * @Route("/bulkorder/requestRemoveBulkorder/{bulkorderId}", name="frontend.wosoBulkOrder.requestRemoveBulkorder", methods={"GET"})
  204.      *
  205.      * @param string $bulkorderId
  206.      * @param Request $request
  207.      * @param SalesChannelContext $context
  208.      * @return Response
  209.      * @throws InconsistentCriteriaIdsException
  210.      * @throws BulkorderNotFoundException
  211.      */
  212.     public function requestRemoveBulkorder(string $bulkorderIdRequest $requestSalesChannelContext $context): Response
  213.     {
  214.         $bulkorder $this->bulkorderDataService->getBulkorderById($bulkorderId$context);
  215.         if (!$bulkorder) {
  216.             throw new BulkorderNotFoundException($bulkorderId);
  217.         }
  218.         if ($this->bulkorderDataService->hasAccessToBulkorder($bulkorder$contexttrue)) {
  219.             return $this->renderStorefront('@wosoBulkOrder/storefront/page/account/component/bulk-order-requestdelete.html.twig', [
  220.                 'bulkorder' => $bulkorder
  221.             ]);
  222.         } else {
  223.             $this->addFlash('danger'$this->trans('wosoBulkOrder.account.forms.bulkorderMainForm.msg.userNotallowed'));
  224.         }
  225.         return $this->redirectToRoute('frontend.wosoBulkOrder.getBulkOrderList');
  226.     }
  227.     /**
  228.      * Removes a bulkorder
  229.      *
  230.      * @Route("/bulkorder/removeBulkorder/{bulkorderId}", name="frontend.wosoBulkOrder.removeBulkorder", methods={"GET"})
  231.      *
  232.      * @param string $bulkorderId
  233.      * @param Request $request
  234.      * @param SalesChannelContext $context
  235.      * @return Response
  236.      * @throws InconsistentCriteriaIdsException
  237.      * @throws BulkorderNotFoundException
  238.      */
  239.     public function removeBulkorder(string $bulkorderIdRequest $requestSalesChannelContext $context): Response
  240.     {
  241.         $bulkorder $this->bulkorderDataService->getBulkorderById($bulkorderId$context);
  242.         if (!$bulkorder) {
  243.             throw new BulkorderNotFoundException($bulkorderId);
  244.         }
  245.         if ($this->bulkorderDataService->hasAccessToBulkorder($bulkorder$contexttrue)) {
  246.             $this->bulkorderDataService->removeBulkOrder($bulkorder,  $context);
  247.             $this->addFlash('success'$this->trans('wosoBulkOrder.account.forms.bulkorderMainForm.msg.remove.success'));
  248.         } else {
  249.             $this->addFlash('danger'$this->trans('wosoBulkOrder.account.forms.bulkorderMainForm.msg.userNotallowed'));
  250.         }
  251.         return $this->redirectToRoute('frontend.wosoBulkOrder.getBulkOrderList');
  252.     }
  253.     /**
  254.      * generates Edit-Output to change bulkorder-maininfo
  255.      * @Route("/bulkorder/editBulkorderModal/{bulkorderId}", name="frontend.wosoBulkOrder.editBulkOrderModal", methods={"GET"})
  256.      * @param string $bulkorderId
  257.      * @param Request $request
  258.      * @param SalesChannelContext $context
  259.      *
  260.      */
  261.     public function editBulkOrderModal(string $bulkorderIdRequest $requestSalesChannelContext $context): Response
  262.     {
  263.         $bulkorder $this->bulkorderDataService->getBulkorderById($bulkorderId$context);
  264.         if (!$bulkorder) {
  265.             throw new BulkorderNotFoundException($bulkorderId);
  266.         }
  267.         if ($this->bulkorderDataService->hasAccessToBulkorder($bulkorder$contexttrue)) {
  268.             return $this->renderStorefront('@wosoBulkOrder/storefront/page/account/component/bulk-order-mainform.html.twig', [
  269.                 'bulkorder' => $bulkorder,
  270.                 'doCreate' => 0
  271.             ]);
  272.         } else {
  273.             throw new AccessDeniedException($bulkorderId);
  274.         }
  275.     }
  276.     /**
  277.      * generates List of Products of bulkorder for editing in account
  278.      * @Route("/bulkorder/editBulkorderProductsModal/{bulkorderId}", name="frontend.wosoBulkOrder.editBulkOrderProductsModal", methods={"GET"})
  279.      * @param string $bulkorderId
  280.      * @param Request $request
  281.      * @param SalesChannelContext $context
  282.      *
  283.      */
  284.     public function editBulkOrderProductsModal(string $bulkorderIdRequest $requestSalesChannelContext $context): Response
  285.     {
  286.         $bulkorder $this->bulkorderDataService->getBulkorderById($bulkorderId$context$this->bulkorderDataService::C_BO_ENRICH_PRODUCTS);
  287.         if (!$bulkorder) {
  288.             throw new BulkorderNotFoundException($bulkorderId);
  289.         }
  290.         if (!$this->bulkorderDataService->hasAccessToBulkorder($bulkorder$contexttrue)) {
  291.             throw new AccessDeniedException($bulkorderId);
  292.         }
  293.         $wosoBulkorderData = ['productListCount'=>0'productList'=>[]];
  294.         $prodIdList $this->bulkorderDataService->getProductIDsFromBulkorder($bulkorder);
  295.         if (!empty($prodIdList)) {
  296.             $prodList $this->bulkorderDataService->getBOProductListByIds($prodIdList$context);
  297.             $wosoBulkorderData['productList'] = $prodList;
  298.             $wosoBulkorderData['productListCount'] = count($prodList);
  299.         }
  300.         /*product-add-to-cart-test
  301.         foreach ($bulkorder->getProducts() as $boProduct) {
  302.             $this->bulkorderDataService->addProductToCart($bulkorder->getCode(), $boProduct, $context, 1);
  303.         }
  304.         */
  305.         return $this->renderStorefront('@wosoBulkOrder/storefront/page/account/component/product-editform.html.twig', [
  306.             'bulkorder' => $bulkorder,
  307.             'wosoBulkOrderData' => $wosoBulkorderData
  308.         ]);
  309.     }
  310.     /**
  311.      * shows data to finish bulkorder-process
  312.      * @Route("/bulkorder/finishBulkorderModal/{bulkorderId}", name="frontend.wosoBulkOrder.finishBulkOrderModal", methods={"GET"})
  313.      * @param string $bulkorderId
  314.      * @param Request $request
  315.      * @param SalesChannelContext $context
  316.      *
  317.      */
  318.     public function finishBulkOrderModal(string $bulkorderIdRequest $requestSalesChannelContext $context): Response
  319.     {
  320.         $bulkorder $this->bulkorderDataService->getBulkorderById($bulkorderId$context$this->bulkorderDataService::C_BO_ENRICH_PRODUCTS $this->bulkorderDataService::C_BO_ENRICH_GROUPS);
  321.         if (!$bulkorder) {
  322.             throw new BulkorderNotFoundException($bulkorderId);
  323.         }
  324.         if (!$this->bulkorderDataService->hasAccessToBulkorder($bulkorder$contexttrue)) {
  325.             throw new AccessDeniedException($bulkorderId);
  326.         }
  327.         $wosoBulkorderData = ['productListCount'=>0'productList'=>[]];
  328.         $prodIdList $this->bulkorderDataService->getProductIDsFromBulkorder($bulkorder);
  329.         if (!empty($prodIdList)) {
  330.             $prodList $this->bulkorderDataService->getBOProductListByIds($prodIdList$context);
  331.             $pl = [];
  332.             foreach ($prodList as $prod) {
  333.                 $pl[$prod->getId()] = $prod;
  334.             }
  335.             $this->bulkorderDataService->setPricesToBulkorderProducts($bulkorder$pl$context);
  336.             $wosoBulkorderData['productList'] = $pl;
  337.             $wosoBulkorderData['productListCount'] = count($pl);
  338.         }
  339.         return $this->renderStorefront('@wosoBulkOrder/storefront/page/account/component/finish-form.html.twig', [
  340.             'bulkorder' => $bulkorder,
  341.             'wosoBulkOrderData' => $wosoBulkorderData
  342.         ]);
  343.     }
  344.     /**
  345.      * executes the finish bulkorder-process data
  346.      * @Route("/bulkorder/finishBulkorderExecute", name="frontend.wosoBulkOrder.finishBulkOrderExecute", methods={"POST"})
  347.      * @param Request $request
  348.      * @param SalesChannelContext $context
  349.      *
  350.      */
  351.     public function finishBulkOrderExecute(Request $requestSalesChannelContext $context): Response
  352.     {
  353.         $bulkorderId = (string) $request->get('id');
  354.         $bulkorder $this->bulkorderDataService->getBulkorderById($bulkorderId$context$this->bulkorderDataService::C_BO_ENRICH_PRODUCTS $this->bulkorderDataService::C_BO_ENRICH_GROUPS);
  355.         if (!$bulkorder) {
  356.             throw new BulkorderNotFoundException($bulkorderId);
  357.         }
  358.         if (!$this->bulkorderDataService->hasAccessToBulkorder($bulkorder$contexttrue)) {
  359.             throw new AccessDeniedException($bulkorderId);
  360.         }
  361.         if ($bulkorder->isReadyToFinish() <= 0) {
  362.             $this->addFlash('danger'$this->trans('wosoBulkOrder.account.forms.finishForm.msg.update.errorNotReady'));
  363.             return $this->redirectToRoute('frontend.wosoBulkOrder.getBulkOrderList');
  364.         }
  365.         $wosoBulkorderData = ['productListCount'=>0'productList'=>[]];
  366.         $prodIdList $this->bulkorderDataService->getProductIDsFromBulkorder($bulkorder);
  367.         if (empty($prodIdList)) {
  368.             $this->addFlash('danger'$this->trans('wosoBulkOrder.account.forms.finishForm.msg.update.errorNotReady'));
  369.             return $this->redirectToRoute('frontend.wosoBulkOrder.getBulkOrderList');
  370.         }
  371.         if ($this->bulkorderDataService->hasAccessToBulkorder($bulkorder$contexttrue)) {
  372.             $setState $this->bulkorderDataService::C_BO_STATUS_ACTIVATED;
  373.             $flashInfo $this->trans('wosoBulkOrder.account.forms.finishForm.msg.activate.success');
  374.             if ($bulkorder->getStatus() >= $this->bulkorderDataService::C_BO_STATUS_ACTIVATED) {
  375.                 $setState $this->bulkorderDataService::C_BO_STATUS_DEACTIVATED;
  376.                 $flashInfo $this->trans('wosoBulkOrder.account.forms.finishForm.msg.deactivate.success');
  377.             }
  378.             $this->bulkorderDataService->updateBulkorderStatus($bulkorder$setState$context);
  379.             $this->addFlash('success'$flashInfo);
  380.         } else {
  381.             $this->addFlash('danger'$this->trans('wosoBulkOrder.account.forms.finishForm.msg.userNotallowed'));
  382.         }
  383.         return $this->redirectToRoute('frontend.wosoBulkOrder.getBulkOrderList');
  384.     }
  385.     /**
  386.      * removes product-item from bulkorder-list in account-mode
  387.      * @Route("/bulkorder/product/removeProductFromBulkorderAccount/{bulkorderId}/{productId}", name="frontend.wosoBulkOrder.product.accountRemoveItem", methods={"GET"})
  388.      * @param string $bulkorderId
  389.      * @param string $productId
  390.      * @param Request $request
  391.      * @param SalesChannelContext $context
  392.      *
  393.      */
  394.     public function productRemoveProductFromBulkorderAccount(string $bulkorderIdstring $productIdRequest $requestSalesChannelContext $context): Response
  395.     {
  396.         $customer $context->getCustomer();
  397.         if ($customer === null || $customer->getGuest() === true) {
  398.             $parameters=['redirectTo'=>'frontend.wosoBulkOrder.editBulkOrderProductsModal'];
  399.             return $this->redirectToRoute('frontend.account.login.page'$parameters);
  400.         }
  401.         $bulkorder $this->bulkorderDataService->getBulkorderById($bulkorderId$context$this->bulkorderDataService::C_BO_ENRICH_PRODUCTS);
  402.         if (!$bulkorder) {
  403.             throw new BulkorderNotFoundException($bulkorderId);
  404.         }
  405.         if (!$this->bulkorderDataService->hasAccessToBulkorder($bulkorder$contexttrue)) {
  406.             throw new AccessDeniedException($bulkorderId);
  407.         }
  408.         $succ $this->bulkorderDataService->removeProductFromBulkorder($bulkorder$productId$context);
  409.         if ($succ) {
  410.             $this->addFlash('success'$this->trans('wosoBulkOrder.account.forms.groupEditForm.msg.update.success'));
  411.         } else {
  412.             $this->addFlash('danger'$this->trans('wosoBulkOrder.account.forms.groupEditForm.msg.update.error'));
  413.         }
  414.         $parameters=['bulkorderId'=>$bulkorderId];
  415.         return $this->redirectToRoute('frontend.wosoBulkOrder.editBulkOrderProductsModal'$parameters);
  416.     }
  417.     /**
  418.      * removes product-item from bulkorder-list in account-mode
  419.      * @Route("/bulkorder/product/productAccountTogglePrio/{bulkorderId}/{productId}/{toggleTo}", name="frontend.wosoBulkOrder.product.accountToggleItemPrio", methods={"GET"})
  420.      * @param string $bulkorderId
  421.      * @param string $productId
  422.      * @param string $toggleTo
  423.      * @param Request $request
  424.      * @param SalesChannelContext $context
  425.      *
  426.      */
  427.     public function productAccountTogglePrio(string $bulkorderIdstring $productIdstring $toggleToRequest $requestSalesChannelContext $context): Response
  428.     {
  429.         $customer $context->getCustomer();
  430.         if ($customer === null || $customer->getGuest() === true) {
  431.             $parameters=['redirectTo'=>'frontend.wosoBulkOrder.editBulkOrderProductsModal'];
  432.             return $this->redirectToRoute('frontend.account.login.page'$parameters);
  433.         }
  434.         $bulkorder $this->bulkorderDataService->getBulkorderById($bulkorderId$context$this->bulkorderDataService::C_BO_ENRICH_PRODUCTS);
  435.         if (!$bulkorder) {
  436.             throw new BulkorderNotFoundException($bulkorderId);
  437.         }
  438.         if (!$this->bulkorderDataService->hasAccessToBulkorder($bulkorder$contexttrue)) {
  439.             throw new AccessDeniedException($bulkorderId);
  440.         }
  441.         $mandatory intval($toggleTo);
  442.         $succ $this->bulkorderDataService->toggleProductMandatory($bulkorder$productId$mandatory$context);
  443.         if ($succ) {
  444.             $this->addFlash('success'$this->trans('wosoBulkOrder.account.forms.groupEditForm.msg.update.success'));
  445.         } else {
  446.             $this->addFlash('danger'$this->trans('wosoBulkOrder.account.forms.groupEditForm.msg.update.error'));
  447.         }
  448.         $parameters=['bulkorderId'=>$bulkorderId];
  449.         return $this->redirectToRoute('frontend.wosoBulkOrder.editBulkOrderProductsModal'$parameters);
  450.     }
  451.     /**
  452.      * generates create-Output to create bulkorder-maininfo
  453.      * @Route("/bulkorder/createBulkorderModal", name="frontend.wosoBulkOrder.createBulkOrderModal", methods={"GET"})
  454.      * @param Request $request
  455.      * @param SalesChannelContext $context
  456.      *
  457.      */
  458.     public function createBulkOrderModal(Request $requestSalesChannelContext $context): Response
  459.     {
  460.         $bulkorder $this->bulkorderDataService->getNewBulkorderEntity();
  461.         return $this->renderStorefront('@wosoBulkOrder/storefront/page/account/component/bulk-order-mainform.html.twig', [
  462.             'bulkorder' => $bulkorder,
  463.             'doCreate' => 1
  464.         ]);
  465.     }
  466.     /**
  467.      * generates Data of bulk order with a special guid or empty data for showing blank page to add new bulk order.
  468.      * @Route("/getOrderData", name="frontend.wosoBulkOrder.getOrderData", methods={"GET"})
  469.      */
  470.     public function getOrderData(): Response
  471.     {
  472.         return $this->renderStorefront('@SwagBasicExample/storefront/page/example.html.twig', [
  473.             'wosoBulkOrderData' => [
  474.                 'id' => 1,
  475.                 'guid' => '1234',
  476.                 'bulkOrderCode' => 'Abd87dSx'
  477.                 ]
  478.         ]);
  479.     }
  480.     private function returnErrorResponse($msg) : JsonResponse
  481.     {
  482.         $response = new JsonResponse($msg);
  483.         return $response;
  484.     }
  485.     /**
  486.      * returns true, if authentication is valid, otherwise false
  487.      * @param string $ip
  488.      * @param string $authCode
  489.      * @return bool
  490.      */
  491.     public function getExtCheckAccess(string $ipstring $authCode) : bool {
  492.         $ret false;
  493.         if ($authCode == self::extAccessToken) { $ret true; }
  494.         return $ret;
  495.     }
  496.     /**
  497.      * creates a bulkorder-entry for external use (i.e. navision)
  498.      * checks authToken and maybe ip-address if valid
  499.      * param string|null title
  500.      * param int|null $status
  501.      * param string|null $parentBulkorderCode
  502.      * param string extAuthToken
  503.      * return json with bulkorderCode
  504.      *
  505.      * @Route("/getExtBulkOrderCode", name="frontend.wosoBulkOrder.getExtBulkOrderCode", methods={"GET"})
  506.      */
  507.     public function getExtBulkOrderCode(Request $requestSalesChannelContext $context): JsonResponse
  508.     {
  509.         $extIp $request->getClientIp();
  510.         $extAuthToken $request->get('extAuthToken');
  511.         $extTitle $request->get('title');
  512.         if (trim($extTitle)=='') { $extTitle 'external request'; }
  513.         $extStatus $request->get('status');
  514.         if (is_null($extStatus)) { $extStatus $this->bulkorderDataService::C_BO_STATUS_EXTERNAL; }
  515.         $parentBulkorderCode $request->get('parentBulkOrderCode');
  516.         if (!$parentBulkorderCode) {
  517.             $parentBulkorderCode '';
  518.         } else {
  519.             $checkOK $this->bulkorderDataService->checkBulkorderCodeString($parentBulkorderCode);
  520.             if ($checkOK == 0) {
  521.                return $this->returnErrorResponse(['yourIP' => $extIp'yourStatus' => -1000'parent bulkorder-code:' => $parentBulkorderCode'errorMsg' => 'The parent-bulkorder-code you transmitted, is not correct: '.$parentBulkorderCode]);
  522.             }
  523.             $parentBulkorder $this->bulkorderDataService->getBulkOrderByCode($parentBulkorderCode$context);
  524.             if (is_null($parentBulkorder)) {
  525.                 return $this->returnErrorResponse(['yourIP' => $extIp'yourStatus' => -1001'parent bulkorder-code:' => $parentBulkorderCode'errorMsg' => 'The parent-bulkorder-code you transmitted, can not be found. Please create parent bulkorder first! ']);
  526.             }
  527.             if (!is_null($parentBulkorder->getUserId())) {
  528.                 return $this->returnErrorResponse(['yourIP' => $extIp'yourStatus' => -1002'parent bulkorder-code:' => $parentBulkorderCode'errorMsg' => 'The parent-bulkorder-code you transmitted, can not be used for external requests! ']);
  529.             }
  530.         }
  531.         $bulkorderCode '';
  532.         $valid $this->getExtCheckAccess($extIp$extAuthToken);
  533.         if ($valid) {
  534.             $bulkorder $this->bulkorderDataService->createBulkorder($context$extTitle$extStatusnull$parentBulkorderCode);
  535.             if ($bulkorder) {
  536.                 $bulkorderCode $bulkorder->getCode();
  537.             }
  538.         }
  539.         $response = new JsonResponse([
  540.             'yourIP' => $extIp,
  541.             'yourStatus' => $extStatus,
  542.             'yourTitle' => $extTitle,
  543.             'authValid' => $valid,
  544.             'bulkorderCode' => $bulkorderCode
  545.         ]);
  546.         return $response;
  547.     }
  548.     /**
  549.      * return list of bulkorders created after a dedicated date with status > 1000
  550.      * checks authToken and maybe ip-address if valid
  551.      * param string|null date
  552.      * param string extAuthToken
  553.      * return json resultcode > 0 count of new
  554.      *
  555.      * @Route("/getExtBulkOrderListFromDate", name="frontend.wosoBulkOrder.getExtBulkOrderListFromDate", methods={"GET"})
  556.      */
  557.     public function getExtBulkOrderListFromDate(Request $requestSalesChannelContext $context): JsonResponse
  558.     {
  559.         $extIp $request->getClientIp();
  560.         $extAuthToken $request->get('extAuthToken');
  561.         $extDate $request->get('date');
  562.         if (empty($extDate)) { $extDate '2022-02-05 01:01:01'; }
  563.         $extState $request->get('state');
  564.         if (is_null($extState)) { $extState $this->bulkorderDataService::C_BO_STATUS_MINACTIVE; } else { $extState intval($extState); }
  565.         $valid $this->getExtCheckAccess($extIp$extAuthToken);
  566.         $resultCode = -100;
  567.         $result = [];
  568.         if ($valid) {
  569.             $resultCode 0;
  570.             $r $this->bulkorderDataService->getBulkOrderByDateAndState($extDate$extState$context, ($this->bulkorderDataService::C_BO_ENRICH_GROUPS $this->bulkorderDataService::C_BO_ENRICH_PRODUCTS $this->bulkorderDataService::C_BO_ENRICH_USERDATA) );
  571.             if (!is_null($r)) {
  572.                 foreach ($r as $k => $res) {
  573.                     $result[$k] = $res;
  574.                     $resultCode++;
  575.                 }
  576.             }
  577.         }
  578.         $response = new JsonResponse([
  579.             'yourIP' => $extIp,
  580.             'resultCode' => $resultCode,
  581.             'requestDate' => $extDate,
  582.             'requestState' => $extState,
  583.             'result' => $result
  584.         ]);
  585.         return $response;
  586.     }
  587.     /**
  588.      * request to remove a bulkorder
  589.      *
  590.      * @Route("/bulkorder/requestRemoveGroup/{bulkorderGroupId}", name="frontend.wosoBulkOrder.requestRemoveGroup", methods={"GET"})
  591.      *
  592.      * @param string $bulkorderGroupId
  593.      * @param Request $request
  594.      * @param SalesChannelContext $context
  595.      * @return Response
  596.      * @throws InconsistentCriteriaIdsException
  597.      * @throws BulkorderNotFoundException
  598.      */
  599.     public function requestRemoveGroup(string $bulkorderGroupIdRequest $requestSalesChannelContext $context): Response
  600.     {
  601.         $bulkorderGroup $this->bulkorderDataService->getBulkorderById($bulkorderGroupId$context);
  602.         if (!$bulkorderGroup) {
  603.             throw new BulkorderNotFoundException($bulkorderGroupId);
  604.         }
  605.         $bulkorder $this->bulkorderDataService->getBulkorderById($bulkorderGroup->getParentId(), $context);
  606.         if (!$bulkorder) {
  607.             throw new BulkorderNotFoundException($bulkorderGroup->getParentId());
  608.         }
  609.         if ( ($this->bulkorderDataService->hasAccessToBulkorder($bulkorderGroup$contexttrue)) &&
  610.             ($this->bulkorderDataService->hasAccessToBulkorder($bulkorder$contexttrue)) ){
  611.             return $this->renderStorefront('@wosoBulkOrder/storefront/page/account/component/group-requestdelete.html.twig', [
  612.                 'bulkorderGroup' => $bulkorderGroup
  613.             ]);
  614.         } else {
  615.             $this->addFlash('danger'$this->trans('wosoBulkOrder.account.forms.bulkorderMainForm.msg.userNotallowed'));
  616.         }
  617.         return $this->redirectToRoute('frontend.wosoBulkOrder.getBulkOrderList');
  618.     }
  619.     /**
  620.      * Removes a bulkorder
  621.      *
  622.      * @Route("/bulkorder/removeGroup/{bulkorderGroupId}", name="frontend.wosoBulkOrder.removeGroup", methods={"GET"})
  623.      *
  624.      * @param string $bulkorderGroupId
  625.      * @param Request $request
  626.      * @param SalesChannelContext $context
  627.      * @return Response
  628.      * @throws InconsistentCriteriaIdsException
  629.      * @throws BulkorderNotFoundException
  630.      */
  631.     public function removeGroup(string $bulkorderGroupIdRequest $requestSalesChannelContext $context): Response
  632.     {
  633.         $bulkorderGroup $this->bulkorderDataService->getBulkorderById($bulkorderGroupId$context);
  634.         if (!$bulkorderGroup) {
  635.             throw new BulkorderNotFoundException($bulkorderGroupId);
  636.         }
  637.         $bulkorder $this->bulkorderDataService->getBulkorderById($bulkorderGroup->getParentId(), $context);
  638.         if (!$bulkorder) {
  639.             throw new BulkorderNotFoundException($bulkorderGroup->getParentId());
  640.         }
  641.         if ( ($this->bulkorderDataService->hasAccessToBulkorder($bulkorderGroup$contexttrue)) &&
  642.             ($this->bulkorderDataService->hasAccessToBulkorder($bulkorder$contexttrue)) ){
  643.             $this->bulkorderDataService->removeBulkOrder($bulkorderGroup$context);
  644.             $this->addFlash('success'$this->trans('wosoBulkOrder.account.forms.groupEditForm.msg.remove.success'));
  645.         } else {
  646.             throw new AccessDeniedException($bulkorderGroupId);
  647.         }
  648.         return $this->redirectToRoute('frontend.wosoBulkOrder.getBulkOrderList');
  649.     }
  650.     /**
  651.      * generates Edit-Output to change bulkorder-group-data
  652.      * @Route("/bulkorder/editGroupModal/{bulkorderGroupId}", name="frontend.wosoBulkOrder.editGroupModal", methods={"GET"})
  653.      * @param string $bulkorderGroupId
  654.      * @param Request $request
  655.      * @param SalesChannelContext $context
  656.      *
  657.      */
  658.     public function editGroupModal(string $bulkorderGroupIdRequest $requestSalesChannelContext $context): Response
  659.     {
  660.         $bulkorderGroup $this->bulkorderDataService->getBulkorderById($bulkorderGroupId$context);
  661.         if (!$bulkorderGroup) {
  662.             throw new BulkorderNotFoundException($bulkorderGroupId);
  663.         }
  664.         $bulkorder $this->bulkorderDataService->getBulkorderById($bulkorderGroup->getParentId(), $context);
  665.         if (!$bulkorder) {
  666.             throw new BulkorderNotFoundException($bulkorderGroup->getParentId());
  667.         }
  668.         if ( ($this->bulkorderDataService->hasAccessToBulkorder($bulkorderGroup$contexttrue)) &&
  669.              ($this->bulkorderDataService->hasAccessToBulkorder($bulkorder$contexttrue)) ){
  670.             return $this->renderStorefront('@wosoBulkOrder/storefront/page/account/component/group-editform.html.twig', [
  671.                 'bulkorder' => $bulkorder,
  672.                 'bulkorderGroup' => $bulkorderGroup,
  673.                 'doCreate' => 0
  674.             ]);
  675.         } else {
  676.             throw new AccessDeniedException($bulkorderGroupId);
  677.         }
  678.     }
  679.     /**
  680.      * generates create-Output to create bulkorder-groupdata
  681.      * @Route("/bulkorder/createGroupModal/{bulkorderId}", name="frontend.wosoBulkOrder.createGroupModal", methods={"GET"})
  682.      * @param Request $request
  683.      * @param SalesChannelContext $context
  684.      *
  685.      */
  686.     public function createGroupModal(string $bulkorderIdRequest $requestSalesChannelContext $context): Response
  687.     {
  688.         $bulkorder $this->bulkorderDataService->getBulkorderById($bulkorderId$context);
  689.         if (!$bulkorder) {
  690.             throw new BulkorderNotFoundException($bulkorderId);
  691.         }
  692.         if ($this->bulkorderDataService->hasAccessToBulkorder($bulkorder$contexttrue)) {
  693.             $bulkorderGroup $this->bulkorderDataService->getNewBulkorderEntity();
  694.             $bulkorderGroup->setMembers(1);
  695.             return $this->renderStorefront('@wosoBulkOrder/storefront/page/account/component/group-editform.html.twig', [
  696.                 'bulkorder' => $bulkorder,
  697.                 'bulkorderGroup' => $bulkorderGroup,
  698.                 'doCreate' => 1
  699.             ]);
  700.         } else {
  701.             throw new AccessDeniedException($bulkorderId);
  702.         }
  703.     }
  704.     /**
  705.      * Update a bulkorderGroup
  706.      *
  707.      * @Route(
  708.      *     "/bulkorder/updateBulkorderGroup",
  709.      *     name="frontend.wosoBulkOrder.updateBulkorderGroup",
  710.      *     options={"seo"="false"}, methods={"POST"}
  711.      * )
  712.      *
  713.      * @param Request $request
  714.      * @param SalesChannelContext $context
  715.      *
  716.      * @return Response
  717.      *
  718.      * @throws InconsistentCriteriaIdsException
  719.      */
  720.     public function updateBulkorderGroup(Request $requestSalesChannelContext $context): Response
  721.     {
  722.         $customer $context->getCustomer();
  723.         if ($customer === null || $customer->getGuest() === true) {
  724.             $parameters=['redirectTo'=>'frontend.wosoBulkOrder.getBulkOrderList'];
  725.             return $this->redirectToRoute('frontend.account.login.page'$parameters);
  726.         }
  727.         $bulkorderId = (string) $request->get('bulkorderId');
  728.         $bulkorder $this->bulkorderDataService->getBulkorderById($bulkorderId$context);
  729.         if (!$bulkorder) {
  730.             throw new BulkorderNotFoundException($bulkorderId);
  731.         }
  732.         if (!$this->bulkorderDataService->hasAccessToBulkorder($bulkorder$contexttrue)) {
  733.             throw new AccessDeniedException($bulkorderId);
  734.         }
  735.         $bulkorderGroupId = (string) $request->get('id');
  736.         if ($bulkorderGroupId === '') {
  737.             $doCreate = (int) $request->get('doCreate');
  738.             $ajax = (int) $request->get('ajax');
  739.             if ($doCreate == 1) {
  740.                 $formfields $this->getFormFieldsFromBulkorderEditRequest($request2$bulkorderId$bulkorder->getCode());
  741.                 $error $this->checkBulkorderUpdateInputValues($formfields,2);
  742.                 if ($error 0) {
  743.                     $this->bulkorderDataService->createBulkOrderGroupFromFormFields($context$formfields$context->getSalesChannelId());
  744.                     $this->addFlash('success'$this->trans('wosoBulkOrder.account.forms.groupEditForm.msg.update.success'));
  745.                 } else {
  746.                     $this->addFlash('danger'$this->trans('wosoBulkOrder.account.forms.groupEditForm.msg.update.error'));
  747.                 }
  748.                 return $this->redirectToRoute('frontend.wosoBulkOrder.getBulkOrderList');
  749.             } else {
  750.                 throw new MissingRequestParameterException('id');
  751.             }
  752.         }
  753.         $bulkorder $this->bulkorderDataService->getBulkOrderByID($bulkorderGroupId$context);
  754.         if (!$bulkorder) {
  755.             throw new BulkorderNotFoundException("Bulkordergroup $bulkorderGroupId not found");
  756.         }
  757.         $formfields $this->getFormFieldsFromBulkorderEditRequest($request2$bulkorderId$bulkorder->getCode());
  758.         $error $this->checkBulkorderUpdateInputValues($formfields,2);
  759.         if ($error 0) {
  760.             $this->bulkorderDataService->updateBulkOrderGroupFromFormFields($context$formfields$context->getSalesChannelId());
  761.             $this->addFlash('success'$this->trans('wosoBulkOrder.account.forms.groupEditForm.msg.update.success'));
  762.         } else {
  763.             $this->addFlash('danger'$this->trans('wosoBulkOrder.account.forms.groupEditForm.msg.update.error'));
  764.         }
  765.         return $this->redirectToRoute('frontend.wosoBulkOrder.getBulkOrderList');
  766.     }
  767.     /**
  768.      * generates List of Bulkorders by Customer to add products on product-page
  769.      * @Route("/bulkorder/product/getBulkorderlist/{productId}", name="frontend.wosoBulkOrder.product.getBulkorderlist", methods={"GET"})
  770.      * @param string $productId
  771.      * @param Request $request
  772.      * @param SalesChannelContext $context
  773.      *
  774.      */
  775.     public function productGetBulkorderList(string $productIdRequest $requestSalesChannelContext $context): Response
  776.     {
  777.         $customer $context->getCustomer();
  778.         if ($customer === null || $customer->getGuest() === true) {
  779.             return $this->renderStorefront('@wosoBulkOrder/storefront/page/product-detail/bulk-order-container.html.twig', [
  780.                 'bulkorderList' => [],
  781.                 'productId' => $productId,
  782.                 'noCustomer' => 1
  783.             ]);
  784.         }
  785.         $list $this->bulkorderDataService->getBulkOrderByCustomerID($customer->getId(), $context$this->bulkorderDataService::C_BO_ENRICH_PRODUCTS);
  786.         return $this->renderStorefront('@wosoBulkOrder/storefront/page/product-detail/bulk-order-container.html.twig', [
  787.             'bulkorderList' => $list,
  788.             'productId' => $productId,
  789.             'noCustomer' => 0,
  790.             'didEdit' => 0
  791.         ]);
  792.     }
  793.     /**
  794.      * removes product-item from bulkorder-list
  795.      * @Route("/bulkorder/product/removeProductFromBulkorder/{bulkorderId}/{productId}", name="frontend.wosoBulkOrder.product.removeItem", methods={"GET"})
  796.      * @param string $bulkorderId
  797.      * @param string $productId
  798.      * @param Request $request
  799.      * @param SalesChannelContext $context
  800.      *
  801.      */
  802.     public function productRemoveProductFromBulkorder(string $bulkorderIdstring $productIdRequest $requestSalesChannelContext $context): Response
  803.     {
  804.         $customer $context->getCustomer();
  805.         if ($customer === null || $customer->getGuest() === true) {
  806.             return $this->renderStorefront('@wosoBulkOrder/storefront/page/product-detail/bulk-order-container.html.twig', [
  807.                 'bulkorderList' => [],
  808.                 'noCustomer' => 1,
  809.                 'didEdit' => 0
  810.             ]);
  811.         }
  812.         $bulkorder $this->bulkorderDataService->getBulkorderById($bulkorderId$context$this->bulkorderDataService::C_BO_ENRICH_PRODUCTS);
  813.         if (!$bulkorder) {
  814.             throw new BulkorderNotFoundException($bulkorderId);
  815.         }
  816.         if (!$this->bulkorderDataService->hasAccessToBulkorder($bulkorder$contexttrue)) {
  817.             throw new AccessDeniedException($bulkorderId);
  818.         }
  819.         $succ $this->bulkorderDataService->removeProductFromBulkorder($bulkorder$productId$context);
  820.         $list $this->bulkorderDataService->getBulkOrderByCustomerID($customer->getId(), $context$this->bulkorderDataService::C_BO_ENRICH_PRODUCTS);
  821.         if ($succ) {
  822.             $this->addFlash('success'$this->trans('wosoBulkOrder.account.forms.groupEditForm.msg.update.success'));
  823.         } else {
  824.             $this->addFlash('danger'$this->trans('wosoBulkOrder.account.forms.groupEditForm.msg.update.error'));
  825.         }
  826.         return $this->renderStorefront('@wosoBulkOrder/storefront/page/product-detail/bulk-order-container.html.twig', [
  827.             'bulkorderList' => $list,
  828.             'productId' => $productId,
  829.             'noCustomer' => 0,
  830.             'didEdit' => 1
  831.         ]);
  832.     }
  833.     /**
  834.      * add product-item to bulkorder-list
  835.      * @Route("/bulkorder/product/addProductToBulkorder/{bulkorderId}/{productId}", name="frontend.wosoBulkOrder.product.addItem", methods={"GET"})
  836.      * @param string $bulkorderId
  837.      * @param string $productId
  838.      * @param Request $request
  839.      * @param SalesChannelContext $context
  840.      *
  841.      */
  842.     public function productAddProductToBulkorder(string $bulkorderIdstring $productIdRequest $requestSalesChannelContext $context): Response
  843.     {
  844.         $customer $context->getCustomer();
  845.         if ($customer === null || $customer->getGuest() === true) {
  846.             return $this->renderStorefront('@wosoBulkOrder/storefront/page/product-detail/bulk-order-container.html.twig', [
  847.                 'bulkorderList' => [],
  848.                 'noCustomer' => 1,
  849.                 'didEdit' => 0
  850.             ]);
  851.         }
  852.         $bulkorder $this->bulkorderDataService->getBulkorderById($bulkorderId$context$this->bulkorderDataService::C_BO_ENRICH_PRODUCTS);
  853.         if (!$bulkorder) {
  854.             throw new BulkorderNotFoundException($bulkorderId);
  855.         }
  856.         if (!$this->bulkorderDataService->hasAccessToBulkorder($bulkorder$contexttrue)) {
  857.             throw new AccessDeniedException($bulkorderId);
  858.         }
  859.         $this->bulkorderDataService->addProductToBulkorder($bulkorder$productId$context);
  860.         $list $this->bulkorderDataService->getBulkOrderByCustomerID($customer->getId(), $context$this->bulkorderDataService::C_BO_ENRICH_PRODUCTS);
  861.         $this->addFlash('success'$this->trans('wosoBulkOrder.account.forms.groupEditForm.msg.update.success'));
  862.         return $this->renderStorefront('@wosoBulkOrder/storefront/page/product-detail/bulk-order-container.html.twig', [
  863.             'bulkorderList' => $list,
  864.             'productId' => $productId,
  865.             'noCustomer' => 0,
  866.             'didEdit' => 1
  867.         ]);
  868.     }
  869.     /**
  870.      * show storefront of bulkorder to customer for ordering
  871.      * @Route("/bulkorder/order/{bulkorderCode}", name="frontend.wosoBulkOrder.order", methods={"GET"})
  872.      * @param string $bulkorderCode
  873.      * @param Request $request
  874.      * @param SalesChannelContext $context
  875.      *
  876.      */
  877.     public function showBulkorder(string $bulkorderCodeRequest $requestSalesChannelContext $context): Response
  878.     {
  879.         $customer $context->getCustomer();
  880.         $bulkorder $this->bulkorderDataService->getBulkOrderByCode($bulkorderCode$context$this->bulkorderDataService::C_BO_ENRICH_PRODUCTS);
  881.         if (!$bulkorder) {
  882.             throw new BulkorderNotFoundException($bulkorderCode);
  883.         }
  884.         $prodIdList $this->bulkorderDataService->getProductIDsFromBulkorder($bulkorder);
  885.         if (empty($prodIdList)) {
  886.             throw new BulkorderNotFoundException($bulkorderCode);
  887.         }
  888.         $prodList $this->bulkorderDataService->getBOProductListByIds($prodIdList$context);
  889.         $page $this->genericPageLoader->load($request$context);
  890.         $page ProductPage::createFrom($page);
  891.         $page->setProduct($prodList->first());
  892.         return $this->renderStorefront('@wosoBulkOrder/storefront/page/order/order-main.html.twig', [
  893.             'bulkorder' => $bulkorder,
  894.             'productList' => $prodList,
  895.             'page' => $page,
  896.             'noCustomer' => 0
  897.         ]);
  898.     }
  899. }