From 4bc366990e1a0981dab8db03cdb76c44e53e3a1a Mon Sep 17 00:00:00 2001 From: www-data Date: Fri, 21 Feb 2014 03:41:50 -0300 Subject: [PATCH] Correções no relatório de impressões --- Controller/PrinterController.php | 78 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- Entity/PrinterCounterRepository.php | 73 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Resources/views/Printer/index.html.twig | 22 +++++++++++----------- composer.json | 3 ++- 4 files changed, 163 insertions(+), 13 deletions(-) diff --git a/Controller/PrinterController.php b/Controller/PrinterController.php index 02970cc..d1d5272 100755 --- a/Controller/PrinterController.php +++ b/Controller/PrinterController.php @@ -13,9 +13,19 @@ use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template; use Swpb\Bundle\CocarBundle\Entity\Printer; use Swpb\Bundle\CocarBundle\Entity\PrinterCounter; +use Swpb\Bundle\CocarBundle\Entity\PrinterCounterRepository; use Swpb\Bundle\CocarBundle\Form\PrinterType; +use Ddeboer\DataImport\Workflow; +use Ddeboer\DataImport\Reader\ArrayReader; +use Ddeboer\DataImport\Writer\CsvWriter; +use Ddeboer\DataImport\ValueConverter\CallbackValueConverter; + use Doctrine\ORM\EntityManager; +use Symfony\Component\HttpFoundation\StreamedResponse; + +use Symfony\Component\HttpFoundation\BinaryFileResponse; + /** * Printer controller. @@ -57,6 +67,8 @@ class PrinterController extends Controller $start = isset($start) ? $start : (time() - ((60*60*24)*30)); $end = isset($end) ? $end : time(); + /* + $printers = $em->getRepository('CocarBundle:Printer')->findAll(); $printerCounter = array(); @@ -90,6 +102,10 @@ class PrinterController extends Controller } $displayAll = ($request->query->get('all')) ? $request->query->get('all') : 0; + */ + $displayAll = true; + + $printers = $em->getRepository('CocarBundle:PrinterCounter')->relatorioGeral($start, $end); if(!$displayAll) { @@ -98,13 +114,73 @@ class PrinterController extends Controller } return array( "printer" => $printers, - "printerCounter" => $pCounter, + //"printerCounter" => $pCounter, "form" => $this->createCalendarForm(0, new \DateTime(date("Y-m-d", $start)), new \DateTime(date("Y-m-d", $end)))->createView(), "start" => $start, "end" => $end, "displayAll" => $displayAll ); } + + /** + * Generate a CSV file + * + * @Route("/csv", name="printer_csv") + * + */ + public function csvAction(Request $request) + { + $em = $this->getDoctrine()->getManager(); + + $form = $request->query->get('form'); + + if($form) + { + $start = new \DateTime($form['startDate']); + $start = $start->format('U'); + + $end = new \DateTime($form['endDate']); + $end = $end->format('U'); + } + + $start = isset($start) ? $start : (time() - ((60*60*24)*30)); + $end = isset($end) ? $end : time(); + + $printers = $em->getRepository('CocarBundle:PrinterCounter')->relatorioCsvGeral($start, $end); + + // Gera CSV + $reader = new ArrayReader($printers); + + // Create the workflow from the reader + $workflow = new Workflow($reader); + + + // As you can see, the first names are not capitalized correctly. Let's fix + // that with a value converter: + $converter = new CallbackValueConverter(function ($input) { + return date('d/m/Y', $input); + }); + $workflow->addValueConverter('endDate', $converter); + $workflow->addValueConverter('startDate', $converter); + + // Add the writer to the workflow + $tmpfile = tempnam(sys_get_temp_dir(), 'impressoras'); + $file = new \SplFileObject($tmpfile, 'w'); + $writer = new CsvWriter($file); + $workflow->addWriter($writer); + + // Process the workflow + $workflow->process(); + + // Retorna o arquivo + $response = new BinaryFileResponse($tmpfile); + $response->headers->set('Content-Type', 'text/csv'); + $response->headers->set('Content-Disposition', 'attachment; filename="impressoras.csv"'); + $response->headers->set('Content-Transfer-Encoding', 'binary'); + + return $response; + } + /** * Creates a new Printer entity. * diff --git a/Entity/PrinterCounterRepository.php b/Entity/PrinterCounterRepository.php index e702e88..0976b16 100755 --- a/Entity/PrinterCounterRepository.php +++ b/Entity/PrinterCounterRepository.php @@ -12,4 +12,77 @@ use Doctrine\ORM\EntityRepository; */ class PrinterCounterRepository extends EntityRepository { + /** + * Classe do relatório geral de impressão + * + * @param $start + * @param $end + * @return array + */ + public function relatorioGeral($start, $end) { + + + $_dql = "SELECT printer.id, + max(pc1.prints) as printsEnd, + pc1.blackInk, + pc1.coloredInk, + max(pc1.date) as endDate, + min(pc2.prints) as printsStart, + min(pc2.date) as startDate, + printer.name, + printer.description, + printer.host + FROM CocarBundle:PrinterCounter pc1 + INNER JOIN CocarBundle:Printer printer WITH pc1.printer = printer.id + INNER JOIN CocarBundle:PrinterCounter pc2 WITH (pc1.printer = pc2.printer AND pc2.date >= :start) + WHERE pc1.date <= :end + GROUP BY printer.id, + pc1.blackInk, + pc1.coloredInk, + printer.name, + printer.description, + printer.host + ORDER BY printer.id ASC"; + + return $this->getEntityManager()->createQuery( $_dql ) + ->setParameter('start', $start) + ->setParameter('end', $end) + ->getArrayResult(); + + } + + /** + * Classe do relatório geral de impressão no formato CSV + * + * @param $start + * @param $end + * @return array + */ + public function relatorioCsvGeral($start, $end) { + + + $_dql = "SELECT printer.id, + max(pc1.prints) as printsEnd, + max(pc1.date) as endDate, + min(pc2.prints) as printsStart, + min(pc2.date) as startDate, + printer.name, + printer.host, + (max(pc1.prints) - min(pc2.prints)) as totalPrints + FROM CocarBundle:PrinterCounter pc1 + INNER JOIN CocarBundle:Printer printer WITH pc1.printer = printer.id + INNER JOIN CocarBundle:PrinterCounter pc2 WITH (pc1.printer = pc2.printer AND pc2.date >= :start) + WHERE pc1.date <= :end + GROUP BY printer.id, + printer.name, + printer.description, + printer.host + ORDER BY printer.id ASC"; + + return $this->getEntityManager()->createQuery( $_dql ) + ->setParameter('start', $start) + ->setParameter('end', $end) + ->getArrayResult(); + + } } diff --git a/Resources/views/Printer/index.html.twig b/Resources/views/Printer/index.html.twig index edf8d0b..906fda2 100755 --- a/Resources/views/Printer/index.html.twig +++ b/Resources/views/Printer/index.html.twig @@ -10,6 +10,7 @@ {{ form_widget(form.startDate) }} {{ form_widget(form.endDate) }} + @@ -18,9 +19,13 @@ Id - Impressões Nome Host + Contador Inicial + Data Inicial + Contador Final + Data Final + Impressões Ações @@ -28,21 +33,16 @@ {% for entity in printer %} {{ entity.id }} - - {% if printerCounter[entity.id] is defined %} - {{ printerCounter[entity.id]['prints'] }} - {% else %} - 0 - {% endif %} - {{ entity.name }} {{ entity.host }} + {{ entity.printsStart }} + {{ entity.startDate|date("d/m/Y") }} + {{ entity.printsEnd }} + {{ entity.endDate|date("d/m/Y") }} + {{ (entity.printsEnd - entity.printsStart) }}