[firebase-br] Case no where

Sandro Souza escovadordebits em gmail.com
Quarta Junho 30 15:48:36 -03 2021


Bom dia/tarde/noite.

Não conhecia essa sintaxe do CASE.

Eu faria dessa forma:

and  (c.tp_status =
CASE
  WHEN(c.in_autorizado = 'N')THEN 'AN'
  WHEN((c.in_autorizado = 'S') and (c.vl_total >= (:vVlFinal + 0.01))) THEN
'CC'
  WHEN((c.in_autorizado = 'S') and (c.vl_total < (:vVlFinal + 0.01))THEN
'AU'
  ELSE 'AN'
END)

Poderia testar essa condição, por favor?

Em ter., 29 de jun. de 2021 às 12:10, José Mauricio Barbisan Zottis via
lista <lista em firebase.com.br> escreveu:

> 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
>
> --
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas:
> http://www.firebase.com.br/pesquisa_lista.html
>


Mais detalhes sobre a lista de discussão lista