public function chamar(Atendimento $atendimento, Usuario $usuario, $local) { AppConfig::getInstance()->hook("attending.pre-call", array($atendimento, $usuario, $local)); $atendimento->setUsuario($usuario); $atendimento->setLocal($local); $atendimento->setStatus(AtendimentoService::CHAMADO_PELA_MESA); $atendimento->setDataChamada(new DateTime()); // atualiza o proximo da fila $query = $this->em->createQuery("\n UPDATE \n Novosga\\Model\\Atendimento e \n SET \n e.usuario = :usuario, e.local = :local, e.status = :novoStatus, e.dataChamada = :data\n WHERE \n e.id = :id AND e.status = :statusAtual\n "); $query->setParameter('usuario', $atendimento->getUsuario()->getId()); $query->setParameter('local', $atendimento->getLocal()); $query->setParameter('novoStatus', $atendimento->getStatus()); $query->setParameter('data', $atendimento->getDataChamada()); $query->setParameter('id', $atendimento->getId()); $query->setParameter('statusAtual', AtendimentoService::SENHA_EMITIDA); /* * caso entre o intervalo do select e o update, o proximo ja tiver sido chamado * a consulta retornara 0, entao tenta pegar o proximo novamente (outro) */ $success = $query->execute() > 0; if ($success) { AppConfig::getInstance()->hook("attending.call", array($atendimento, $usuario)); } return $success; }
/** * @param Atendimento $atendimento * @param mixed $statusAtual (array[int] | int) * @param int $novoStatus * @param string $campoData * * @return bool */ private function mudaStatusAtendimento(Atendimento $atendimento, $statusAtual, $novoStatus, $campoData) { $cond = ''; if ($campoData !== null) { $cond = ", e.{$campoData} = :data"; } if (!is_array($statusAtual)) { $statusAtual = [$statusAtual]; } // atualizando atendimento $query = $this->em()->createQuery("\n UPDATE\n Novosga\\Model\\Atendimento e\n SET\n e.status = :novoStatus {$cond}\n WHERE\n e.id = :id AND\n e.status IN (:statusAtual)\n "); if ($campoData !== null) { $query->setParameter('data', DateUtil::nowSQL()); } $query->setParameter('novoStatus', $novoStatus); $query->setParameter('id', $atendimento->getId()); $query->setParameter('statusAtual', $statusAtual); return $query->execute() > 0; }
/** * {@inheritDoc} */ public function getId() { if ($this->__isInitialized__ === false) { return (int) parent::getId(); } $this->__initializer__ && $this->__initializer__->__invoke($this, 'getId', array()); return parent::getId(); }