public function ajax_update(Context $context) { $response = new JsonResponse(); $unidade = $context->getUnidade(); $filaService = new FilaService($this->em()); if ($unidade) { $ids = $context->request()->get('ids'); $ids = Arrays::valuesToInt(explode(',', $ids)); if (count($ids)) { $response->data['total'] = 0; $servicos = $this->servicos($unidade, ' e.servico IN (' . implode(',', $ids) . ') '); $em = $context->database()->createEntityManager(); if ($servicos) { foreach ($servicos as $su) { $rs = $filaService->filaServico($unidade, $su->getServico()); $total = count($rs); // prevent overhead if ($total) { $fila = []; foreach ($rs as $atendimento) { $arr = $atendimento->jsonSerialize(true); $fila[] = $arr; } $response->data['servicos'][$su->getServico()->getId()] = $fila; ++$response->data['total']; } } } $response->success = true; } } return $response; }
public function ajax_update(Context $context) { $response = new JsonResponse(); $unidade = $context->getUnidade(); if ($unidade) { $ids = $context->request()->get('ids'); $ids = Arrays::valuesToInt(explode(',', $ids)); $senhas = array(); if (sizeof($ids)) { $dql = "\n SELECT \n s.id, COUNT(e) as total \n FROM \n Novosga\\Model\\Atendimento e\n JOIN e.servico s\n WHERE \n e.unidade = :unidade AND \n e.servico IN (:servicos)\n "; // total senhas do servico (qualquer status) $rs = $this->em()->createQuery($dql . " GROUP BY s.id")->setParameter('unidade', $unidade)->setParameter('servicos', $ids)->getArrayResult(); foreach ($rs as $r) { $senhas[$r['id']] = array('total' => $r['total'], 'fila' => 0); } // total senhas esperando $rs = $this->em()->createQuery($dql . " AND e.status = :status GROUP BY s.id")->setParameter('unidade', $unidade)->setParameter('servicos', $ids)->setParameter('status', AtendimentoService::SENHA_EMITIDA)->getArrayResult(); foreach ($rs as $r) { $senhas[$r['id']]['fila'] = $r['total']; } $service = new AtendimentoService($this->em()); $response->success = true; $response->data = array('ultima' => $service->ultimaSenhaUnidade($unidade), 'servicos' => $senhas); } } return $response; }
/** * Retorna os serviços habilitados na unidade informada. Descartando os serviços com ids informados no parâmetro exceto * @param Novosga\Context $context */ public function servicos_unidade(Context $context) { $response = new JsonResponse(true); $id = (int) $context->request()->get('unidade'); $exceto = $context->request()->get('exceto'); $exceto = Arrays::valuesToInt(explode(',', $exceto)); $exceto = join(',', $exceto); $service = new \Novosga\Service\ServicoService($this->em()); $response->data = $service->servicosUnidade($id, "e.status = 1 AND s.id NOT IN ({$exceto})"); return $response; }
/** * Marca o atendimento como encerrado e codificado. * * @param Novosga\Context $context */ public function codificar(Context $context) { $response = new JsonResponse(false); try { if (!$context->request()->isPost()) { throw new Exception(_('Somente via POST')); } $unidade = $context->getUnidade(); if (!$unidade) { throw new Exception(_('Nenhum unidade escolhida')); } $usuario = $context->getUser(); $atual = $this->atendimentoService->atendimentoAndamento($usuario->getId()); if (!$atual) { throw new Exception(_('Nenhum atendimento em andamento')); } $servicos = $context->request()->post('servicos'); $servicos = Arrays::valuesToInt(explode(',', $servicos)); if (empty($servicos)) { throw new Exception(_('Nenhum serviço selecionado')); } $this->em()->beginTransaction(); foreach ($servicos as $s) { $codificado = new \Novosga\Model\AtendimentoCodificado(); $codificado->setAtendimento($atual); $codificado->setServico($this->em()->find('Novosga\\Model\\Servico', $s)); $codificado->setPeso(1); $this->em()->persist($codificado); } // verifica se esta encerrando e redirecionando $redirecionar = $context->request()->post('redirecionar'); if ($redirecionar) { $servico = $context->request()->post('novoServico'); $redirecionado = $this->atendimentoService->redirecionar($atual, $usuario->getWrapped(), $unidade, $servico); if (!$redirecionado->getId()) { throw new Exception(sprintf(_('Erro ao redirecionar atendimento %s para o serviço %s'), $atual->getId(), $servico)); } } $response->success = $this->mudaStatusAtendimento($atual, AtendimentoService::ATENDIMENTO_ENCERRADO, AtendimentoService::ATENDIMENTO_ENCERRADO_CODIFICADO, 'dataFim'); if (!$response->success) { throw new Exception(sprintf(_('Erro ao codificar o atendimento %s'), $atual->getId())); } $this->em()->commit(); $this->em()->flush(); } catch (Exception $e) { try { $this->em()->rollback(); } catch (Exception $ex) { } $response->message = $e->getMessage(); } return $response; }