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 setDataChamada(\DateTime $dataChamada)
 {
     $this->__initializer__ && $this->__initializer__->__invoke($this, 'setDataChamada', array($dataChamada));
     return parent::setDataChamada($dataChamada);
 }