示例#1
0
 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();
 }