diff --git a/Controller/PrinterController.php b/Controller/PrinterController.php index 372157c..68209a1 100755 --- a/Controller/PrinterController.php +++ b/Controller/PrinterController.php @@ -49,6 +49,9 @@ class PrinterController extends Controller */ public function indexAction(Request $request) { + ini_set('memory_limit', '1024M'); + gc_enable(); + $em = $this->getDoctrine()->getManager(); $form = $request->query->get('form'); @@ -65,42 +68,109 @@ class PrinterController extends Controller $start = isset($start) ? $start : (time() - ((60*60*24)*30)); $end = isset($end) ? $end : time(); - /* + $printers = $em->getRepository('CocarBundle:PrinterCounter')->relatorioGeral($start, $end); + + return array( + "printer" => $printers, + //"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 + ); - $printers = $em->getRepository('CocarBundle:Printer')->findAll(); + } - $printerCounter = array(); + /** + * Generate a CSV file + * + * @Route("/csv", name="printer_csv") + * + */ + public function csvAction(Request $request) + { + ini_set('memory_limit', '1024M'); + gc_enable(); + + $em = $this->getDoctrine()->getManager(); + + $form = $request->query->get('form'); - foreach ($printers as $printer) + if($form) { - $printerCounter[$printer->getId()] = $em->createQuery( - "SELECT pc.id, pc.prints, pc.blackInk, pc.coloredInk FROM CocarBundle:PrinterCounter pc - WHERE (pc.date >= :start AND pc.date <= :end) AND (pc.printer = :id) - ORDER BY pc.id ASC" - ) - ->setParameter('start', $start) - ->setParameter('end', $end) - ->setParameter('id', $printer->getId()) - ->getResult(); + $start = new \DateTime($form['startDate']); + $start = $start->format('U'); + + $end = new \DateTime($form['endDate']); + $end = $end->format('U'); } - $pCounter = array(); + $start = isset($start) ? $start : (time() - ((60*60*24)*30)); + $end = isset($end) ? $end : time(); + + $printers = $em->getRepository('CocarBundle:PrinterCounter')->relatorioCsvGeral($start, $end); - foreach ($printerCounter as $key => $counter) + // 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; + } + + /** + * Lists all Printer entities. + * + * @Route("/detalhado", name="printer_index_detalhado") + * @Method("GET") + * @Template() + */ + public function indexDetalhadoAction(Request $request) + { + ini_set('memory_limit', '1024M'); + gc_enable(); + + $em = $this->getDoctrine()->getManager(); + + $form = $request->query->get('form'); + + if($form) { - $size = sizeof($counter)-1; + $start = new \DateTime($form['startDate']); + $start = $start->format('U'); - if(isset($counter[$size])) - { - $pCounter[$key]['prints'] = ($size == 0) ? - $counter[$size]['prints'] : $counter[$size]['prints'] - $counter[0]['prints']; - $pCounter[$key]['blackInk'] = $counter[$size]['blackInk']; - $pCounter[$key]['coloredInk'] = $counter[$size]['coloredInk']; - } + $end = new \DateTime($form['endDate']); + $end = $end->format('U'); } - $displayAll = ($request->query->get('all')) ? $request->query->get('all') : 0; - */ + $start = isset($start) ? $start : (time() - ((60*60*24)*30)); + $end = isset($end) ? $end : time(); + + $displayAll = true; $printers = $em->getRepository('CocarBundle:PrinterCounter')->relatorioGeral($start, $end); @@ -124,11 +194,14 @@ class PrinterController extends Controller /** * Generate a CSV file * - * @Route("/csv", name="printer_csv") + * @Route("/detalhado/csv", name="printer_csv_detalhado") * */ - public function csvAction(Request $request) + public function csvDetalhadoAction(Request $request) { + ini_set('memory_limit', '1024M'); + gc_enable(); + $em = $this->getDoctrine()->getManager(); $form = $request->query->get('form'); @@ -145,7 +218,7 @@ class PrinterController extends Controller $start = isset($start) ? $start : (time() - ((60*60*24)*30)); $end = isset($end) ? $end : time(); - $printers = $em->getRepository('CocarBundle:PrinterCounter')->relatorioCsvGeral($start, $end); + $printers = $em->getRepository('CocarBundle:PrinterCounter')->relatorioCsvGeralDetalhado($start, $end); // Gera CSV $reader = new ArrayReader($printers); diff --git a/Entity/PrinterCounterRepository.php b/Entity/PrinterCounterRepository.php index 079ee06..f26cb3a 100755 --- a/Entity/PrinterCounterRepository.php +++ b/Entity/PrinterCounterRepository.php @@ -66,6 +66,40 @@ class PrinterCounterRepository extends EntityRepository $_dql = "SELECT printer.id, + printer.name, + printer.host, + printer.serie, + printer.local, + (max(pc1.prints) - min(pc2.prints)) as totalPrints + FROM CocarBundle:Printer printer + LEFT JOIN CocarBundle:PrinterCounter pc1 WITH (pc1.printer = printer.id AND pc1.date BETWEEN :start AND :end) + LEFT JOIN CocarBundle:PrinterCounter pc2 WITH (pc2.printer = printer.id AND pc2.date BETWEEN :start AND :end) + GROUP BY printer.id, + printer.name, + printer.description, + printer.host, + printer.serie, + printer.local + 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 detalhado + * + * @param $start + * @param $end + * @return array + */ + public function relatorioCsvGeralDetalhado($start, $end) { + + + $_dql = "SELECT printer.id, max(pc1.prints) as printsEnd, max(pc1.date) as endDate, min(pc2.prints) as printsStart, diff --git a/Resources/views/Printer/index.html.twig b/Resources/views/Printer/index.html.twig index 7a113b0..40f5b1e 100755 --- a/Resources/views/Printer/index.html.twig +++ b/Resources/views/Printer/index.html.twig @@ -1,7 +1,7 @@ {% extends 'CocarBundle::layout.html.twig' %} {% block main -%} -
{{ "Relatório de impressão"|trans }}
++
Host | Serie | Local | -Contador Inicial | -Data Inicial | -Contador Final | -Data Final | Impressões | Ações | {{ entity.host }} | {{ entity.serie }} | {{ entity.local }} | -{{ entity.printsStart }} | - {% if entity.startDate %} -{{ entity.startDate|date("d/m/Y") }} | - {% else %} -- {% endif %} - | {{ entity.printsEnd }} | - {% if entity.endDate %} -{{ entity.endDate|date("d/m/Y") }} | - {% else %} -- {% endif %} | {{ (entity.printsEnd - entity.printsStart) }} |
|
---|