src/Controller/CustomerController.php line 1206

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\Tags;
  4. use App\Entity\TagsPerson;
  5. use App\Entity\Person;
  6. use App\Entity\Speaker;
  7. use App\Form\PersonType;
  8. use App\Service\UiService;
  9. use App\Utils\CountryHelper;
  10. use App\Entity\CustomerDocument;
  11. use App\Entity\ManualNewsletter;
  12. use App\Form\CustomerHistoryType;
  13. use Menke\UserBundle\Entity\User;
  14. use App\Form\CustomerDocumentType;
  15. use App\Form\TagsPersonType;
  16. use App\Repository\CartRepository;
  17. use App\Repository\OrderRepository;
  18. use Doctrine\ORM\NoResultException;
  19. use App\Entity\CustomerHistoryEntry;
  20. use App\Repository\TagsRepository;
  21. use App\Repository\TagsPersonRepository;
  22. use App\Repository\PersonRepository;
  23. use App\Service\EmailHistoryService;
  24. use App\Repository\InvoiceRepository;
  25. use App\Service\CustomerHistoryService;
  26. use App\Repository\ClientConfigRepository;
  27. use App\Repository\ProtocolEntryRepository;
  28. use Doctrine\Common\Collections\Collection;
  29. use Doctrine\ORM\EntityManagerInterface;
  30. use Menke\UserBundle\Service\MailerService;
  31. use Symfony\Component\HttpFoundation\Request;
  32. use App\Repository\CustomerDocumentRepository;
  33. use Symfony\Component\HttpFoundation\Response;
  34. use App\Repository\OAuth\AccessTokenRepository;
  35. use Menke\UserBundle\Repository\UserRepository;
  36. use Symfony\Component\Routing\Annotation\Route;
  37. use App\Repository\OAuth\RefreshTokenRepository;
  38. use App\Repository\CustomerHistoryEntryRepository;
  39. use Symfony\Component\HttpFoundation\RequestStack;
  40. use Menke\UserBundle\Controller\AbstractClientableController;
  41. use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
  42. use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
  43. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  44. use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;
  45. use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
  46. use Symfony\Component\Security\Csrf\TokenGenerator\TokenGeneratorInterface;
  47. use Doctrine\Persistence\ManagerRegistry;
  48. /**
  49.  * @Route("/customer")
  50.  * @IsGranted("ROLE_SPEAKER")
  51.  */
  52. class CustomerController extends AbstractClientableController
  53. {
  54.     const LISTING_LIMIT 25;
  55.     /**
  56.      * @Route("/", name="customer_index", methods="GET")
  57.      */
  58.     public function index(
  59.         PersonRepository $personRepository,
  60.         UiService $uiService,
  61.         TagsPersonRepository  $tagsPersonRepository,
  62.         TagsRepository  $tagsRepository,
  63.         Request $request,
  64.         RequestStack $requestStack,
  65.     ): Response {
  66.        
  67.         $order $uiService->getSortOrder('customer-index-listing');
  68.        $tags $request->get('tag');
  69.         if ($tags) {
  70.             $requestStack->getSession()->set('tag'$tags);
  71.         }
  72.         $customers $personRepository->getCustomersByClientPaged(
  73.             $this->getCurrentClient(),
  74.             self::LISTING_LIMIT,
  75.             $order['orderDirection'] ?? 'ASC',
  76.             $order['orderBy'] ?? 'lastname',
  77.             1,
  78.             ($tags) ? $tags null,
  79.         );
  80.        
  81.      
  82.         return $this->render('customer/index.html.twig', [
  83.             'uiService' => $uiService,
  84.             'customers' => $customers,
  85.             'tagsPerson' => $tagsPersonRepository->findAll(),
  86.             'tags' => $tagsRepository->findAll(),
  87.             'total' => $customers->count(),
  88.             'pages' => ceil($customers->count() / self::LISTING_LIMIT),
  89.             'page' => 1,
  90.             'tag' => $request->get('tag'),
  91.         ]);
  92.     }
  93.  /**
  94.      * @Route("/export/all/{tag}", name="customer_export_all", methods="GET", defaults={"tag"=""})
  95.      */
  96.     public function indexexportall(
  97.         PersonRepository $personRepository,
  98.         UiService $uiService,
  99.       $tag,
  100.        
  101.        ): Response {
  102.       
  103.         $people $personRepository->getPersonByClient(
  104.             $this->getCurrentClient(),
  105.             true,
  106.             false,
  107.             $tag,
  108.             'asc',
  109.             'lastname',
  110.           
  111.            
  112.         );
  113.      
  114.             $response $this->render('person/export-addresses.csv.twig', [
  115.                 'people' => $people
  116.             ]);
  117.     
  118.             $response->setStatusCode(200);
  119.             $response->headers->set('Content-Type''text/csv; charset=utf-8');
  120.            
  121.             $response->headers->set('Content-Disposition''attachment; filename="Personen.csv"');
  122.             
  123.             return $response;
  124.  
  125.     }
  126.       /**
  127.      * @Route("/{page}/{orderby}/{order}", name="customer_index_listing", methods="GET", requirements={"page"="\d+","order"="asc|desc"})
  128.      */
  129.     public function indexListing(
  130.         PersonRepository $personRepository,
  131.         UiService $uiService,
  132.         $page,
  133.         $orderby,
  134.         $order,
  135.         TagsPersonRepository  $tagsPersonRepository,
  136.     ): Response {
  137.         $uiService->storeSortOrder('customer-index-listing'$orderby$order);
  138.         $customers $personRepository->getCustomersByClientPaged(
  139.             $this->getCurrentClient(),
  140.             self::LISTING_LIMIT,
  141.             $order,
  142.             $orderby,
  143.             $page
  144.         );
  145.         return $this->render('customer/_index_listing.html.twig', [
  146.             'uiService' => $uiService,
  147.             'customers' => $customers,
  148.             'total' => $customers->count(),
  149.             'tagsPerson' => $tagsPersonRepository->findAll(),
  150.             'pages' => ceil($customers->count() / self::LISTING_LIMIT),
  151.             'page' => 1,
  152.         ]);
  153.     }
  154.     /**
  155.      * @Route("/family", name="customer_family_index", methods="GET")
  156.      */
  157.     public function indexFamily(PersonRepository $personRepository): Response
  158.     {
  159.         $customers $personRepository->getFamilyByClientPaged(
  160.             $this->getCurrentClient(),
  161.             self::LISTING_LIMIT,
  162.             'ASC',
  163.             'lastname',
  164.             1
  165.         );
  166.         return $this->render('customer/index_family.html.twig', [
  167.             'env' => $_ENV,
  168.             'customers' => $customers,
  169.             'total' => $customers->count(),
  170.             'pages' => ceil($customers->count() / self::LISTING_LIMIT),
  171.             'page' => 1,
  172.         ]);
  173.     }
  174.     /**
  175.      * @Route("/{id}/invoice-recipient", name="customer_invoice_recipient", methods="GET")
  176.      */
  177.     public function invoiceRecipient(
  178.         Request $request,
  179.         Person $person,
  180.         PersonRepository $repo
  181.     ) {
  182.         $this->denyAccessUnlessGranted('ROLE_MANAGER'$person);
  183.         $family $repo->findInvoiceReciepsByCustomerPaged(
  184.             $person,
  185.             self::LISTING_LIMIT
  186.         );
  187.         return $this->render('customer/invoice_recipient.html.twig', [
  188.             'env' => $_ENV,
  189.             'customer' => $person,
  190.             'family' => $family->getIterator(),
  191.             'total' => $family->count(),
  192.             'pages' => ceil($family->count() / self::LISTING_LIMIT),
  193.             'page' => 1,
  194.         ]);
  195.     }
  196.     /**
  197.      * @Route("/family/{page}/{orderby}/{order}/{filter}", name="customer_family_index_listing", methods="GET|POST", requirements={"page"="\d+","order"="asc|desc"}, defaults={"filter"=""})
  198.      */
  199.     public function indexFamilyListing(
  200.         PersonRepository $personRepository,
  201.         $page,
  202.         $orderby,
  203.         $order,
  204.         $filter
  205.     ): Response {
  206.         $parsedFilters = [];
  207.         if ($filter) {
  208.             $filter explode('&'$filter);
  209.             foreach ($filter as $item) {
  210.                 $item explode('='$item);
  211.                 $key filter_var($item[0], FILTER_SANITIZE_STRING);
  212.                 $value filter_var($item[1], FILTER_SANITIZE_STRING);
  213.                 $parsedFilters[$key] = $value;
  214.             }
  215.         }
  216.         $customers $personRepository->getFamilyByClientPaged(
  217.             $this->getCurrentClient(),
  218.             self::LISTING_LIMIT,
  219.             $order,
  220.             $orderby,
  221.             $page,
  222.             $parsedFilters
  223.         );
  224.         return $this->render('customer/_index_family_listing.html.twig', [
  225.             'env' => $_ENV,
  226.             'customers' => $customers,
  227.             'total' => $customers->count(),
  228.             'pages' => ceil($customers->count() / self::LISTING_LIMIT),
  229.             'page' => $page,
  230.         ]);
  231.     }
  232.     /**
  233.      * @Route("/new", name="customer_new", methods="GET|POST")
  234.      */
  235.     public function new(
  236.         Request $request,
  237.         UserPasswordHasherInterface $passwordHasher,
  238.         TokenGeneratorInterface $generator,
  239.         MailerService $mailer,
  240.         CountryHelper $countryHelper,
  241.         ClientConfigRepository $configRepo,
  242.         EmailHistoryService $emailHistoryService,
  243.         ManagerRegistry $managerRegistry,
  244.         UserRepository $userRepository,
  245.         
  246.     ): Response {
  247.         $person = new Person();
  248.         $form $this->createForm(PersonType::class, $person, [
  249.             'form_type' => PersonType::TYPE_CUSTOMER,
  250.             'countries' => $countryHelper->getCountryChoices(),
  251.         ]);
  252.         $form->handleRequest($request);
  253.         if ($form->isSubmitted() && $form->isValid()) {
  254.             $clientConfig $configRepo->getSingleByClient(
  255.                 $this->getCurrentClient()
  256.             );
  257.             try {
  258.                 $interval = new \DateInterval(
  259.                     'P' $clientConfig->getAutoDeleteSpanCustomer()
  260.                 );
  261.             } catch (\Exception $e) {
  262.                 $interval = new \DateInterval('P1Y');
  263.             }
  264.             $user $person->getUser();
  265.             //Set random Password. Is then changed by the user
  266.             if (empty($user->getPassword())) {
  267.                 $user->setPassword(
  268.                     substr(
  269.                         $generator->generateToken(),
  270.                         0,
  271.                         8
  272.                     )
  273.                 );
  274.             }
  275.             $hash $passwordHasher->hashPassword($user$user->getPassword());
  276.             $user->setPassword($hash);
  277.             if ($_ENV['SEND_MAIL_TO_NEW_BACKEND_GENERATED_USER'] == '1'){
  278.                 $user->setActivateToken($generator->generateToken());
  279.                 $user->setActivateRequestedAt(new \DateTime());
  280.             } else {
  281.                 $user->setActivatedAt(new \DateTime());
  282.                     }
  283.             $person->setIsCustomer(true);
  284.             $person->getUser()->setRole(User::ROLE_USER);
  285.             $person->getUser()->setClient($this->getCurrentClient());
  286. // check if username (eMail) exists and throw error
  287.             $username $form->get('user')->getData();
  288.              if($userRepository->findOneBy(['username' => ''.$username.'']))
  289.             {
  290.                 $this->addFlash('error''Die "E-Mail / Benutzername" '$username' gibt es schon!');
  291.                 return $this->render('customer/new.html.twig', [
  292.                     'env' => $_ENV,
  293.                     'customer' => $person,
  294.                     'form' => $form->createView(),
  295.                     'create' => true,
  296.                     
  297.                 ]);
  298.             }
  299.         $person->setCreated(new \Datetime());
  300.         $person->getUser()->setCreated(new \Datetime());
  301.             $person->setDeleteDate(date_add(new \DateTime(), $interval));
  302.             $managerRegistry->getManager()->persist($person);
  303.          //   $em = $this->getDoctrine()->getManager();
  304.          //   $em->persist($person);
  305.             if ($person->isPrivacyPolicyConfirmed()) {
  306.                 $entry CustomerHistoryEntry::createForPrivacyPolicyConfirm(
  307.                     $person,
  308.                     $this->getCurrentUser()->getEmail()
  309.                 );
  310.                 $managerRegistry->getManager()->persist($entry);
  311.                 //         $em->persist($entry);
  312.             }
  313.             if ($person->isSpeaker()) {
  314.                 $speaker = new Speaker();
  315.                 $speaker->setPerson($person);
  316.                 $person->getUser()->setRole(User::ROLE_SPEAKER);
  317.                 $managerRegistry->getManager()->persist($speaker); 
  318.          //      $em->persist($speaker);
  319.             }
  320.                  $managerRegistry->getManager()->flush(); 
  321.          
  322.            
  323.          //   $em->flush();
  324.             if ($_ENV['SEND_MAIL_TO_NEW_BACKEND_GENERATED_USER'] == '1'){
  325.                 $sentMessage $mailer->sendActivateMessage(
  326.                     $user,
  327.                     $user->getActivateToken()
  328.                 );
  329.                 $sentMessage['message'] = 'Es wurde eine Aktivierungs-E-Mail gesendet.';
  330.              }
  331.              else {
  332.               
  333.                 $sentMessage['subject'] = 'Neuer Kunde im Backend angelegt';
  334.                 $sentMessage['message'] = 'Es wurde KEINE Aktivierungs-E-Mail gesendet.';
  335.             }
  336.             $emailHistoryService->saveProtocolEntriesFromPerson(
  337.                 $this->getCurrentClient(),
  338.                 $person,
  339.                 $this->getCurrentUser()->getEmail(),
  340.                 $sentMessage['subject'],
  341.                 $sentMessage['message'],
  342.                 'Der neue Kunde wurde erstellt.'
  343.             );
  344.            
  345. // Es wird auch ein Teilnehmer mit angelegt
  346.             $familymember = new Person();
  347.             $familymember->setIsCustomer(false);
  348.             $familymember->setFamilyMemberOf($person);
  349.             $familymember->setFirstname($person->getFirstname());
  350.             $familymember->setLastname($person->getLastname());
  351.             $familymember->setCreated(new \Datetime());
  352.             $managerRegistry->getManager()->persist($familymember);       
  353.      //       $em->persist($familymember);
  354.      //       $em->flush();
  355.      $managerRegistry->getManager()->flush(); 
  356.                 $this->addFlash('notice''Kunde angelegt');
  357.             return $this->redirectToRoute('customer_index');
  358.         }
  359.         return $this->render('customer/new.html.twig', [
  360.             'env' => $_ENV,
  361.             'customer' => $person,
  362.             'form' => $form->createView(),
  363.             'create' => true
  364.         ]);
  365.     }
  366.     /**
  367.      * @Route("/{id}/edit", name="customer_edit", methods="GET|POST")
  368.      */
  369.     public function edit(
  370.         Request $request,
  371.         Person $person,
  372.         UserPasswordHasherInterface $passwordHasher,
  373.         TagsPersonRepository  $tagsPersonRepository,
  374.         TagsRepository  $tagsRepository,
  375.         CountryHelper $countryHelper,
  376.         ClientConfigRepository $configRepo,
  377.         CustomerHistoryEntryRepository $customerHistoryRepo,
  378.         TokenGeneratorInterface $generator,
  379.         OrderRepository $orderRepository,
  380.         UserRepository $userRepository,
  381.         MailerService $mailer,
  382.         EmailHistoryService $emailHistoryService,
  383.         ManagerRegistry $managerRegistry,
  384.        
  385.     ): Response {
  386.         $newsletterSetByAdmin null;
  387.         $this->denyAccessUnlessGranted('ROLE_MANAGER'$person);
  388.         if (!$person->isCustomer()) {
  389.             throw new NotFoundHttpException();
  390.         }
  391.         $managerRegistry->getManager()->persist($person);
  392.         
  393.         if (!$person->getDeleteDate()){
  394.             $clientConfig $configRepo->getSingleByClient(
  395.                 $this->getCurrentClient()
  396.             );
  397.             $interval = new \DateInterval(
  398.                 'P' $clientConfig->getAutoDeleteSpanCustomer()
  399.             );
  400.             $person->setDeleteDate(date_add(new \DateTime(), $interval));
  401.        //     $em = $this->getDoctrine()->getManager();
  402.       
  403.        $person->setModified(new \datetime());
  404.        //     $em->persist($person);
  405.        $managerRegistry->getManager()->persist($person);
  406.        $managerRegistry->getManager()->flush(); 
  407.        //     $em->flush();
  408.         }
  409.        
  410.         /**
  411.          * history entry if the comment has changed
  412.          */
  413.         $requestComment null;
  414.         if (isset($request->request->get('person')['comment'])) {
  415.             $requestComment $request->request->get('person')['comment'];
  416.         }
  417.        
  418.         
  419.         if ($person->getComment() != $requestComment) {
  420.             $entry = new CustomerHistoryEntry();
  421.             $outComment strlen($requestComment) > 30 substr($requestComment050) . "..." $requestComment;
  422.             $entry->setEntry(
  423.                 "Kunde: " .
  424.                     $person->getFirstname() . " " .
  425.                     $person->getLastname() . "<br/>" .
  426.                     "Kommentar wurde geändert: " $outComment
  427.             );
  428.             $entry->setCustomer($person);
  429.             $entry->setSystemAgent($this->getCurrentUser()->getEmail());
  430.             $managerRegistry->getManager()->persist($entry);
  431.          //   $em = $this->getDoctrine()->getManager();
  432.          //   $em->persist($entry);
  433.         }
  434.         #dd("GLEICH");
  435.         try {
  436.             $latestNewsletterEntry $customerHistoryRepo->findLatestByCustomerAndType(
  437.                 $person,
  438.                 [
  439.                     CustomerHistoryEntry::TYPE_NEWSLETTER_REGISTER,
  440.                     CustomerHistoryEntry::TYPE_NEWSLETTER_DEREGISTER,
  441.                 ]
  442.             );
  443.         } catch (NoResultException $e) {
  444.             $latestNewsletterEntry null;
  445.         }
  446.        
  447.         if ($latestNewsletterEntry && $latestNewsletterEntry->getAdminId() ) {
  448.             $newsletterSetByAdmin $userRepository->find(
  449.                 $latestNewsletterEntry->getAdminId()
  450.             );
  451.             if ($newsletterSetByAdmin) {
  452.                 $newsletterInfo['admin_info'] = $newsletterSetByAdmin->getUsername();
  453.                 $person->setReceiveNewsletter(true);
  454.             }
  455.             if ($latestNewsletterEntry->getManualNewsletter()) {
  456.                 $newsletterInfo['activated'] = $latestNewsletterEntry
  457.                     ->getManualNewsletter()
  458.                     ->getActivated();
  459.                     $person->setReceiveNewsletter(true);
  460.             }
  461.         }
  462.         $newsletterEdit $request->request->get('newsletter-check');
  463.         if (is_null($newsletterEdit)) {
  464.             $newsletterEdit CustomerHistoryEntry::TYPE_NEWSLETTER_DEREGISTER;
  465.         }
  466.         $isPrivacyPolicyConfirmed $person->isPrivacyPolicyConfirmed();
  467.         $oldDateOoFBirth $person->getDateOfBirth()
  468.             ? $person->getDateOfBirth()->format('Y-m-d')
  469.             : null;
  470.         $form $this->createForm(PersonType::class, $person, [
  471.             'required_pw' => false,
  472.             'is_edit_form' => true,
  473.             'form_type' => PersonType::TYPE_CUSTOMER,
  474.             'countries' => $countryHelper->getCountryChoices(),
  475.         ]);
  476.         $form->handleRequest($request);
  477.         if ($form->isSubmitted()) {
  478.             if ($form->isValid()) {
  479.          //       $em = $this->getDoctrine()->getManager();
  480.                 if (
  481.                     $person->isPrivacyPolicyConfirmed() !==
  482.                     $isPrivacyPolicyConfirmed
  483.                 ) {
  484.                     if ($person->isPrivacyPolicyConfirmed()) {
  485.                         $entry CustomerHistoryEntry::createForPrivacyPolicyConfirm(
  486.                             $person,
  487.                             $this->getCurrentUser()->getEmail()
  488.                         );
  489.                     } else {
  490.                         $entry CustomerHistoryEntry::createForPrivacyPolicyDeconfirm(
  491.                             $person,
  492.                             $this->getCurrentUser()->getEmail()
  493.                         );
  494.                     }
  495.              //       $em->persist($entry);
  496.              $managerRegistry->getManager()->persist($entry);
  497.                 }
  498.                 $emailFrom =
  499.                     $this->getUser()
  500.                     ->getClient()
  501.                     ->getEmail();
  502.                 //Deregister an newsletter
  503.                 if (
  504.                     $latestNewsletterEntry &&
  505.                     $latestNewsletterEntry->getType() ===
  506.                     CustomerHistoryEntry::TYPE_NEWSLETTER_REGISTER
  507.                 ) {
  508.                   
  509.                     if ($latestNewsletterEntry->getType() != $newsletterEdit) {
  510.                         $item = new CustomerHistoryEntry();
  511.                         $item->setCustomer($person);
  512.                         $item->setEntry(
  513.                             'Newsletter abgemeldet durch einen Admin.'
  514.                         );
  515.                         $item->setSystemAgent('rest_activation');
  516.                         $item->setDate(new \DateTime());
  517.                         $item->setType(
  518.                             CustomerHistoryEntry::TYPE_NEWSLETTER_DEREGISTER
  519.                         );
  520.                         $item->setAdminId($this->getCurrentUser()->getId());
  521.                         $item->setSetByAdmin(true);
  522.                     //    $em->persist($item);
  523.                     $managerRegistry->getManager()->persist($item);
  524.                         $person->setReceiveNewsletter(false);
  525.                //         $em->persist($person);
  526.                $person->setModified(new \datetime());
  527.               
  528.                         $sentMessage $mailer->sendDeactivatedMessage(
  529.                             $emailFrom,
  530.                             $person->getContactEmail()
  531.                         );
  532.                         $emailHistoryService->saveProtocolEntriesFromPerson(
  533.                             $this->getCurrentClient(),
  534.                             $person,
  535.                             $emailFrom,
  536.                             $sentMessage['subject'],
  537.                             $sentMessage['message'],
  538.                             'Newsletter deabonniert'
  539.                         );
  540.                     }
  541.                 } elseif (
  542.                     //Register manually a newsletter for a client.
  543.                     $latestNewsletterEntry &&
  544.                     $latestNewsletterEntry->getType() ===
  545.                     CustomerHistoryEntry::TYPE_NEWSLETTER_DEREGISTER
  546.                 ) {
  547.                     if ($latestNewsletterEntry->getType() != $newsletterEdit) {
  548.                         $moment = new \DateTime();
  549.                         $newsletter = new ManualNewsletter();
  550.                         $newsletter->setActivateToken(
  551.                             $generator->generateToken()
  552.                         );
  553.                         $newsletter->setActivated(false);
  554.                         $newsletter->setKeyExpired(
  555.                             $moment->add(new \DateInterval('P1D'))
  556.                         );
  557.                         $newsletter->setPerson($person);
  558.                //         $em->persist($newsletter);
  559.                $managerRegistry->getManager()->persist($newsletter);
  560.                         $item = new CustomerHistoryEntry();
  561.                         $item->setCustomer($person);
  562.                         $item->setEntry(
  563.                             'Newsletter abonniert von einem Admin.'
  564.                         );
  565.                         $item->setSystemAgent('rest_activation');
  566.                         $item->setDate(new \DateTime());
  567.                         $item->setType(
  568.                             CustomerHistoryEntry::TYPE_NEWSLETTER_REGISTER
  569.                         );
  570.                         $item->setAdminId($this->getCurrentUser()->getId());
  571.                         $item->setSetByAdmin(true);
  572.                         $item->setManualNewsletter($newsletter);
  573.                   // $em->persist($item);
  574.                   $managerRegistry->getManager()->persist($item);
  575.                         $url $this->generateUrl(
  576.                             'subscribe_newsletter_set_by_admin',
  577.                             ['token' => $newsletter->getActivateToken()],
  578.                             UrlGeneratorInterface::ABSOLUTE_URL
  579.                         );
  580.                         $sentMessage $mailer->sendActivatedMessage(
  581.                             $emailFrom,
  582.                             $url,
  583.                             $person->getContactEmail()
  584.                         );
  585.                         $emailHistoryService->saveProtocolEntriesFromPerson(
  586.                             $this->getCurrentClient(),
  587.                             $person,
  588.                             $emailFrom,
  589.                             $sentMessage['subject'],
  590.                             $sentMessage['message'],
  591.                             'Newsletter Aktivierungs-E-Mail gesendet'
  592.                         );
  593.                     }
  594.                 } else {
  595.                     //If no lates Newsletter Entry exists and the Admin want to register this client.
  596.                     if (
  597.                         !$latestNewsletterEntry &&
  598.                         $newsletterEdit === CustomerHistoryEntry::TYPE_NEWSLETTER_REGISTER
  599.                     ) {
  600.                         $moment = new \DateTime();
  601.                         $newsletter = new ManualNewsletter();
  602.                         $newsletter->setActivateToken(
  603.                             $generator->generateToken()
  604.                         );
  605.                         $newsletter->setActivated(false);
  606.                         $newsletter->setKeyExpired(
  607.                             $moment->add(new \DateInterval('P1D'))
  608.                         );
  609.                         $newsletter->setPerson($person);
  610.                     //    $em->persist($newsletter);
  611.                     $managerRegistry->getManager()->persist($newsletter);
  612.                         $item = new CustomerHistoryEntry();
  613.                         $item->setCustomer($person);
  614.                         $item->setEntry(
  615.                             'Newsletter abonniert von einem Admin.'
  616.                         );
  617.                         $item->setSystemAgent('rest_activation');
  618.                         $item->setDate(new \DateTime());
  619.                         $item->setType(
  620.                             CustomerHistoryEntry::TYPE_NEWSLETTER_REGISTER
  621.                         );
  622.                         $item->setAdminId($this->getCurrentUser()->getId());
  623.                         $item->setSetByAdmin(true);
  624.                         $item->setManualNewsletter($newsletter);
  625.                         
  626.                     //    $em->persist($item);
  627.                     $managerRegistry->getManager()->persist($item);
  628.                         $url $this->generateUrl(
  629.                             'subscribe_newsletter_set_by_admin',
  630.                             ['token' => $newsletter->getActivateToken()],
  631.                             UrlGeneratorInterface::ABSOLUTE_URL
  632.                         );
  633.                         $sentMessage $mailer->sendActivatedMessage(
  634.                             $emailFrom,
  635.                             $url,
  636.                             $person->getContactEmail()
  637.                         );
  638.                         $emailHistoryService->saveProtocolEntriesFromPerson(
  639.                             $this->getCurrentClient(),
  640.                             $person,
  641.                             $emailFrom,
  642.                             $sentMessage['subject'],
  643.                             $sentMessage['message'],
  644.                             'Newsletter Aktivierungs-E-Mail gesendet'
  645.                         );
  646.                     }
  647.                 }
  648.                 if ($person->isSpeaker() && !$person->getSpeaker()) {
  649.                     $speaker = new Speaker();
  650.                     $speaker->setPerson($person);
  651.                     $person->getUser()->setRole(User::ROLE_SPEAKER);
  652.                 //    $em->persist($speaker);
  653.                 $managerRegistry->getManager()->persist($speaker);
  654.                 $speaker->setCreated(new \datetime());
  655.                     $this->addFlash('notice''Kunde in Referent umgewandelt');
  656.                 }
  657.                 // Update customer in booked items
  658.                
  659.                     $orders $orderRepository->findByCustomerPaged(
  660.                         $person,
  661.                     );
  662.                     foreach ($orders as $order) {
  663.                         $order->setCustomerTitle($person->getTitle());
  664.                         $order->setCustomerSalutation($person->getSalutation());                        
  665.                         $order->setCustomerMember($person->getMember());
  666.                         $order->setCustomerFirstname($person->getFirstname());
  667.                         $order->setCustomerLastname($person->getLastname());
  668.                         $order->setCustomerCompany($person->getCompany());
  669.                         $order->setCustomerMember($person->getMember());
  670.                         $order->setCustomerStreet($person->getStreet());
  671.                         $order->setCustomerStreetNumber($person->getStreetNumber());
  672.                         $order->setCustomerPostalcode($person->getPostalcode());
  673.                         $order->setCustomerCity($person->getCity());
  674.                         $order->setCustomerContactEmail($person->getContactEmail());
  675.                         $order->setCustomerPhone($person->getPhone());
  676.                        
  677.                        
  678.                         $order->setModified(new \datetime());
  679.                         $managerRegistry->getManager()->persist($order);
  680.                     }
  681.                 
  682.                 $adresses $person->updateOrderAddresses();
  683.                 if ($adresses) {
  684.                     foreach ($adresses as $adress) {
  685.                       
  686.                 //        $em->flush($adress);
  687.                 $managerRegistry->getManager()->flush($adress); 
  688.                     }
  689.                 }
  690.                // $em->flush();
  691.                 //check if email exists and return error 
  692.                $username $form->get('user')->getData();
  693.             $result $userRepository->findBy(['username' => ''.$username.'']);
  694.               
  695.             if(!isset($result[0]) || ((count($result) < ) && ($result[0]->getId() == $person->getUser()->getId())))
  696.                {
  697.                 $person->setModified(new \datetime());  
  698.                 $managerRegistry->getManager()->flush(); 
  699.                 $this->addFlash('notice''Kunde gespeichert');
  700.             }
  701.                else
  702.               {
  703.                   $this->addFlash('error''Die "E-Mail / Benutzername" '$username' gibt es schon!');
  704.   
  705.                  
  706.               }
  707.              
  708.                 //Redirect to Order
  709.                 if ($request->get('fromOrder')) {
  710.                    
  711.                     return $this->redirectToRoute('order_new', [
  712.                         'return' => $person->getId(),
  713.                     ]);
  714.                 }
  715.                 //Redirect to Invoice
  716.                 if ($request->get('fromInvoice')) {
  717.                          return $this->redirectToRoute('invoice_show', [
  718.                         'id' => $request->get('invoiceId'),
  719.                     ]);
  720.                 } else { return $this->redirectToRoute('customer_edit', [
  721.                         'id' => $person->getId(),
  722.                     ]);
  723.                 }
  724.             } else {
  725.                 $this->addFlash(
  726.                     'error',
  727.                     'Einige Felder enthalten ungültige Daten.'
  728.                 );
  729.             }
  730.         }
  731.         $managerRegistry->getManager()->persist($person);
  732.         $managerRegistry->getManager()->flush(); 
  733.         return $this->render('customer/edit.html.twig', [
  734.             'tagsPerson' => $tagsPersonRepository->findByTagByPerson($person->getId()),
  735.             'tags' => $tagsRepository->findAll(),
  736.             'env' => $_ENV,
  737.             'customer' => $person,
  738.             'form' => $form->createView(),
  739.             'latestNewsletterEntry' => $latestNewsletterEntry,
  740.             'newsletterSetByAdmin' => $newsletterInfo ?? null,
  741.         ]);
  742.     }
  743.     /**
  744.      * @Route("/{id}", name="customer_delete", methods="DELETE", requirements={"id"="\d+"})
  745.      */
  746.     public function delete(
  747.         Request $request,
  748.         Person $customer,
  749.         PersonRepository $personRepo,
  750.         CartRepository $cartRepo,
  751.         AccessTokenRepository $accessTokenRepos,
  752.         RefreshTokenRepository $refreshTokenRepo,
  753.         ProtocolEntryRepository $protocolRepository
  754.     ): Response {
  755.         $this->denyAccessUnlessGranted('ROLE_MANAGER'$customer);
  756.         if (!$customer->isCustomer()) {
  757.             throw new NotFoundHttpException();
  758.         }
  759.         if (
  760.             $this->isCsrfTokenValid(
  761.                 'delete' $customer->getId(),
  762.                 $request->request->get('_token')
  763.             )
  764.         ) {
  765.             $em $this->getDoctrine()->getManager();
  766.             if (!$customer->isCustomer()) {
  767.                 return $this->redirectToRoute('customer_index');
  768.             }
  769.             $this->removeCustomer(
  770.                 $customer,
  771.                 $personRepo,
  772.                 $cartRepo,
  773.                 $accessTokenRepos,
  774.                 $refreshTokenRepo,
  775.                 $em
  776.             );
  777.             if (!$customer->isSpeaker()) {
  778.                 $this->removeUser($customer->getUser(), $protocolRepository);
  779.                 $em->remove($customer);
  780.                 $em->remove($customer->getUser());
  781.             } else {
  782.                 $customer->setIsCustomer(false);
  783.             }
  784.             $em->flush();
  785.             $this->addFlash('notice''Kunde gelöscht');
  786.         }
  787.         return $this->redirectToRoute('customer_index');
  788.     }
  789.     /**
  790.      * @Route("/multiple", name="customer_delete-multiple", methods="DELETE")
  791.      */
  792.     public function deleteMultiple(
  793.         Request $request,
  794.         PersonRepository $personRepo,
  795.         CartRepository $cartRepo,
  796.         AccessTokenRepository $accessTokenRepos,
  797.         RefreshTokenRepository $refreshTokenRepo,
  798.         ProtocolEntryRepository $protocolRepository
  799.     ): Response {
  800.         if (
  801.             $this->isCsrfTokenValid(
  802.                 'delete_customers',
  803.                 $request->request->get('_token')
  804.             )
  805.         ) {
  806.             $em $this->getDoctrine()->getManager();
  807.             $deleteIds $request->request->get('item');
  808.             foreach ($deleteIds as $id => $value) {
  809.                 if ($value) {
  810.                     $customer $personRepo->find($id);
  811.                     $this->denyAccessUnlessGranted('ROLE_MANAGER'$customer);
  812.                     if (!$customer->isCustomer()) {
  813.                         continue;
  814.                     }
  815.                     $this->removeCustomer(
  816.                         $customer,
  817.                         $personRepo,
  818.                         $cartRepo,
  819.                         $accessTokenRepos,
  820.                         $refreshTokenRepo,
  821.                         $em
  822.                     );
  823.                     if (!$customer->isSpeaker()) {
  824.                         $this->removeUser(
  825.                             $customer->getUser(),
  826.                             $protocolRepository
  827.                         );
  828.                         $em->remove($customer);
  829.                         $em->remove($customer->getUser());
  830.                     } else {
  831.                         $customer->setIsCustomer(false);
  832.                     }
  833.                 }
  834.             }
  835.             $em->flush();
  836.             $this->addFlash(
  837.                 'notice',
  838.                 count($deleteIds) > 'Kunden gelöscht' 'Kunde gelöscht'
  839.             );
  840.         }
  841.         return $this->redirectToRoute('customer_index');
  842.     }
  843.     protected function removeUser(
  844.         User $user,
  845.         ProtocolEntryRepository $protocolRepository
  846.     ) {
  847.         $entries $protocolRepository->findBy(['user' => $user]);
  848.         foreach ($entries as $entry) {
  849.             $entry->setUser(null);
  850.         }
  851.     }
  852.     protected function removeCustomer(
  853.         Person &$customer,
  854.         PersonRepository $personRepo,
  855.         CartRepository $cartRepo,
  856.         AccessTokenRepository $accessTokenRepos,
  857.         RefreshTokenRepository $refreshTokenRepo,
  858.         $em
  859.     ) {
  860.         foreach ($customer->getOrders() as $order) {
  861.             $order->setCustomer(null);
  862.             foreach ($order->getOrderItems() as $item) {
  863.                 foreach ($item->getParticipants() as $participant) {
  864.                     $participant->setPerson(null);
  865.                 }
  866.             }
  867.             foreach ($order->getWaitItems() as $item) {
  868.                 foreach ($item->getParticipants() as $participant) {
  869.                     $participant->setPerson(null);
  870.                 }
  871.             }
  872.             foreach ($order->getInvoices() as $invoice) {
  873.                 foreach ($invoice->getItems() as $item) {
  874.                     foreach ($item->getParticipants() as $participant) {
  875.                         $participant->setPerson(null);
  876.                     }
  877.                 }
  878.             }
  879.         }
  880.         $familyMembers $personRepo->findBy(['familyMemberOf' => $customer]);
  881.         foreach ($familyMembers as $familyMember) {
  882.             $familyMember->setFamilyMemberOf(null);
  883.             $em->remove($familyMember);
  884.         }
  885.         foreach ($customer->getCourses() as $course) {
  886.             $customer->removeCourse($course);
  887.         }
  888.         foreach ($customer->getDocuments() as $document) {
  889.             $documentIds[] = $document->getId();
  890.             $em->remove($document);
  891.         }
  892.         foreach ($customer->getHistory() as $historyEntry) {
  893.             $em->remove($historyEntry);
  894.         }
  895.         $carts $cartRepo->findBy(['customer' => $customer]);
  896.         foreach ($carts as $cart) {
  897.             $em->remove($cart);
  898.         }
  899.         $accessTokens $accessTokenRepos->findBy([
  900.             'user' => $customer->getUser(),
  901.         ]);
  902.         foreach ($accessTokens as $accessToken) {
  903.             $em->remove($accessToken);
  904.         }
  905.         $refreshTokens $refreshTokenRepo->findBy([
  906.             'user' => $customer->getUser(),
  907.         ]);
  908.         foreach ($refreshTokens as $refreshToken) {
  909.             $em->remove($refreshToken);
  910.         }
  911.         $em->flush();
  912.     }
  913.     /**
  914.      * @Route("/{id}/courses", name="customer_courses", methods="GET")
  915.      */
  916.     public function courses(
  917.         Request $request,
  918.         Person $person,
  919.         OrderRepository $repo,
  920.         UiService $uiService
  921.     ) {
  922.         $this->denyAccessUnlessGranted('ROLE_MANAGER'$person);
  923.         $order $uiService->getSortOrder('customer-courses-listing');
  924.         $orders $repo->findByCustomerPaged(
  925.             $person,
  926.             self::LISTING_LIMIT,
  927.             $order['orderDirection'] ?? 'ASC',
  928.             $order['orderBy'] ?? 'title',
  929.             1,
  930.             true
  931.         );
  932.         return $this->render('customer/courses.html.twig', [
  933.             'uiService' => $uiService,
  934.             'customer' => $person,
  935.             'orders' => $orders,
  936.             'total' => $orders->count(),
  937.             'pages' => ceil($orders->count() / self::LISTING_LIMIT),
  938.             'page' => 1,
  939.         ]);
  940.     }
  941.     /**
  942.      * @Route("/{id}/courses/{page}/{orderby}/{order}", name="customer_courses_listing", methods="GET")
  943.      */
  944.     public function courseListing(
  945.         Request $request,
  946.         Person $person,
  947.         $page,
  948.         $orderby,
  949.         $order,
  950.         OrderRepository $repo,
  951.         UiService $uiService
  952.     ) {
  953.         $this->denyAccessUnlessGranted('ROLE_MANAGER'$person);
  954.         $uiService->storeSortOrder(
  955.             'customer-courses-listing',
  956.             $orderby,
  957.             $order
  958.         );
  959.         $orders $repo->findByCustomerPaged(
  960.             $person,
  961.             self::LISTING_LIMIT,
  962.             $order,
  963.             $orderby,
  964.             $page,
  965.             true
  966.         );
  967.         return $this->render('customer/tabs/_courses_listing.html.twig', [
  968.             'orders' => $orders->getIterator(),
  969.             'total' => $orders->count(),
  970.             'pages' => ceil($orders->count() / self::LISTING_LIMIT),
  971.             'page' => $page,
  972.         ]);
  973.     }
  974.     /**
  975.      * @Route("/{id}/invoices", name="customer_invoices", methods="GET")
  976.      */
  977.     public function invoices(
  978.         Request $request,
  979.         Person $person,
  980.         InvoiceRepository $repo
  981.     ) {
  982.         $this->denyAccessUnlessGranted('ROLE_MANAGER'$person);
  983.         $invoices $repo->findByCustomerPaged($personself::LISTING_LIMIT);
  984.         return $this->render('customer/invoices.html.twig', [
  985.             'customer' => $person,
  986.             'invoices' => $invoices->getIterator(),
  987.             'total' => $invoices->count(),
  988.             'pages' => ceil($invoices->count() / self::LISTING_LIMIT),
  989.             'page' => 1,
  990.         ]);
  991.     }
  992.     /**
  993.      * @Route("/{id}/invoices/{page}/{orderby}/{order}/{search}", name="customer_invoices_listing", methods="GET", defaults={"search"=""})
  994.      */
  995.     public function invoicesListing(
  996.         Request $request,
  997.         Person $person,
  998.         $page,
  999.         $orderby,
  1000.         $order,
  1001.         $search,
  1002.         InvoiceRepository $repo
  1003.     ) {
  1004.         $this->denyAccessUnlessGranted('ROLE_MANAGER'$person);
  1005.         $invoices $repo->findByCustomerPaged(
  1006.             $person,
  1007.             self::LISTING_LIMIT,
  1008.             $order,
  1009.             $orderby,
  1010.             $page,
  1011.             false,
  1012.             $search
  1013.         );
  1014.         return $this->render('customer/tabs/_invoices_listing.html.twig', [
  1015.             'customer' => $person,
  1016.             'invoices' => $invoices->getIterator(),
  1017.             'total' => $invoices->count(),
  1018.             'pages' => ceil($invoices->count() / self::LISTING_LIMIT),
  1019.             'page' => $page,
  1020.         ]);
  1021.     }
  1022.     /**
  1023.      * @Route("/{id}/orders", name="customer_orders", methods="GET")
  1024.      */
  1025.     public function orders(
  1026.         Request $request,
  1027.         Person $person,
  1028.         OrderRepository $repo,
  1029.         UiService $uiService
  1030.     ) {
  1031.         $this->denyAccessUnlessGranted('ROLE_MANAGER'$person);
  1032.         $order $uiService->getSortOrder('customer-orders-listing');
  1033.         $orders $repo->findByCustomerPaged(
  1034.             $person,
  1035.             self::LISTING_LIMIT,
  1036.             $order['orderDirection'] ?? 'DESC',
  1037.             $order['orderBy'] ?? 'id'
  1038.         );
  1039.         return $this->render('customer/orders.html.twig', [
  1040.             'uiService' => $uiService,
  1041.             'customer' => $person,
  1042.             'orders' => $orders->getIterator(),
  1043.             'total' => $orders->count(),
  1044.             'pages' => ceil($orders->count() / self::LISTING_LIMIT),
  1045.             'page' => 1,
  1046.         ]);
  1047.     }
  1048.     /**
  1049.      * @Route("/{id}/orders/{page}/{orderby}/{order}/{search}", name="customer_orders_listing", methods="GET", defaults={"search"=""})
  1050.      */
  1051.     public function ordersListing(
  1052.         Person $person,
  1053.         $page,
  1054.         $orderby,
  1055.         $order,
  1056.         $search,
  1057.         OrderRepository $repo,
  1058.         UiService $uiService
  1059.     ): Response {
  1060.         $this->denyAccessUnlessGranted('ROLE_MANAGER'$person);
  1061.         $uiService->storeSortOrder('customer-orders-listing'$orderby$order);
  1062.         $orders $repo->findByCustomerPaged(
  1063.             $person,
  1064.             self::LISTING_LIMIT,
  1065.             $order,
  1066.             $orderby,
  1067.             $page,
  1068.             false,
  1069.             $search
  1070.         );
  1071.         return $this->render('customer/tabs/_orders_listing.html.twig', [
  1072.             'customer' => $person,
  1073.             'orders' => $orders->getIterator(),
  1074.             'total' => $orders->count(),
  1075.             'pages' => ceil($orders->count() / self::LISTING_LIMIT),
  1076.             'page' => $page,
  1077.         ]);
  1078.     }
  1079.     /**
  1080.      * @Route("/{id}/history", name="customer_history", methods="GET|POST")
  1081.      */
  1082.     public function history(
  1083.         Request $request,
  1084.         Person $person,
  1085.         CustomerHistoryService $service
  1086.     ) {
  1087.         $this->denyAccessUnlessGranted('ROLE_MANAGER'$person);
  1088.         $entry = new CustomerHistoryEntry();
  1089.         $form $this->createForm(CustomerHistoryType::class, $entry);
  1090.         $form->handleRequest($request);
  1091.         if ($form->isSubmitted() && $form->isValid()) {
  1092.             $user $this->getCurrentUser();
  1093.             $entry->setCustomer($person);
  1094.             $entry->setSystemAgent($user->getEmail());
  1095.             $em $this->getDoctrine()->getManager();
  1096.             $em->persist($entry);
  1097.             $em->flush();
  1098.             $this->addFlash('notice''History-Eintrag angelegt');
  1099.             return $this->redirectToRoute('customer_history', [
  1100.                 'id' => $person->getId(),
  1101.             ]);
  1102.         }
  1103.         $history $service->findByCustomerPaged(
  1104.             $person,
  1105.             self::LISTING_LIMIT
  1106.         );
  1107.         
  1108.             return $this->render('customer/history.html.twig', [
  1109.             'customer' => $person,
  1110.             'history' => $history->getIterator(),
  1111.            
  1112.             'total' => $history->count(),
  1113.             'pages' => ceil($history->count() / self::LISTING_LIMIT),
  1114.             'page' => 1,
  1115.             'history_add_form' => $form->createView(),
  1116.         ]);
  1117.     }
  1118.     /**
  1119.      * @Route("/{id}/history/{page}/{orderby}/{order}/{search}", name="customer_history_listing", methods="GET", defaults={"search"=""}, requirements={"page"="\d+"})
  1120.      */
  1121.     public function historyListing(
  1122.         Request $request,
  1123.         Person $person,
  1124.         $page,
  1125.         $orderby,
  1126.         $order,
  1127.         $search,
  1128.         CustomerHistoryService $service
  1129.     ) {
  1130.         $this->denyAccessUnlessGranted('ROLE_MANAGER'$person);
  1131.         $history $service->findByCustomerPaged(
  1132.             $person,
  1133.             self::LISTING_LIMIT,
  1134.             $order,
  1135.             $orderby,
  1136.             $page,
  1137.             $search
  1138.         );
  1139.         return $this->render('customer/tabs/_history_listing.html.twig', [
  1140.             'history' => $history->getIterator(),
  1141.             'total' => $history->count(),
  1142.             'pages' => ceil($history->count() / self::LISTING_LIMIT),
  1143.             'page' => $page,
  1144.         ]);
  1145.     }
  1146.     /**
  1147.      * @Route("/{id}/tags", name="tags_person", methods="GET|POST")
  1148.      */
  1149.     
  1150.         public function tagsPersonEintragen(
  1151.             Request $request,
  1152.             Person $person,
  1153.             TagsPersonRepository  $tagsPersonRepository,
  1154.             TagsRepository  $tagsRepository,
  1155.             ): Response
  1156.         
  1157.         {                    
  1158.              return $this->render('customer/tags.html.twig',[
  1159.                 'customer' => $person,
  1160.                 'tagsPerson' => $tagsPersonRepository->findByTagByPerson($person->getId()),
  1161.                 'tags' => $tagsRepository->findAll(),
  1162.                 
  1163.             ]);
  1164.         }
  1165.         
  1166.         private $managerRegistry;
  1167.         public function __construct(ManagerRegistry $managerRegistry)
  1168.         {
  1169.             $this->managerRegistry $managerRegistry->getManager();
  1170.         }
  1171.         
  1172.      /**
  1173.      * @Route("/{id}/tagsadd/{tags}", name="tags_person_add", methods="GET|POST")
  1174.      */
  1175.    
  1176.      public function saveTagsPersonNew(
  1177.      Person $person
  1178.      
  1179.      Tags $tags, )
  1180.     {
  1181.         $saveTagsPerson = new TagsPerson();
  1182.         $saveTagsPerson->setTags($tags);
  1183.         $saveTagsPerson->setPerson($person);
  1184.         $this->managerRegistry->persist($saveTagsPerson);
  1185.          $this->managerRegistry->flush();
  1186.          $this->addFlash('notice''Tag übertragen');
  1187.          return $this->redirectToRoute('tags_person', [
  1188.             'id' => $person->getId(),
  1189.         ]);
  1190.     }
  1191.     /**
  1192.      * @Route("/{id}/tagsremove/{tagid}", name="tags_person_remove", methods="GET|POST")
  1193.      */
  1194.    
  1195.      public function removeTagsEntry(
  1196.         $id
  1197.        
  1198.        TagsPerson $tagid,)
  1199.        {
  1200.             $em $this->getDoctrine()->getManager();
  1201.             $em->remove($tagid);
  1202.             $em->flush();
  1203.                 $this->addFlash('notice''Tag übertragen');
  1204.                 return $this->redirectToRoute('tags_person', [
  1205.                 'id' => $id,
  1206.             ]);
  1207.         }
  1208.     
  1209.     /**
  1210.      * @Route("/{id}/documents", name="customer_documents", methods="GET|POST")
  1211.      */
  1212.     public function documents(
  1213.         Request $request,
  1214.         Person $person,
  1215.         CustomerDocumentRepository $repo
  1216.     ) {
  1217.         $this->denyAccessUnlessGranted('ROLE_MANAGER'$person);
  1218.         $document = new CustomerDocument();
  1219.         $form $this->createForm(CustomerDocumentType::class, $document);
  1220.         $form->handleRequest($request);
  1221.         if ($form->isSubmitted() && $form->isValid()) {
  1222.             $user $this->getCurrentUser();
  1223.             $document->setCustomer($person);
  1224.             $document->setSystemAgent($user->getEmail());
  1225.             $em $this->getDoctrine()->getManager();
  1226.             $em->persist($document);
  1227.             $em->flush();
  1228.             $this->addFlash('notice''Dokument hochgeladen');
  1229.             return $this->redirectToRoute('customer_documents', [
  1230.                 'id' => $person->getId(),
  1231.             ]);
  1232.         }
  1233.         $documents $repo->findByCustomerPaged($personself::LISTING_LIMIT);
  1234.         return $this->render('customer/documents.html.twig', [
  1235.             'customer' => $person,
  1236.             'documents' => $documents->getIterator(),
  1237.             'total' => $documents->count(),
  1238.             'pages' => ceil($documents->count() / self::LISTING_LIMIT),
  1239.             'page' => 1,
  1240.             'document_add_form' => $form->createView(),
  1241.         ]);
  1242.     }
  1243.     /**
  1244.      * @Route("/{id}/documents/{page}/{orderby}/{order}/{search}", name="customer_document_listing", methods="GET", defaults={"search"=""})
  1245.      */
  1246.     public function documentListing(
  1247.         Request $request,
  1248.         Person $person,
  1249.         $page,
  1250.         $orderby,
  1251.         $order,
  1252.         $search,
  1253.         CustomerDocumentRepository $repo
  1254.     ) {
  1255.         $this->denyAccessUnlessGranted('ROLE_MANAGER'$person);
  1256.         $documents $repo->findByCustomerPaged(
  1257.             $person,
  1258.             self::LISTING_LIMIT,
  1259.             $order,
  1260.             $orderby,
  1261.             $page,
  1262.             $search
  1263.         );
  1264.         return $this->render('customer/tabs/_documents_listing.html.twig', [
  1265.             'documents' => $documents->getIterator(),
  1266.             'total' => $documents->count(),
  1267.             'pages' => ceil($documents->count() / self::LISTING_LIMIT),
  1268.             'page' => 1,
  1269.         ]);
  1270.     }
  1271.     /**
  1272.      * @Route("/{id}/family", name="customer_family", methods="GET|POST")
  1273.      */
  1274.     public function family(
  1275.         Request $request,
  1276.         Person $person,
  1277.         PersonRepository $repo
  1278.     ) {
  1279.         $this->denyAccessUnlessGranted('ROLE_MANAGER'$person);
  1280.         $family $repo->findFamilyByCustomerPaged(
  1281.             $person,
  1282.             self::LISTING_LIMIT
  1283.         );
  1284.         return $this->render('customer/family.html.twig', [
  1285.             'env' => $_ENV,
  1286.             'customer' => $person,
  1287.             'family' => $family->getIterator(),
  1288.             'total' => $family->count(),
  1289.             'pages' => ceil($family->count() / self::LISTING_LIMIT),
  1290.             'page' => 1,
  1291.         ]);
  1292.     }
  1293.     /**
  1294.      * @Route("/{id}/family/{page}/{orderby}/{order}/{search}", name="customer_family_listing", methods="GET", defaults={"search"=""})
  1295.      */
  1296.     public function familyListing(
  1297.         Request $request,
  1298.         Person $person,
  1299.         $page,
  1300.         $orderby,
  1301.         $order,
  1302.         $search,
  1303.         PersonRepository $repo
  1304.     ) {
  1305.         #dd($order, $orderby, $search);
  1306.         $this->denyAccessUnlessGranted('ROLE_MANAGER'$person);
  1307.         $family $repo->findFamilyByCustomerPaged(
  1308.             $person,
  1309.             self::LISTING_LIMIT,
  1310.             $order,
  1311.             $orderby,
  1312.             $page,
  1313.             $search
  1314.         );
  1315.         return $this->render('customer/tabs/_family_listing.html.twig', [
  1316.             'family' => $family->getIterator(),
  1317.             'total' => $family->count(),
  1318.             'pages' => ceil($family->count() / self::LISTING_LIMIT),
  1319.             'page' => 1,
  1320.         ]);
  1321.     }
  1322.     /**
  1323.      * @Route("/profile", name="customer_profile", methods="GET|POST")
  1324.      */
  1325.     public function profile(
  1326.         Request $request,
  1327.         PersonRepository $personRepo,
  1328.         UserPasswordHasherInterface $passwordHasher,
  1329.         CountryHelper $countryHelper
  1330.     ): Response {
  1331.         $user $this->getCurrentUser();
  1332.         $person $personRepo->getByUser($user);
  1333.         //$password = $user->getPassword();
  1334.         $isPrivacyPolicyConfirmed $person->isPrivacyPolicyConfirmed();
  1335.         $form $this->createForm(PersonType::class, $person, [
  1336.             'required_pw' => false,
  1337.             'is_edit_form' => false,
  1338.             'form_type' => PersonType::TYPE_CUSTOMER,
  1339.             'is_user_role' => true,
  1340.             'countries' => $countryHelper->getCountryChoices(),
  1341.         ]);
  1342.         $form->handleRequest($request);
  1343.         if ($form->isSubmitted() && $form->isValid()) {
  1344.             $em $this->getDoctrine()->getManager();
  1345.             /*if (!empty($user->getPassword())) {
  1346.                 $hash = $encoder->encodePassword($user, $user->getPassword());
  1347.                 $user->setPassword($hash);
  1348.             } else {
  1349.                 $user->setPassword($password);
  1350.             }*/
  1351.             if (
  1352.                 $person->isPrivacyPolicyConfirmed() !==
  1353.                 $isPrivacyPolicyConfirmed
  1354.             ) {
  1355.                 if ($person->isPrivacyPolicyConfirmed()) {
  1356.                     $entry = new CustomerHistoryEntry(
  1357.                         'Datenschutz zugestimmt',
  1358.                         $person,
  1359.                         $user->getEmail()
  1360.                     );
  1361.                 } else {
  1362.                     $entry = new CustomerHistoryEntry(
  1363.                         'Datenschutzzustimmung zurückgezogen',
  1364.                         $person,
  1365.                         $user->getEmail()
  1366.                     );
  1367.                 }
  1368.                 $em->persist($entry);
  1369.             }
  1370.             $this->getDoctrine()
  1371.                 ->getManager()
  1372.                 ->flush();
  1373.             $this->addFlash('notice''Profil gespeichert');
  1374.             return $this->redirectToRoute('customer_profile');
  1375.         }
  1376.         return $this->render('customer/profile.html.twig', [
  1377.             'customer' => $person,
  1378.             'form' => $form->createView(),
  1379.         ]);
  1380.     }
  1381. }