Prezados, já vi aqui no fórum vários posts sobre ordem e sobre a edição de do FilaService.php.

Meu arquivo ficou:

  // default queue ordering
    public static $ordering = array(
        // wait time
        array(
            'exp' => 'p.peso + 0',
            'order' => 'DESC',
        ),
        // priority
        array(
			'exp' => 'su.peso',
            'exp' => 'p.peso',
            'order' => 'ASC',
        ),
        // ticket number
        array(
            'exp' => 'e.numeroSenha',
            'order' => 'ASC',
        ),
    );

Dessa forma tenho as prioridades na frente das normais e por ordem de chegada.

Gostaria de saber qual o caminho a se fazer para poder intercalar as senhas. Já tentei construir um array baseado nos outros mas não consegui. Já li em tópico sobre usar hooks. Alguém poderia dar mais detalhes sobre isso?

Desde já meu muito obrigado. Caso consiga postarei aqui no fórum minha solução.

7 meses depois

A solução vem da seguinte alteração no arquivo "FilaService.php"?

class FilaService extends ModelService
{
// default queue ordering
public static $ordering = array(
// wait time
/**array(
'exp' => '((p.peso + 1) (CURRENT_TIMESTAMP() - e.dataChegada))',
'order' => 'DESC',
),
// priority
array(
'exp' => 'p.peso',
'order' => 'DESC',
), */

    // ticket number
    array(
        'exp' => 'e.numeroSenha - (p.peso * 3)',
        'order' => 'ASC',
    ),
);

Olá fassis. Desde já obrigado pela sua resposta. Irei testar e darei o feedback.

    4 anos depois
    8 meses depois

    alguma resolução para a versão 2.0.8?

    return [
        'queue' => [
            /**
             * Queue ordering
             * @param \Novosga\Entity\Unidade $unidade
             * @param \Novosga\Entity\Usuario $usuario (optional)
             * @return array
             */
            'ordering' =>  function (\Novosga\Configuration\OrderingParameter $param) {
                $ordering = [
                    [
                        'exp' => 'atendimento.dataAgendamento',
                        'order' => 'ASC',
                    ]
                ];
                
                if ($param->getUsuario()) {
                    // peso servico x usuario
                    $ordering[] = [
                        'exp' => 'servicoUsuario.peso',
                        'order' => 'DESC',
                    ];
                }
        
                return array_merge($ordering, [
                    // priority
                    [
                        'exp'   => 'prioridade.peso',
                        'order' => 'DESC',
                    ],
                    // peso servico x unidade
                    [
                        'exp'   => 'servicoUnidade.peso',
                        'order' => 'DESC',
                    ],
                    // dataChegada
                    [
                        'exp'   => 'atendimento.dataChegada',
                        'order' => 'ASC',
                    ]
                ]);
            },
        ]
    ];