Commit 4bc366990e1a0981dab8db03cdb76c44e53e3a1a

Authored by www-data
1 parent 945561a5
Exists in master and in 2 other branches 3,1, 3.1

Correções no relatório de impressões

Controller/PrinterController.php
@@ -13,9 +13,19 @@ use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template; @@ -13,9 +13,19 @@ use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
13 13
14 use Swpb\Bundle\CocarBundle\Entity\Printer; 14 use Swpb\Bundle\CocarBundle\Entity\Printer;
15 use Swpb\Bundle\CocarBundle\Entity\PrinterCounter; 15 use Swpb\Bundle\CocarBundle\Entity\PrinterCounter;
  16 +use Swpb\Bundle\CocarBundle\Entity\PrinterCounterRepository;
16 use Swpb\Bundle\CocarBundle\Form\PrinterType; 17 use Swpb\Bundle\CocarBundle\Form\PrinterType;
17 18
  19 +use Ddeboer\DataImport\Workflow;
  20 +use Ddeboer\DataImport\Reader\ArrayReader;
  21 +use Ddeboer\DataImport\Writer\CsvWriter;
  22 +use Ddeboer\DataImport\ValueConverter\CallbackValueConverter;
  23 +
18 use Doctrine\ORM\EntityManager; 24 use Doctrine\ORM\EntityManager;
  25 +use Symfony\Component\HttpFoundation\StreamedResponse;
  26 +
  27 +use Symfony\Component\HttpFoundation\BinaryFileResponse;
  28 +
19 29
20 /** 30 /**
21 * Printer controller. 31 * Printer controller.
@@ -57,6 +67,8 @@ class PrinterController extends Controller @@ -57,6 +67,8 @@ class PrinterController extends Controller
57 $start = isset($start) ? $start : (time() - ((60*60*24)*30)); 67 $start = isset($start) ? $start : (time() - ((60*60*24)*30));
58 $end = isset($end) ? $end : time(); 68 $end = isset($end) ? $end : time();
59 69
  70 + /*
  71 +
60 $printers = $em->getRepository('CocarBundle:Printer')->findAll(); 72 $printers = $em->getRepository('CocarBundle:Printer')->findAll();
61 73
62 $printerCounter = array(); 74 $printerCounter = array();
@@ -90,6 +102,10 @@ class PrinterController extends Controller @@ -90,6 +102,10 @@ class PrinterController extends Controller
90 } 102 }
91 103
92 $displayAll = ($request->query->get('all')) ? $request->query->get('all') : 0; 104 $displayAll = ($request->query->get('all')) ? $request->query->get('all') : 0;
  105 + */
  106 + $displayAll = true;
  107 +
  108 + $printers = $em->getRepository('CocarBundle:PrinterCounter')->relatorioGeral($start, $end);
93 109
94 if(!$displayAll) 110 if(!$displayAll)
95 { 111 {
@@ -98,13 +114,73 @@ class PrinterController extends Controller @@ -98,13 +114,73 @@ class PrinterController extends Controller
98 } 114 }
99 return array( 115 return array(
100 "printer" => $printers, 116 "printer" => $printers,
101 - "printerCounter" => $pCounter, 117 + //"printerCounter" => $pCounter,
102 "form" => $this->createCalendarForm(0, new \DateTime(date("Y-m-d", $start)), new \DateTime(date("Y-m-d", $end)))->createView(), 118 "form" => $this->createCalendarForm(0, new \DateTime(date("Y-m-d", $start)), new \DateTime(date("Y-m-d", $end)))->createView(),
103 "start" => $start, 119 "start" => $start,
104 "end" => $end, 120 "end" => $end,
105 "displayAll" => $displayAll 121 "displayAll" => $displayAll
106 ); 122 );
107 } 123 }
  124 +
  125 + /**
  126 + * Generate a CSV file
  127 + *
  128 + * @Route("/csv", name="printer_csv")
  129 + *
  130 + */
  131 + public function csvAction(Request $request)
  132 + {
  133 + $em = $this->getDoctrine()->getManager();
  134 +
  135 + $form = $request->query->get('form');
  136 +
  137 + if($form)
  138 + {
  139 + $start = new \DateTime($form['startDate']);
  140 + $start = $start->format('U');
  141 +
  142 + $end = new \DateTime($form['endDate']);
  143 + $end = $end->format('U');
  144 + }
  145 +
  146 + $start = isset($start) ? $start : (time() - ((60*60*24)*30));
  147 + $end = isset($end) ? $end : time();
  148 +
  149 + $printers = $em->getRepository('CocarBundle:PrinterCounter')->relatorioCsvGeral($start, $end);
  150 +
  151 + // Gera CSV
  152 + $reader = new ArrayReader($printers);
  153 +
  154 + // Create the workflow from the reader
  155 + $workflow = new Workflow($reader);
  156 +
  157 +
  158 + // As you can see, the first names are not capitalized correctly. Let's fix
  159 + // that with a value converter:
  160 + $converter = new CallbackValueConverter(function ($input) {
  161 + return date('d/m/Y', $input);
  162 + });
  163 + $workflow->addValueConverter('endDate', $converter);
  164 + $workflow->addValueConverter('startDate', $converter);
  165 +
  166 + // Add the writer to the workflow
  167 + $tmpfile = tempnam(sys_get_temp_dir(), 'impressoras');
  168 + $file = new \SplFileObject($tmpfile, 'w');
  169 + $writer = new CsvWriter($file);
  170 + $workflow->addWriter($writer);
  171 +
  172 + // Process the workflow
  173 + $workflow->process();
  174 +
  175 + // Retorna o arquivo
  176 + $response = new BinaryFileResponse($tmpfile);
  177 + $response->headers->set('Content-Type', 'text/csv');
  178 + $response->headers->set('Content-Disposition', 'attachment; filename="impressoras.csv"');
  179 + $response->headers->set('Content-Transfer-Encoding', 'binary');
  180 +
  181 + return $response;
  182 + }
  183 +
108 /** 184 /**
109 * Creates a new Printer entity. 185 * Creates a new Printer entity.
110 * 186 *
Entity/PrinterCounterRepository.php
@@ -12,4 +12,77 @@ use Doctrine\ORM\EntityRepository; @@ -12,4 +12,77 @@ use Doctrine\ORM\EntityRepository;
12 */ 12 */
13 class PrinterCounterRepository extends EntityRepository 13 class PrinterCounterRepository extends EntityRepository
14 { 14 {
  15 + /**
  16 + * Classe do relatório geral de impressão
  17 + *
  18 + * @param $start
  19 + * @param $end
  20 + * @return array
  21 + */
  22 + public function relatorioGeral($start, $end) {
  23 +
  24 +
  25 + $_dql = "SELECT printer.id,
  26 + max(pc1.prints) as printsEnd,
  27 + pc1.blackInk,
  28 + pc1.coloredInk,
  29 + max(pc1.date) as endDate,
  30 + min(pc2.prints) as printsStart,
  31 + min(pc2.date) as startDate,
  32 + printer.name,
  33 + printer.description,
  34 + printer.host
  35 + FROM CocarBundle:PrinterCounter pc1
  36 + INNER JOIN CocarBundle:Printer printer WITH pc1.printer = printer.id
  37 + INNER JOIN CocarBundle:PrinterCounter pc2 WITH (pc1.printer = pc2.printer AND pc2.date >= :start)
  38 + WHERE pc1.date <= :end
  39 + GROUP BY printer.id,
  40 + pc1.blackInk,
  41 + pc1.coloredInk,
  42 + printer.name,
  43 + printer.description,
  44 + printer.host
  45 + ORDER BY printer.id ASC";
  46 +
  47 + return $this->getEntityManager()->createQuery( $_dql )
  48 + ->setParameter('start', $start)
  49 + ->setParameter('end', $end)
  50 + ->getArrayResult();
  51 +
  52 + }
  53 +
  54 + /**
  55 + * Classe do relatório geral de impressão no formato CSV
  56 + *
  57 + * @param $start
  58 + * @param $end
  59 + * @return array
  60 + */
  61 + public function relatorioCsvGeral($start, $end) {
  62 +
  63 +
  64 + $_dql = "SELECT printer.id,
  65 + max(pc1.prints) as printsEnd,
  66 + max(pc1.date) as endDate,
  67 + min(pc2.prints) as printsStart,
  68 + min(pc2.date) as startDate,
  69 + printer.name,
  70 + printer.host,
  71 + (max(pc1.prints) - min(pc2.prints)) as totalPrints
  72 + FROM CocarBundle:PrinterCounter pc1
  73 + INNER JOIN CocarBundle:Printer printer WITH pc1.printer = printer.id
  74 + INNER JOIN CocarBundle:PrinterCounter pc2 WITH (pc1.printer = pc2.printer AND pc2.date >= :start)
  75 + WHERE pc1.date <= :end
  76 + GROUP BY printer.id,
  77 + printer.name,
  78 + printer.description,
  79 + printer.host
  80 + ORDER BY printer.id ASC";
  81 +
  82 + return $this->getEntityManager()->createQuery( $_dql )
  83 + ->setParameter('start', $start)
  84 + ->setParameter('end', $end)
  85 + ->getArrayResult();
  86 +
  87 + }
15 } 88 }
Resources/views/Printer/index.html.twig
@@ -10,6 +10,7 @@ @@ -10,6 +10,7 @@
10 {{ form_widget(form.startDate) }} 10 {{ form_widget(form.startDate) }}
11 {{ form_widget(form.endDate) }} 11 {{ form_widget(form.endDate) }}
12 <button type="submit">Enviar</button> 12 <button type="submit">Enviar</button>
  13 + <button type="submit" formaction="{{ path('printer_csv') }}">Gerar CSV</button>
13 </form> 14 </form>
14 </li> 15 </li>
15 </ul> 16 </ul>
@@ -18,9 +19,13 @@ @@ -18,9 +19,13 @@
18 <thead> 19 <thead>
19 <tr> 20 <tr>
20 <th>Id</th> 21 <th>Id</th>
21 - <th>Impressões</th>  
22 <th>Nome</th> 22 <th>Nome</th>
23 <th>Host</th> 23 <th>Host</th>
  24 + <th>Contador Inicial</th>
  25 + <th>Data Inicial</th>
  26 + <th>Contador Final</th>
  27 + <th>Data Final</th>
  28 + <th>Impressões</th>
24 <th>Ações</th> 29 <th>Ações</th>
25 </tr> 30 </tr>
26 </thead> 31 </thead>
@@ -28,21 +33,16 @@ @@ -28,21 +33,16 @@
28 {% for entity in printer %} 33 {% for entity in printer %}
29 <tr> 34 <tr>
30 <td><a href="{{ path('printer_show', { 'id': entity.id }) }}">{{ entity.id }}</a></td> 35 <td><a href="{{ path('printer_show', { 'id': entity.id }) }}">{{ entity.id }}</a></td>
31 - <td>  
32 - {% if printerCounter[entity.id] is defined %}  
33 - {{ printerCounter[entity.id]['prints'] }}  
34 - {% else %}  
35 - 0  
36 - {% endif %}  
37 - </td>  
38 <td>{{ entity.name }}</td> 36 <td>{{ entity.name }}</td>
39 <td>{{ entity.host }}</td> 37 <td>{{ entity.host }}</td>
  38 + <td>{{ entity.printsStart }}</td>
  39 + <td>{{ entity.startDate|date("d/m/Y") }}</td>
  40 + <td>{{ entity.printsEnd }}</td>
  41 + <td>{{ entity.endDate|date("d/m/Y") }}</td>
  42 + <td>{{ (entity.printsEnd - entity.printsStart) }}</td>
40 <td> 43 <td>
41 <ul> 44 <ul>
42 <li> 45 <li>
43 - <a href="{{ path('cocar_printer_reports', { 'id': entity.id }) }}">Relatórios</a>  
44 - </li>  
45 - <li>  
46 <a href="{{ path('printer_show', { 'id': entity.id }) }}">Visualizar</a> 46 <a href="{{ path('printer_show', { 'id': entity.id }) }}">Visualizar</a>
47 </li> 47 </li>
48 <li> 48 <li>
@@ -10,7 +10,8 @@ @@ -10,7 +10,8 @@
10 "target-dir": "Swpb/Bundle/CocarBundle", 10 "target-dir": "Swpb/Bundle/CocarBundle",
11 "require": { 11 "require": {
12 "php": ">=5.3.2", 12 "php": ">=5.3.2",
13 - "jpgraph/jpgraph": "dev-master" 13 + "jpgraph/jpgraph": "dev-master",
  14 + "ddeboer/data-import-bundle": "dev-master"
14 }, 15 },
15 "config": { 16 "config": {
16 "bin-dir": "bin" 17 "bin-dir": "bin"