<?php
namespace AdminBundle\Controller;
use AdminBundle\Controller\Traits\AdminControllerTrait;
use AdminBundle\Entity\DriverInvoices;
use Sonata\AdminBundle\Controller\CRUDController as Controller;
use Sonata\AdminBundle\Datagrid\ProxyQueryInterface;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\Security\Core\Exception\AccessDeniedException;
use Symfony\Component\HttpFoundation\Request;
class SonataDriverInvoicesController extends Controller
{
use AdminControllerTrait;
/**
* @param ProxyQueryInterface $selectedModelQuery
* @param Request $request
*
* @return RedirectResponse
*/
public function batchActionApproveInvoice(ProxyQueryInterface $selectedModelQuery, Request $request = null)
{
if ($this->admin->isGranted('EDIT') === false || $this->admin->isGranted('DELETE') === false)
{
throw new AccessDeniedException();
}
$modelManager = $this->admin->getModelManager();
$selectedModels = $selectedModelQuery->execute();
// do the merge work here
$counter = 0;
try {
foreach ($selectedModels as $selectedModel) {
if($selectedModel->getApproval() != DriverInvoices::INVOICE_APPROVED){
$selectedModel->setApproval(DriverInvoices::INVOICE_APPROVED);
$rootDir = $this->getParameter('kernel.project_dir');
$html = $this->get('templating')
->renderResponse('@Admin/DriverInvoices/driver_invoice_pdf_template.html.twig',['object'=>$selectedModel,'rootDir' => $rootDir])->getContent();
$timestamp = date_timestamp_get(new \DateTime());
$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';
if (file_exists($pdfPath)) {
unlink($pdfPath);
}
$pdf = $this->get('knp_snappy.pdf')->generateFromHtml($html, $pdfPath);
$path = $this->getParameter('kernel.project_dir').'/public/upload/driver/'.$selectedModel->getDriver()->getId().'/driverInvoices/';
file_put_contents($path,$pdf);
$selectedModel->setPdfFile($pdfPath);
$selectedModel->setPdfGenDate(new \DateTime());
$counter++;
$modelManager->update($selectedModel);
}
}
} catch (\Exception $e) {
$this->getRequest()->getSession()->getFlashBag()->add('sonata_flash_error', 'Error! Something went wrong.');
return new RedirectResponse($this->admin->generateUrl('list', array('filter' => $this->admin->getFilterParameters())));
}
$this->getRequest()->getSession()->getFlashBag()->add('sonata_flash_success', $counter.' Driver Invoice(s) have been approved.');
return new RedirectResponse($this->admin->generateUrl('list', array('filter' => $this->admin->getFilterParameters())));
}
/**
* @param ProxyQueryInterface $selectedModelQuery
* @param Request $request
*
* @return RedirectResponse
*/
public function batchActionSetPaid(ProxyQueryInterface $selectedModelQuery, Request $request = null)
{
if ($this->admin->isGranted('EDIT') === false || $this->admin->isGranted('DELETE') === false)
{
throw new AccessDeniedException();
}
$modelManager = $this->admin->getModelManager();
$selectedModels = $selectedModelQuery->execute();
// do the merge work here
$counter = 0;
try {
foreach ($selectedModels as $selectedModel) {
if($selectedModel->getStatus()!=1){
$selectedModel->setStatus(1);
$counter++;
}
}
$modelManager->update($selectedModel);
} catch (\Exception $e) {
$this->getRequest()->getSession()->getFlashBag()->add('sonata_flash_error', 'Error! Something went wrong.');
return new RedirectResponse($this->admin->generateUrl('list', array('filter' => $this->admin->getFilterParameters())));
}
$this->getRequest()->getSession()->getFlashBag()->add('sonata_flash_success', $counter.' Driver Invoice(s) set to paid.');
return new RedirectResponse($this->admin->generateUrl('list', array('filter' => $this->admin->getFilterParameters())));
}
/**
* @param ProxyQueryInterface $selectedModelQuery
* @param Request $request
*
* @return RedirectResponse
*/
public function batchActionSetReadyToSend(ProxyQueryInterface $selectedModelQuery, Request $request = null)
{
if ($this->admin->isGranted('EDIT') === false || $this->admin->isGranted('DELETE') === false)
{
throw new AccessDeniedException();
}
$modelManager = $this->admin->getModelManager();
$selectedModels = $selectedModelQuery->execute();
// do the merge work here
$counter = 0;
try {
foreach ($selectedModels as $selectedModel) {
if($selectedModel->getReadyToSend()!=1){
$selectedModel->setReadyToSend(1);
$counter++;
}
}
$modelManager->update($selectedModel);
} catch (\Exception $e) {
$this->getRequest()->getSession()->getFlashBag()->add('sonata_flash_error', 'Error! Something went wrong.');
return new RedirectResponse($this->admin->generateUrl('list', array('filter' => $this->admin->getFilterParameters())));
}
$this->getRequest()->getSession()->getFlashBag()->add('sonata_flash_success', $counter.' Driver Invoice(s) set as ready to be sent.');
return new RedirectResponse($this->admin->generateUrl('list', array('filter' => $this->admin->getFilterParameters())));
}
}