src/JuridicusBundle/Controller/ZAController.php line 354

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. $datumStartOnline = $this->getDefaultStartDatumOnline();
  118. $abo = new Abo();
  119. $abo
  120. ->setVorzugspreis(false)
  121. ->setDatumStart($datumStartOnline)
  122. ;
  123. $form = $this->createForm(AboType::class, $abo, array(
  124. 'em' => $this->getDoctrine()->getManager()
  125. ));
  126. return $this->render('@JFJuridicusBundle/ZA/bestellschein.html.twig', array(
  127. 'form' => $form->createView(),
  128. 'default_date_online' => $datumStartOnline
  129. ));
  130. }
  131. /**
  132. * sponsorBestellscheinAction
  133. * URL existiert nicht mehr
  134. *
  135. * @Route("/sponsor/ZA/Bestellung", name="za_bestellschein_sponsor")
  136. */
  137. public function sponsorBestellscheinAction()
  138. {
  139. return new Response('', 410);
  140. $datumStartOnline = $this->getDefaultStartDatumOnline();
  141. $abo = new Abo();
  142. $abo
  143. ->setVorzugspreis(true)
  144. ->setDatumStart($datumStartOnline)
  145. ;
  146. $form = $this->createForm(AboType::class, $abo, array(
  147. 'em' => $this->getDoctrine()->getManager()
  148. ));
  149. return $this->render('@JFJuridicusBundle/ZA/bestellschein.html.twig', array(
  150. 'form' => $form->createView(),
  151. 'default_date_online' => $datumStartOnline
  152. ));
  153. }
  154. /**
  155. * createBestellungAction
  156. * URL existiert nicht mehr
  157. *
  158. * @Route("/ZA/Bestellung/create", name="za_bestellung_create")
  159. * @Method({"POST"})
  160. */
  161. public function createBestellungAction(Request $request)
  162. {
  163. return new Response('', 410);
  164. $em = $this->getDoctrine()->getManager();
  165. $abo = new Abo();
  166. $abo
  167. ->setZeitschrift('ZA')
  168. ->setIp($request->getClientIp())
  169. ;
  170. $form = $this->createForm(AboType::class, $abo, array('em' => $em));
  171. $form->handleRequest($request); //changedFrom
  172. if ($form->isValid()) {
  173. $em->getConnection()->beginTransaction();
  174. $abo->calculateDatumEnde();
  175. // speichern, um eine Abo-Id zu gewährleisten
  176. $em->persist($abo);
  177. $em->flush();
  178. $this->get('session')->set('abo_id', $abo->getId());
  179. // ersten Abo-Zeitraum hinzufügen
  180. $aboZeitraum = $this->aboManager->createRestrictedAboZeitraum($abo);
  181. $aboAusgaben = $this->aboManager->createAboAusgaben($aboZeitraum);
  182. $this->aboManager->sendAboZeitschriften($aboZeitraum);
  183. if ($abo->getTyp() === Abo::ABO_FULL) {
  184. // bei Vollabos ggfs auch zweiten Abo-Zeitraum, falls Jahresgrenze überschritten wird
  185. $januaryFirst = new \DateTime('first day of january this year 00:00:00');
  186. if ($abo->getDatumStart() < $januaryFirst) {
  187. // zweiten Abo-Zeitraum hinzufügen
  188. $decemberLast = new \DateTime('last day of december this year 00:00:00');
  189. $aboZeitraum2 = $this->aboManager->createRestrictedAboZeitraum($abo, $januaryFirst, $decemberLast);
  190. $aboAusgaben2 = $this->aboManager->createAboAusgaben($aboZeitraum2);
  191. $this->aboManager->sendAboZeitschriften($aboZeitraum2);
  192. }
  193. }
  194. $em->flush();
  195. $em->getConnection()->commit();
  196. return $this->redirect($this->generateUrl('za_bestellung_create_success'));
  197. }
  198. return $this->render('@JFJuridicusBundle/ZA/bestellschein.html.twig', array(
  199. 'form' => $form->createView(),
  200. 'default_date_online' => $this->getDefaultStartDatumOnline(),
  201. ));
  202. }
  203. /**
  204. * createLockBestellungAction
  205. * URL existiert nicht mehr
  206. *
  207. * @Method({"POST"})
  208. */
  209. public function createLockBestellungAction(Request $request)
  210. {
  211. $this->denyAccessUnlessGranted('ROLE_KUNDE');
  212. return new Response('', 410);
  213. $em = $this->getDoctrine()->getManager();
  214. $kunde = $this->getKunde();
  215. $datumStart = $this->getDefaultStartDatumOnline();
  216. $abo = new Abo();
  217. $abo
  218. ->setZeitschrift('ZA')
  219. ->setOnline(true)
  220. ->setTyp(Abo::ABO_LOCKABO_6)
  221. ->setIp($request->getClientIp())
  222. ->setDatumStart($datumStart)
  223. ->setKunde($kunde)
  224. ->setVorname($kunde->getVorname())
  225. ->setNachname($kunde->getNachname())
  226. ->setStrasse($kunde->getStrasse())
  227. ->setHausnummer($kunde->getHausnummer())
  228. ->setPlz($kunde->getPlz())
  229. ->setOrt($kunde->getOrt())
  230. ->setGeburtsdatum($kunde->getGeburtsdatum())
  231. ->setEmail($kunde->getEmail())
  232. ->setTelefon($kunde->getHandynummer())
  233. ;
  234. $form = $this->createForm(LockaboType::class, array(), array());
  235. $form->handleRequest($request); //changedFrom bind
  236. if ($form->isValid()) {
  237. $em->getConnection()->beginTransaction();
  238. $abo->calculateDatumEnde();
  239. // speichern, um eine Abo-Id zu gewährleisten
  240. $em->persist($abo);
  241. $em->flush();
  242. $this->get('session')->set('abo_id', $abo->getId());
  243. $aboZeitraum = $this->aboManager->createRestrictedAboZeitraum($abo);
  244. $aboAusgaben = $this->aboManager->createAboAusgaben($aboZeitraum);
  245. $this->aboManager->sendAboZeitschriften($aboZeitraum);
  246. $em->flush();
  247. $em->getConnection()->commit();
  248. return $this->redirect($this->generateUrl('za_bestellung_create_success'));
  249. }
  250. return $this->redirect($this->generateUrl('homepage'));
  251. }
  252. /**
  253. * createBestellungSuccessAction
  254. * URL existiert nicht mehr
  255. *
  256. * @Route("/ZA/Bestellung/success", name="za_bestellung_create_success")
  257. */
  258. public function createBestellungSuccessAction()
  259. {
  260. $session = $this->get('session');
  261. $abo_id = $session->get('abo_id');
  262. $session->remove('abo_id');
  263. if (!$abo_id) {
  264. return $this->redirect($this->generateUrl('homepage'));
  265. }
  266. $em = $this->getDoctrine()->getManager();
  267. $abo = $em->getRepository('JFJuridicusBundle:Abo')->find($abo_id);
  268. $content = $this->renderView(
  269. 'JFJuridicusBundle:Abo:show.html.twig',
  270. array('abo' => $abo)
  271. );
  272. $mailer = $this->get('jf_juridicus.system_mailer');
  273. $message = \Swift_Message::newInstance()
  274. ->setSubject('Systemnachricht: Neues ZA Abo')
  275. ->setBody($content, 'text/html')
  276. ;
  277. $mailer->send($message);
  278. return $this->render('@JFJuridicusBundle/ZA/bestellschein_success.html.twig', array(
  279. 'abo' => $abo
  280. ));
  281. }
  282. /**
  283. * bestellscheinPdfAction
  284. * URL existiert nicht mehr
  285. *
  286. * @Route("/ZA/ZA-Bestellung.pdf", name="za_bestellschein_pdf")
  287. */
  288. public function bestellscheinPdfAction()
  289. {
  290. return new Response('', 410);
  291. }
  292. /**
  293. * @Route("/ZA/archiv", name="za_archiv")
  294. */
  295. public function archivAction(PdfZeitschriftZARepository $repo)
  296. {
  297. // alles holen, was älter als 6 Monate ist
  298. $byYear = $repo->findArchivSince(new \DateTime('today - 6 months'));
  299. return $this->render('@JFJuridicusBundle/ZA/archiv.html.twig', array(
  300. 'entities_by_year' => $byYear
  301. ));
  302. }
  303. /**
  304. * @Route("/ZA/{date}.pdf", name="za_download")
  305. * @ParamConverter("date", options={"format": "d-m-Y"})
  306. */
  307. public function downloadAction(\DateTime $date, PdfZeitschriftZARepository $repo)
  308. {
  309. $pdf = $repo->findOneBy(array('released_at' => $date));
  310. if (!$pdf) {
  311. throw $this->createNotFoundException('Die Zeitschrift wurde nicht gefunden');
  312. }
  313. // check Download Permissions
  314. $restrict_date = new \DateTime('today -6 months');
  315. if ($date < $restrict_date) {
  316. // Archiv-Zeitschriften (älter als 6 Monate) immer erlaubt
  317. return $pdf->createResponse(true);
  318. }
  319. $user = $this->getUser();
  320. if (!$user) {
  321. throw $this->createAccessDeniedException();
  322. }
  323. /* @var $kunde \JF\JuridicusBundle\Entity\Kunde */
  324. $kunde = $user->getKunde();
  325. if (!$kunde) {
  326. throw $this->createAccessDeniedException();
  327. }
  328. $pruefungsamt = $kunde->getPruefungsamt();
  329. if (!$pruefungsamt) {
  330. throw $this->createAccessDeniedException();
  331. }
  332. // Bei Vollbestand zum Registrierungszeitpunkt nur Zugriff für Kunden,
  333. // die den Export erlaubt haben
  334. if ($pruefungsamt->hasVollbestand($kunde->getCreatedAt()) && !$kunde->getExportErlaubt()) {
  335. throw $this->createAccessDeniedException();
  336. }
  337. // letzten 3 Ausgaben anhand des letzten Buchungsdatums bestimmen
  338. $allowed_entities = $this->repo->findThreeBefore($kunde->getZAStichtag());
  339. foreach ($allowed_entities as $allowed_entity) {
  340. if ($allowed_entity->getId() == $pdf->getId()) {
  341. return $pdf->createResponse(true);
  342. }
  343. }
  344. throw $this->createAccessDeniedException();
  345. }
  346. /**
  347. * @return \DateTime
  348. */
  349. protected function getDefaultStartDatumOnline()
  350. {
  351. $datumLastRelease = $this->repo->findLast()->getReleasedAt();
  352. $datumStart = new \DateTime('first day of this month 00:00:00');
  353. if ($datumLastRelease < $datumStart) {
  354. $datumStart->modify('-1 month');
  355. }
  356. return $datumStart;
  357. }
  358. }