Commit 75a8e304b1b5cac52cbd30b4c8cfa50d55c4f53e
Exists in
master
and in
2 other branches
Adiciona API para inserção de impressão.
Showing
1 changed file
with
30 additions
and
20 deletions
Show diff stats
Controller/ApiController.php
| @@ -12,6 +12,7 @@ use Symfony\Bundle\FrameworkBundle\Controller\Controller; | @@ -12,6 +12,7 @@ use Symfony\Bundle\FrameworkBundle\Controller\Controller; | ||
| 12 | use Symfony\Component\HttpFoundation\Request; | 12 | use Symfony\Component\HttpFoundation\Request; |
| 13 | use Symfony\Component\HttpFoundation\JsonResponse; | 13 | use Symfony\Component\HttpFoundation\JsonResponse; |
| 14 | use Swpb\Bundle\CocarBundle\Entity\PrinterCounter; | 14 | use Swpb\Bundle\CocarBundle\Entity\PrinterCounter; |
| 15 | +use Swpb\Bundle\CocarBundle\Entity\Printer; | ||
| 15 | use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method; | 16 | use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method; |
| 16 | use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; | 17 | use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; |
| 17 | 18 | ||
| @@ -55,7 +56,7 @@ class ApiController extends Controller { | @@ -55,7 +56,7 @@ class ApiController extends Controller { | ||
| 55 | /** | 56 | /** |
| 56 | * @param $ip_addr | 57 | * @param $ip_addr |
| 57 | * @Route("/printer/{ip_addr}", name="printer_counter_update") | 58 | * @Route("/printer/{ip_addr}", name="printer_counter_update") |
| 58 | - * @Method("PUT") | 59 | + * @Method("POST") |
| 59 | */ | 60 | */ |
| 60 | public function printerAction($ip_addr, Request $request) { | 61 | public function printerAction($ip_addr, Request $request) { |
| 61 | $em = $this->getDoctrine()->getManager(); | 62 | $em = $this->getDoctrine()->getManager(); |
| @@ -81,40 +82,49 @@ class ApiController extends Controller { | @@ -81,40 +82,49 @@ class ApiController extends Controller { | ||
| 81 | 82 | ||
| 82 | $logger->debug("Atualizando informações para a impressora com IP = $ip_addr\n".$status); | 83 | $logger->debug("Atualizando informações para a impressora com IP = $ip_addr\n".$status); |
| 83 | 84 | ||
| 84 | - try { | ||
| 85 | - $printer = $em->getRepository('CocarBundle:Printer')->findOneBy(array('host' => $ip_addr)); | ||
| 86 | - } | ||
| 87 | - catch(\Doctrine\ORM\NoResultException $e) { | ||
| 88 | - $logger->error("COLETA: Impressora não cadastrada: $ip_addr \n$e"); | ||
| 89 | - $error_msg = '{ | ||
| 90 | - "message": "Impressora não cadastrada", | ||
| 91 | - "codigo": 2 | ||
| 92 | - }'; | 85 | + $printer = $em->getRepository('CocarBundle:Printer')->findOneBy(array('host' => $ip_addr)); |
| 86 | + if (empty($printer)) { | ||
| 87 | + $logger->error("COLETA: Impressora não cadastrada: $ip_addr. Inserindo...."); | ||
| 93 | 88 | ||
| 94 | 89 | ||
| 95 | - $response = new JsonResponse(); | ||
| 96 | - $response->setStatusCode('500'); | ||
| 97 | - $response->setContent($error_msg); | ||
| 98 | - return $response; | 90 | + // Insere impressora que não estiver cadastrada |
| 91 | + $printer = new Printer(); | ||
| 92 | + | ||
| 93 | + // FIXME: Deve ser retornado pelo Cocar | ||
| 94 | + $data = new \DateTime(); | ||
| 95 | + $printer->setCommunitySnmpPrinter('public'); | ||
| 96 | + $printer->setHost($ip_addr); | ||
| 97 | + $printer->setDescription('Impressora detectada automaticamente em '.$data->format('d/m/Y')); | ||
| 98 | + $printer->setName("Impressora $ip_addr"); | ||
| 99 | + | ||
| 99 | } | 100 | } |
| 100 | 101 | ||
| 101 | 102 | ||
| 102 | $counter = $this->getDoctrine()->getManager()->getRepository('CocarBundle:PrinterCounter')->findBy(array( | 103 | $counter = $this->getDoctrine()->getManager()->getRepository('CocarBundle:PrinterCounter')->findBy(array( |
| 103 | - 'printer' => $printer, | 104 | + 'printer' => $printer->getId(), |
| 104 | 'date' => $dados['counter_time'] | 105 | 'date' => $dados['counter_time'] |
| 105 | )); | 106 | )); |
| 106 | 107 | ||
| 107 | if(empty($counter)) { | 108 | if(empty($counter)) { |
| 108 | $counter = new PrinterCounter; | 109 | $counter = new PrinterCounter; |
| 109 | } else { | 110 | } else { |
| 110 | - $this->get('logger')->error("Entrada repetida para impressora $printer e data ".$dados['counter_time']); | ||
| 111 | - return true; | 111 | + $this->get('logger')->error("Entrada repetida para impressora". $printer->getId() ." e data ".$dados['counter_time']); |
| 112 | + $response = new JsonResponse(); | ||
| 113 | + $response->setStatusCode('200'); | ||
| 114 | + | ||
| 115 | + return $response; | ||
| 112 | } | 116 | } |
| 113 | 117 | ||
| 114 | // Atualiza impressora sempre que alterar o serial | 118 | // Atualiza impressora sempre que alterar o serial |
| 115 | - $printer->setName($dados['model']); | ||
| 116 | - $printer->setSerie($dados['serial']); | ||
| 117 | - $printer->setDescription($dados['description']); | 119 | + if (!empty($dados['model'])) { |
| 120 | + $printer->setName($dados['model']); | ||
| 121 | + } | ||
| 122 | + if (!empty($dados['serial'])) { | ||
| 123 | + $printer->setSerie($dados['serial']); | ||
| 124 | + } | ||
| 125 | + if (!empty($dados['description'])) { | ||
| 126 | + $printer->setDescription($dados['description']); | ||
| 127 | + } | ||
| 118 | 128 | ||
| 119 | // Grava o contador | 129 | // Grava o contador |
| 120 | $counter->setPrinter($printer); | 130 | $counter->setPrinter($printer); |