src/JuridicusBundle/Controller/ZAController.php line 365

Open in your IDE?
  1. <?php
  2. namespace JF\JuridicusBundle\Controller;
  3. use JMS\DiExtraBundle\Annotation as DI;
  4. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
  5. use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
  6. use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
  7. use Symfony\Component\HttpFoundation\Request;
  8. use Symfony\Component\HttpFoundation\Response;
  9. use JF\JuridicusBundle\Form\AboType;
  10. use JF\JuridicusBundle\Entity\Abo;
  11. use JF\JuridicusBundle\Entity\AboZeitraum;
  12. use JF\JuridicusBundle\Form\LockaboType;
  13. use JF\JuridicusBundle\Repository\PdfZeitschriftZARepository;
  14. use JF\JuridicusBundle\Services\AboManager;
  15. /**
  16.  *
  17.  */
  18. class ZAController extends BaseController
  19. {
  20.     /**
  21.      * @DI\Inject("jf_juridicus.za_repository")
  22.      *
  23.      * @var PdfZeitschriftZARepository
  24.      */
  25.     protected $repo;
  26.     /**
  27.      * @DI\Inject("jf_juridicus.abo_manager")
  28.      *
  29.      * @var AboManager
  30.      */
  31.     protected $aboManager;
  32.     /**
  33.      * @Route("/ZA/", name="za_main")
  34.      */
  35.     public function showAction()
  36.     {
  37.         /* Felix Baltes, Zeitschriften entfernen, 2017-06 za_konzept */
  38.         return $this->redirect($this->generateUrl('za_archiv'));
  39.     }
  40.     /**
  41.      * @Route("/ZA/konzept.html", name="za_konzept")
  42.      */
  43.     public function showKonzeptAction()
  44.     {
  45.         /* Felix Baltes, Zeitschriften entfernen, 2017-06  */
  46.         return $this->redirect($this->generateUrl('za_main'));
  47.         /*
  48.         $response = $this->render('JFJuridicusBundle:ZA:konzept.html.twig');
  49.         $response->setETag(md5($response->getContent()));
  50.         $response->isNotModified($this->getRequest());
  51.         return $response;
  52.         */
  53.     }
  54.     /**
  55.      * @Route("/ZA/bezugspreise.html", name="za_bezugspreise")
  56.      */
  57.     public function showBezugspreiseAction()
  58.     {
  59.         /* Felix Baltes, Zeitschriften entfernen, 2017-06  */
  60.         return $this->redirect($this->generateUrl('za_main'));
  61.         /*
  62.         $response = $this->render('JFJuridicusBundle:ZA:bezugspreise.html.twig');
  63.         $response->setETag(md5($response->getContent()));
  64.         $response->isNotModified($this->getRequest());
  65.         return $response;
  66.         */
  67.     }
  68.     /**
  69.      * @Route("/sponsor", name="za_bezugspreise_sponsor")
  70.      */
  71.     public function showBezugspreiseSponsoredAction()
  72.     {
  73.         /* Felix Baltes, Zeitschriften entfernen, 2017-06  */
  74.         return $this->redirect($this->generateUrl('za_main'));
  75.         /*
  76.         $response = $this->render('JFJuridicusBundle:ZA:bezugspreise_sponsor.html.twig');
  77.         $response->setETag(md5($response->getContent()));
  78.         $response->isNotModified($this->getRequest());
  79.         return $response;
  80.         */
  81.     }
  82.     /**
  83.      * @Route("/ZA/leseprobe.html", name="za_leseprobe")
  84.      */
  85.     public function showLeseprobeAction()
  86.     {
  87.         /* Felix Baltes, Zeitschriften entfernen, 2017-06 */
  88.         return $this->redirect($this->generateUrl('za_main'));
  89.         /*
  90.         $response = $this->render('JFJuridicusBundle:ZA:leseprobe.html.twig');
  91.         $response->setETag(md5($response->getContent()));
  92.         $response->isNotModified($this->getRequest());
  93.         return $response;
  94.         */
  95.     }
  96.     /**
  97.      * @Route("/ZA/Leseprobe_ZA.pdf", name="za_leseprobe_pdf")
  98.      */
  99.     public function leseprobePdfAction()
  100.     {
  101.         // letzte ZA aus dem Archiv
  102.         $pdf $this->repo->findLastBefore(new \DateTime('today - 6 months'));
  103.         if (!$pdf) {
  104.             throw $this->createNotFoundException();
  105.         }
  106.         return $pdf->createResponse(true);
  107.     }
  108.     /**
  109.      * bestellscheinAction
  110.      * URL existiert nicht mehr
  111.      * 
  112.      * @Route("/ZA/Bestellung", name="za_bestellschein")
  113.      */
  114.     public function bestellscheinAction()
  115.     {
  116.         return new Response(''410);
  117.         
  118.         $datumStartOnline $this->getDefaultStartDatumOnline();
  119.         $abo = new Abo();
  120.         $abo
  121.             ->setVorzugspreis(false)
  122.             ->setDatumStart($datumStartOnline)
  123.         ;
  124.         $form $this->createForm(AboType::class, $abo, array(
  125.             'em' => $this->getDoctrine()->getManager()
  126.         ));
  127.         return $this->render('@JFJuridicusBundle/ZA/bestellschein.html.twig', array(
  128.             'form'                => $form->createView(),
  129.             'default_date_online' => $datumStartOnline
  130.         ));
  131.     }
  132.     /**
  133.      * sponsorBestellscheinAction
  134.      * URL existiert nicht mehr
  135.      * 
  136.      * @Route("/sponsor/ZA/Bestellung", name="za_bestellschein_sponsor")
  137.      */
  138.     public function sponsorBestellscheinAction()
  139.     {
  140.         return new Response(''410);
  141.         $datumStartOnline $this->getDefaultStartDatumOnline();
  142.         $abo = new Abo();
  143.         $abo
  144.             ->setVorzugspreis(true)
  145.             ->setDatumStart($datumStartOnline)
  146.         ;
  147.         $form $this->createForm(AboType::class, $abo, array(
  148.             'em' => $this->getDoctrine()->getManager()
  149.         ));
  150.         return $this->render('@JFJuridicusBundle/ZA/bestellschein.html.twig', array(
  151.             'form'                => $form->createView(),
  152.             'default_date_online' => $datumStartOnline
  153.         ));
  154.     }
  155.     /**
  156.      * createBestellungAction
  157.      * URL existiert nicht mehr
  158.      * 
  159.      * @Route("/ZA/Bestellung/create", name="za_bestellung_create")
  160.      * @Method({"POST"})
  161.      */
  162.     public function createBestellungAction(Request $request)
  163.     {
  164.         return new Response(''410);
  165.         $em $this->getDoctrine()->getManager();
  166.         $abo = new Abo();
  167.         $abo
  168.             ->setZeitschrift('ZA')
  169.             ->setIp($request->getClientIp())
  170.         ;
  171.         $form $this->createForm(AboType::class, $abo, array('em' => $em));
  172.         $form->handleRequest($request); //changedFrom
  173.         if ($form->isValid()) {
  174.             $em->getConnection()->beginTransaction();
  175.             $abo->calculateDatumEnde();
  176.             // speichern, um eine Abo-Id zu gewährleisten
  177.             $em->persist($abo);
  178.             $em->flush();
  179.             $this->get('session')->set('abo_id'$abo->getId());
  180.             // ersten Abo-Zeitraum hinzufügen
  181.             $aboZeitraum $this->aboManager->createRestrictedAboZeitraum($abo);
  182.             $aboAusgaben $this->aboManager->createAboAusgaben($aboZeitraum);
  183.             $this->aboManager->sendAboZeitschriften($aboZeitraum);
  184.             if ($abo->getTyp() === Abo::ABO_FULL) {           
  185.                 // bei Vollabos ggfs auch zweiten Abo-Zeitraum, falls Jahresgrenze überschritten wird
  186.                 $januaryFirst = new \DateTime('first day of january this year 00:00:00');
  187.                 if ($abo->getDatumStart() < $januaryFirst) {
  188.                     // zweiten Abo-Zeitraum hinzufügen
  189.                     $decemberLast = new \DateTime('last day of december this year 00:00:00');
  190.                     $aboZeitraum2 $this->aboManager->createRestrictedAboZeitraum($abo$januaryFirst$decemberLast);
  191.                     $aboAusgaben2 $this->aboManager->createAboAusgaben($aboZeitraum2);
  192.                     $this->aboManager->sendAboZeitschriften($aboZeitraum2);
  193.                 }
  194.             }
  195.             $em->flush();
  196.             $em->getConnection()->commit();
  197.             return $this->redirect($this->generateUrl('za_bestellung_create_success'));
  198.         }
  199.         return $this->render('@JFJuridicusBundle/ZA/bestellschein.html.twig', array(
  200.             'form'                => $form->createView(),
  201.             'default_date_online' => $this->getDefaultStartDatumOnline(),
  202.         ));
  203.     }
  204.     /**
  205.      * createLockBestellungAction
  206.      * URL existiert nicht mehr
  207.      * 
  208.      * @Method({"POST"})
  209.      */
  210.     public function createLockBestellungAction(Request $request)
  211.     {
  212.         $this->denyAccessUnlessGranted('ROLE_KUNDE');
  213.         return new Response(''410);
  214.         $em $this->getDoctrine()->getManager();
  215.         $kunde $this->getKunde();
  216.         $datumStart $this->getDefaultStartDatumOnline();
  217.         $abo = new Abo();
  218.         $abo
  219.             ->setZeitschrift('ZA')
  220.             ->setOnline(true)
  221.             ->setTyp(Abo::ABO_LOCKABO_6)
  222.             ->setIp($request->getClientIp())
  223.             ->setDatumStart($datumStart)
  224.             ->setKunde($kunde)
  225.             ->setVorname($kunde->getVorname())
  226.             ->setNachname($kunde->getNachname())
  227.             ->setStrasse($kunde->getStrasse())
  228.             ->setHausnummer($kunde->getHausnummer())
  229.             ->setPlz($kunde->getPlz())
  230.             ->setOrt($kunde->getOrt())
  231.             ->setGeburtsdatum($kunde->getGeburtsdatum())
  232.             ->setEmail($kunde->getEmail())
  233.             ->setTelefon($kunde->getHandynummer())
  234.         ;
  235.         $form $this->createForm(LockaboType::class, array(), array());
  236.         $form->handleRequest($request); //changedFrom bind
  237.         if ($form->isValid()) {
  238.             $em->getConnection()->beginTransaction();
  239.             $abo->calculateDatumEnde();
  240.             // speichern, um eine Abo-Id zu gewährleisten
  241.             $em->persist($abo);
  242.             $em->flush();
  243.             $this->get('session')->set('abo_id'$abo->getId());
  244.             $aboZeitraum $this->aboManager->createRestrictedAboZeitraum($abo);
  245.             $aboAusgaben $this->aboManager->createAboAusgaben($aboZeitraum);
  246.             $this->aboManager->sendAboZeitschriften($aboZeitraum);
  247.             
  248.             $em->flush();
  249.             $em->getConnection()->commit();
  250.             return $this->redirect($this->generateUrl('za_bestellung_create_success'));
  251.         }
  252.         return $this->redirect($this->generateUrl('homepage'));
  253.     }
  254.     /**
  255.      * createBestellungSuccessAction
  256.      * URL existiert nicht mehr
  257.      * 
  258.      * @Route("/ZA/Bestellung/success", name="za_bestellung_create_success")
  259.      */
  260.     public function createBestellungSuccessAction()
  261.     {        
  262.         $session $this->get('session');
  263.         $abo_id $session->get('abo_id');
  264.         $session->remove('abo_id');
  265.         if (!$abo_id) {
  266.             return $this->redirect($this->generateUrl('homepage'));
  267.         }
  268.         $em $this->getDoctrine()->getManager();
  269.         $abo $em->getRepository('JFJuridicusBundle:Abo')->find($abo_id);
  270.         $content $this->renderView(
  271.             'JFJuridicusBundle:Abo:show.html.twig',
  272.             array('abo' => $abo)
  273.         );
  274.         $mailer $this->get('jf_juridicus.system_mailer');
  275.         $message \Swift_Message::newInstance()
  276.             ->setSubject('Systemnachricht: Neues ZA Abo')
  277.             ->setBody($content'text/html')
  278.         ;
  279.         $mailer->send($message);
  280.         return $this->render('@JFJuridicusBundle/ZA/bestellschein_success.html.twig', array(
  281.             'abo' => $abo
  282.         ));
  283.     }
  284.     /**
  285.      * bestellscheinPdfAction
  286.      * URL existiert nicht mehr 
  287.      *
  288.      * @Route("/ZA/ZA-Bestellung.pdf", name="za_bestellschein_pdf")
  289.      */
  290.     public function bestellscheinPdfAction()
  291.     {
  292.         return new Response(''410);
  293.     }
  294.     /**
  295.      * @Route("/ZA/archiv", name="za_archiv")
  296.      */
  297.     public function archivAction(PdfZeitschriftZARepository $repo)
  298.     {
  299.         // alles holen, was älter als 6 Monate ist
  300.         $byYear $repo->findArchivSince(new \DateTime('today - 6 months'));
  301.         return $this->render('@JFJuridicusBundle/ZA/archiv.html.twig', array(
  302.             'entities_by_year' => $byYear
  303.         ));
  304.     }
  305.     /**
  306.      * @Route("/ZA/{date}.pdf", name="za_download")
  307.      * @ParamConverter("date", options={"format": "d-m-Y"})
  308.      */
  309.     public function downloadAction(\DateTime $datePdfZeitschriftZARepository $repo)
  310.     {
  311.         $pdf $repo->findOneBy(array('released_at' => $date));
  312.         if (!$pdf) {
  313.             throw $this->createNotFoundException('Die Zeitschrift wurde nicht gefunden');
  314.         }
  315.         // check Download Permissions
  316.         $restrict_date = new \DateTime('today -6 months');
  317.         if ($date $restrict_date) {
  318.             // Archiv-Zeitschriften (älter als 6 Monate) immer erlaubt
  319.             return $pdf->createResponse(true);
  320.         }
  321.         $user $this->getUser();
  322.         if (!$user) {
  323.             throw $this->createAccessDeniedException();
  324.         }
  325.         /* @var $kunde \JF\JuridicusBundle\Entity\Kunde */
  326.         $kunde $user->getKunde();
  327.         if (!$kunde) {
  328.             throw $this->createAccessDeniedException();
  329.         }
  330.         $pruefungsamt $kunde->getPruefungsamt();
  331.         if (!$pruefungsamt) {
  332.             throw $this->createAccessDeniedException();
  333.         }
  334.         // Bei Vollbestand zum Registrierungszeitpunkt nur Zugriff für Kunden, 
  335.         // die den Export erlaubt haben
  336.         if ($pruefungsamt->hasVollbestand($kunde->getCreatedAt()) && !$kunde->getExportErlaubt()) {
  337.             throw $this->createAccessDeniedException();
  338.         }
  339.         // letzten 3 Ausgaben anhand des letzten Buchungsdatums bestimmen     
  340.         $allowed_entities $this->repo->findThreeBefore($kunde->getZAStichtag());
  341.         foreach ($allowed_entities as $allowed_entity) {
  342.             if ($allowed_entity->getId() == $pdf->getId()) {
  343.                 return $pdf->createResponse(true);
  344.             }
  345.         }
  346.         throw $this->createAccessDeniedException();
  347.     }
  348.     /**
  349.      * @return \DateTime
  350.      */
  351.     protected function getDefaultStartDatumOnline()
  352.     {
  353.         $datumLastRelease $this->repo->findLast()->getReleasedAt();
  354.         $datumStart = new \DateTime('first day of this month 00:00:00');
  355.         if ($datumLastRelease $datumStart) {
  356.             $datumStart->modify('-1 month');
  357.         }
  358.         return $datumStart;
  359.     }
  360. }