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 | 12 | use Symfony\Component\HttpFoundation\Request; |
| 13 | 13 | use Symfony\Component\HttpFoundation\JsonResponse; |
| 14 | 14 | use Swpb\Bundle\CocarBundle\Entity\PrinterCounter; |
| 15 | +use Swpb\Bundle\CocarBundle\Entity\Printer; | |
| 15 | 16 | use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method; |
| 16 | 17 | use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; |
| 17 | 18 | |
| ... | ... | @@ -55,7 +56,7 @@ class ApiController extends Controller { |
| 55 | 56 | /** |
| 56 | 57 | * @param $ip_addr |
| 57 | 58 | * @Route("/printer/{ip_addr}", name="printer_counter_update") |
| 58 | - * @Method("PUT") | |
| 59 | + * @Method("POST") | |
| 59 | 60 | */ |
| 60 | 61 | public function printerAction($ip_addr, Request $request) { |
| 61 | 62 | $em = $this->getDoctrine()->getManager(); |
| ... | ... | @@ -81,40 +82,49 @@ class ApiController extends Controller { |
| 81 | 82 | |
| 82 | 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 | 103 | $counter = $this->getDoctrine()->getManager()->getRepository('CocarBundle:PrinterCounter')->findBy(array( |
| 103 | - 'printer' => $printer, | |
| 104 | + 'printer' => $printer->getId(), | |
| 104 | 105 | 'date' => $dados['counter_time'] |
| 105 | 106 | )); |
| 106 | 107 | |
| 107 | 108 | if(empty($counter)) { |
| 108 | 109 | $counter = new PrinterCounter; |
| 109 | 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 | 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 | 129 | // Grava o contador |
| 120 | 130 | $counter->setPrinter($printer); | ... | ... |