/**
  * @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;
 }
 /**
  * Redireciona um atendimento para outro servico.
  *
  * @param Atendimento $atendimento
  * @param Usuario     $usuario
  * @param int|Unidade $unidade
  * @param int|Servico $servico
  *
  * @return Atendimento
  */
 public function redirecionar(Atendimento $atendimento, Usuario $usuario, $unidade, $servico)
 {
     // copiando a senha do atendimento atual
     $service = new ServicoService($this->em);
     $su = $service->servicoUnidade($unidade, $servico);
     AppConfig::getInstance()->hook('attending.pre-redirect', array($atendimento, $su, $usuario));
     $novo = new Atendimento();
     $novo->setLocal(0);
     $novo->setServicoUnidade($su);
     $novo->setPai($atendimento);
     $novo->setDataChegada(new DateTime());
     $novo->setStatus(self::SENHA_EMITIDA);
     $novo->setSiglaSenha($atendimento->getSenha()->getSigla());
     $novo->setNumeroSenha($atendimento->getNumeroSenha());
     $novo->setNumeroSenhaServico($atendimento->getNumeroSenhaServico());
     $novo->setUsuario($usuario);
     $novo->setUsuarioTriagem($usuario);
     $novo->setPrioridade($atendimento->getPrioridade());
     $novo->setNomeCliente($atendimento->getCliente()->getNome());
     $novo->setDocumentoCliente($atendimento->getCliente()->getDocumento());
     $this->em->persist($novo);
     $this->em->flush();
     AppConfig::getInstance()->hook('attending.redirect', $atendimento);
     return $novo;
 }
 /**
  * {@inheritDoc}
  */
 public function __tostring()
 {
     $this->__initializer__ && $this->__initializer__->__invoke($this, '__tostring', array());
     return parent::__tostring();
 }