SET TERM ^ ;

CREATE OR ALTER procedure SPUD_AJUSTE_SALDO (
    OBSERVACAO varchar(100),
    INVENTARIO_MP_ID integer,
    ACAO integer)
as
declare variable PDV_CFE_ID integer;
declare variable ESTABELECIMENTO_ID integer;
declare variable LOCALIZACAO_ID integer;
declare variable PRODUTO_ID integer;
declare variable TIPO char(1);
declare variable SALDO numeric(15,5);
declare variable QUANTIDADE numeric(10,5);
declare variable QUANTIDADE_UTILIZADA numeric(10,5);
declare variable QUANTIDADE_CONF numeric(10,5);
declare variable TAMANHO integer;
declare variable T01 numeric(10,5);
declare variable T02 numeric(10,5);
declare variable T03 numeric(10,5);
declare variable T04 numeric(10,5);
declare variable T05 numeric(10,5);
declare variable T06 numeric(10,5);
declare variable T07 numeric(10,5);
declare variable T08 numeric(10,5);
declare variable T09 numeric(10,5);
declare variable T10 numeric(10,5);
declare variable T11 numeric(10,5);
declare variable T12 numeric(10,5);
declare variable T13 numeric(10,5);
declare variable T14 numeric(10,5);
declare variable T15 numeric(10,5);
declare variable T16 numeric(10,5);
declare variable T17 numeric(10,5);
declare variable T18 numeric(10,5);
declare variable T19 numeric(10,5);
declare variable T20 numeric(10,5);
declare variable OPERACAO_CODIGO varchar(3);
declare variable OPERACAO_ENTRADA varchar(3);
declare variable OPERACAO_SAIDA varchar(3);
declare variable MARCAR integer;
BEGIN
        /* AJUSTAR SALDO NA TRANSACAO DE ESTOQUE */
        IF(:ACAO = 1) THEN
        BEGIN

            MARCAR = 0;

            FOR
                SELECT
                    MP.ESTABELECIMENTO_ID,
                    MP.LOCALIZACAO_ID,
                    T.PRODUTO_ID,
                    COALESCE(T.TAMANHO, 0) AS TAMANHO,
                    T.SALDO,
                    T.QUANTIDADE,
                    CAST(FN_PARAMETRO('SISTEMA.OPERACAO_ENTRADA_INVENTARIO') AS VARCHAR(3)) AS OPERACAO_ENTRADA,
                    CAST(FN_PARAMETRO('SISTEMA.OPERACAO_SAIDA_INVENTARIO') AS VARCHAR(3)) AS OPERACAO_SAIDA
        
                FROM TBINVENTARIO_MAT_PRIMA_DETALHE T
                INNER JOIN TBINVENTARIO_MATERIA_PRIMA MP ON MP.ID = T.INVENTARIO_ID
                WHERE T.INVENTARIO_ID = :INVENTARIO_MP_ID
            INTO
                :ESTABELECIMENTO_ID,
                :LOCALIZACAO_ID,
                :PRODUTO_ID,
                :TAMANHO,
                :SALDO,
                :QUANTIDADE_CONF,
                :OPERACAO_ENTRADA,
                :OPERACAO_SAIDA
            DO BEGIN

                :QUANTIDADE             = :QUANTIDADE_CONF - :SALDO;

                :QUANTIDADE_UTILIZADA   = ABS(:QUANTIDADE);

                IF(:QUANTIDADE < 0) THEN
                BEGIN
                    :TIPO = 'S';
                    :OPERACAO_CODIGO = :OPERACAO_SAIDA;

                END ELSE IF(:QUANTIDADE > 0) THEN
                BEGIN
                    :TIPO = 'E';
                    :OPERACAO_CODIGO = :OPERACAO_ENTRADA;
                END

                IF(:QUANTIDADE <> 0) THEN
                BEGIN

                    :T01 = 0;
                    :T02 = 0;
                    :T03 = 0;
                    :T04 = 0;
                    :T05 = 0;
                    :T06 = 0;
                    :T07 = 0;
                    :T08 = 0;
                    :T09 = 0;
                    :T10 = 0;
                    :T11 = 0;
                    :T12 = 0;
                    :T13 = 0;
                    :T14 = 0;
                    :T15 = 0;
                    :T16 = 0;
                    :T17 = 0;
                    :T18 = 0;
                    :T19 = 0;
                    :T20 = 0;

                    IF(:TAMANHO = 1) THEN :T01 = :QUANTIDADE_UTILIZADA;
                    IF(:TAMANHO = 2) THEN :T02 = :QUANTIDADE_UTILIZADA;
                    IF(:TAMANHO = 3) THEN :T03 = :QUANTIDADE_UTILIZADA;
                    IF(:TAMANHO = 4) THEN :T04 = :QUANTIDADE_UTILIZADA;
                    IF(:TAMANHO = 5) THEN :T05 = :QUANTIDADE_UTILIZADA;
                    IF(:TAMANHO = 6) THEN :T06 = :QUANTIDADE_UTILIZADA;
                    IF(:TAMANHO = 7) THEN :T07 = :QUANTIDADE_UTILIZADA;
                    IF(:TAMANHO = 8) THEN :T08 = :QUANTIDADE_UTILIZADA;
                    IF(:TAMANHO = 9) THEN :T09 = :QUANTIDADE_UTILIZADA;
                    IF(:TAMANHO = 10) THEN :T10 = :QUANTIDADE_UTILIZADA;
                    IF(:TAMANHO = 11) THEN :T11 = :QUANTIDADE_UTILIZADA;
                    IF(:TAMANHO = 12) THEN :T12 = :QUANTIDADE_UTILIZADA;
                    IF(:TAMANHO = 13) THEN :T13 = :QUANTIDADE_UTILIZADA;
                    IF(:TAMANHO = 14) THEN :T14 = :QUANTIDADE_UTILIZADA;
                    IF(:TAMANHO = 15) THEN :T15 = :QUANTIDADE_UTILIZADA;
                    IF(:TAMANHO = 16) THEN :T16 = :QUANTIDADE_UTILIZADA;
                    IF(:TAMANHO = 17) THEN :T17 = :QUANTIDADE_UTILIZADA;
                    IF(:TAMANHO = 18) THEN :T18 = :QUANTIDADE_UTILIZADA;
                    IF(:TAMANHO = 19) THEN :T19 = :QUANTIDADE_UTILIZADA;
                    IF(:TAMANHO = 20) THEN :T20 = :QUANTIDADE_UTILIZADA;
        
        
                    /* INSERT SALDO */
                    EXECUTE PROCEDURE SPI_ESTOQUE_SALDO(
                    :ESTABELECIMENTO_ID, :LOCALIZACAO_ID, :PRODUTO_ID, :TIPO, CURRENT_DATE, :QUANTIDADE_UTILIZADA,
                    :T01, :T02, :T03, :T04, :T05, :T06, :T07, :T08, :T09, :T10, :T11, :T12,
                    :T13, :T14, :T15, :T16, :T17, :T18, :T19, :T20, 0, :INVENTARIO_MP_ID, 0, 0,
                    :OPERACAO_CODIGO, NULL, :INVENTARIO_MP_ID, 0, 0, FN_CURRENT_USER_ID(), CURRENT_DATE,
                    0, '', :OBSERVACAO, 0, 0, NULL, 0, 0, 'TBINVENTARIO_MATERIA_PRIMA', :INVENTARIO_MP_ID);

                    MARCAR = 1;

                 END
            END

            if(MARCAR = 1)then
            begin
               UPDATE TBINVENTARIO_MATERIA_PRIMA T SET T.FLAG_AJUSTE = 1 WHERE T.ID = :INVENTARIO_MP_ID;
            end

       END
       /* DESFAZER AJUSTE NO SALDO (EXCLUIR TRANSACAO DE ESTOQUE) */
       ELSE IF(:ACAO = 2) THEN
       BEGIN
            DELETE FROM TBESTOQUE_TRANSACAO_ITEM T WHERE T.TABELA = 'TBINVENTARIO_MATERIA_PRIMA' AND T.TABELA_ID = :INVENTARIO_MP_ID;
            UPDATE TBINVENTARIO_MATERIA_PRIMA T SET T.FLAG_AJUSTE = 0 WHERE T.ID = :INVENTARIO_MP_ID;
       END
END
^

SET TERM ; ^

