src/Controller/AppController.php line 71

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Claim;
  4. use App\Entity\ClaimFile;
  5. use App\Form\ClaimHaftType;
  6. use App\Form\ClaimMFType;
  7. use App\Form\ClaimSachType;
  8. use App\Form\ClaimTechType;
  9. use App\Service\ApiService;
  10. use App\Service\FileUploadService;
  11. use Doctrine\ORM\EntityManagerInterface;
  12. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
  13. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  14. use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
  15. use Symfony\Component\Form\FormError;
  16. use Symfony\Component\HttpFoundation\JsonResponse;
  17. use Symfony\Component\HttpFoundation\ParameterBag;
  18. use Symfony\Component\HttpFoundation\Request;
  19. use Symfony\Component\HttpFoundation\Response;
  20. use Symfony\Component\Routing\Annotation\Route;
  21. use Symfony\Component\Serializer\Serializer;
  22. use Symfony\Component\Serializer\SerializerInterface;
  23. class AppController extends AbstractController
  24. {
  25.     /** @var FileUploadService $fileUploadService */
  26.     private $fileUploadService;
  27.     /** @var EntityManagerInterface $entityManager */
  28.     private $entityManager;
  29.     /** @var ApiService $apiService */
  30.     private $apiService;
  31.     /** @var ParameterBagInterface $parameterBag */
  32.     private $parameterBag;
  33.     public function __construct(FileUploadService $fileUploadServiceEntityManagerInterface $entityManagerApiService $apiServiceParameterBagInterface $parameterBag)
  34.     {
  35.         $this->fileUploadService $fileUploadService;
  36.         $this->entityManager $entityManager;
  37.         $this->apiService $apiService;
  38.         $this->parameterBag $parameterBag;
  39.     }
  40.     /**
  41.      * @Route("/", name="home")
  42.      */
  43.     public function index(): Response
  44.     {
  45.         $links = [
  46.             Claim::TYPE_MF => 'Kantonale Dienstfahrzeuge',
  47.             Claim::TYPE_HAFT => 'Haftpflichtversicherung',
  48.             Claim::TYPE_SACH => 'Sachversicherung',
  49.             Claim::TYPE_GEBAEUDE_SACH => 'Sachversicherung (Gebäude)',
  50.             Claim::TYPE_TECH => 'Technische Versicherung',
  51.         ];
  52.         return $this->render('app/index.html.twig', [
  53.             'controller_name' => 'AppController',
  54.             'links' => $links,
  55.         ]);
  56.     }
  57.     /**
  58.      * @Route("/claim/form/{type}", name="claim_form")
  59.      */
  60.     public function ClaimForm(Request $request$type): Response
  61.     {
  62.         switch ($type) {
  63.             case Claim::TYPE_MF:
  64.                 $formType ClaimMFType::class;
  65.                 $formTwigName 'mf-form';
  66.                 break;
  67.             case Claim::TYPE_HAFT:
  68.                 $formType ClaimHaftType::class;
  69.                 $formTwigName 'haft-form';
  70.                 break;
  71.             case Claim::TYPE_SACH:
  72.                 $formType ClaimSachType::class;
  73.                 $formTwigName 'sach-form';
  74.                 break;
  75.             case Claim::TYPE_GEBAEUDE_SACH:
  76.                 $formType ClaimSachType::class;
  77.                 $formTwigName 'gebaeude-sach-form';
  78.                 break;
  79.             case Claim::TYPE_TECH:
  80.                 $formType ClaimTechType::class;
  81.                 $formTwigName 'tech-form';
  82.                 break;
  83.             default:
  84.                 throw new \Exception('Claim type not existing');
  85.         }
  86.         $claim = new Claim();
  87.         $claim->setClaimType($type);
  88.         $form $this->createForm($formType$claim, [
  89.             'action' => $this->generateUrl('claim_form', ['type' => $type]),
  90.             'method' => 'POST',
  91.         ]);
  92.         $form->handleRequest($request);
  93.         if ($form->isSubmitted() && $form->isValid()) {
  94.             $claim->setCreatedAt(new \DateTime());
  95.             $claim->setUpdatedAt(new \DateTime());
  96.             $this->entityManager->persist($claim);
  97.             $files $form->get('claimFiles')->getData();
  98.             $hasError false;
  99.             if ($files) {
  100.                 $result $this->fileUploadService->upload($form$claim$files);
  101.                 $form $result['form'];
  102.                 $hasError $result['hasError'];
  103.             }
  104.             if (!$hasError) {
  105.                 $this->entityManager->flush();
  106.                 $session $request->getSession();
  107.                 $session->getFlashBag()->add('success''Ihre Anfrage wurde erfolgreich gesendet.');
  108.                 if ($this->parameterBag->has('BS_API_KEY') && $this->parameterBag->has('BS_API_URL') && !empty($this->parameterBag->get('BS_API_KEY')) && !empty($this->parameterBag->get('BS_API_URL'))) {
  109.                     if($this->parameterBag->has('MAIL_TO') && !empty($this->parameterBag->get('MAIL_TO'))){
  110.                         $mailParameters = [
  111.                             'subject' => $this->parameterBag->get('MAIL_SUBJECT'),
  112.                             'to' => $this->parameterBag->get('MAIL_TO'),
  113.                             'body' => $this->parameterBag->get('MAIL_BODY')
  114.                         ];
  115.                         if($this->parameterBag->has('MAIL_CC') && !empty($this->parameterBag->get('MAIL_CC'))){
  116.                             $mailParameters['cc'] = $this->parameterBag->get('MAIL_CC');
  117.                         }
  118.                         if($this->parameterBag->has('MAIL_BCC') && !empty($this->parameterBag->get('MAIL_BCC'))){
  119.                             $mailParameters['bcc'] = $this->parameterBag->get('MAIL_BCC');
  120.                         }
  121.                         $this->apiService->sendMails($mailParameters);
  122.                     }
  123.                     $confirmMailParameters = [
  124.                         'subject' => 'Das Schadenformular wurde erfolgreich gesendet.',
  125.                         'to' => $form->get('email')->getData(),
  126.                         'body' => 'Vielen Dank für das einreichen des Schadenformulars.'
  127.                     ];
  128.                     if($form->get('ccEmail')->getData() !== null ) {
  129.                         $confirmMailParameters['cc'] = $form->get('ccEmail')->getData();
  130.                     }
  131.                     $this->apiService->sendMails($confirmMailParameters);
  132.                 }
  133.                 return $this->redirectToRoute('home');
  134.             }
  135.         }
  136.         return $this->renderForm('app/' $formTwigName '.html.twig', [
  137.             'form' => $form,
  138.         ]);
  139.     }
  140.     /**
  141.      * @Route("/export/data/{id}", name="export_data", defaults={"id"=null})
  142.      */
  143.     public function exportData($idEntityManagerInterface $entityManagerParameterBagInterface $paramsSerializerInterface $serializer): JsonResponse
  144.     {
  145.         $claimRepo $entityManager->getRepository(Claim::class);
  146.         if (null === $id) {
  147.             return $this->json($claimRepo->findNewEntries());
  148.         }
  149.         $claim $claimRepo->find($id);
  150.         return $this->json($claim);
  151.     }
  152.     /**
  153.      * @Route("/ack/{id}", name="ack")
  154.      * @Security("is_granted('ROLE_USER')")
  155.      */
  156.     public function ack(Claim $claimEntityManagerInterface $entityManager): JsonResponse
  157.     {
  158.         $claim->setAckAt(new \DateTime());
  159.         $this->fileUploadService->removeClaimFile($claim);
  160.         $entityManager->persist($claim);
  161.         $entityManager->flush();
  162.         return $this->json([
  163.             'success' => true,
  164.         ]);
  165.     }
  166.     /**
  167.      * @Route("/delete/{claim}", name="delete")
  168.      * @Security("is_granted('ROLE_USER')")
  169.      */
  170.     public function delete(Claim $claimEntityManagerInterface $entityManager): JsonResponse
  171.     {
  172.         $claim->setDeletedAt(new \DateTime());
  173.         $this->fileUploadService->removeClaimFile($claim);
  174.         $entityManager->persist($claim);
  175.         $entityManager->flush();
  176.         return $this->json([
  177.             'success' => true,
  178.         ]);
  179.     }
  180. }