src/AdminBundle/Controller/SonataCompanyInvoicesController.php line 91

Open in your IDE?
  1. <?php
  2. namespace AdminBundle\Controller;
  3. use AdminBundle\Controller\Traits\AdminControllerTrait;
  4. use AdminBundle\Entity\CompanyInvoice;
  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 SonataCompanyInvoicesController 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. throw new AccessDeniedException();
  23. }
  24. $modelManager = $this->admin->getModelManager();
  25. $selectedModels = $selectedModelQuery->execute();
  26. // do the merge work here
  27. $counter = 0;
  28. try {
  29. foreach ($selectedModels as $selectedModel) {
  30. if ($selectedModel->getApproval() != CompanyInvoice::INVOICE_APPROVED) {
  31. $selectedModel->setApproval(CompanyInvoice::INVOICE_APPROVED);
  32. $rootDir = $this->getParameter('kernel.project_dir');
  33. $html = $this->get('templating')
  34. ->renderResponse('@Admin/CompanyInvoices/company_invoice_pdf_template.html.twig', ['object' => $selectedModel, 'rootDir' => $rootDir])->getContent();
  35. $timestamp = date_timestamp_get(new \DateTime());
  36. $currentYear = date('Y');
  37. $pdfPath = $this->getParameter('kernel.project_dir') . '/public/upload/company/' . $selectedModel->getCompany()->getId() . '/companyInvoices/twelve-invoice-' . trim($selectedModel->getCompany()->getBusinessName()) . '-w' . $selectedModel->getWeek() . '-' . $currentYear . '.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/company/' . $selectedModel->getCompany()->getId() . '/companyInvoices/';
  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', $e->getMessage());
  52. return new RedirectResponse($this->admin->generateUrl('list', array('filter' => $this->admin->getFilterParameters())));
  53. }
  54. $this->getRequest()->getSession()->getFlashBag()->add('sonata_flash_success', $counter . ' Company 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. throw new AccessDeniedException();
  67. }
  68. $modelManager = $this->admin->getModelManager();
  69. $selectedModels = $selectedModelQuery->execute();
  70. // do the merge work here
  71. $counter = 0;
  72. try {
  73. foreach ($selectedModels as $selectedModel) {
  74. if ($selectedModel->getStatus() != 1) {
  75. $selectedModel->setStatus(1);
  76. $counter++;
  77. }
  78. }
  79. $modelManager->update($selectedModel);
  80. } catch (\Exception $e) {
  81. $this->getRequest()->getSession()->getFlashBag()->add('sonata_flash_error', 'Error! Something went wrong.');
  82. return new RedirectResponse($this->admin->generateUrl('list', array('filter' => $this->admin->getFilterParameters())));
  83. }
  84. $this->getRequest()->getSession()->getFlashBag()->add('sonata_flash_success', $counter . ' Company Invoice(s) set to paid.');
  85. return new RedirectResponse($this->admin->generateUrl('list', array('filter' => $this->admin->getFilterParameters())));
  86. }
  87. }