SET TERM ^ ;

CREATE OR ALTER procedure SPC_NFS_GRUPO_CLIENTE_SALDO (
    EMPRESA_1 integer,
    PEDIDO_1 integer,
    PAGAMENTO_FORMA_1 integer,
    PRE_PEDIDO_1 integer = 0)
returns (
    LIMITE numeric(10,4),
    SALDO numeric(10,4))
as
BEGIN
FOR
  SELECT
    MAX(Z.LIMITE) LIMITE,
    SUM(Z.SALDO) AS SALDO
    FROM(
      SELECT
        Z.LIMITE,
        Z.SALDO,
        Z.EMPRESA_GRUPO_ID
        FROM(
          Select
            Coalesce(E.Limite_Credito,0.00) Limite,
            Coalesce((Select Cast(Sum(B.Valor * C.Quantidade) as Numeric(15,2))
             From TbPedido P, TbPedido_Item B, TbPedido_Item_Saldo C, tbpagamento_forma pag
             Where P.Estabelecimento_Codigo = B.Estabelecimento_Codigo
               and P.Pedido   = B.Pedido
               and B.Pedido   = C.Pedido
               and B.Controle = C.Pedido_Item_Controle
               and C.Quantidade > 0
               and B.Situacao = 1
               and P.Status   = '1'
               and P.Cliente_Codigo = F.EMPRESA_ID
               and pag.codigo = p.pagamento_forma
               and coalesce(pag.utiliza_limite_credito,0) = 1
               and B.Pedido <> :Pedido_1),0.00) +
            
            Coalesce((Select Cast(Sum(A.Valor_Saldo) as Numeric(15,2))
             From TbNfs_Parcelamento A, tbpagamento_forma pag
             Where A.Valor_Saldo > 0
               and A.Aceite = 'S'
               and a.pagamento_forma = pag.codigo
               and coalesce(pag.utiliza_limite_credito,0) = 1
               and (A.Numero_NotaFiscal > 0 and A.Situacao < 3)
               and A.Empresa_Codigo = F.EMPRESA_ID),0.00)+

            Coalesce((Select Cast(Sum(AI.valor_liquido) as Numeric(15,2))
             From tbpdv_conferencia_item AI, TBPDV_CONFERENCIA AC, tbpagamento_forma pag
             Where AC.id         = AI.pdv_conferencia_id
               AND AC.ID        <> :PRE_PEDIDO_1
               and ac.pagamento_forma = pag.codigo
               and coalesce(pag.utiliza_limite_credito,0) = 1
               AND AI.situacao   =  0
               AND AC.cliente_id = f.empresa_id),0.00) Saldo,
             F.EMPRESA_GRUPO_ID,
             coalesce((select count(d.id) from TBEMPRESA_GRUPO_LIMITE_CREDITO d where d.EMPRESA_GRUPO_ID = e.id),0) as count_forma_pag,
             coalesce((select count(d.id) from TBEMPRESA_GRUPO_LIMITE_CREDITO d where d.EMPRESA_GRUPO_ID = e.id and d.PAGAMENTO_FORMA = :PAGAMENTO_FORMA_1),0) as count_forma_pag2
            
            From TBEMPRESA_GRUPO E, TBEMPRESA_GRUPO_CONTAS F
            Where E.ID = COALESCE((SELECT FIRST 1 Z.ID FROM TBEMPRESA_GRUPO Z, TBEMPRESA_GRUPO_CONTAS X WHERE Z.ID = X.EMPRESA_GRUPO_ID AND X.EMPRESA_ID = :EMPRESA_1),0)
            AND F.EMPRESA_GRUPO_ID = E.ID
            AND E.TIPO = 'C'
        ) Z
        WHERE ((Z.count_forma_pag > 0 AND count_forma_pag2 > 0) OR (Z.count_forma_pag = 0))
    ) Z
    GROUP BY Z.EMPRESA_GRUPO_ID

INTO
:LIMITE,:SALDO
DO SUSPEND;
END^

^ SET TERM ; ^