SET TERM ^ ;

CREATE OR ALTER procedure SPU_SALDO_COLABORADOR (
    COLABORADOR_ID integer)
as
declare variable COLABORADOR_CREDITO_ID integer;
declare variable VALOR_EM_ABERTO numeric(15,2);
declare variable VALOR_CREDITO numeric(15,2);
declare variable VALOR_PRE_PEDIDOS numeric(15,2);
BEGIN

    FOR SELECT
            CC.ID,
            COALESCE((SELECT
                        SUM(P.VALOR_SALDO)
                FROM TBNFS_PARCELAMENTO P, TBPAGAMENTO_FORMA PF WHERE P.PAGAMENTO_FORMA = PF.CODIGO
                AND (/*PF.PDV_TIPO = 6 OR */PF.utiliza_limite_credito = 1)
                AND P.COLABORADOR_ID = :COLABORADOR_ID), 0.00) AS VALOR_EM_ABERTO,
                COALESCE((
                     SELECT SUM(X.VALOR_LIQUIDO_TOTAL) AS VALOR_LIQUIDO_TOTAL
                     FROM(
                        SELECT
                            SUM((Z.TOTAL-(CAST(Z.TOTAL AS DOUBLE PRECISION)*(CAST(Z.PERC_DESCONTO AS DOUBLE PRECISION)/100.00)))) AS VALOR_LIQUIDO_TOTAL
                            FROM(
                            SELECT
                                 XP.ID AS PRE_PEDIDO_ID,
                                (CAST(IX.QUANTIDADE AS DOUBLE PRECISION) * CAST(X.VALOR_UNITARIO AS DOUBLE PRECISION)) as total,
                                X.VALOR_DESCONTO,
                                IIF(X.VALOR_DESCONTO > 0,
                                (CAST(X.VALOR_DESCONTO AS DOUBLE PRECISION)*100.00)/(CAST(IX.QUANTIDADE AS DOUBLE PRECISION) * CAST(X.VALOR_UNITARIO AS DOUBLE PRECISION)),0.00) AS PERC_DESCONTO
                                FROM TBPDV_CONFERENCIA_ITEM X , TBPDV_CONFERENCIA_ITEM_SALDO IX, TBPDV_CONFERENCIA XP, TBPAGAMENTO_FORMA FP
                                WHERE  X.PDV_CONFERENCIA_ID    = XP.ID
                                AND XP.COLABORADOR_ID          = :COLABORADOR_ID
                                AND FP.CODIGO                  = XP.PAGAMENTO_FORMA
                                AND FP.NFE_TIPPAG              = '80'
                                AND FP.utiliza_limite_credito  = 1
                                AND IX.PDV_CONFERENCIA_ITEM_ID = X.ID
                                AND  X.PDV_CONFERENCIA_ID      = IX.PDV_CONFERENCIA_ID
                                AND IX.QUANTIDADE              > 0
                                AND (X.SITUACAO <> 3 AND X.SITUACAO <> 4)
                            ) Z
                            GROUP BY Z.PRE_PEDIDO_ID
                        )X
                    ),0.00) AS VALOR_PRE_PEDIDOS
        FROM TBCOLABORADOR_CREDITO CC
        WHERE CC.COLABORADOR_ID = :COLABORADOR_ID
        GROUP BY CC.ID

    INTO :COLABORADOR_CREDITO_ID, :VALOR_EM_ABERTO, :VALOR_PRE_PEDIDOS
    DO BEGIN
        IF(:COLABORADOR_CREDITO_ID > 0) THEN
        BEGIN

            UPDATE TBCOLABORADOR_CREDITO SET SALDO = VALOR_CREDITO - (:VALOR_EM_ABERTO+:VALOR_PRE_PEDIDOS)
                WHERE ID = :COLABORADOR_CREDITO_ID;

            EXECUTE PROCEDURE SPI_INTEGRACAO('TBCOLABORADOR_CREDITO', :COLABORADOR_CREDITO_ID, 2);

        END
    END
END
^

SET TERM ; ^

