ALTER TABLE TBPDV_CFE_FORMA_PAGAMENTO
    ADD CREDITO_LOJA_AUTOMATICO INTEGER DEFAULT 0 NOT NULL;

COMMENT ON COLUMN TBPDV_CFE_FORMA_PAGAMENTO.CREDITO_LOJA_AUTOMATICO IS
'FORMA DE PAGAMENTO CREDITO LOJA INCLUIDA AUTOMATICAMENTE PELA TELA 19120:
0 - NAO;
1 - SIM;';

CREATE TABLE TBPDV_CFE_ITEM_TROCA (
    ID INTEGER NOT NULL,
    PDV_CFE_ID INTEGER,
    ESTOQUE_ID INTEGER,
    PRODUTO_ID INTEGER,
    PRODUTO_DESCRICAO VARCHAR(200),
    NCM_CODIGO VARCHAR(10),
    LOCALIZACAO_ID INTEGER,
    TAMANHO INTEGER,
    EAN VARCHAR(13),
    QUANTIDADE DECIMAL(15,4),
    VALOR_UNITARIO DECIMAL(15,4),
    VALOR_DESCONTO DECIMAL(15,2),
    VALOR_TOTAL DECIMAL(15,2),
    VALOR_LIQUIDO DECIMAL(15,2),
    PROMOCIONAL INTEGER,
    DOCUMENTO_ID INTEGER,
    DOCUMENTO_ITEM_ID INTEGER,
    DOCUMENTO_ITEM_SEQUENCIA INTEGER,
    DOCUMENTO_TIPO INTEGER,
    PDV_DEVOLUCAO_TROCA_ID INTEGER,
    PDV_DEVOLUCAO_TROCA_ITEM_ID INTEGER,
    DATAHORA TIMESTAMP DEFAULT 'NOW');

ALTER TABLE TBPDV_CFE_ITEM_TROCA
ADD CONSTRAINT PK_TBPDV_CFE_ITEM_TROCA
PRIMARY KEY (ID);

CREATE SEQUENCE GTBPDV_CFE_ITEM_TROCA;

SET TERM ^ ;

create trigger ttbpdv_cfe_item_troca_b01i for tbpdv_cfe_item_troca
active before insert position 0
as
begin
  if (new.id is null) then
    new.id = gen_id(gtbpdv_cfe_item_troca,1);
end
^

SET TERM ; ^

CREATE INDEX ITBPDV_CFE_ITEM_TROCA_01
ON TBPDV_CFE_ITEM_TROCA (PDV_CFE_ID);

CREATE INDEX ITBPDV_CFE_ITEM_TROCA_02
ON TBPDV_CFE_ITEM_TROCA (ESTOQUE_ID);

CREATE INDEX ITBPDV_CFE_ITEM_TROCA_03
ON TBPDV_CFE_ITEM_TROCA (PRODUTO_ID);

CREATE INDEX ITBPDV_CFE_ITEM_TROCA_04
ON TBPDV_CFE_ITEM_TROCA (LOCALIZACAO_ID);

CREATE INDEX ITBPDV_CFE_ITEM_TROCA_05
ON TBPDV_CFE_ITEM_TROCA (EAN);

CREATE INDEX ITBPDV_CFE_ITEM_TROCA_06
ON TBPDV_CFE_ITEM_TROCA (PROMOCIONAL);

CREATE INDEX ITBPDV_CFE_ITEM_TROCA_07
ON TBPDV_CFE_ITEM_TROCA (DOCUMENTO_ID);

CREATE INDEX ITBPDV_CFE_ITEM_TROCA_08
ON TBPDV_CFE_ITEM_TROCA (DOCUMENTO_ITEM_ID);

CREATE INDEX ITBPDV_CFE_ITEM_TROCA_09
ON TBPDV_CFE_ITEM_TROCA (DOCUMENTO_ITEM_SEQUENCIA);

CREATE INDEX ITBPDV_CFE_ITEM_TROCA_10
ON TBPDV_CFE_ITEM_TROCA (DOCUMENTO_TIPO);


UPDATE OR INSERT INTO TBPARAMETRO (TABELA, CODIGO, DESCRICAO, VALOR, OBSERVACAO, GRUPO, USUARIO_ID)
                           VALUES ('SISTEMA', 'PRECO_TROCA', 'ORIGEM DO PRECO DA TROCA', '0', 'ORIGEM DO PRECO DA TROCA NA DEVOLUCAO NO PDV:
0 - TABELA DE PRECO;
1 - DOCUMENTO DE ORIGEM;', 'WEB19120', 837)
                         MATCHING (TABELA, CODIGO);
UPDATE OR INSERT INTO TBPARAMETRO (TABELA, CODIGO, DESCRICAO, VALOR, OBSERVACAO, GRUPO, USUARIO_ID)
                           VALUES ('SISTEMA', 'RECEBER_TROCA_PROMO', 'PERMITIR RECEBER TROCAS DE PRODUTOS PROMOCIONAIS', '1', 'PERMITIR QUE NO PDV RECEBA TROCAS DE PRODUTOS PROMOCIONAIS:
0 - NAO;
1 - SIM;', 'WEB19120', 837)
                         MATCHING (TABELA, CODIGO);


ALTER TABLE TBPDV_DEVOLUCAO_TROCA
    ADD INCLUSAO_AUTOMATICA INTEGER DEFAULT 0 NOT NULL;

COMMENT ON COLUMN TBPDV_DEVOLUCAO_TROCA.INCLUSAO_AUTOMATICA IS
'REGISTRO INCLUIDO AUTOMATICAMENTE PELA TELA 19120
0 - NAO;
1 - SIM;';


UPDATE OR INSERT INTO TBPARAMETRO (TABELA, CODIGO, DESCRICAO, VALOR, OBSERVACAO, GRUPO)
                           VALUES ('TBPDV', 'OPER_ENTRADA_ESTOQUE_AUTOMATICA', 'OPERACAO ENTRADA ESTOQUE AUTOMATICA', 'EPA', 'OPERACAO PARA REALIZAR ENTRADA AUTOMATICA DE ESTOQUE PELA TELA 19120', 'WEB19120')
                         MATCHING (TABELA, CODIGO);
                         
SET TERM ^ ;

CREATE OR ALTER trigger ttbpdv_cfe_b12u for tbpdv_cfe
active before update position 12
AS
DECLARE VARIABLE ESTAB_TRANS_EST INTEGER;
DECLARE VARIABLE LOC_TRANS_EST INTEGER;

DECLARE VARIABLE ID INTEGER;
DECLARE VARIABLE PRODUTO_ID INTEGER;
DECLARE VARIABLE PRODUTO_DESCRICAO VARCHAR(200);
DECLARE VARIABLE TAMANHO INTEGER;
DECLARE VARIABLE QUANTIDADE NUMERIC(15,2);
DECLARE VARIABLE SALDO NUMERIC(15,2);
DECLARE VARIABLE SALDO_HOJE NUMERIC(15,2);
DECLARE VARIABLE LOCALIZACAO_ENTRADA_ID INTEGER;
DECLARE VARIABLE TRANSACAO_SAIDA_ID INTEGER;
DECLARE VARIABLE TRANSACAO_ENTRADA_ID INTEGER;
DECLARE VARIABLE OPERACAO_SAIDA VARCHAR(3);
DECLARE VARIABLE OPERACAO_ENTRADA VARCHAR(3);

BEGIN

    /* SITUACAO AUTORIZADO */
    IF(OLD.SITUACAO = 1 AND NEW.SITUACAO = 2 AND COALESCE(NEW.IMPORTACAO, 0) = 0) THEN
    BEGIN

        :ESTAB_TRANS_EST    =  CAST(FN_PARAMETRO('TBPDV.ESTAB_TRANS_EST', NEW.PDV_ID) AS INTEGER);
        :LOC_TRANS_EST      =  CAST(FN_PARAMETRO('TBPDV.LOCAL_TRANS_EST', NEW.PDV_ID) AS INTEGER);

        IF(COALESCE(:ESTAB_TRANS_EST, 0) > 0 AND COALESCE(:LOC_TRANS_EST, 0) > 0) THEN
        BEGIN

            FOR SELECT
                T.ID,
                T.PRODUTO_ID,
                T.PRODUTO_DESCRICAO,
                T.LOCALIZACAO_ID,
                T.TAMANHO,
                T.QUANTIDADE
            FROM TBPDV_CFE_ITEM T
            INNER JOIN TBPRODUTO P ON P.CODIGO = T.PRODUTO_ID
            WHERE T.PDV_CFE_ID = NEW.ID
            INTO :ID, :PRODUTO_ID, :PRODUTO_DESCRICAO, :LOCALIZACAO_ENTRADA_ID, :TAMANHO, :QUANTIDADE
            DO BEGIN
                :SALDO      = FN_ESTOQUE_SALDO_DIARIO_DISP(:ESTAB_TRANS_EST, :LOC_TRANS_EST, :PRODUTO_ID, :TAMANHO, NEW.DATA_EMISSAO);

                :SALDO_HOJE = FN_ESTOQUE_SALDO(:ESTAB_TRANS_EST, :LOC_TRANS_EST, :PRODUTO_ID, :TAMANHO);

                IF((:SALDO >= :QUANTIDADE) AND (:SALDO_HOJE >= :QUANTIDADE)) THEN
                BEGIN
                    /* DAR SAIDA DO PRODUTO */
                    :TRANSACAO_SAIDA_ID = COALESCE((SELECT GEN_ID(GTBESTOQUE_TRANSACAO_ITEM, 1) FROM RDB$DATABASE),0);

                    :OPERACAO_SAIDA = FN_PARAMETRO('TBPDV.OPER_SAIDA_ESTOQUE', NEW.PDV_ID);
    
                    EXECUTE PROCEDURE SPI_ESTOQUE_TRANSACAO('TBPDV_CFE_ITEM', 0, :ID,
                        :ESTAB_TRANS_EST, :LOC_TRANS_EST, NEW.DATA_EMISSAO, :PRODUTO_ID,
                        :TAMANHO, :QUANTIDADE, 'S', :OPERACAO_SAIDA, 0, '', 'TRANSFERENCIA DE ESTOQUE - SAIDA',
                        :TRANSACAO_SAIDA_ID, NEW.NUMERO_CFE, NULL, NULL, 0, 0, 0, 0);


                     /* DAR ENTRADA DO PRODUTO */
                    :TRANSACAO_ENTRADA_ID = COALESCE((SELECT GEN_ID(GTBESTOQUE_TRANSACAO_ITEM, 1) FROM RDB$DATABASE),0);

                    :OPERACAO_ENTRADA = FN_PARAMETRO('TBPDV.OPER_ENTRADA_ESTOQUE', NEW.PDV_ID);
    
                    EXECUTE PROCEDURE SPI_ESTOQUE_TRANSACAO('TBPDV_CFE_ITEM', 0, :ID,
                        NEW.ESTABELECIMENTO_ID, :LOCALIZACAO_ENTRADA_ID, NEW.DATA_EMISSAO, :PRODUTO_ID,
                        :TAMANHO, :QUANTIDADE, 'E', :OPERACAO_ENTRADA, 0, '', 'TRANSFERENCIA DE ESTOQUE - ENTRADA',
                        :TRANSACAO_ENTRADA_ID, NEW.NUMERO_CFE, NULL, NULL, 0, 0, 0, 0);
                END
            END

        END


    END

    
END
^

SET TERM ; ^


SET TERM ^ ;

CREATE OR ALTER trigger ttbpdv_cfe_b13u for tbpdv_cfe
active before update position 13
AS
DECLARE VARIABLE PDV_DEVOLUCAO_TROCA_ID INTEGER;
DECLARE VARIABLE OPERACAO_ENTRADA VARCHAR(3);
DECLARE VARIABLE VALOR_TROCA DECIMAL(15,2);
DECLARE VARIABLE PDV_CFE_ITEM_TROCA_ID INTEGER;
DECLARE VARIABLE CHECAGEM_DEVOLUCAO_TROCA INTEGER;
DECLARE VARIABLE ESTOQUE_ID INTEGER;
DECLARE VARIABLE PRODUTO_ID INTEGER;
DECLARE VARIABLE PRODUTO_DESCRICAO VARCHAR(200);
DECLARE VARIABLE NCM_CODIGO VARCHAR(10);
DECLARE VARIABLE LOCALIZACAO_ID INTEGER;
DECLARE VARIABLE TAMANHO INTEGER;
DECLARE VARIABLE EAN VARCHAR(13);
DECLARE VARIABLE QUANTIDADE DECIMAL(15,4);
DECLARE VARIABLE VALOR_UNITARIO DECIMAL(15,4);
DECLARE VARIABLE VALOR_DESCONTO DECIMAL(15,2);
DECLARE VARIABLE VALOR_TOTAL DECIMAL(15,2);
DECLARE VARIABLE VALOR_LIQUIDO DECIMAL(15,2);
DECLARE VARIABLE PROMOCIONAL INTEGER;
DECLARE VARIABLE DOCUMENTO_ID INTEGER;
DECLARE VARIABLE DOCUMENTO_ITEM_ID INTEGER;
DECLARE VARIABLE DOCUMENTO_ITEM_SEQUENCIA INTEGER;
DECLARE VARIABLE DOCUMENTO_TIPO INTEGER;
declare variable PDV_DEVOLUCAO_TROCA_ITEM_ID INTEGER;

BEGIN
    /* REALIZAR ENTRADA NO ESTOQUE PARA PECAS DEVOLVIDAS QUANDO AUTORIZAR O DOCUMENTO */
    IF(OLD.SITUACAO = 1 AND NEW.SITUACAO = 2 AND COALESCE(NEW.IMPORTACAO, 0) = 0) THEN
    BEGIN
        :PDV_DEVOLUCAO_TROCA_ID = GEN_ID(GTBPDV_DEVOLUCAO_TROCA, 1);
        :OPERACAO_ENTRADA       = FN_PARAMETRO('TBPDV.OPER_ENTRADA_ESTOQUE_AUTOMATICA', NEW.PDV_ID);

        :VALOR_TROCA            = 0;

        FOR SELECT
                T.ID,
                T.PRODUTO_ID,
                T.PRODUTO_DESCRICAO,
                T.NCM_CODIGO,
                T.LOCALIZACAO_ID,
                T.TAMANHO,
                T.EAN,
                T.QUANTIDADE,
                T.VALOR_UNITARIO,
                T.VALOR_DESCONTO,
                T.VALOR_TOTAL,
                T.VALOR_LIQUIDO,
                T.PROMOCIONAL,
                T.DOCUMENTO_ID,
                T.DOCUMENTO_ITEM_ID,
                T.DOCUMENTO_ITEM_SEQUENCIA,
                T.DOCUMENTO_TIPO
        FROM TBPDV_CFE_ITEM_TROCA T
        WHERE T.PDV_CFE_ID = NEW.ID
        INTO :PDV_CFE_ITEM_TROCA_ID, :PRODUTO_ID, :PRODUTO_DESCRICAO, :NCM_CODIGO, :LOCALIZACAO_ID, :TAMANHO, :EAN, :QUANTIDADE,
             :VALOR_UNITARIO, :VALOR_DESCONTO, :VALOR_TOTAL, :VALOR_LIQUIDO, :PROMOCIONAL, :DOCUMENTO_ID, :DOCUMENTO_ITEM_ID,
             :DOCUMENTO_ITEM_SEQUENCIA, :DOCUMENTO_TIPO
        DO BEGIN
            :VALOR_TROCA = :VALOR_TROCA + :VALOR_LIQUIDO;

            :PDV_DEVOLUCAO_TROCA_ITEM_ID = GEN_ID(GTBPDV_DEVOLUCAO_TROCA_ITEM, 1);

            INSERT INTO TBPDV_DEVOLUCAO_TROCA_ITEM (ID, ITEM_ID, QUANTIDADE, VALOR_UNITARIO, VALOR_DESCONTO, VALOR_TOTAL,
                PDV_DEVOLUCAO_ID, DOCUMENTO_CONTROLE, ITEM_SEQUENCIA, TIPO_DOCUMENTO,
                CLIENTE_ID, VALOR_LIQUIDO, TAMANHO, PRODUTO_ID,
                TIPO_DEVOLUCAO_TROCA)
            VALUES (:PDV_DEVOLUCAO_TROCA_ITEM_ID, :DOCUMENTO_ITEM_ID, :QUANTIDADE, :VALOR_UNITARIO, :VALOR_DESCONTO, :VALOR_TOTAL, :PDV_DEVOLUCAO_TROCA_ID,
                    :DOCUMENTO_ID, :DOCUMENTO_ITEM_SEQUENCIA, :DOCUMENTO_TIPO, NEW.CLIENTE_ID, :VALOR_LIQUIDO, :TAMANHO, :PRODUTO_ID, 2);
            
            UPDATE TBPDV_CFE_ITEM_TROCA T SET T.PDV_DEVOLUCAO_TROCA_ID = :PDV_DEVOLUCAO_TROCA_ID,
                T.PDV_DEVOLUCAO_TROCA_ITEM_ID = :PDV_DEVOLUCAO_TROCA_ITEM_ID
            WHERE T.ID = :PDV_CFE_ITEM_TROCA_ID;

             /* DAR ENTRADA DO PRODUTO */
            :ESTOQUE_ID = COALESCE((SELECT GEN_ID(GTBESTOQUE_TRANSACAO_ITEM, 1) FROM RDB$DATABASE),0);

            EXECUTE PROCEDURE SPI_ESTOQUE_TRANSACAO('TBPDV_CFE_ITEM_TROCA', 0, :PDV_CFE_ITEM_TROCA_ID,
                NEW.ESTABELECIMENTO_ID, :LOCALIZACAO_ID, NEW.DATA_EMISSAO, :PRODUTO_ID,
                :TAMANHO, :QUANTIDADE, 'E', :OPERACAO_ENTRADA, 0, '', 'ENTRADA AUTOMATICA DE ESTOQUE (TELA 19120)',
                :ESTOQUE_ID, NEW.NUMERO_CFE, NULL, NULL, 0, 0, 0, 0);

            UPDATE TBPDV_CFE_ITEM_TROCA T SET T.ESTOQUE_ID = :ESTOQUE_ID WHERE T.ID = :PDV_CFE_ITEM_TROCA_ID;

            WHEN ANY DO
            BEGIN
                /* ERRO NA TRANSACAO DE ESTOQUE DE ENTRADA */
                :ESTOQUE_ID = 0;
                UPDATE TBPDV_CFE_ITEM_TROCA T SET T.ESTOQUE_ID = :ESTOQUE_ID WHERE T.ID = :PDV_CFE_ITEM_TROCA_ID;
            END

        END

        IF(:VALOR_TROCA > 0) THEN
        BEGIN
            
            UPDATE TBPDV_CFE_FORMA_PAGAMENTO T SET T.PDV_DEVOLUCAO_TROCA_ID = :PDV_DEVOLUCAO_TROCA_ID WHERE T.PDV_DEVOLUCAO_TROCA_ID = 0 AND T.CREDITO_LOJA_AUTOMATICO = 1 AND T.PDV_CFE_ID = NEW.ID;

            INSERT INTO TBPDV_DEVOLUCAO_TROCA (ID, CLIENTE_ID, TIPO_ED, DOCUMENTO_ID, TIPO_DOCUMENTO, VALOR_SALDO,
               NFE_DEVOLUCAO, VALOR_ENCERRADO, PRE_PEDIDO_ID, ROMANEIO_DEVOLUCAO,
               ESTABELECIMENTO_ID, INCLUSAO_AUTOMATICA)
            VALUES (:PDV_DEVOLUCAO_TROCA_ID, NEW.CLIENTE_ID, 2, 0, 0, :VALOR_TROCA, 0,
                    0, 0, 0, NEW.ESTABELECIMENTO_ID, 1);

        END

    END
END
^

SET TERM ; ^


SET TERM ^ ;

CREATE OR ALTER trigger ttbpdv_cfe_a01u for tbpdv_cfe
active after update position 1
AS
DECLARE VARIABLE CAIXA_ID INTEGER;

DECLARE VARIABLE ESTABELECIMENTO_ID INTEGER;
DECLARE VARIABLE NUMERO_NOTAFISCAL INTEGER;
DECLARE VARIABLE DATA DATE;
DECLARE VARIABLE HISTORICO_CONTABIL VARCHAR(100);
DECLARE VARIABLE CONTA_DEBITO VARCHAR(50);
DECLARE VARIABLE CONTA_CREDITO VARCHAR(50);
DECLARE VARIABLE VALOR NUMERIC(18,2);
DECLARE VARIABLE VFALHAS VARCHAR(50);
DECLARE VARIABLE DOCUMENTO_TIPO VARCHAR(3);
DECLARE VARIABLE DOCUMENTO INTEGER;
DECLARE VARIABLE PAGAMENTO_FORMA_ID INTEGER;
DECLARE VARIABLE PARCELA INTEGER;
DECLARE VARIABLE VALOR_PARCELA DECIMAL(15,2);
DECLARE VARIABLE TARIFA DECIMAL(15,4);
DECLARE VARIABLE VALOR_LIQUIDO DECIMAL(15,2);
DECLARE VARIABLE NSU VARCHAR(50);
DECLARE VARIABLE ADQUIRENTE_ID INTEGER;
DECLARE VARIABLE BANDEIRA_CARTAO VARCHAR(100);
DECLARE VARIABLE CODIGO_AUTORIZACAO VARCHAR(50);
DECLARE VARIABLE CONCILIACAO VARCHAR(1);
declare variable PDV_CFE_ITEM_TROCA_ID INTEGER;
declare variable ESTOQUE_ID INTEGER;
declare variable PDV_DEVOLUCAO_TROCA INTEGER;
declare variable PDV_DEVOLUCAO_TROCA_AUX INTEGER;

BEGIN

  SELECT T.PDV_CAIXA_ID FROM TBPDV_MOVIMENTO_CAIXA T WHERE T.ID = NEW.PDV_MOVIMENTO_CAIXA_ID INTO CAIXA_ID;

  IN AUTONOMOUS TRANSACTION DO
  BEGIN
    INSERT INTO TBPDV_CFE_LOG(PDV_CFE_ID, DESCRICAO, USUARIO_ID) VALUES(NEW.ID, 'SIT: '||COALESCE(OLD.SITUACAO, 0)||' - '||COALESCE(NEW.SITUACAO, 0), FN_CURRENT_USER_ID());
  END

  /* SITUACAO AUTORIZADO */
  IF(OLD.SITUACAO = 1 AND NEW.SITUACAO = 2) THEN
  BEGIN



        EXECUTE PROCEDURE SP_CFE_PEDIDO(NEW.ID, 1);

        EXECUTE PROCEDURE SP_CFE_CONFERENCIA(NEW.ID, 1);

        EXECUTE PROCEDURE SP_CFE_ESTOQUE(NEW.ID, NEW.ESTABELECIMENTO_ID, NEW.CLIENTE_ID, :CAIXA_ID,
            NEW.NUMERO_CFE, NEW.SERIE, NEW.DATA_EMISSAO, 1);

        EXECUTE PROCEDURE SP_CFE_PARCELAMENTO (NEW.ID, 1);

        EXECUTE PROCEDURE SP_CFE_FORMA_PAGAMENTO(NEW.ID, 2);

        EXECUTE PROCEDURE SPU_PREPEDIDO_CLIENTE(NEW.ID, COALESCE(NEW.CLIENTE_ID, 0), COALESCE(NEW.REPRESENTANTE_ID, 0), COALESCE(NEW.CORRETOR_ID, 0), 1);

        IF(NEW.NATUREZA = 1) THEN
        BEGIN

            FOR SELECT
                    ESTABELECIMENTO_ID,
                    NUMERO_NOTAFISCAL,
                    DATA,
                    HISTORICO_CONTABIL,
                    CONTA_DEBITO,
                    CONTA_CREDITO,
                    VALOR,
                    VFALHAS
                FROM SPI_NF_CONTABIL('CFI', NEW.ID, 0) T
            INTO :ESTABELECIMENTO_ID, :NUMERO_NOTAFISCAL, :DATA,
                :HISTORICO_CONTABIL, :CONTA_DEBITO, :CONTA_CREDITO,
                :VALOR, :VFALHAS
            DO BEGIN
    
            END

        END

        IF(NEW.PDV_ITENS_TEMP_ID > 0) THEN
        BEGIN
            UPDATE TBPDV_ITENS_TEMP T SET T.STATUS = 1 WHERE T.ID = NEW.PDV_ITENS_TEMP_ID;
        END

        /*
        SELECT * FROM SP_FORMA_PAGAMENTO_CARTAO('CFE', NEW.ID, 1)
        INTO :DOCUMENTO_TIPO, :DOCUMENTO, :PAGAMENTO_FORMA_ID, :PARCELA, :VALOR_PARCELA, :TARIFA, :VALOR_LIQUIDO,
                 :NSU, :ADQUIRENTE_ID, :BANDEIRA_CARTAO, :CODIGO_AUTORIZACAO, :CONCILIACAO;

        GERAR COMISSAO
        EXECUTE PROCEDURE SPI_CFE_GERAR_COMISSAO(NEW.ID);

        EXECUTE PROCEDURE SPI_GERAR_COMISSAO(NEW.ID,'CFE');
        */

  END ELSE
  /* SITUACAO CANCELADO */
  IF((OLD.SITUACAO = 2 AND NEW.SITUACAO = 3) OR (OLD.SITUACAO = 2 AND NEW.SITUACAO = 1) ) THEN
  BEGIN

        EXECUTE PROCEDURE SP_CFE_PARCELAMENTO (NEW.ID, 2);

        EXECUTE PROCEDURE SP_CFE_ESTOQUE(NEW.ID, NEW.ESTABELECIMENTO_ID, NEW.CLIENTE_ID, :CAIXA_ID,
            NEW.NUMERO_CFE, NEW.SERIE, NEW.DATA_EMISSAO, 2, 0);

        EXECUTE PROCEDURE SP_CFE_PEDIDO(NEW.ID, 2);

        EXECUTE PROCEDURE SP_CFE_CONFERENCIA(NEW.ID, 2);

        EXECUTE PROCEDURE SPU_PREPEDIDO_CLIENTE(NEW.ID, COALESCE(NEW.CLIENTE_ID, 0), COALESCE(NEW.REPRESENTANTE_ID, 0), COALESCE(NEW.CORRETOR_ID, 0), 2);

        IF(OLD.NATUREZA = 1) THEN
        BEGIN
            EXECUTE PROCEDURE SPD_MOVCONTABIL(NEW.ID, 'CFI');
        END

        EXECUTE PROCEDURE SP_CFE_FORMA_PAGAMENTO(NEW.ID, 1);

        DELETE FROM TBNFS_FORMA_PAGAMENTO T WHERE T.DOCUMENTO_TIPO = 'CFE' AND T.DOCUMENTO_ID = NEW.ID;

        /*APAGAR COMISSAO*/
        DELETE FROM TBCOMISSAO A WHERE A.ORIGEM = 'CFE' AND A.TABELA_ID = NEW.ID;

        IF(NEW.PDV_ITENS_TEMP_ID > 0) THEN
        BEGIN
            UPDATE TBPDV_ITENS_TEMP T SET T.STATUS = 0 WHERE T.ID = NEW.PDV_ITENS_TEMP_ID;
        END

        :PDV_DEVOLUCAO_TROCA = 0;

        FOR SELECT
            K.ID,
            K.ESTOQUE_ID,
            K.PDV_DEVOLUCAO_TROCA_ID
        FROM TBPDV_CFE_ITEM_TROCA K
        WHERE K.pdv_cfe_id = NEW.ID
        INTO :PDV_CFE_ITEM_TROCA_ID, :ESTOQUE_ID, :PDV_DEVOLUCAO_TROCA_AUX
        DO BEGIN
            
            :PDV_DEVOLUCAO_TROCA = :PDV_DEVOLUCAO_TROCA_AUX;

            IF(:ESTOQUE_ID > 0) THEN
            BEGIN
                
                DELETE FROM TBESTOQUE_TRANSACAO_ITEM T WHERE T.CONTROLE = :ESTOQUE_ID;
            END

        END

        IF(:PDV_DEVOLUCAO_TROCA > 0) THEN
        BEGIN
            DELETE FROM TBPDV_DEVOLUCAO_TROCA T WHERE T.ID = :PDV_DEVOLUCAO_TROCA;
        END
  END

END
^

SET TERM ; ^

