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 3 namespace Swpb\Bundle\CocarBundle\Entity;
4 4  
5 5 use Doctrine\ORM\EntityRepository;
  6 +use Doctrine\ORM\Query\ResultSetMapping;
6 7  
7 8 /**
8 9 * PrinterCounterRepository
... ... @@ -22,35 +23,129 @@ class PrinterCounterRepository extends EntityRepository
22 23 */
23 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 116 printer.name,
34 117 printer.description,
35 118 printer.serie,
36 119 printer.local,
37 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 123 GROUP BY printer.id,
41   - pc1.blackInk,
42   - pc1.coloredInk,
  124 + pc1.blackink,
  125 + pc1.coloredink,
43 126 printer.name,
44 127 printer.description,
45 128 printer.host,
46 129 printer.serie,
47 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 158 */
64 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 249 printer.name,
69   - printer.host,
  250 + printer.description,
70 251 printer.serie,
71 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 256 GROUP BY printer.id,
  257 + pc1.blackink,
  258 + pc1.coloredink,
77 259 printer.name,
78 260 printer.description,
79 261 printer.host,
80 262 printer.serie,
81 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 291 */
98 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 384 printer.name,
107   - printer.host,
  385 + printer.description,
108 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 391 GROUP BY printer.id,
  392 + pc1.blackink,
  393 + pc1.coloredink,
113 394 printer.name,
114 395 printer.description,
115 396 printer.host,
116 397 printer.serie,
117 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 47 </thead>
48 48 <tbody>
49 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 56 <td><a href="{{ path('printer_show', { 'id': entity.id }) }}">{{ entity.id }}</a></td>
52 57 <td>{{ entity.name }}</td>
53 58 <td>{{ entity.host }}</td>
... ... @@ -55,7 +60,7 @@
55 60 <td>{{ entity.local }}</td>
56 61 <td>{{ entity.printsStart }}</td>
57 62 <td>{{ entity.printsEnd }}</td>
58   - <td>{{ (entity.printsEnd - entity.printsStart) }}</td>
  63 + <td>{{ totalprints }}</td>
59 64 <td>
60 65 <ul>
61 66 <li>
... ...
Resources/views/Printer/indexDetalhado.html.twig
... ... @@ -33,7 +33,12 @@
33 33 </thead>
34 34 <tbody>
35 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 42 <td><a href="{{ path('printer_show', { 'id': entity.id }) }}">{{ entity.id }}</a></td>
38 43 <td>{{ entity.name }}</td>
39 44 <td>{{ entity.host }}</td>
... ... @@ -51,7 +56,7 @@
51 56 {% else %}
52 57 <td></td>
53 58 {% endif %}
54   - <td>{{ (entity.printsEnd - entity.printsStart) }}</td>
  59 + <td>{{ totalprints }}</td>
55 60 <td>
56 61 <ul>
57 62 <li>
... ...