public function filaAtendimento(
        Unidade $unidade,
        Usuario $usuario,
        array $servicosUsuario,
        $tipoFila = self::TIPO_TODOS,
        $maxResults = 0
    ) {
        $ids = [];
        foreach ($servicosUsuario as $servico) {
            if ($servico->getUsuario()->getId() === $usuario->getId()) {
                $ids[]   = $servico->getServico()->getId();
            }
        }
        
        if (empty($ids)) {
            return [];
        }
        
        $builder = $this
            ->builder()
            ->join(
                ServicoUsuario::class,
                'servicoUsuario',
                'WITH',
                'servicoUsuario.servico = servico AND servicoUsuario.usuario = :usuario'
            )
            ->andWhere('(atendimento.usuario IS NULL OR atendimento.usuario = :usuario)')
            ->andWhere('atendimento.status = :status')
            ->andWhere('atendimento.unidade = :unidade')
            ->andWhere('servico.id IN (:servicos)');
        
        // se nao atende todos, filtra pelo tipo de atendimento
        switch ($tipoFila) {
            case self::TIPO_NORMAL:
            case self::TIPO_PRIORIDADE:
                $s = ($tipoFila === self::TIPO_NORMAL) ? '=' : '>';
                $where = "prioridade.peso $s 0";
                $builder->andWhere($where);
                break;
            case self::TIPO_AGENDAMENTO:
                $builder->andWhere("atendimento.dataAgendamento IS NOT NULL");
                break;
        }
        
        $params = [
            'status'   => AtendimentoService::SENHA_EMITIDA,
            'unidade'  => $unidade,
            'usuario'  => $usuario,
            'servicos' => $ids,
        ];
        
        $this->applyOrders($builder, $unidade, $usuario);

        $query = $builder
            ->setParameters($params)
            ->getQuery();

        if ($maxResults > 0) {
            $query->setMaxResults($maxResults);
        }

        return $query->getResult();
    }
public function filaAtendimento(
        Unidade $unidade,
        Usuario $usuario,
        array $servicosUsuario,
        $tipoFila = self::TIPO_TODOS,
        $maxResults = 0
    ) {
        $ids = [];
        foreach ($servicosUsuario as $servico) {
            if ($servico->getUsuario()->getId() === $usuario->getId()) {
                $ids[]   = $servico->getServico()->getId();
            }
        }
        
        if (empty($ids)) {
            return [];
        }
        
        $builder = $this
            ->builder()
            ->join(
                ServicoUsuario::class,
                'servicoUsuario',
                'WITH',
                'servicoUsuario.servico = servico AND servicoUsuario.usuario = :usuario'
            )
            ->andWhere('(atendimento.usuario IS NULL OR atendimento.usuario = :usuario)')
            ->andWhere('atendimento.status = :status')
            ->andWhere('atendimento.unidade = :unidade')
            ->andWhere('servico.id IN (:servicos)');
        
        // se nao atende todos, filtra pelo tipo de atendimento
        switch ($tipoFila) {
            case self::TIPO_NORMAL:
            case self::TIPO_PRIORIDADE:
                $s = ($tipoFila === self::TIPO_NORMAL) ? '=' : '>';
                $where = "prioridade.peso $s 0";
                $builder->andWhere($where);
                break;
            case self::TIPO_AGENDAMENTO:
                $builder->andWhere("atendimento.dataAgendamento IS NOT NULL");
                break;
        }
        
        $params = [
            'status'   => AtendimentoService::SENHA_EMITIDA,
            'unidade'  => $unidade,
            'usuario'  => $usuario,
            'servicos' => $ids,
        ];
        
        $this->applyOrders($builder, $unidade, $usuario);

        $query = $builder
            ->setParameters($params)
            ->getQuery();

        if ($maxResults > 0) {
            $query->setMaxResults($maxResults);
        }

        return $query->getResult();
    }
public function filaAtendimento ( Unidade $ unidade , Usuario $ usuario , array $ servicosUsuario , $ tipoFila = self :: TIPO_TODOS , $ maxResults = 0 ) { $ ids = [ ] ; foreach ( $ servicosUsuario as $ servico ) { if ( $ servico -> getUsuario ( ) -> getId ( ) === $ usuario -> getId ( ) ) { $ ids [ ] = $ servico -> getServico ( ) -> getId ( ) ; } } if ( empty ( $ ids ) ) { return [ ] ; } $ builder = $ this -> builder ( ) -> join ( ServicoUsuario :: class , 'servicoUsuario' , 'WITH' , 'servicoUsuario.servico = servico AND servicoUsuario.usuario = :usuario' ) -> andWhere ( '(atendimento.usuario IS NULL OR atendimento.usuario = :usuario)' ) -> andWhere ( 'atendimento.status = :status' ) -> andWhere ( 'atendimento.unidade = :unidade' ) -> andWhere ( 'servico.id IN (:servicos)' ) ; // se nao atende todos, filtra pelo tipo de atendimento switch ( $ tipoFila ) { case self :: TIPO_NORMAL : case self :: TIPO_PRIORIDADE : $ s = ( $ tipoFila === self :: TIPO_NORMAL ) ? '=' : '>' ; $ where = "prioridade.peso $s 0" ; $ builder -> andWhere ( $ where ) ; break ; case self :: TIPO_AGENDAMENTO : $ builder -> andWhere ( "atendimento.dataAgendamento IS NOT NULL" ) ; break ; } $ params = [ 'status' => AtendimentoService :: SENHA_EMITIDA , 'unidade' => $ unidade , 'usuario' => $ usuario , 'servicos' => $ ids , ] ; $ this -> applyOrders ( $ builder , $ unidade , $ usuario ) ; $ query = $ builder -> setParameters ( $ params ) -> getQuery ( ) ; if ( $ maxResults > 0 ) { $ query -> setMaxResults ( $ maxResults ) ; } return $ query -> getResult ( ) ; }
Retorna a fila de atendimentos do usuario.

@param Unidade          $unidade
@param Usuario          $usuario
@param ServicoUsuario[] $servicosUsuario
@param string           $tipoFila
@param int              $maxResults

@return array
Retorna a fila de atendimentos do usuario .