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; }
/** * {@inheritDoc} */ public function getUsuario() { $this->__initializer__ && $this->__initializer__->__invoke($this, 'getUsuario', array()); return parent::getUsuario(); }