Commit 360e26e1c8f713f935b4aa04af16a22b1ee8e3e3

Authored by Eduardo Santos
2 parents 5fffddc6 5423f9fd
Exists in master and in 2 other branches 3,1, 3.1

Corrige relatório de impressões para mostrar a data da última coleta, mesmo que …

…seja fora do período solicitado.
Entity/PrinterCounterRepository.php
@@ -3,6 +3,7 @@ @@ -3,6 +3,7 @@
3 namespace Swpb\Bundle\CocarBundle\Entity; 3 namespace Swpb\Bundle\CocarBundle\Entity;
4 4
5 use Doctrine\ORM\EntityRepository; 5 use Doctrine\ORM\EntityRepository;
  6 +use Doctrine\ORM\Query\ResultSetMapping;
6 7
7 /** 8 /**
8 * PrinterCounterRepository 9 * PrinterCounterRepository
@@ -22,35 +23,129 @@ class PrinterCounterRepository extends EntityRepository @@ -22,35 +23,129 @@ class PrinterCounterRepository extends EntityRepository
22 */ 23 */
23 public function relatorioGeral($start, $end) { 24 public function relatorioGeral($start, $end) {
24 25
  26 + $rsm = new ResultSetMapping();
  27 + $rsm->addScalarResult('blackink', 'blackInk');
  28 + $rsm->addScalarResult('coloredink', 'coloredInk');
  29 + $rsm->addScalarResult('enddate', 'endDate');
  30 + $rsm->addScalarResult('printsend', 'printsEnd');
  31 + $rsm->addScalarResult('startdate', 'startDate');
  32 + $rsm->addScalarResult('printsstart', 'printsStart');
  33 + $rsm->addScalarResult('name', 'name');
  34 + $rsm->addScalarResult('description', 'description');
  35 + $rsm->addScalarResult('serie', 'serie');
  36 + $rsm->addScalarResult('local', 'local');
  37 + $rsm->addScalarResult('host', 'host');
  38 + $rsm->addScalarResult('id', 'id');
  39 +
  40 +
  41 + $sql = "SELECT printer.id,
  42 + pc1.blackink,
  43 + pc1.coloredink,
  44 + to_timestamp(CASE WHEN max(pc1.date) IS NULL
  45 + THEN (CASE WHEN (SELECT min(date)
  46 + FROM tb_printer_counter
  47 + WHERE date >= ?
  48 + AND printer_id = printer.id) IS NULL
  49 + THEN (SELECT max(date)
  50 + FROM tb_printer_counter
  51 + WHERE printer_id = printer.id)
  52 + ELSE (SELECT min(date)
  53 + FROM tb_printer_counter
  54 + WHERE date >= ?
  55 + AND printer_id = printer.id)
  56 + END)
  57 + ELSE max(pc1.date)
  58 + END) as endDate,
  59 +
  60 + (CASE WHEN (SELECT pc2.prints
  61 + FROM tb_printer_counter pc2
  62 + WHERE pc2.date = max(pc1.date)
  63 + AND pc2.printer_id = printer.id) IS NULL
  64 + THEN (CASE WHEN (SELECT pc3.prints
  65 + FROM tb_printer_counter pc3
  66 + WHERE pc3.date = (SELECT min(date)
  67 + FROM tb_printer_counter
  68 + WHERE date >= ?
  69 + AND printer_id = printer.id)
  70 + AND printer_id = printer.id) IS NULL
  71 + THEN (SELECT prints
  72 + FROM tb_printer_counter
  73 + WHERE date = (SELECT max(date)
  74 + FROM tb_printer_counter
  75 + WHERE printer_id = printer.id)
  76 + AND printer_id = printer.id)
  77 + ELSE (SELECT pc3.prints
  78 + FROM tb_printer_counter pc3
  79 + WHERE pc3.date = (SELECT min(date)
  80 + FROM tb_printer_counter
  81 + WHERE date >= ?
  82 + AND printer_id = printer.id)
  83 + AND printer_id = printer.id)
  84 + END)
  85 + ELSE (SELECT pc2.prints
  86 + FROM tb_printer_counter pc2
  87 + WHERE pc2.date = max(pc1.date)
  88 + AND pc2.printer_id = printer.id)
  89 + END) as printsEnd,
  90 +
  91 + (CASE WHEN min(pc1.date) IS NULL
  92 + THEN (SELECT max(date)
  93 + FROM tb_printer_counter
  94 + WHERE date <= ?
  95 + AND printer_id = printer.id)
  96 + ELSE min(pc1.date)
  97 + END) as startDate,
  98 +
  99 + (CASE WHEN (SELECT pc2.prints
  100 + FROM tb_printer_counter pc2
  101 + WHERE pc2.date = min(pc1.date)
  102 + AND pc2.printer_id = printer.id) IS NULL
  103 + THEN (SELECT pc5.prints
  104 + FROM tb_printer_counter pc5
  105 + WHERE pc5.date = (SELECT max(date)
  106 + FROM tb_printer_counter
  107 + WHERE date <= ?
  108 + AND printer_id = printer.id)
  109 + AND pc5.printer_id = printer.id)
  110 + ELSE (SELECT pc4.prints
  111 + FROM tb_printer_counter pc4
  112 + WHERE pc4.date = min(pc1.date)
  113 + AND pc4.printer_id = printer.id)
  114 + END) as printsStart,
25 115
26 - $_dql = "SELECT printer.id,  
27 - pc1.blackInk,  
28 - pc1.coloredInk,  
29 - max(pc1.date) as endDate,  
30 - (SELECT pc2.prints FROM CocarBundle:PrinterCounter pc2 WHERE pc2.date = max(pc1.date) AND pc2.printer = printer.id) as printsEnd,  
31 - min(pc1.date) as startDate,  
32 - (SELECT pc3.prints FROM CocarBundle:PrinterCounter pc3 WHERE pc3.date = min(pc1.date) AND pc3.printer = printer.id) as printsStart,  
33 printer.name, 116 printer.name,
34 printer.description, 117 printer.description,
35 printer.serie, 118 printer.serie,
36 printer.local, 119 printer.local,
37 printer.host 120 printer.host
38 - FROM CocarBundle:Printer printer  
39 - LEFT JOIN CocarBundle:PrinterCounter pc1 WITH (pc1.printer = printer.id AND pc1.date BETWEEN :start AND :end) 121 + FROM tb_printer printer
  122 + LEFT JOIN tb_printer_counter pc1 ON (pc1.printer_id = printer.id AND pc1.date BETWEEN ? AND ?)
40 GROUP BY printer.id, 123 GROUP BY printer.id,
41 - pc1.blackInk,  
42 - pc1.coloredInk, 124 + pc1.blackink,
  125 + pc1.coloredink,
43 printer.name, 126 printer.name,
44 printer.description, 127 printer.description,
45 printer.host, 128 printer.host,
46 printer.serie, 129 printer.serie,
47 printer.local 130 printer.local
48 - ORDER BY printer.id ASC"; 131 + ORDER BY printer.id ASC
  132 + ";
  133 +
  134 + $query = $this->getEntityManager()->createNativeQuery($sql, $rsm);
  135 +
  136 + // Start date parameters
  137 + $query->setParameter(5, ( $start));
  138 + $query->setParameter(6, ( $start));
  139 + $query->setParameter(7, ( $start));
  140 +
  141 + // End date parameters
  142 + $query->setParameter(1, ( $end ));
  143 + $query->setParameter(2, ( $end ));
  144 + $query->setParameter(3, ( $end ));
  145 + $query->setParameter(4, ( $end ));
  146 + $query->setParameter(8, ( $end ));
49 147
50 - return $this->getEntityManager()->createQuery( $_dql )  
51 - ->setParameter('start', $start)  
52 - ->setParameter('end', $end)  
53 - ->getArrayResult(); 148 + return $query->execute();
54 149
55 } 150 }
56 151
@@ -63,28 +158,127 @@ class PrinterCounterRepository extends EntityRepository @@ -63,28 +158,127 @@ class PrinterCounterRepository extends EntityRepository
63 */ 158 */
64 public function relatorioCsvGeral($start, $end) { 159 public function relatorioCsvGeral($start, $end) {
65 160
  161 + $rsm = new ResultSetMapping();
  162 + $rsm->addScalarResult('id', 'id');
  163 + $rsm->addScalarResult('name', 'name');
  164 + $rsm->addScalarResult('host', 'host');
  165 + $rsm->addScalarResult('description', 'description');
  166 + $rsm->addScalarResult('serie', 'serie');
  167 + $rsm->addScalarResult('local', 'local');
  168 + $rsm->addScalarResult('blackink', 'blackInk');
  169 + $rsm->addScalarResult('coloredink', 'coloredInk');
  170 + $rsm->addScalarResult('printsend', 'printsEnd');
  171 + $rsm->addScalarResult('printsstart', 'printsStart');
  172 +
  173 +
  174 + $sql = "SELECT printer.id,
  175 + pc1.blackink,
  176 + pc1.coloredink,
  177 + to_timestamp(CASE WHEN max(pc1.date) IS NULL
  178 + THEN (CASE WHEN (SELECT min(date)
  179 + FROM tb_printer_counter
  180 + WHERE date >= ?
  181 + AND printer_id = printer.id) IS NULL
  182 + THEN (SELECT max(date)
  183 + FROM tb_printer_counter
  184 + WHERE printer_id = printer.id)
  185 + ELSE (SELECT min(date)
  186 + FROM tb_printer_counter
  187 + WHERE date >= ?
  188 + AND printer_id = printer.id)
  189 + END)
  190 + ELSE max(pc1.date)
  191 + END) as endDate,
  192 +
  193 + (CASE WHEN (SELECT pc2.prints
  194 + FROM tb_printer_counter pc2
  195 + WHERE pc2.date = max(pc1.date)
  196 + AND pc2.printer_id = printer.id) IS NULL
  197 + THEN (CASE WHEN (SELECT pc3.prints
  198 + FROM tb_printer_counter pc3
  199 + WHERE pc3.date = (SELECT min(date)
  200 + FROM tb_printer_counter
  201 + WHERE date >= ?
  202 + AND printer_id = printer.id)
  203 + AND printer_id = printer.id) IS NULL
  204 + THEN (SELECT prints
  205 + FROM tb_printer_counter
  206 + WHERE date = (SELECT max(date)
  207 + FROM tb_printer_counter
  208 + WHERE printer_id = printer.id)
  209 + AND printer_id = printer.id)
  210 + ELSE (SELECT pc3.prints
  211 + FROM tb_printer_counter pc3
  212 + WHERE pc3.date = (SELECT min(date)
  213 + FROM tb_printer_counter
  214 + WHERE date >= ?
  215 + AND printer_id = printer.id)
  216 + AND printer_id = printer.id)
  217 + END)
  218 + ELSE (SELECT pc2.prints
  219 + FROM tb_printer_counter pc2
  220 + WHERE pc2.date = max(pc1.date)
  221 + AND pc2.printer_id = printer.id)
  222 + END) as printsEnd,
  223 +
  224 + (CASE WHEN min(pc1.date) IS NULL
  225 + THEN (SELECT max(date)
  226 + FROM tb_printer_counter
  227 + WHERE date <= ?
  228 + AND printer_id = printer.id)
  229 + ELSE min(pc1.date)
  230 + END) as startDate,
  231 +
  232 + (CASE WHEN (SELECT pc2.prints
  233 + FROM tb_printer_counter pc2
  234 + WHERE pc2.date = min(pc1.date)
  235 + AND pc2.printer_id = printer.id) IS NULL
  236 + THEN (SELECT pc5.prints
  237 + FROM tb_printer_counter pc5
  238 + WHERE pc5.date = (SELECT max(date)
  239 + FROM tb_printer_counter
  240 + WHERE date <= ?
  241 + AND printer_id = printer.id)
  242 + AND pc5.printer_id = printer.id)
  243 + ELSE (SELECT pc4.prints
  244 + FROM tb_printer_counter pc4
  245 + WHERE pc4.date = min(pc1.date)
  246 + AND pc4.printer_id = printer.id)
  247 + END) as printsStart,
66 248
67 - $_dql = "SELECT printer.id,  
68 printer.name, 249 printer.name,
69 - printer.host, 250 + printer.description,
70 printer.serie, 251 printer.serie,
71 printer.local, 252 printer.local,
72 - (SELECT pc2.prints FROM CocarBundle:PrinterCounter pc2 WHERE pc2.date = max(pc1.date) AND pc2.printer = printer.id) as printsEnd,  
73 - (SELECT pc3.prints FROM CocarBundle:PrinterCounter pc3 WHERE pc3.date = min(pc1.date) AND pc3.printer = printer.id) as printsStart  
74 - FROM CocarBundle:Printer printer  
75 - LEFT JOIN CocarBundle:PrinterCounter pc1 WITH (pc1.printer = printer.id AND pc1.date BETWEEN :start AND :end) 253 + printer.host
  254 + FROM tb_printer printer
  255 + LEFT JOIN tb_printer_counter pc1 ON (pc1.printer_id = printer.id AND pc1.date BETWEEN ? AND ?)
76 GROUP BY printer.id, 256 GROUP BY printer.id,
  257 + pc1.blackink,
  258 + pc1.coloredink,
77 printer.name, 259 printer.name,
78 printer.description, 260 printer.description,
79 printer.host, 261 printer.host,
80 printer.serie, 262 printer.serie,
81 printer.local 263 printer.local
82 - ORDER BY printer.id ASC"; 264 + ORDER BY printer.id ASC
  265 + ";
83 266
84 - return $this->getEntityManager()->createQuery( $_dql )  
85 - ->setParameter('start', $start)  
86 - ->setParameter('end', $end)  
87 - ->getArrayResult(); 267 + $query = $this->getEntityManager()->createNativeQuery($sql, $rsm);
  268 +
  269 + // Start date parameters
  270 + $query->setParameter(5, ( $start));
  271 + $query->setParameter(6, ( $start));
  272 + $query->setParameter(7, ( $start));
  273 +
  274 + // End date parameters
  275 + $query->setParameter(1, ( $end ));
  276 + $query->setParameter(2, ( $end ));
  277 + $query->setParameter(3, ( $end ));
  278 + $query->setParameter(4, ( $end ));
  279 + $query->setParameter(8, ( $end ));
  280 +
  281 + return $query->execute();
88 282
89 } 283 }
90 284
@@ -97,30 +291,129 @@ class PrinterCounterRepository extends EntityRepository @@ -97,30 +291,129 @@ class PrinterCounterRepository extends EntityRepository
97 */ 291 */
98 public function relatorioCsvGeralDetalhado($start, $end) { 292 public function relatorioCsvGeralDetalhado($start, $end) {
99 293
  294 + $rsm = new ResultSetMapping();
  295 + $rsm->addScalarResult('blackink', 'blackInk');
  296 + $rsm->addScalarResult('coloredink', 'coloredInk');
  297 + $rsm->addScalarResult('enddate', 'endDate');
  298 + $rsm->addScalarResult('printsend', 'printsEnd');
  299 + $rsm->addScalarResult('startdate', 'startDate');
  300 + $rsm->addScalarResult('printsstart', 'printsStart');
  301 + $rsm->addScalarResult('name', 'name');
  302 + $rsm->addScalarResult('description', 'description');
  303 + $rsm->addScalarResult('serie', 'serie');
  304 + $rsm->addScalarResult('local', 'local');
  305 + $rsm->addScalarResult('host', 'host');
  306 + $rsm->addScalarResult('id', 'id');
  307 +
  308 +
  309 + $sql = "SELECT printer.id,
  310 + pc1.blackink,
  311 + pc1.coloredink,
  312 + to_timestamp(CASE WHEN max(pc1.date) IS NULL
  313 + THEN (CASE WHEN (SELECT min(date)
  314 + FROM tb_printer_counter
  315 + WHERE date >= ?
  316 + AND printer_id = printer.id) IS NULL
  317 + THEN (SELECT max(date)
  318 + FROM tb_printer_counter
  319 + WHERE printer_id = printer.id)
  320 + ELSE (SELECT min(date)
  321 + FROM tb_printer_counter
  322 + WHERE date >= ?
  323 + AND printer_id = printer.id)
  324 + END)
  325 + ELSE max(pc1.date)
  326 + END) as endDate,
  327 +
  328 + (CASE WHEN (SELECT pc2.prints
  329 + FROM tb_printer_counter pc2
  330 + WHERE pc2.date = max(pc1.date)
  331 + AND pc2.printer_id = printer.id) IS NULL
  332 + THEN (CASE WHEN (SELECT pc3.prints
  333 + FROM tb_printer_counter pc3
  334 + WHERE pc3.date = (SELECT min(date)
  335 + FROM tb_printer_counter
  336 + WHERE date >= ?
  337 + AND printer_id = printer.id)
  338 + AND printer_id = printer.id) IS NULL
  339 + THEN (SELECT prints
  340 + FROM tb_printer_counter
  341 + WHERE date = (SELECT max(date)
  342 + FROM tb_printer_counter
  343 + WHERE printer_id = printer.id)
  344 + AND printer_id = printer.id)
  345 + ELSE (SELECT pc3.prints
  346 + FROM tb_printer_counter pc3
  347 + WHERE pc3.date = (SELECT min(date)
  348 + FROM tb_printer_counter
  349 + WHERE date >= ?
  350 + AND printer_id = printer.id)
  351 + AND printer_id = printer.id)
  352 + END)
  353 + ELSE (SELECT pc2.prints
  354 + FROM tb_printer_counter pc2
  355 + WHERE pc2.date = max(pc1.date)
  356 + AND pc2.printer_id = printer.id)
  357 + END) as printsEnd,
  358 +
  359 + (CASE WHEN min(pc1.date) IS NULL
  360 + THEN (SELECT max(date)
  361 + FROM tb_printer_counter
  362 + WHERE date <= ?
  363 + AND printer_id = printer.id)
  364 + ELSE min(pc1.date)
  365 + END) as startDate,
  366 +
  367 + (CASE WHEN (SELECT pc2.prints
  368 + FROM tb_printer_counter pc2
  369 + WHERE pc2.date = min(pc1.date)
  370 + AND pc2.printer_id = printer.id) IS NULL
  371 + THEN (SELECT pc5.prints
  372 + FROM tb_printer_counter pc5
  373 + WHERE pc5.date = (SELECT max(date)
  374 + FROM tb_printer_counter
  375 + WHERE date <= ?
  376 + AND printer_id = printer.id)
  377 + AND pc5.printer_id = printer.id)
  378 + ELSE (SELECT pc4.prints
  379 + FROM tb_printer_counter pc4
  380 + WHERE pc4.date = min(pc1.date)
  381 + AND pc4.printer_id = printer.id)
  382 + END) as printsStart,
100 383
101 - $_dql = "SELECT printer.id,  
102 - max(pc1.date) as endDate,  
103 - (SELECT pc2.prints FROM CocarBundle:PrinterCounter pc2 WHERE pc2.date = max(pc1.date) AND pc2.printer = printer.id) as printsEnd,  
104 - min(pc1.date) as startDate,  
105 - (SELECT pc3.prints FROM CocarBundle:PrinterCounter pc3 WHERE pc3.date = min(pc1.date) AND pc3.printer = printer.id) as printsStart,  
106 printer.name, 384 printer.name,
107 - printer.host, 385 + printer.description,
108 printer.serie, 386 printer.serie,
109 - printer.local  
110 - FROM CocarBundle:Printer printer  
111 - LEFT JOIN CocarBundle:PrinterCounter pc1 WITH (pc1.printer = printer.id AND pc1.date BETWEEN :start AND :end) 387 + printer.local,
  388 + printer.host
  389 + FROM tb_printer printer
  390 + LEFT JOIN tb_printer_counter pc1 ON (pc1.printer_id = printer.id AND pc1.date BETWEEN ? AND ?)
112 GROUP BY printer.id, 391 GROUP BY printer.id,
  392 + pc1.blackink,
  393 + pc1.coloredink,
113 printer.name, 394 printer.name,
114 printer.description, 395 printer.description,
115 printer.host, 396 printer.host,
116 printer.serie, 397 printer.serie,
117 printer.local 398 printer.local
118 - ORDER BY printer.id ASC"; 399 + ORDER BY printer.id ASC
  400 + ";
  401 +
  402 + $query = $this->getEntityManager()->createNativeQuery($sql, $rsm);
  403 +
  404 + // Start date parameters
  405 + $query->setParameter(5, ( $start));
  406 + $query->setParameter(6, ( $start));
  407 + $query->setParameter(7, ( $start));
  408 +
  409 + // End date parameters
  410 + $query->setParameter(1, ( $end ));
  411 + $query->setParameter(2, ( $end ));
  412 + $query->setParameter(3, ( $end ));
  413 + $query->setParameter(4, ( $end ));
  414 + $query->setParameter(8, ( $end ));
119 415
120 - return $this->getEntityManager()->createQuery( $_dql )  
121 - ->setParameter('start', $start)  
122 - ->setParameter('end', $end)  
123 - ->getArrayResult(); 416 + return $query->execute();
124 417
125 } 418 }
126 } 419 }
Resources/views/Printer/index.html.twig
@@ -47,7 +47,12 @@ @@ -47,7 +47,12 @@
47 </thead> 47 </thead>
48 <tbody> 48 <tbody>
49 {% for entity in printer %} 49 {% for entity in printer %}
50 - <tr> 50 + {% set totalprints = entity.printsEnd - entity.printsStart %}
  51 + {% if (totalprints > 20000) or (totalprints <= 0) %}
  52 + <tr class="warning">
  53 + {% else %}
  54 + <tr>
  55 + {% endif %}
51 <td><a href="{{ path('printer_show', { 'id': entity.id }) }}">{{ entity.id }}</a></td> 56 <td><a href="{{ path('printer_show', { 'id': entity.id }) }}">{{ entity.id }}</a></td>
52 <td>{{ entity.name }}</td> 57 <td>{{ entity.name }}</td>
53 <td>{{ entity.host }}</td> 58 <td>{{ entity.host }}</td>
@@ -55,7 +60,7 @@ @@ -55,7 +60,7 @@
55 <td>{{ entity.local }}</td> 60 <td>{{ entity.local }}</td>
56 <td>{{ entity.printsStart }}</td> 61 <td>{{ entity.printsStart }}</td>
57 <td>{{ entity.printsEnd }}</td> 62 <td>{{ entity.printsEnd }}</td>
58 - <td>{{ (entity.printsEnd - entity.printsStart) }}</td> 63 + <td>{{ totalprints }}</td>
59 <td> 64 <td>
60 <ul> 65 <ul>
61 <li> 66 <li>
Resources/views/Printer/indexDetalhado.html.twig
@@ -33,7 +33,12 @@ @@ -33,7 +33,12 @@
33 </thead> 33 </thead>
34 <tbody> 34 <tbody>
35 {% for entity in printer %} 35 {% for entity in printer %}
36 - <tr> 36 + {% set totalprints = entity.printsEnd - entity.printsStart %}
  37 + {% if (totalprints > 20000) or (totalprints <= 0) %}
  38 + <tr class="warning">
  39 + {% else %}
  40 + <tr>
  41 + {% endif %}
37 <td><a href="{{ path('printer_show', { 'id': entity.id }) }}">{{ entity.id }}</a></td> 42 <td><a href="{{ path('printer_show', { 'id': entity.id }) }}">{{ entity.id }}</a></td>
38 <td>{{ entity.name }}</td> 43 <td>{{ entity.name }}</td>
39 <td>{{ entity.host }}</td> 44 <td>{{ entity.host }}</td>
@@ -51,7 +56,7 @@ @@ -51,7 +56,7 @@
51 {% else %} 56 {% else %}
52 <td></td> 57 <td></td>
53 {% endif %} 58 {% endif %}
54 - <td>{{ (entity.printsEnd - entity.printsStart) }}</td> 59 + <td>{{ totalprints }}</td>
55 <td> 60 <td>
56 <ul> 61 <ul>
57 <li> 62 <li>