src/Daikin/FrontendBundle/Controller/Admin/SparePartsAdminController.php line 208

Open in your IDE?
  1. <?php
  2. namespace App\Daikin\FrontendBundle\Controller\Admin;
  3. use App\Daikin\BaseBundle\Controller\AbstractDaikinBaseController;
  4. use App\Daikin\BaseBundle\Entity\EmergencyStock\Warehouse;
  5. use App\Daikin\BaseBundle\Entity\SparePartsModel;
  6. use App\Daikin\BaseBundle\Entity\SparePartsNumber;
  7. use App\Daikin\BaseBundle\Entity\SparePartsPart;
  8. use App\Daikin\FrontendBundle\Form\Type\Admin\SparePartsPartType;
  9. use Doctrine\Common\Collections\ArrayCollection;
  10. use Doctrine\DBAL\Exception\UniqueConstraintViolationException;
  11. use Doctrine\ORM\NonUniqueResultException;
  12. use Doctrine\ORM\NoResultException;
  13. use EHC\PagerBundle\Service\PagerService;
  14. use Exception;
  15. use Psr\Container\ContainerExceptionInterface;
  16. use Psr\Container\NotFoundExceptionInterface;
  17. use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
  18. use Symfony\Component\HttpFoundation\RedirectResponse;
  19. use Symfony\Component\HttpFoundation\Response;
  20. use Symfony\Component\Routing\Annotation\Route;
  21. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
  22. use Symfony\Component\HttpFoundation\Request;
  23. use Symfony\Contracts\Translation\TranslatorInterface;
  24. /**
  25.  * @Route("/notfalllager-parts-admin")
  26.  *
  27.  * Class SparePartsController
  28.  * @package App\Daikin\FrontendBundle\Controller
  29.  * @Security("is_granted('OWNMODULE', 'nfl') and is_granted('ROLE_SPARE_PARTS_PARTS_ADMIN')")
  30.  */
  31. class SparePartsAdminController extends AbstractDaikinBaseController
  32. {
  33.     /**
  34.      * @Route("/", name="spare_parts_admin_index", methods={"GET"})
  35.      *
  36.      * @param PagerService $pager
  37.      * @param TranslatorInterface $translator
  38.      * @param ParameterBagInterface $parameterBag
  39.      * @return Response
  40.      * @throws NoResultException
  41.      * @throws NonUniqueResultException
  42.      * @throws Exception
  43.      */
  44.     public function index(PagerService $pagerTranslatorInterface $translatorParameterBagInterface $parameterBag): Response
  45.     {
  46.         $models $this->em->getRepository(SparePartsModel::class)->findAll();
  47.         $modelChoices = [];
  48.         foreach ($models as $model) {
  49.             $modelChoices[$model->getId()] = $model->getName();
  50.         }
  51.         $warehouses $this->em->getRepository(Warehouse::class)->findAll();
  52.         $warehouseChoices = [];
  53.         foreach ($warehouses as $warehouse) {
  54.             $warehouseChoices[$warehouse->getId()] = $warehouse->getLocationName();
  55.         }
  56.         $pager
  57.             ->setEntity(SparePartsPart::class, 'spart'20)
  58. //            ->addFilter( 'partmodels.name', 'like', array( 'label' => $translator->trans('Model') ) )
  59.             ->addFilter'pmd.model''choice', ['label' => 'Modell''choices' => $modelChoices])
  60.             ->addFilter'partNumbers.number''like', array( 'label' => $translator->trans('Main part number') ) )
  61.             ->addFilter'pmd.design''like', array( 'label' => $translator->trans('Design') ) )
  62.             ->addFilter'pmd.circuitDiagram''like', array( 'label' => $translator->trans('Circuit diagram') ) )
  63.             ->addFilter'pwh.warehouse''choice', ['label' => 'Lager''choices' => $warehouseChoices])
  64.             ->addFilter'spart.name''like', array( 'label' => $translator->trans('Part name') ) )
  65.             ->addJoin('spart.partNumbers''partNumbers'true)
  66.             ->addJoin('spart.partModelDetails''pmd'true)
  67.             ->addJoin('spart.partsWarehouses''pwh'true)
  68.             ->addSortable('id''ASC')
  69.             ->addSortables(['partNumbers.number''partmodel.name''name''createdAt''updatedAt''pmd.model'])
  70.             ->setGroupBy('spart.id')
  71.             ->setElementTemplate('@DaikinFrontend/admin/sparePartsAdmin/part_table_row.html.twig');
  72.         return $this->render('@DaikinFrontend/admin/sparePartsAdmin/index.html.twig', [
  73.             'pager' => $pager->getInstance()->getPagerResult(),
  74.         ]);
  75.     }
  76.     /**
  77.      * @Route("/create", name="spare_parts_admin_create", methods={"GET", "POST"})
  78.      *
  79.      * @param Request $request
  80.      * @return Response
  81.      * @throws ContainerExceptionInterface
  82.      * @throws NotFoundExceptionInterface
  83.      */
  84.     public function create(Request $request): Response
  85.     {
  86.         $sparePart = new SparePartsPart();
  87.         $form $this->createForm(SparePartsPartType::class, $sparePart);
  88.         $form->handleRequest($request);
  89.         if ($form->isSubmitted() && $form->isValid()) {
  90.             $mainPartNumber $form->get('mainPartNumberValue')->getData();
  91.             try {
  92.                 foreach ($sparePart->getPartNumbers() as $number) {
  93.                     if ($number->getNumber() == $mainPartNumber) {
  94.                         $sparePart->setMainPartNumber($number);
  95.                     }
  96.                 }
  97.                 $this->em->persist($sparePart);
  98.                 $this->em->flush();
  99.                 return $this->redirectToRoute('spare_parts_admin_index');
  100.                 // FIXME 54
  101.             } catch (UniqueConstraintViolationException $e) {
  102. //                if ($this->container->get('kernel')->isDebug()) {
  103. //                    $this->addFlash('error', $e->getMessage());
  104. //                }
  105.                 $this->addFlash('error''Bitte prüfen Sie Ihre Eingaben. Entweder ist Ihre Teilenummer schon vergeben oder pro Modell wurden mehrere Baujahr Einträge hinzugefügt.');
  106.             }
  107.         }
  108.         return $this->render('@DaikinFrontend/admin/sparePartsAdmin/create.html.twig', [
  109.             'form' => $form->createView(),
  110.         ]);
  111.     }
  112.     /**
  113.      * @Route("/edit/{id}", name="spare_parts_admin_edit", methods={"GET", "POST"})
  114.      *
  115.      * @param Request $request
  116.      * @param SparePartsPart $sparePart
  117.      *
  118.      * @return Response
  119.      * @throws ContainerExceptionInterface
  120.      * @throws NotFoundExceptionInterface
  121.      */
  122.     public function edit(Request $requestSparePartsPart $sparePart): Response
  123.     {
  124.         $originalNumbers = new ArrayCollection();
  125.         foreach ($sparePart->getPartNumbers() as $num) {
  126.             $originalNumbers->add($num);
  127.         }
  128.         $originalWarehouses = new ArrayCollection();
  129.         foreach ($sparePart->getPartsWarehouses() as $wh) {
  130.             $originalWarehouses->add($wh);
  131.         }
  132.         $form $this->createForm(SparePartsPartType::class, $sparePart);
  133.         $form->handleRequest($request);
  134.         if ($form->isSubmitted() && $form->isValid()) {
  135.             $em $this->em;
  136.             try {
  137.                 $mainPartNumber $em->getRepository(SparePartsNumber::class)
  138.                     ->findOneBy(['number' => $form->get('mainPartNumberValue')->getData()]);
  139.                 if ($mainPartNumber) {
  140.                     $sparePart->setMainPartNumber($mainPartNumber);
  141.                 }
  142.                 foreach ($originalNumbers as $number) {
  143.                     if (false === $sparePart->getPartNumbers()->contains($number)) {
  144.                         $sparePart->getPartNumbers()->removeElement($number);
  145.                         $em->remove($number);
  146.                     }
  147.                 }
  148.                 foreach ($originalWarehouses as $originalWarehouse) {
  149.                     if (false === $sparePart->getPartsWarehouses()->contains($originalWarehouse)) {
  150.                         $sparePart->getPartsWarehouses()->removeElement($originalWarehouse);
  151.                         $em->remove($originalWarehouse);
  152.                     }
  153.                 }
  154.                 $em->persist($sparePart);
  155.                 $em->flush();
  156.                 
  157.                 return $this->redirectToRoute('spare_parts_admin_index');
  158.                 // FIXME 54
  159.             }catch (UniqueConstraintViolationException $e) {
  160. //                if ($this->container->get('kernel')->isDebug()) {
  161. //                    $this->addFlash('error', $e->getMessage());
  162. //                }
  163.                 $this->addFlash('error''Bitte prüfen Sie Ihre Eingaben. Entweder ist Ihre Teilenummer schon vergeben oder pro Modell wurden mehrere Baujahr Einträge hinzugefügt.');
  164.             }
  165.         }
  166.         return $this->render('@DaikinFrontend/admin/sparePartsAdmin/create.html.twig', [
  167.             'form' => $form->createView(),
  168.             'sparePart' => $sparePart
  169.         ]);
  170.     }
  171.     /**
  172.      * @Route("/show/{id}", name="spare_parts_admin_show", methods={"GET"})
  173.      *
  174.      * @param SparePartsPart $sparePart
  175.      *
  176.      * @return Response
  177.      */
  178.     public function show(SparePartsPart $sparePart): Response
  179.     {
  180.         return $this->render('@DaikinFrontend/admin/sparePartsAdmin/show.html.twig', [
  181.             'part' => $sparePart
  182.         ]);
  183.     }
  184.     /**
  185.      * @Route("/delete/{id}", name="spare_parts_admin_delete", methods={"GET"})
  186.      * @Security("is_granted('ROLE_SPARE_PARTS_PARTS_ADMIN')")
  187.      *
  188.      * @param SparePartsPart $sparePart
  189.      *
  190.      * @return RedirectResponse
  191.      */
  192.     public function deleteAction(SparePartsPart $sparePart): Response
  193.     {
  194.         $sparePart->setDeleted(true);
  195.         $this->em->persist($sparePart);
  196.         $this->em->flush();
  197.         return $this->redirectToRoute('spare_parts_admin_index');
  198.     }
  199.     /**
  200.      * @Route("/undelete/{id}", name="spare_parts_admin_undelete", methods={"GET"})
  201.      * @Security("is_granted('ROLE_SPARE_PARTS_FULLADMIN')")
  202.      *
  203.      * @param SparePartsPart $sparePart
  204.      *
  205.      * @return RedirectResponse
  206.      */
  207.     public function undeleteAction(SparePartsPart $sparePart): Response
  208.     {
  209.         if ( $this->recoverEntity($sparePart) ) {
  210.             $this->em->flush();
  211.         }
  212.         return $this->redirectToRoute('spare_parts_admin_index');
  213.     }
  214.     /**
  215.      * @Route("/full_delete/{id}", name="spare_parts_admin_full_delete", methods={"GET"})
  216.      * @Security("is_granted('ROLE_SPARE_PARTS_FULLADMIN')")
  217.      *
  218.      * @param SparePartsPart $sparePart
  219.      *
  220.      * @return RedirectResponse
  221.      */
  222.     public function fullDeleteAction(SparePartsPart $sparePart): Response
  223.     {
  224.         $sparePart->setMainPartNumber(null);
  225.         foreach ($sparePart->getPartNumbers() as $number) {
  226.             $this->em->remove($number);
  227.         }
  228.         $this->em->flush();
  229.         $this->em->remove($sparePart);
  230.         $this->em->flush();
  231.         return $this->redirectToRoute('spare_parts_admin_index');
  232.     }
  233. }