<?php
namespace AdminBundle\Controller;
use AdminBundle\Controller\Traits\AdminControllerTrait;
use AdminBundle\Entity\CompanyInvoice;
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 SonataCompanyInvoicesController 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() != CompanyInvoice::INVOICE_APPROVED) {
$selectedModel->setApproval(CompanyInvoice::INVOICE_APPROVED);
$rootDir = $this->getParameter('kernel.project_dir');
$html = $this->get('templating')
->renderResponse('@Admin/CompanyInvoices/company_invoice_pdf_template.html.twig', ['object' => $selectedModel, 'rootDir' => $rootDir])->getContent();
$timestamp = date_timestamp_get(new \DateTime());
$currentYear = date('Y');
$pdfPath = $this->getParameter('kernel.project_dir') . '/public/upload/company/' . $selectedModel->getCompany()->getId() . '/companyInvoices/twelve-invoice-' . trim($selectedModel->getCompany()->getBusinessName()) . '-w' . $selectedModel->getWeek() . '-' . $currentYear . '.pdf';
if (file_exists($pdfPath)) {
unlink($pdfPath);
}
$pdf = $this->get('knp_snappy.pdf')->generateFromHtml($html, $pdfPath);
$path = $this->getParameter('kernel.project_dir') . '/public/upload/company/' . $selectedModel->getCompany()->getId() . '/companyInvoices/';
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', $e->getMessage());
return new RedirectResponse($this->admin->generateUrl('list', array('filter' => $this->admin->getFilterParameters())));
}
$this->getRequest()->getSession()->getFlashBag()->add('sonata_flash_success', $counter . ' Company 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 . ' Company Invoice(s) set to paid.');
return new RedirectResponse($this->admin->generateUrl('list', array('filter' => $this->admin->getFilterParameters())));
}
}