[firebase-br] Case no where

José Mauricio Barbisan Zottis zottissistemas em gmail.com
Terça Junho 29 12:09:44 -03 2021


Pessoal, estou com um problema em um SQL que não tô dando conta.
a Situação é a seguinte:
Tenho uma tela de Autorização e liberação de Compras,
Os usuários tem um teto(range) de LIBERAÇÃO, porém, eles podem ver todos os
pedidos de qualquer valor que estejam aguardando autorização ou Liberação
no momento da abertura da tela.

Exemplo de usuário. Zottis de 0 até 2000,00
Exemplo de Compra Total 3500,00
O Usuário Zottis pode *Autorizar* o Pedido, mas não pode *liberar*
Isso, acontece ao clicar em um botão "Processar" o sistema verifica se ele
pode Liberar e caso o valor seja maior que o teto dele, o sistema apenas
Autoriza o pedido.
*O problema está que eu preciso que nos pedidos já Autorizados e sejam
maiores do que o teto do usuário não apareçam mais para ele, pois o que ele
poderia fazer com o pedido já foi feito.*


com esse case abaixo, dá certo, porém não atende completamente pois aparece
os Autorizados com valores maiores da alçada do usuário.
and  c.tp_status = ');
         CASE c.in_autorizado
            WHEN 'N' THEN 'AN'
             WHEN 'S' THEN 'AU'
              else ''AN'' ');
            END

O Select que faço

select c.cd_empresa,
       c.cd_pedido,
       c.dt_cadastro,
       c.cd_pessoa,
       c.nm_pessoa,
       c.nr_documentopes,
       c.cd_comprador,
       c.nm_comprador,
       c.vl_total,
       c.cd_transportadora,
       c.nm_transp,
       c.cd_formapgto,
       c.ds_formapgto,
       c.in_autorizado,
       c.dt_autorizacao,
       c.in_negado,
       c.obs,
       --c.observacao_negacao,
       c.in_liberado,
       c.nr_itens,

       c.tp_status,
       case c.tp_status
          when 'DG' then 'Em Digitação'
          when 'AN' then 'Em Andamento'
          when 'AU' then 'Autorizado'
          when 'LI' then 'Liberado'
          when 'BL' then 'Bloqueado'
          when 'CA' then 'Cancelado'
          when 'BF' then 'Bloqueado Para Faturamento'
          when 'AP' then 'Atendida Parcial'
          when 'AT' then 'Atendida Total'
          when 'NG' then 'Negado'
         end ds_tpstatus,

       c.dt_preventrega,
       c.cd_autorizador,
       c.nm_autorizador,
       c.cd_liberador,
       c.nm_liberador,
       c.dt_liberacao,
       c.tp_liberado,
       c.dt_negacao
  from v_cmp_compras c  /*é uma View*/
   where c.nr_itens > 0
     and  c.tp_status =
          CASE c.in_autorizado
            WHEN 'N' THEN 'AN'
            WHEN 'S' and (c.vl_total >= (:vVlFinal + 0.01)) THEN 'CC'
            when 'S' and (c.vl_total < (:vVlFinal + 0.01))THEN 'AU'
            else 'AN'
          END

--


Mais detalhes sobre a lista de discussão lista