CREATE OR ALTER trigger ttbestoque_baixa_aut_b01u for tbestoque_baixa_automatica
active before update position 0
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN

    HISTORICO = '';

    IF ( OLD.DESCRICAO <> NEW.DESCRICAO) THEN
    BEGIN
        HISTORICO = HISTORICO||'Descricao:'|| OLD.DESCRICAO||'->'||NEW.DESCRICAO;
    END

    IF ( OLD.STATUS <> NEW.STATUS) THEN
    BEGIN
        HISTORICO = HISTORICO||',Status:'|| OLD.STATUS||'->'||NEW.STATUS;
    END

    IF ( OLD.PRODUTO_ID <> NEW.PRODUTO_ID) THEN
    BEGIN
        HISTORICO = HISTORICO||',Produto:'|| OLD.PRODUTO_ID||'->'||NEW.PRODUTO_ID;
    END

    IF ( OLD.LOCALIZACAO_ID <> NEW.LOCALIZACAO_ID) THEN
    BEGIN
        HISTORICO = HISTORICO||',Localizacao:'|| OLD.LOCALIZACAO_ID||'->'||NEW.LOCALIZACAO_ID;
    END

    IF ( OLD.ESTABELECIMENTO_ID <> NEW.ESTABELECIMENTO_ID) THEN
    BEGIN
        HISTORICO = HISTORICO||',Estebelecimento:'|| OLD.ESTABELECIMENTO_ID||'->'||NEW.ESTABELECIMENTO_ID;
    END

    IF ( OLD.OPERACAO_ENTRADA <> NEW.OPERACAO_ENTRADA) THEN
    BEGIN
        HISTORICO = HISTORICO||',Operacao Entrada:'|| OLD.OPERACAO_ENTRADA||'->'||NEW.OPERACAO_ENTRADA;
    END

    IF ( OLD.operacao_saida <> NEW.operacao_saida) THEN
    BEGIN
        HISTORICO = HISTORICO||',Operacao Saida:'|| OLD.operacao_saida||'->'||NEW.operacao_saida;
    END

    IF (HISTORICO <> '') THEN
    BEGIN
        EXECUTE PROCEDURE SPI_HISTORICO('TBESTOQUE_BAIXA_AUTOMATICA',NEW.ID, HISTORICO);
    END
end;

CREATE OR ALTER trigger ttbestoque_transacao_item_a01i for tbestoque_transacao_item
active after insert position 2
AS
declare variable ID INTEGER;
declare variable PRODUTO_ID INTEGER;
declare variable LOCALIZACAO_ID INTEGER;
declare variable STATUS INTEGER;
declare variable TAMANHO INTEGER;
declare variable ESTABELECIMENTO_ID INTEGER;
declare variable DESCRICAO VARCHAR(100);
declare variable OPERACAO VARCHAR(10);
begin

    IF(NEW.tipo = 'E')THEN
    BEGIN
        FOR
            select first 1
                ID,
                PRODUTO_ID,
                LOCALIZACAO_ID,
                STATUS,
                DESCRICAO,
                operacao_saida,
                ESTABELECIMENTO_ID
            FROM tbestoque_baixa_automatica A
            WHERE A.produto_id          = new.produto_codigo
            AND A.localizacao_id        = new.localizacao_codigo
            and a.estabelecimento_id    = new.estabelecimento_codigo
            and a.operacao_entrada      = new.operacao_codigo
            AND A.status = 1
        INTO
            ID,
            PRODUTO_ID,
            LOCALIZACAO_ID,
            STATUS,
            DESCRICAO,
            OPERACAO,
            ESTABELECIMENTO_ID
        DO BEGIN

            :TAMANHO = iif(new.t01 > 0,  1,
                       iif(new.t02 > 0,  2,
                       iif(new.t03 > 0,  3,
                       iif(new.t04 > 0,  4,
                       iif(new.t05 > 0,  5,
                       iif(new.t06 > 0,  6,
                       iif(new.t07 > 0,  7,
                       iif(new.t08 > 0,  8,
                       iif(new.t09 > 0,  9,
                       iif(new.t10 > 0, 10,
                       iif(new.t11 > 0, 11,
                       iif(new.t12 > 0, 12,
                       iif(new.t13 > 0, 13,
                       iif(new.t14 > 0, 14,
                       iif(new.t15 > 0, 15,
                       iif(new.t16 > 0, 16,
                       iif(new.t17 > 0, 17,
                       iif(new.t18 > 0, 18,
                       iif(new.t19 > 0, 19,
                       iif(new.t20 > 0, 20,
                       0))))))))))))))))))));
            
            EXECUTE PROCEDURE SPI_ESTOQUE_TRANSACAO(
                'TBESTOQUE_BAIXA_AUTOMATICA',
                0,
                :ID,
                :ESTABELECIMENTO_ID,
                :LOCALIZACAO_ID,
                FN_DATA_PRODUCAO(),
                :PRODUTO_ID,
                :TAMANHO,
                new.QUANTIDADE,
                'S',
                :OPERACAO,
                1,
                new.centro_de_custo,
                'BAIXA AUTOMATICA DE ESTOQUE',
                null, 
                new.documento
            );
        END
    END

end;

ALTER TABLE TBESTOQUE_BAIXA_AUTOMATICA DROP OPERACAO;

