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 @@
@@ -28,21 +33,16 @@
{% for entity in printer %}
Id
- Impressões
Nome
Host
+ Contador Inicial
+ Data Inicial
+ Contador Final
+ Data Final
+ Impressões
Ações