SET TERM ^ ;

ALTER TABLE TBSETOR ADD PAGAMENTO_FORMA    INTEGER
^
ALTER TABLE TBSETOR ADD PAGAMENTO_CONDICAO INTEGER
^
ALTER TABLE TBSETOR ADD TABELA_PRECO       INTEGER
^
ALTER TABLE TBSETOR ADD ORIGEM_PRECO       VARCHAR(1)
^
ALTER TABLE TBSETOR ADD FORNECEDOR_CODIGO  INTEGER
^

ALTER TABLE TBPEDIDO_ITEM_PROCESSADO ADD NFE_ID INTEGER
^

ALTER TABLE TBPEDIDO_ITEM_PROCESSADO ADD VALOR_PARCELA_GERADA NUMERIC(15,2)
^

ALTER TABLE TBMODELO_LINHA 			 ADD VALOR_SERVICO NUMERIC(15,2)
^

CREATE OR ALTER TRIGGER TTBREMESSA_SETOR_B03U FOR TBREMESSA_SETOR
ACTIVE BEFORE UPDATE POSITION 3
AS
DECLARE VARIABLE PARCELA_TALAO_ID INTEGER;
BEGIN
  IF(NEW.SITUACAO = 0 AND OLD.SITUACAO = 1 AND NEW.ESTOQUE = '1')THEN
  BEGIN
     EXECUTE PROCEDURE SPU_TALAO_AGRUPAMENTO(NEW.REMESSA, NEW.TALAO_ID, 2);
  END

  IF(NEW.SITUACAO <> OLD.SITUACAO AND OLD.SITUACAO = 1 AND NEW.SITUACAO = 0)THEN
  BEGIN
    PARCELA_TALAO_ID = COALESCE((SELECT FIRST 1 B.NFE_ID FROM TBPEDIDO_ITEM_PROCESSADO B WHERE B.CONTROLE = NEW.TALAO_ID AND B.NFE_ID > 0),0);
    IF(PARCELA_TALAO_ID > 0)THEN
    BEGIN
       EXCEPTION "..." 'TALÃO POSSUI PARCELAS GERADAS PARA PAGAMENTO, ALTERACAO CANCELADA!';
    END
  END
END
^

CREATE OR ALTER TRIGGER TTBSETOR_B9U FOR TBSETOR
ACTIVE BEFORE UPDATE POSITION 9
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN

   HISTORICO = '';

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

   IF (OLD.DESCRICAO_RESUMIDA <> NEW.DESCRICAO_RESUMIDA) THEN
       BEGIN
       HISTORICO = HISTORICO||' DESC.RESUMIDA:'||coalesce(OLD.DESCRICAO_RESUMIDA,'')||' -> '||coalesce(NEW.DESCRICAO_RESUMIDA,'');
       END

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

   IF (OLD.CODIGO1 <> NEW.CODIGO1) THEN
       BEGIN
       HISTORICO = HISTORICO||' COD.BARRAS:'||OLD.CODIGO1||'->'||NEW.CODIGO1;
       END

--   IF (OLD.PLANO_MESTRE <> NEW.PLANO_MESTRE) THEN
--       BEGIN
--       HISTORICO = HISTORICO||' PL.MESTRE:'||OLD.PLANO_MESTRE||'->'||NEW.PLANO_MESTRE;
--       END

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

   IF (OLD.CCUSTO <> NEW.CCUSTO) THEN
       BEGIN
       HISTORICO = HISTORICO||' C.CUSTO:'||OLD.CCUSTO||'->'||NEW.CCUSTO;
       END

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

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

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

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

   IF (OLD.VER_PAINEL_PROD <> NEW.VER_PAINEL_PROD) THEN
       BEGIN
       HISTORICO = HISTORICO||' VER PAINEL PROD:'||OLD.VER_PAINEL_PROD||'->'||NEW.VER_PAINEL_PROD;
       END

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

   IF (OLD.SETOR_RESPONSAVEL <> NEW.SETOR_RESPONSAVEL) THEN
       BEGIN
       HISTORICO = HISTORICO||' SETOR RESP:'||OLD.SETOR_RESPONSAVEL||'->'||NEW.SETOR_RESPONSAVEL;
       END

    IF (FN_IS_EMPTY(OLD.HABILITA_COMPOSICAO_CUSTO, 0) <> FN_IS_EMPTY(NEW.HABILITA_COMPOSICAO_CUSTO, 0)) THEN
       BEGIN
       HISTORICO = HISTORICO||' COMP.CUSTO:'||FN_IS_EMPTY(OLD.HABILITA_COMPOSICAO_CUSTO, 0)||'->'||FN_IS_EMPTY(NEW.HABILITA_COMPOSICAO_CUSTO, 0);
       END

    IF (FN_IS_EMPTY(OLD.EXIGIR_REG_SEQUENCIA, 0) <> FN_IS_EMPTY(NEW.EXIGIR_REG_SEQUENCIA, 0)) THEN
       BEGIN
       HISTORICO = HISTORICO||' EXIG.REG.SEQ:'||FN_IS_EMPTY(OLD.EXIGIR_REG_SEQUENCIA, 0)||'->'||FN_IS_EMPTY(NEW.EXIGIR_REG_SEQUENCIA, 0);
       END

    IF (FN_IS_EMPTY(OLD.VER_PROD_HORARIA, 0) <> FN_IS_EMPTY(NEW.VER_PROD_HORARIA, 0)) THEN
       BEGIN
       HISTORICO = HISTORICO||' VER PROD.HORA:'||FN_IS_EMPTY(OLD.VER_PROD_HORARIA, 0)||'->'||FN_IS_EMPTY(NEW.VER_PROD_HORARIA, 0);
       END
         
    IF (FN_IS_EMPTY(OLD.REGITRAR_DEFEITO, 0) <> FN_IS_EMPTY(NEW.REGITRAR_DEFEITO, 0)) THEN
       BEGIN
       HISTORICO = HISTORICO||' REG. DEFEITO:'||FN_IS_EMPTY(OLD.REGITRAR_DEFEITO, 0)||'->'||FN_IS_EMPTY(NEW.REGITRAR_DEFEITO, 0);
       END

    IF (FN_IS_EMPTY(OLD.PERMITE_ALT_QTD, 0) <> FN_IS_EMPTY(NEW.PERMITE_ALT_QTD, 0)) THEN
       BEGIN
       HISTORICO = HISTORICO||' PERM.ALT.QTD:'||FN_IS_EMPTY(OLD.PERMITE_ALT_QTD, 0)||'->'||FN_IS_EMPTY(NEW.PERMITE_ALT_QTD, 0);
       END

    IF (FN_IS_EMPTY(OLD.EXIGE_OPERADOR, 0) <> FN_IS_EMPTY(NEW.EXIGE_OPERADOR, 0)) THEN
       BEGIN
       HISTORICO = HISTORICO||' EXIG.OPERADOR:'||FN_IS_EMPTY(OLD.EXIGE_OPERADOR, 0)||'->'||FN_IS_EMPTY(NEW.EXIGE_OPERADOR, 0);
       END

    IF (FN_IS_EMPTY(OLD.EXIGE_CONF_PECAS, 0) <> FN_IS_EMPTY(NEW.EXIGE_CONF_PECAS, 0)) THEN
       BEGIN
       HISTORICO = HISTORICO||' EXIG.CONF.PECAS:'||FN_IS_EMPTY(OLD.EXIGE_CONF_PECAS, 0)||'->'||FN_IS_EMPTY(NEW.EXIGE_CONF_PECAS, 0);
       END

    IF (FN_IS_EMPTY(OLD.ESTOQUE_DEFEITO, 0) <> FN_IS_EMPTY(NEW.ESTOQUE_DEFEITO, 0)) THEN
       BEGIN
       HISTORICO = HISTORICO||' EST. DEFEITO:'||FN_IS_EMPTY(OLD.ESTOQUE_DEFEITO, 0)||'->'||FN_IS_EMPTY(NEW.ESTOQUE_DEFEITO, 0);
       END

    IF (FN_IS_EMPTY(OLD.HABILITA_QTD_RESTANTE, 0) <> FN_IS_EMPTY(NEW.HABILITA_QTD_RESTANTE, 0)) THEN
       BEGIN
       HISTORICO = HISTORICO||' HAB.QTD.RESTANTE:'||FN_IS_EMPTY(OLD.HABILITA_QTD_RESTANTE, 0)||'->'||FN_IS_EMPTY(NEW.HABILITA_QTD_RESTANTE, 0);
       END

    IF (FN_IS_EMPTY(OLD.HABILITA_QTD_REALIZADA, 0) <> FN_IS_EMPTY(NEW.HABILITA_QTD_REALIZADA, 0)) THEN
       BEGIN
       HISTORICO = HISTORICO||' HAB.QTD.REALIZADA:'||FN_IS_EMPTY(OLD.HABILITA_QTD_REALIZADA, 0)||'->'||FN_IS_EMPTY(NEW.HABILITA_QTD_REALIZADA, 0);
       END

    IF (FN_IS_EMPTY(OLD.HABILITA_TEMPO, 0) <> FN_IS_EMPTY(NEW.HABILITA_TEMPO, 0)) THEN
       BEGIN
       HISTORICO = HISTORICO||' HAB.TEMPO:'||FN_IS_EMPTY(OLD.HABILITA_TEMPO, 0)||'->'||FN_IS_EMPTY(NEW.HABILITA_TEMPO, 0);
       END

    IF (FN_IS_EMPTY(OLD.ABATER_DEF_PROD, 0) <> FN_IS_EMPTY(NEW.ABATER_DEF_PROD, 0)) THEN
       BEGIN
       HISTORICO = HISTORICO||' ABAT.DEF.PROD:'||FN_IS_EMPTY(OLD.ABATER_DEF_PROD, 0)||'->'||FN_IS_EMPTY(NEW.ABATER_DEF_PROD, 0);
       END

    IF (FN_IS_EMPTY(OLD.DIAS_PRODUZIR, 0) <> FN_IS_EMPTY(NEW.DIAS_PRODUZIR, 0)) THEN
       BEGIN
       HISTORICO = HISTORICO||' PRAZO CONCLUSAO:'||FN_IS_EMPTY(OLD.DIAS_PRODUZIR, 0)||'->'||FN_IS_EMPTY(NEW.DIAS_PRODUZIR, 0);
       END
       

    IF (FN_IS_EMPTY(OLD.PAGAMENTO_FORMA, 0) <> FN_IS_EMPTY(NEW.PAGAMENTO_FORMA, 0)) THEN
       BEGIN
       HISTORICO = HISTORICO||' PAG. FORMA:'||FN_IS_EMPTY(OLD.PAGAMENTO_FORMA, 0)||'->'||FN_IS_EMPTY(NEW.PAGAMENTO_FORMA, 0);
       END
       

    IF (FN_IS_EMPTY(OLD.PAGAMENTO_CONDICAO, 0) <> FN_IS_EMPTY(NEW.PAGAMENTO_CONDICAO, 0)) THEN
       BEGIN
       HISTORICO = HISTORICO||' PAG. COND:'||FN_IS_EMPTY(OLD.PAGAMENTO_CONDICAO, 0)||'->'||FN_IS_EMPTY(NEW.PAGAMENTO_CONDICAO, 0);
       END
       

    IF (FN_IS_EMPTY(OLD.TABELA_PRECO, 0) <> FN_IS_EMPTY(NEW.TABELA_PRECO, 0)) THEN
       BEGIN
       HISTORICO = HISTORICO||' TAB. PRECO:'||FN_IS_EMPTY(OLD.TABELA_PRECO, 0)||'->'||FN_IS_EMPTY(NEW.TABELA_PRECO, 0);
       END
       

    IF (FN_IS_EMPTY(OLD.ORIGEM_PRECO, 0) <> FN_IS_EMPTY(NEW.ORIGEM_PRECO, 0)) THEN
       BEGIN
       HISTORICO = HISTORICO||' ORI. PRECO:'||FN_IS_EMPTY(OLD.ORIGEM_PRECO, 0)||'->'||FN_IS_EMPTY(NEW.ORIGEM_PRECO, 0);
       END
       

    IF (FN_IS_EMPTY(OLD.FORNECEDOR_CODIGO, 0) <> FN_IS_EMPTY(NEW.FORNECEDOR_CODIGO, 0)) THEN
       BEGIN
       HISTORICO = HISTORICO||' FORN:'||FN_IS_EMPTY(OLD.FORNECEDOR_CODIGO, 0)||'->'||FN_IS_EMPTY(NEW.FORNECEDOR_CODIGO, 0);
       END

   IF (HISTORICO <> '') THEN
       BEGIN
       INSERT INTO TBHISTORICO (
       TABELA, TABELA_ID, USUARIO, IP, HISTORICO) VALUES (
      'TBSETOR', OLD.CODIGO,
      (SELECT FIRST 1 MON$USER FROM MON$ATTACHMENTS WHERE MON$ATTACHMENT_ID = CURRENT_CONNECTION),
      (SELECT FIRST 1 MON$REMOTE_ADDRESS FROM MON$ATTACHMENTS WHERE MON$ATTACHMENT_ID = CURRENT_CONNECTION),
       'REGISTRO ALTERADO: '||:HISTORICO);
       END
END
^

CREATE OR ALTER TRIGGER TTBMODELO_LINHA_B9U FOR TBMODELO_LINHA
ACTIVE BEFORE UPDATE POSITION 9
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);

DECLARE VARIABLE DESCRICAO_REFERENCIA_ANTIGA VARCHAR(500);
DECLARE VARIABLE DESCRICAO_REFERENCIA_NOVA VARCHAR(500);
BEGIN

   HISTORICO = '';

   IF (OLD.DESCRICAO <> NEW.DESCRICAO) THEN
       BEGIN
       HISTORICO = HISTORICO||' DESC. '||OLD.DESCRICAO||' -> '||NEW.DESCRICAO;
       END
   IF (OLD.MAGENTO_ID <> NEW.MAGENTO_ID) THEN
       BEGIN
       HISTORICO = HISTORICO||' ID E-COMERCE '||OLD.MAGENTO_ID||' -> '||NEW.MAGENTO_ID;
       END

   IF (OLD.FAMILIA_ALTERNATIVA IS DISTINCT FROM NEW.FAMILIA_ALTERNATIVA) THEN
       BEGIN
       HISTORICO = HISTORICO||' FAM.COM: '||COALESCE(OLD.FAMILIA_ALTERNATIVA, 0)||' -> '||COALESCE(NEW.FAMILIA_ALTERNATIVA, 0);
       END

   IF (OLD.FAMILIA_CODIGO <> NEW.FAMILIA_CODIGO) THEN
       BEGIN
       HISTORICO = HISTORICO||' FAM.PROD: '||OLD.FAMILIA_CODIGO||' -> '||NEW.FAMILIA_CODIGO;
       END
--   IF (OLD.TIPOPRODUTO_CODIGO <> NEW.TIPOPRODUTO_CODIGO) THEN
--       BEGIN
--       HISTORICO = HISTORICO||' TIP. '||OLD.TIPOPRODUTO_CODIGO||'->'||NEW.TIPOPRODUTO_CODIGO;
--       END
   IF (OLD.GRADE_CODIGO <> NEW.GRADE_CODIGO) THEN
       BEGIN
       HISTORICO = HISTORICO||' GRD. '||OLD.GRADE_CODIGO||' -> '||NEW.GRADE_CODIGO;
       END
   IF (OLD.PRAZO_PRODUCAO <> NEW.PRAZO_PRODUCAO) THEN
       BEGIN
       HISTORICO = HISTORICO||' PZO. '||OLD.PRAZO_PRODUCAO||' -> '||NEW.PRAZO_PRODUCAO;
       END
   IF (OLD.PECAS_CONJUNTO <> NEW.PECAS_CONJUNTO) THEN
       BEGIN
       HISTORICO = HISTORICO||' PEÇAS CONJ. '||OLD.PECAS_CONJUNTO||' -> '||NEW.PECAS_CONJUNTO;
       END
   IF (OLD.REFERENCIA_ID <> NEW.REFERENCIA_ID) THEN
       BEGIN
       HISTORICO = HISTORICO||' REF. '||OLD.REFERENCIA_ID||' -> '||NEW.REFERENCIA_ID;
       END
   IF (OLD.OBSERVACAO <> NEW.OBSERVACAO) THEN
       BEGIN
       HISTORICO = HISTORICO||' OBS. '||OLD.OBSERVACAO||' -> '||NEW.OBSERVACAO;
       END

   IF(OLD.MD_DATA IS NULL AND NEW.MD_DATA IS NOT NULL) THEN
    BEGIN
        HISTORICO = HISTORICO||' DATA LANC. '||''||' -> '||FN_DATE(NEW.MD_DATA, 'DD/MM/YYYY');
    END

   IF(NEW.MD_DATA IS NULL AND OLD.MD_DATA IS NOT NULL) THEN
    BEGIN
        HISTORICO = HISTORICO||' DATA LANC. '||FN_DATE(OLD.MD_DATA, 'DD/MM/YYYY')||' -> '||'';
    END

   IF(NEW.MD_DATA IS NOT NULL AND OLD.MD_DATA IS NOT NULL AND NEW.MD_DATA <> OLD.MD_DATA) THEN
    BEGIN
        HISTORICO = HISTORICO||' DATA LANC. '||FN_DATE(OLD.MD_DATA, 'DD/MM/YYYY')||' -> '||FN_DATE(NEW.MD_DATA, 'DD/MM/YYYY');
    END
   IF (OLD.MD <> NEW.MD) THEN
       BEGIN
       HISTORICO = HISTORICO||' MD. '||OLD.MD||' -> '||NEW.MD;
       END
   
   IF (OLD.VALOR_SERVICO <> NEW.VALOR_SERVICO) THEN
       BEGIN
       HISTORICO = HISTORICO||' VL.SER: '||OLD.VALOR_SERVICO||' -> '||NEW.VALOR_SERVICO;
       END

   IF (OLD.STATUS <> NEW.STATUS) THEN
       BEGIN
       IF (NEW.STATUS = '0') THEN
           BEGIN
           HISTORICO = HISTORICO||' STATUS INATIVADO';
           NEW.DATA_INATIVACAO = CURRENT_DATE;
           END
       IF (NEW.STATUS = '1') THEN
           BEGIN
           HISTORICO = HISTORICO||' STATUS ATIVADO';
           NEW.DATA_ATIVACAO = CURRENT_DATE;
           END
       END


   IF (HISTORICO <> '') THEN
       BEGIN
       INSERT INTO TBHISTORICO (
       TABELA, TABELA_ID, USUARIO, IP, HISTORICO) VALUES (
      'TBLINHA', OLD.CODIGO,
      (SELECT FIRST 1 MON$USER FROM MON$ATTACHMENTS WHERE MON$ATTACHMENT_ID = CURRENT_CONNECTION),
      (SELECT FIRST 1 MON$REMOTE_ADDRESS FROM MON$ATTACHMENTS WHERE MON$ATTACHMENT_ID = CURRENT_CONNECTION),
       :HISTORICO);
       EXECUTE PROCEDURE SPI_HISTORICO('TBMODELO_LINHA', NEW.CODIGO, HISTORICO);
       END
END
^

CREATE OR ALTER TRIGGER TTBREMESSA_SETOR_B03U FOR TBREMESSA_SETOR
ACTIVE BEFORE UPDATE POSITION 3
AS
declare variable PARCELA_TALAO_ID integer;
begin
  IF(NEW.situacao = 0 AND OLD.situacao = 1 and new.estoque = '1')THEN
  BEGIN
     EXECUTE PROCEDURE SPU_TALAO_AGRUPAMENTO(NEW.remessa, NEW.talao_id, 2);
  END

  IF(NEW.situacao <> OLD.situacao AND OLD.SITUACAO = 1 AND NEW.SITUACAO = 0)THEN
  BEGIN
    PARCELA_TALAO_ID = COALESCE((SELECT FIRST 1 B.NFE_ID FROM TBPEDIDO_ITEM_PROCESSADO B WHERE B.CONTROLE = NEW.TALAO_ID AND B.NFE_ID > 0),0);
    IF(PARCELA_TALAO_ID > 0)THEN
    BEGIN
       EXCEPTION "..." 'TALÃO POSSUI PARCELAS GERADAS PARA PAGAMENTO, ALTERACAO CANCELADA!';
    END
  END
end
^

CREATE OR ALTER TRIGGER TTBPEDIDO_ITEM_PROCESSADO_B16U FOR TBPEDIDO_ITEM_PROCESSADO
ACTIVE BEFORE UPDATE POSITION 0
AS
begin
  IF(NEW.situacao <> OLD.situacao AND OLD.SITUACAO = 3 AND NEW.SITUACAO < 3)THEN
  BEGIN
    IF(NEW.NFE_ID > 0)THEN
    BEGIN
       EXCEPTION "..." 'TALÃO POSSUI PARCELAS GERADAS PARA PAGAMENTO, ALTERACAO CANCELADA!';
    END
  END
end

^

UPDATE OR INSERT INTO TBMENU (CONTROLE, GRUPO, SUBGRUPO, TIPO, URL, DESCRICAO, DATAHORA)
                      VALUES (20500, 'FIN', 'FIN', '1   ', '', 'REGISTRO DE PARCELAS AVULSAS VIA PRODUCAO DE TALOES', '2022-04-18')
                    MATCHING (CONTROLE)
^

CREATE INDEX ITBPEDIDO_ITEM_PROCESSADO_36
ON TBPEDIDO_ITEM_PROCESSADO (NFE_ID)
^

SET TERM ; ^