/** * Retorna a fila de atendimentos do usuario * @param UsuarioSessao $usuario * @param integer $maxResults * @return array */ public function atendimentos(UsuarioSessao $usuario, $maxResults = 0) { $ids = array(0); $servicos = $usuario->getServicos(); foreach ($servicos as $s) { $ids[] = $s->getServico()->getId(); } $cond = ''; // se nao atende todos, filtra pelo tipo de atendimento if ($usuario->getTipoAtendimento() != UsuarioSessao::ATEND_TODOS) { $s = $usuario->getTipoAtendimento() == UsuarioSessao::ATEND_CONVENCIONAL ? '=' : '>'; $cond = "p.peso {$s} 0"; $rs = $this->atendimentosUsuario($usuario, $ids, $maxResults, $cond); } else { // se atende todos mas tem limite para sequencia de tipo de atendimento $maxPrioridade = (int) AppConfig::getInstance()->get("queue.limits.priority"); if ($maxPrioridade > 0 && $usuario->getSequenciaPrioridade() > 0 && $usuario->getSequenciaPrioridade() % $maxPrioridade === 0) { $cond = "p.peso = 0"; } $rs = $this->atendimentosUsuario($usuario, $ids, $maxResults, $cond); // se a lista veio vazia, tenta pegar qualquer um if (sizeof($rs) === 0) { $rs = $this->atendimentosUsuario($usuario, $ids, $maxResults); } } return $rs; }
private function checkUserConfig(Context $context, UsuarioSessao $usuario) { $service = new UsuarioService($this->em()); $numeroLocalMeta = $service->meta($usuario->getWrapped(), 'atendimento.local'); $numero = $numeroLocalMeta ? (int) $numeroLocalMeta->getValue() : $usuario->getLocal(); $tipoAtendimentoMeta = $service->meta($usuario->getWrapped(), 'atendimento.tipo'); $tipoAtendimento = $tipoAtendimentoMeta ? (int) $tipoAtendimentoMeta->getValue() : $usuario->getTipoAtendimento(); if ($numero != $usuario->getLocal()) { $usuario->setLocal($numero); } if ($tipoAtendimento != $usuario->getTipoAtendimento()) { $usuario->setTipoAtendimento($tipoAtendimento); } $context->setUser($usuario); }