src/AdminBundle/Controller/SonataDriverInvoicesController.php line 89

Open in your IDE?
  1. <?php
  2. namespace AdminBundle\Controller;
  3. use AdminBundle\Controller\Traits\AdminControllerTrait;
  4. use AdminBundle\Entity\DriverInvoices;
  5. use Sonata\AdminBundle\Controller\CRUDController as Controller;
  6. use Sonata\AdminBundle\Datagrid\ProxyQueryInterface;
  7. use Symfony\Component\HttpFoundation\RedirectResponse;
  8. use Symfony\Component\Security\Core\Exception\AccessDeniedException;
  9. use Symfony\Component\HttpFoundation\Request;
  10. class SonataDriverInvoicesController extends Controller
  11. {
  12. use AdminControllerTrait;
  13. /**
  14. * @param ProxyQueryInterface $selectedModelQuery
  15. * @param Request $request
  16. *
  17. * @return RedirectResponse
  18. */
  19. public function batchActionApproveInvoice(ProxyQueryInterface $selectedModelQuery, Request $request = null)
  20. {
  21. if ($this->admin->isGranted('EDIT') === false || $this->admin->isGranted('DELETE') === false)
  22. {
  23. throw new AccessDeniedException();
  24. }
  25. $modelManager = $this->admin->getModelManager();
  26. $selectedModels = $selectedModelQuery->execute();
  27. // do the merge work here
  28. $counter = 0;
  29. try {
  30. foreach ($selectedModels as $selectedModel) {
  31. if($selectedModel->getApproval() != DriverInvoices::INVOICE_APPROVED){
  32. $selectedModel->setApproval(DriverInvoices::INVOICE_APPROVED);
  33. $rootDir = $this->getParameter('kernel.project_dir');
  34. $html = $this->get('templating')
  35. ->renderResponse('@Admin/DriverInvoices/driver_invoice_pdf_template.html.twig',['object'=>$selectedModel,'rootDir' => $rootDir])->getContent();
  36. $timestamp = date_timestamp_get(new \DateTime());
  37. $pdfPath = $this->getParameter('kernel.project_dir').'/public/upload/driver/'.$selectedModel->getDriver()->getId().'/driverInvoices/twelve-invoice-'.trim($selectedModel->getDriver()->getUser()->getFirstName().''.$selectedModel->getDriver()->getUser()->getLastName()).'-w'.$selectedModel->getWeek().'.pdf';
  38. if (file_exists($pdfPath)) {
  39. unlink($pdfPath);
  40. }
  41. $pdf = $this->get('knp_snappy.pdf')->generateFromHtml($html, $pdfPath);
  42. $path = $this->getParameter('kernel.project_dir').'/public/upload/driver/'.$selectedModel->getDriver()->getId().'/driverInvoices/';
  43. file_put_contents($path,$pdf);
  44. $selectedModel->setPdfFile($pdfPath);
  45. $selectedModel->setPdfGenDate(new \DateTime());
  46. $counter++;
  47. $modelManager->update($selectedModel);
  48. }
  49. }
  50. } catch (\Exception $e) {
  51. $this->getRequest()->getSession()->getFlashBag()->add('sonata_flash_error', 'Error! Something went wrong.');
  52. return new RedirectResponse($this->admin->generateUrl('list', array('filter' => $this->admin->getFilterParameters())));
  53. }
  54. $this->getRequest()->getSession()->getFlashBag()->add('sonata_flash_success', $counter.' Driver Invoice(s) have been approved.');
  55. return new RedirectResponse($this->admin->generateUrl('list', array('filter' => $this->admin->getFilterParameters())));
  56. }
  57. /**
  58. * @param ProxyQueryInterface $selectedModelQuery
  59. * @param Request $request
  60. *
  61. * @return RedirectResponse
  62. */
  63. public function batchActionSetPaid(ProxyQueryInterface $selectedModelQuery, Request $request = null)
  64. {
  65. if ($this->admin->isGranted('EDIT') === false || $this->admin->isGranted('DELETE') === false)
  66. {
  67. throw new AccessDeniedException();
  68. }
  69. $modelManager = $this->admin->getModelManager();
  70. $selectedModels = $selectedModelQuery->execute();
  71. // do the merge work here
  72. $counter = 0;
  73. try {
  74. foreach ($selectedModels as $selectedModel) {
  75. if($selectedModel->getStatus()!=1){
  76. $selectedModel->setStatus(1);
  77. $counter++;
  78. }
  79. }
  80. $modelManager->update($selectedModel);
  81. } catch (\Exception $e) {
  82. $this->getRequest()->getSession()->getFlashBag()->add('sonata_flash_error', 'Error! Something went wrong.');
  83. return new RedirectResponse($this->admin->generateUrl('list', array('filter' => $this->admin->getFilterParameters())));
  84. }
  85. $this->getRequest()->getSession()->getFlashBag()->add('sonata_flash_success', $counter.' Driver Invoice(s) set to paid.');
  86. return new RedirectResponse($this->admin->generateUrl('list', array('filter' => $this->admin->getFilterParameters())));
  87. }
  88. /**
  89. * @param ProxyQueryInterface $selectedModelQuery
  90. * @param Request $request
  91. *
  92. * @return RedirectResponse
  93. */
  94. public function batchActionSetReadyToSend(ProxyQueryInterface $selectedModelQuery, Request $request = null)
  95. {
  96. if ($this->admin->isGranted('EDIT') === false || $this->admin->isGranted('DELETE') === false)
  97. {
  98. throw new AccessDeniedException();
  99. }
  100. $modelManager = $this->admin->getModelManager();
  101. $selectedModels = $selectedModelQuery->execute();
  102. // do the merge work here
  103. $counter = 0;
  104. try {
  105. foreach ($selectedModels as $selectedModel) {
  106. if($selectedModel->getReadyToSend()!=1){
  107. $selectedModel->setReadyToSend(1);
  108. $counter++;
  109. }
  110. }
  111. $modelManager->update($selectedModel);
  112. } catch (\Exception $e) {
  113. $this->getRequest()->getSession()->getFlashBag()->add('sonata_flash_error', 'Error! Something went wrong.');
  114. return new RedirectResponse($this->admin->generateUrl('list', array('filter' => $this->admin->getFilterParameters())));
  115. }
  116. $this->getRequest()->getSession()->getFlashBag()->add('sonata_flash_success', $counter.' Driver Invoice(s) set as ready to be sent.');
  117. return new RedirectResponse($this->admin->generateUrl('list', array('filter' => $this->admin->getFilterParameters())));
  118. }
  119. }