CREATE TRIGGER PRODUTO_BU0 FOR PRODUTO
ACTIVE BEFORE UPDATE POSITION 0
AS
begin
  if (new.qtdeatual is null) then
      new.qtdeatual = 0;
end
^

/* Trigger: PRODUTO_CALC_COMPRAMVA */
CREATE TRIGGER PRODUTO_CALC_COMPRAMVA FOR PRODUTO
ACTIVE BEFORE UPDATE POSITION 0
AS
  declare variable vPRECO_COM_IMPOSTO numeric(15,2);
  declare variable vCALCULAMVA varchar(1);
begin

     select coalesce(F.MVA_COMPRA_PRODUTO,'N') from CONFIGURACAO F
       where F.IDFILIAL = new.IDFILIAL
     into :VCALCULAMVA;

     if (:VCALCULAMVA = 'S') then
     begin
         select CC.PRECOVENDA_COM_IMPOSTO
                                                                     from CALCULA_MVA_COMPRA(
                                                                      new.IDFILIAL,
                                                                      new.IDPRODUTO,
                                                                      cast(new.CUSTONOTA_ORIGINAL as numeric(15,4))) CC
            into :VPRECO_COM_IMPOSTO;
    
        if (:VPRECO_COM_IMPOSTO > 0) then
            new.CUSTONOTA = :VPRECO_COM_IMPOSTO;

     end 
end
^

/* Trigger: REDUZAO_Z_BF_INSERT */
CREATE TRIGGER REDUZAO_Z_BF_INSERT FOR REDUZAO_Z
ACTIVE BEFORE INSERT POSITION 0
AS
   declare variable vIDCONTROLE integer;
begin
   select MAX(Z.IDCONTROLE) from REDUZAO_Z Z
     into :VIDCONTROLE;

   if (:VIDCONTROLE is null) then
      new.IDCONTROLE = 1;
   else
      new.IDCONTROLE = :VIDCONTROLE+1;
end
^

/* Trigger: REGIAO_ROMANEIO_AI0 */
CREATE TRIGGER REGIAO_ROMANEIO_AI0 FOR REGIAO_ROMANEIO
ACTIVE AFTER INSERT POSITION 0
as
  declare variable vDTINI date;
  declare variable vDTFIM date;
  declare variable vIDPEDIDO integer;
begin

   select R.DTINI, R.DTFIM from ROMANEIO R
     where R.IDFILIAL = NEW.IDFILIAL
       and R.IDCONTROLE = NEW.IDCONTROLE
     into :vDTINI, :vDTFIM;

  execute procedure INSERT_REGIAO_ROMANEIO(NEW.IDFILIAL, NEW.IDREGIAO,
                                               :vDTINI, :vDTFIM, NEW.IDCONTROLE) returning_values (:vIDPEDIDO);
end
^

/* Trigger: REL_MOVIMENTACAO_BI0 */
CREATE TRIGGER REL_MOVIMENTACAO_BI0 FOR REL_MOVIMENTACAO
ACTIVE BEFORE INSERT POSITION 0
AS
begin
   select coalesce(max(R.IDCONTROLE)+1,1) from REL_MOVIMENTACAO R
      where R.IDFILIAL = new.IDFILIAL
        and R.DATA     = current_date
     into new.IDCONTROLE;

end
^

/* Trigger: RESERVA_CONTROLE_BF_INSERT */
CREATE TRIGGER RESERVA_CONTROLE_BF_INSERT FOR RESERVA_CONTROLE
ACTIVE BEFORE INSERT POSITION 0
as
  declare variable vIDCONTROLE integer;
begin
   for select count(R.IDCONTROLE) from RESERVA_CONTROLE R
              where R.IDFILIAL = new.IDFILIAL
                and R.IDCONTROLE = new.IDCONTROLE
           into :vIDCONTROLE
   do begin
      delete from RESERVA_CONTROLE R
            where R.IDCONTROLE = new.IDCONTROLE;
   end
end
^

/* Trigger: SANGRIA_SUPRIMENTO_BF_INSERT */
CREATE TRIGGER SANGRIA_SUPRIMENTO_BF_INSERT FOR SANGRIA_SUPRIMENTO
ACTIVE BEFORE INSERT POSITION 0
as
  declare variable vIDCONTROLE integer;
begin
   select max(IDCONTROLE)+1 from SANGRIA_SUPRIMENTO S
     where S.IDFILIAL = new.IDFILIAL
    into :VIDCONTROLE;

    if (:VIDCONTROLE is null) then VIDCONTROLE = 1;

    new.IDCONTROLE = :VIDCONTROLE;
end
^

/* Trigger: SENHA_PALM_BI */
CREATE TRIGGER SENHA_PALM_BI FOR SENHA_PALM
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
  IF (NEW.IDCONTROLE IS NULL) THEN
    NEW.IDCONTROLE = GEN_ID(GEN_SENHA_PALM_ID,1);
END
^

/* Trigger: SPED_0150_BI0 */
CREATE TRIGGER SPED_0150_BI0 FOR SPED_0150
ACTIVE BEFORE INSERT POSITION 0
AS
begin
   new.IDPARTICIPANTE = gen_id(INC_IDPARTICIPANTE,1);
end
^

/* Trigger: TAB_CEST_BI0 */
CREATE TRIGGER TAB_CEST_BI0 FOR TAB_CEST
ACTIVE BEFORE INSERT POSITION 0
AS
begin
   update produto P
      set cest = new.cest
    where classificacao_fiscal = new.ncm;



end
^

/* Trigger: TRANSFERENCIA_DEPOSITO_AF_DEL */
CREATE TRIGGER TRANSFERENCIA_DEPOSITO_AF_DEL FOR TRANSFERENCIA_DEPOSITO
ACTIVE AFTER DELETE POSITION 0
AS
begin
   -- TIRANDO DO ORIGEM
   execute procedure ATUALIZA_ESTOQUE_DEPOSITO(old.IDFILIAL,old.IDDEPOSITO_ORIGEM,old.IDPRODUTO,(old.QTDE_AJUSTE*old.FATORCONVERSAO),'+','EXCLUSÃO DE TRANSFERENCIA :' || old.IDCONTROLE);


   -- TIRANDO DO DESTINO
   execute procedure ATUALIZA_ESTOQUE_DEPOSITO(old.IDFILIAL,old.IDDEPOSITO_DESTINO,old.IDPRODUTO,(old.QTDE_AJUSTE*old.FATORCONVERSAO),'-','EXCLUSÃO DE TRANSFERENCIA :' || old.IDCONTROLE);
end
^

/* Trigger: TRANSFERENCIA_DEPOSITO_BF_INSER */
CREATE TRIGGER TRANSFERENCIA_DEPOSITO_BF_INSER FOR TRANSFERENCIA_DEPOSITO
ACTIVE BEFORE INSERT POSITION 0
AS
  declare variable vIDCONTROLE integer;
begin
   select max(T.IDCONTROLE) from TRANSFERENCIA_DEPOSITO T
      where T.IDFILIAL = new.IDFILIAL
     into :vIDCONTROLE;

   if (vIDCONTROLE is null) then
      new.IDCONTROLE = 1;
   else
      new.IDCONTROLE = :VIDCONTROLE+1;



   -- *********************************************************
   -- FAZENDO A TRANSFERENCIA PARA O OUTRO DEPOSITO
   -- *********************************************************


   -- TIRANDO DO ORIGEM
   execute procedure ATUALIZA_ESTOQUE_DEPOSITO(new.IDFILIAL,new.IDDEPOSITO_ORIGEM,new.IDPRODUTO,(new.QTDE_AJUSTE*new.FATORCONVERSAO),'-','INCLUSÃO DE TRANSFERENCIA :' || new.IDCONTROLE);

   -- TIRANDO DO DESTINO
   execute procedure ATUALIZA_ESTOQUE_DEPOSITO(new.IDFILIAL,new.IDDEPOSITO_DESTINO,new.IDPRODUTO,(new.QTDE_AJUSTE*new.FATORCONVERSAO),'+','INCLUSÃO DE TRANSFERENCIA :' || new.IDCONTROLE);
end
^

/* Trigger: TRANSFERENCIA_DEPOSITO_BF_UPDAT */
CREATE TRIGGER TRANSFERENCIA_DEPOSITO_BF_UPDAT FOR TRANSFERENCIA_DEPOSITO
ACTIVE BEFORE UPDATE POSITION 0
AS
begin
   -- TIRANDO DO ORIGEM
   execute procedure ATUALIZA_ESTOQUE_DEPOSITO(old.IDFILIAL,old.IDDEPOSITO_ORIGEM,old.IDPRODUTO,(old.QTDE_AJUSTE*old.FATORCONVERSAO),'+','ALTERAÇÃO DE TRANSFERENCIA :' || old.IDCONTROLE);

   execute procedure ATUALIZA_ESTOQUE_DEPOSITO(new.IDFILIAL,new.IDDEPOSITO_ORIGEM,new.IDPRODUTO,(new.QTDE_AJUSTE*new.FATORCONVERSAO),'-','ALTERAÇÃO DE TRANSFERENCIA :' || new.IDCONTROLE);



   -- TIRANDO DO DESTINO
   execute procedure ATUALIZA_ESTOQUE_DEPOSITO(old.IDFILIAL,old.IDDEPOSITO_DESTINO,old.IDPRODUTO,(old.QTDE_AJUSTE*old.FATORCONVERSAO),'-','ALTERAÇÃO DE TRANSFERENCIA :' || old.IDCONTROLE);

   execute procedure ATUALIZA_ESTOQUE_DEPOSITO(new.IDFILIAL,new.IDDEPOSITO_DESTINO,new.IDPRODUTO,(new.QTDE_AJUSTE*new.FATORCONVERSAO),'+','ALTERAÇÃO DE TRANSFERENCIA :' || new.IDCONTROLE);
end
^

/* Trigger: TRG_AJUSTEESTOQUE_DELETE */
CREATE TRIGGER TRG_AJUSTEESTOQUE_DELETE FOR AJUSTEESTOQUE
ACTIVE BEFORE DELETE POSITION 0
as
 begin
   if (old.TIPOOPERACAO='+') then
     execute procedure ATUALIZA_ESTOQUE(old.IDFILIAL,old.IDPRODUTO,(old.QTDEAJUSTE*old.FATORCONVERSAO),'-','PRODUTO EXCLUIDO DO AJUSTE DE ESTOQUE No:' || old.IDAJUSTEESTOQUE);
   else
     execute procedure ATUALIZA_ESTOQUE(old.IDFILIAL,old.IDPRODUTO,(old.QTDEAJUSTE*old.FATORCONVERSAO),'+','PRODUTO EXCLUIDO DO AJUSTE DE ESTOQUE No:' || old.IDAJUSTEESTOQUE);
end
^

/* Trigger: TRG_AJUSTEESTOQUE_INSERT */
CREATE TRIGGER TRG_AJUSTEESTOQUE_INSERT FOR AJUSTEESTOQUE
ACTIVE BEFORE INSERT POSITION 0
as
 begin
   if (new.TIPOOPERACAO='+') then
     execute procedure ATUALIZA_ESTOQUE(new.IDFILIAL,new.IDPRODUTO,(new.QTDEAJUSTE*new.FATORCONVERSAO),'+','ENTRADA DO AJUSTE DE ESTOQUE  No:' || new.IDAJUSTEESTOQUE);
   else
     execute procedure ATUALIZA_ESTOQUE(new.IDFILIAL,new.IDPRODUTO,(new.QTDEAJUSTE*new.FATORCONVERSAO),'-','SAIDA DO AJUSTE DE ESTOQUE No:'  || new.IDAJUSTEESTOQUE);
end
^

/* Trigger: TRG_AJUSTEESTOQUE_UPDATE */
CREATE TRIGGER TRG_AJUSTEESTOQUE_UPDATE FOR AJUSTEESTOQUE
ACTIVE BEFORE UPDATE POSITION 0
as
 begin
   if ((old.QTDEAJUSTE*old.FATORCONVERSAO) <> (new.QTDEAJUSTE*new.FATORCONVERSAO)) then begin
       if (new.SIT_INVENTARIO is null) then begin
           /* DADOS ANTIGOS */
           if (old.TIPOOPERACAO='+') then
             execute procedure ATUALIZA_ESTOQUE(old.IDFILIAL,old.IDPRODUTO,(old.QTDEAJUSTE*old.FATORCONVERSAO),'-','ALTERAÇÃO DO AJUSTE DE ESTOQUE No:' || old.IDAJUSTEESTOQUE);
           else
             execute procedure ATUALIZA_ESTOQUE(old.IDFILIAL,old.IDPRODUTO,(old.QTDEAJUSTE*old.FATORCONVERSAO),'+','ALTERAÇÃO DO AJUSTE DE ESTOQUE No:' || old.IDAJUSTEESTOQUE);
    
           /* DADOS ALTERADOS */
           if (new.TIPOOPERACAO='+') then
             execute procedure ATUALIZA_ESTOQUE(new.IDFILIAL,new.IDPRODUTO,(new.QTDEAJUSTE*new.FATORCONVERSAO),'+','ALTERAÇÃO DO AJUSTE DE ESTOQUE No:'|| old.IDAJUSTEESTOQUE);
           else
             execute procedure ATUALIZA_ESTOQUE(new.IDFILIAL,new.IDPRODUTO,(new.QTDEAJUSTE*new.FATORCONVERSAO),'-','ALTERAÇÃO DO AJUSTE DE ESTOQUE No:'|| old.IDAJUSTEESTOQUE);
       end
   end
end
^

/* Trigger: TRG_AJUSTE_DEPOSITO_BF_DELETE */
CREATE TRIGGER TRG_AJUSTE_DEPOSITO_BF_DELETE FOR AJUSTE_DEPOSITO
ACTIVE BEFORE DELETE POSITION 0
as
begin
   if (old.TIPOOPERACAO='+') then begin
     execute procedure ATUALIZA_ESTOQUE_DEPOSITO(old.IDFILIAL,old.IDDEPOSITO,old.IDPRODUTO,(old.QTDE_AJUSTE*old.FATORCONVERSAO),'-','EXCLUSÃO DE AJUSTE DEPOSITO :' || old.IDAJUSTE);
   end
   else begin
     execute procedure ATUALIZA_ESTOQUE_DEPOSITO(old.IDFILIAL,old.IDDEPOSITO,old.IDPRODUTO,(old.QTDE_AJUSTE*old.FATORCONVERSAO),'+','EXCLUSÃO DE AJUSTE DEPOSITO :' || old.IDAJUSTE);
   end
end
^

/* Trigger: TRG_AJUSTE_DEPOSITO_BF_INSERT */
CREATE TRIGGER TRG_AJUSTE_DEPOSITO_BF_INSERT FOR AJUSTE_DEPOSITO
ACTIVE BEFORE INSERT POSITION 0
as
  declare variable vIDAJUSTE integer;
begin
   select max(A.IDAJUSTE)+1 from AJUSTE_DEPOSITO A
      where A.IDFILIAL = new.IDFILIAL
        and A.IDPRODUTO = new.IDPRODUTO
      into :vIDAJUSTE;
   if (vIDAJUSTE is null) then vIDAJUSTE = 1;

   new.IDAJUSTE = :vIDAJUSTE;


   if (new.TIPOOPERACAO='+') then begin
      execute procedure ATUALIZA_ESTOQUE_DEPOSITO(new.IDFILIAL,new.IDDEPOSITO,new.IDPRODUTO,(new.QTDE_AJUSTE*new.FATORCONVERSAO),'+','INCLUSÃO DE AJUSTE DEPOSITO :' || new.IDAJUSTE);
   end
   else begin
      execute procedure ATUALIZA_ESTOQUE_DEPOSITO(new.IDFILIAL,new.IDDEPOSITO,new.IDPRODUTO,(new.QTDE_AJUSTE*new.FATORCONVERSAO),'-','INCLUSÃO DE AJUSTE DEPOSITO :' || new.IDAJUSTE);
   end
end
^

/* Trigger: TRG_AJUSTE_DEPOSITO_BF_UPDATE */
CREATE TRIGGER TRG_AJUSTE_DEPOSITO_BF_UPDATE FOR AJUSTE_DEPOSITO
ACTIVE BEFORE UPDATE POSITION 0
AS
begin
   if (old.TIPOOPERACAO='+') then begin
      execute procedure ATUALIZA_ESTOQUE_DEPOSITO(old.IDFILIAL,old.IDDEPOSITO,old.IDPRODUTO,(old.QTDE_AJUSTE*old.FATORCONVERSAO),'-','ALTERAÇÃO DE AJUSTE DEPOSITO :' || old.IDAJUSTE);
   end
   else begin
      execute procedure ATUALIZA_ESTOQUE_DEPOSITO(old.IDFILIAL,old.IDDEPOSITO,old.IDPRODUTO,(old.QTDE_AJUSTE*old.FATORCONVERSAO),'+','ALTERAÇÃO DE AJUSTE DEPOSITO :' || old.IDAJUSTE);
   end

   if (new.TIPOOPERACAO='+') then begin
      execute procedure ATUALIZA_ESTOQUE_DEPOSITO(new.IDFILIAL,new.IDDEPOSITO,new.IDPRODUTO,(new.QTDE_AJUSTE*new.FATORCONVERSAO),'+','ALTERAÇÃO DE AJUSTE DEPOSITO :' || new.IDAJUSTE);
   end
   else begin
      execute procedure ATUALIZA_ESTOQUE_DEPOSITO(new.IDFILIAL,new.IDDEPOSITO,new.IDPRODUTO,(new.QTDE_AJUSTE*new.FATORCONVERSAO),'-','ALTERAÇÃO DE AJUSTE DEPOSITO :' || new.IDAJUSTE);
   end
end
^

/* Trigger: TRG_AJUSTE_MAT_PRIMA_BF_DELETE */
CREATE TRIGGER TRG_AJUSTE_MAT_PRIMA_BF_DELETE FOR AJUSTE_MATERIA_PRIMA
ACTIVE BEFORE DELETE POSITION 0
AS
begin

     if (old.TIPOOPERACAO='+') then
     begin
       update PRODUTO M
          set M.QTDEATUAL=M.QTDEATUAL-(old.QTDE)
        where M.IDPRODUTO=old.IDMATERIA_PRIMA
          and M.IDFILIAL=old.IDFILIAL;
     end
     else
     begin
       update PRODUTO M
          set M.QTDEATUAL=M.QTDEATUAL+(old.QTDE)
        where M.IDPRODUTO=old.IDMATERIA_PRIMA
          and M.IDFILIAL=old.IDFILIAL;
     end
end
^

/* Trigger: TRG_AJUSTE_MAT_PRIMA_BF_INSERT */
CREATE TRIGGER TRG_AJUSTE_MAT_PRIMA_BF_INSERT FOR AJUSTE_MATERIA_PRIMA
ACTIVE BEFORE INSERT POSITION 0
AS
begin

     if (new.TIPOOPERACAO='+') then
     begin
       update PRODUTO M
       set M.QTDEATUAL=M.QTDEATUAL+(new.QTDE)
       where (M.IDPRODUTO=new.IDMATERIA_PRIMA)
       and   (M.IDFILIAL=new.IDFILIAL);
     end
     else
     begin
       update PRODUTO M
       set M.QTDEATUAL=M.QTDEATUAL-(new.QTDE)
       where M.IDPRODUTO=new.IDMATERIA_PRIMA
       and   M.IDFILIAL=new.IDFILIAL;
     end
end
^

/* Trigger: TRG_AJUSTE_MAT_PRIMA_BF_UPDATE */
CREATE TRIGGER TRG_AJUSTE_MAT_PRIMA_BF_UPDATE FOR AJUSTE_MATERIA_PRIMA
ACTIVE BEFORE UPDATE POSITION 0
AS
begin
    /* DADOS ANTIGOS */
    if (old.TIPOOPERACAO='+') then
    begin
      update PRODUTO M
         set M.QTDEATUAL=M.QTDEATUAL-(old.QTDE)
       where M.IDFILIAL=old.IDFILIAL
         and M.IDPRODUTO=old.IDMATERIA_PRIMA;
    end
    else
    begin
      update PRODUTO M
         set M.QTDEATUAL=M.QTDEATUAL+(old.QTDE)
       where M.IDFILIAL=old.IDFILIAL
         and M.IDPRODUTO=old.IDMATERIA_PRIMA;
    end


    /* DADOS ALTERADOS */
    if (new.TIPOOPERACAO='+') then
    begin
      update PRODUTO M
         set M.QTDEATUAL=M.QTDEATUAL+(new.QTDE)
       where M.IDFILIAL=new.IDFILIAL
         and M.IDPRODUTO=new.IDMATERIA_PRIMA;
    end
    else
    begin
      update PRODUTO M
         set M.QTDEATUAL=M.QTDEATUAL-(new.QTDE)
       where M.IDFILIAL=new.IDFILIAL
         and M.IDPRODUTO=new.IDMATERIA_PRIMA;
    end
end
^

/* Trigger: TRG_ATIVIDADE_AF_INSERT */
CREATE TRIGGER TRG_ATIVIDADE_AF_INSERT FOR ATIVIDADE
ACTIVE AFTER INSERT POSITION 0
AS
declare variable VIDREPRESENTANTE smallint;
begin
  for select R.IDREPRESENTANTE from REPRESENTANTE R
        where R.EXCLUIDO is null
          and R.USA_ANDROID = 'S'
            into :VIDREPRESENTANTE
  do
  begin
     if (not exists(select L.IDFILIAL from LOG_ALTERACAO_ANDROID L
                     where L.IDFILIAL = new.IDFILIAL
                       and L.ID = new.IDATIVIDADE
                       and L.TIPO = 'Atividade'
                       and L.IDREPRESENTANTE = :VIDREPRESENTANTE)) then
     begin
       INSERT INTO LOG_ALTERACAO_ANDROID (IDFILIAL, IDREPRESENTANTE, ID, TIPO, IDFOLHA, SITUACAO) VALUES (new.IDFILIAL, :VIDREPRESENTANTE, new.IDATIVIDADE, 'Atividade', NULL, 'I');
     end
  end
end
^

/* Trigger: TRG_ATIVIDADE_AF_UPDATE */
CREATE TRIGGER TRG_ATIVIDADE_AF_UPDATE FOR ATIVIDADE
ACTIVE AFTER UPDATE POSITION 0
AS
declare variable VIDREPRESENTANTE smallint;
begin
  for select R.IDREPRESENTANTE from REPRESENTANTE R
        where R.EXCLUIDO is null
          and R.USA_ANDROID = 'S'
            into :VIDREPRESENTANTE
  do
  begin
     if (not exists(select L.IDFILIAL from LOG_ALTERACAO_ANDROID L
                     where L.IDFILIAL = new.IDFILIAL
                       and L.ID = new.IDATIVIDADE
                       and L.TIPO = 'Atividade'
                       and L.IDREPRESENTANTE = :VIDREPRESENTANTE)) then
     begin
       if (new.EXCLUIDO is null) then
         INSERT INTO LOG_ALTERACAO_ANDROID (IDFILIAL, IDREPRESENTANTE, ID, TIPO, IDFOLHA, SITUACAO) VALUES (new.IDFILIAL, :VIDREPRESENTANTE, new.IDATIVIDADE, 'Atividade', NULL, 'A');
       else
         INSERT INTO LOG_ALTERACAO_ANDROID (IDFILIAL, IDREPRESENTANTE, ID, TIPO, IDFOLHA, SITUACAO) VALUES (new.IDFILIAL, :VIDREPRESENTANTE, new.IDATIVIDADE, 'Atividade', NULL, 'E');
     end
  end
end
^

/* Trigger: TRG_BANCO_FOR_BF_INSERT */
CREATE TRIGGER TRG_BANCO_FOR_BF_INSERT FOR BANCO_FORNECEDOR
ACTIVE BEFORE INSERT POSITION 0
AS
  declare variable vIDCONTROLE integer;
begin
   select max(B.IDCONTROLE)+1 from BANCO_FORNECEDOR B
     where B.IDFORNECEDOR = new.IDFORNECEDOR
    into :VIDCONTROLE;

  if (VIDCONTROLE is null) then
     new.IDCONTROLE = 1;
  else
     new.IDCONTROLE = :VIDCONTROLE;
end
^

/* Trigger: TRG_CHEQUES_BEFORE_INSERT */
CREATE TRIGGER TRG_CHEQUES_BEFORE_INSERT FOR CHEQUES
ACTIVE BEFORE INSERT POSITION 0
as
begin
   new.DTDIGITACAO = current_date;
end
^

/* Trigger: TRG_CIDADE_AF_INSERT */
CREATE TRIGGER TRG_CIDADE_AF_INSERT FOR CIDADE
ACTIVE AFTER INSERT POSITION 0
AS
declare variable VIDREPRESENTANTE smallint;
begin
  for select R.IDREPRESENTANTE from REPRESENTANTE R
        where R.EXCLUIDO is null
          and R.USA_ANDROID = 'S'
            into :VIDREPRESENTANTE
  do
  begin
     if (not exists(select L.IDFILIAL from LOG_ALTERACAO_ANDROID L
                     where L.IDFILIAL = new.IDFILIAL
                       and L.ID = new.IDCIDADE
                       and L.TIPO = 'Cidade'
                       and L.IDREPRESENTANTE = :VIDREPRESENTANTE)) then
     begin
       INSERT INTO LOG_ALTERACAO_ANDROID (IDFILIAL, IDREPRESENTANTE, ID, TIPO, IDFOLHA, SITUACAO) VALUES (new.IDFILIAL, :VIDREPRESENTANTE, new.IDCIDADE, 'Cidade', NULL, 'I');
     end
  end
end
^

/* Trigger: TRG_CIDADE_AF_UPDATE */
CREATE TRIGGER TRG_CIDADE_AF_UPDATE FOR CIDADE
ACTIVE AFTER UPDATE POSITION 0
AS
declare variable VIDREPRESENTANTE smallint;
begin
  for select R.IDREPRESENTANTE from REPRESENTANTE R
        where R.EXCLUIDO is null
          and R.USA_ANDROID = 'S'
            into :VIDREPRESENTANTE
  do
  begin
     if (not exists(select L.IDFILIAL from LOG_ALTERACAO_ANDROID L
                     where L.IDFILIAL = new.IDFILIAL
                       and L.ID = new.IDCIDADE
                       and L.TIPO = 'Cidade'
                       and L.IDREPRESENTANTE = :VIDREPRESENTANTE)) then
     begin
       if (new.EXCLUIDO is null) then
         INSERT INTO LOG_ALTERACAO_ANDROID (IDFILIAL, IDREPRESENTANTE, ID, TIPO, IDFOLHA, SITUACAO) VALUES (new.IDFILIAL, :VIDREPRESENTANTE, new.IDCIDADE, 'Cidade', NULL, 'A');
       else
         INSERT INTO LOG_ALTERACAO_ANDROID (IDFILIAL, IDREPRESENTANTE, ID, TIPO, IDFOLHA, SITUACAO) VALUES (new.IDFILIAL, :VIDREPRESENTANTE, new.IDCIDADE, 'Cidade', NULL, 'E');
     end
  end
end
^

/* Trigger: TRG_CIDADE_BF_INSERT */
CREATE TRIGGER TRG_CIDADE_BF_INSERT FOR CIDADE
INACTIVE BEFORE INSERT POSITION 0
AS
declare variable mContador smallint;
declare variable mIDCIDADE integer;
declare variable VTRATAR_CLIENTES_REP varchar(1);
declare variable vIDCIDADE varchar(5);
begin
  if (not new.CIDADE_NOVA = 'I') then
  begin
      select F.TRATAR_CLIENTES_REP, F.IDCIDADE from FILIAL F
        where F.IDFILIAL = new.IDFILIAL
        into :VTRATAR_CLIENTES_REP, :VIDCIDADE;
    
    
      if ((:VTRATAR_CLIENTES_REP <> 'S') and (:VIDCIDADE = 'TRUE')) then
      begin
          mContador = 0;
          while (mContador < 1)
          do
          begin
              mIDCIDADE = gen_id(GEN_CIDADE_ID,1);
              if (not exists(select C.IDCIDADE from CIDADE C
                           where C.IDCIDADE = :MIDCIDADE)) then
              begin
                new.IDCIDADE = :MIDCIDADE;
                MCONTADOR = 1;
              end
          end
      end
  end
end
^

/* Trigger: TRG_CIDADE_NOVA_INSERT */
CREATE TRIGGER TRG_CIDADE_NOVA_INSERT FOR CIDADE
ACTIVE BEFORE INSERT POSITION 0
AS
begin
  if (not new.CIDADE_NOVA is null) then
  begin
    if (coalesce(new.CIDADE_NOVA,'') <> 'I') then
      new.CIDADE_NOVA = 'A';
  end
end
^

/* Trigger: TRG_CIDADE_NOVA_UPDATE */
CREATE TRIGGER TRG_CIDADE_NOVA_UPDATE FOR CIDADE
ACTIVE BEFORE UPDATE POSITION 0
AS
begin
  if (not new.CIDADE_NOVA is null) then
  begin
    if (coalesce(new.CIDADE_NOVA,'') <> 'I') then
      new.CIDADE_NOVA = 'A';
  end
end
^

/* Trigger: TRG_CLIENTE_AF_INSERT */
CREATE TRIGGER TRG_CLIENTE_AF_INSERT FOR CLIENTE
ACTIVE AFTER INSERT POSITION 0
as
begin
   -- SE O PEDIDO VEM DO PALM
   if (not new.IDREPRESENTANTE_PALM is null) then begin
        insert into REPCLIENTE
          (IDFILIAL, IDCLIENTE, IDREPRESENTANTE, FLAG)
        values (new.IDFILIAL, new.IDCLIENTE, new.IDREPRESENTANTE_PALM, null);
   end
end
^

/* Trigger: TRG_CLIENTE_AF_INSERT_ANDROID */
CREATE TRIGGER TRG_CLIENTE_AF_INSERT_ANDROID FOR CLIENTE
ACTIVE AFTER INSERT POSITION 0
AS
declare variable vLEVAR_TODOS_CLIENTES_MOB varchar(1);
declare variable vIDREPRESENTANTE integer;
begin
  select F.LEVAR_TODOS_CLIENTES_MOB from FILIAL F
    where F.IDFILIAL = new.IDFILIAL
       into :VLEVAR_TODOS_CLIENTES_MOB;

  if (:VLEVAR_TODOS_CLIENTES_MOB = 'N') then
  begin
    for select R.IDREPRESENTANTE from REPCLIENTE R
         where R.IDCLIENTE = new.IDCLIENTE
           into :VIDREPRESENTANTE
    do
    begin
      if (not exists(select L.IDFILIAL from LOG_ALTERACAO_ANDROID L
                      where L.IDFILIAL = new.IDFILIAL
                        and L.ID = new.IDCLIENTE
                        and L.TIPO = 'Cliente'
                        and L.IDREPRESENTANTE = :VIDREPRESENTANTE)) then
      begin
         INSERT INTO LOG_ALTERACAO_ANDROID (IDFILIAL, IDREPRESENTANTE, ID, TIPO, IDFOLHA, SITUACAO) VALUES (new.IDFILIAL,:VIDREPRESENTANTE, new.IDCLIENTE, 'Cliente', NULL, 'I');
      end
    end
  end
  else
  begin
    if (:VLEVAR_TODOS_CLIENTES_MOB = 'S') then
    begin
      for select R.IDREPRESENTANTE from REPRESENTANTE R
          where R.EXCLUIDO is null
            and R.USA_ANDROID = 'S'
          into :VIDREPRESENTANTE
      do
      begin
          if (not exists(select L.IDFILIAL from LOG_ALTERACAO_ANDROID L
                          where L.IDFILIAL = new.IDFILIAL
                            and L.ID = new.IDCLIENTE
                            and L.TIPO = 'Cliente'
                            and L.IDREPRESENTANTE = :VIDREPRESENTANTE)) then
          begin
             INSERT INTO LOG_ALTERACAO_ANDROID (IDFILIAL, IDREPRESENTANTE, ID, TIPO, IDFOLHA, SITUACAO) VALUES (new.IDFILIAL,:VIDREPRESENTANTE, new.IDCLIENTE, 'Cliente', NULL, 'I');
          end
      end
    end
  end

  for select R.IDREPRESENTANTE from REPRESENTANTE R
      where R.EXCLUIDO is null
        and R.USA_ANDROID = 'S'
      into :VIDREPRESENTANTE
  do
  begin
      if (not exists(select L.IDFILIAL from LOG_ALTERACAO_ANDROID L
                      where L.IDFILIAL = new.IDFILIAL
                        and L.ID = new.IDCLIENTE
                        and L.TIPO = 'CPF/CNPJ'
                        and L.IDREPRESENTANTE = :VIDREPRESENTANTE)) then
      begin
         INSERT INTO LOG_ALTERACAO_ANDROID (IDFILIAL, IDREPRESENTANTE, ID, TIPO, IDFOLHA, SITUACAO) VALUES (new.IDFILIAL,:VIDREPRESENTANTE, new.IDCLIENTE, 'CPF/CNPJ', NULL, 'I');
      end
  end

end
^

/* Trigger: TRG_CLIENTE_AF_UPDATE */
CREATE TRIGGER TRG_CLIENTE_AF_UPDATE FOR CLIENTE
ACTIVE AFTER UPDATE POSITION 0
AS
begin
  if (not new.idrepresentante_palm is null) then
  begin
    update REPCLIENTE R
      set R.idrepresentante = new.idrepresentante_palm
     where R.idfilial = new.idfilial
       and not exists(select RC.IDFILIAL from REPCLIENTE RC
                      where rc.idfilial = new.idfilial
                         and rc.idcliente = new.idcliente
                         and rc.idrepresentante = new.idrepresentante_palm)
       and R.idcliente = new.idcliente;

  end
end
^

/* Trigger: TRG_CLIENTE_AF_UPDATE_ANDROID */
CREATE TRIGGER TRG_CLIENTE_AF_UPDATE_ANDROID FOR CLIENTE
ACTIVE AFTER UPDATE POSITION 0
AS
declare variable vLEVAR_TODOS_CLIENTES_MOB varchar(1);
declare variable vIDREPRESENTANTE integer;
begin
  select F.LEVAR_TODOS_CLIENTES_MOB from FILIAL F
    where F.IDFILIAL = new.IDFILIAL
       into :VLEVAR_TODOS_CLIENTES_MOB;

  if (:VLEVAR_TODOS_CLIENTES_MOB = 'N') then
  begin
    for select R.IDREPRESENTANTE from REPCLIENTE R
         where R.IDCLIENTE = new.IDCLIENTE
           into :VIDREPRESENTANTE
    do
    begin
      /* MUDANÇA DE CPF PARA CNPJ OU VICE VERSA E MUDANÇA DE CPF PARA OUTRO CPF E MUDANÇA DE CNPJ PARA OUTRO CNPJ */
         if (new.EXCLUIDO is null) then
         begin
             if ((new.TIPOCLIENTE <> old.TIPOCLIENTE) or (new.CPF <> old.CPF) or (new.CNPJ <> old.CNPJ)) then
             begin
               INSERT INTO LOG_ALTERACAO_ANDROID (IDFILIAL, IDREPRESENTANTE, ID, TIPO, IDFOLHA, SITUACAO) VALUES (old.IDFILIAL,:VIDREPRESENTANTE, old.IDCLIENTE, 'Cliente', NULL, 'E');
               INSERT INTO LOG_ALTERACAO_ANDROID (IDFILIAL, IDREPRESENTANTE, ID, TIPO, IDFOLHA, SITUACAO) VALUES (new.IDFILIAL,:VIDREPRESENTANTE, new.IDCLIENTE, 'Cliente', NULL, 'I');
             end
         end

      /* FIM DO CÓDIGO */

      if (not exists(select L.IDFILIAL from LOG_ALTERACAO_ANDROID L
                      where L.IDFILIAL = new.IDFILIAL
                        and L.ID = new.IDCLIENTE
                        and L.TIPO = 'Cliente'
                        and L.IDREPRESENTANTE = :VIDREPRESENTANTE)) then
      begin
         if (new.EXCLUIDO is null) then
           INSERT INTO LOG_ALTERACAO_ANDROID (IDFILIAL, IDREPRESENTANTE, ID, TIPO, IDFOLHA, SITUACAO) VALUES (new.IDFILIAL,:VIDREPRESENTANTE, new.IDCLIENTE, 'Cliente', NULL, 'A');
         else
           INSERT INTO LOG_ALTERACAO_ANDROID (IDFILIAL, IDREPRESENTANTE, ID, TIPO, IDFOLHA, SITUACAO) VALUES (new.IDFILIAL,:VIDREPRESENTANTE, new.IDCLIENTE, 'Cliente', NULL, 'E');
      end
    end
  end
  else
  begin
    if (:VLEVAR_TODOS_CLIENTES_MOB = 'S') then
    begin
      for select R.IDREPRESENTANTE from REPRESENTANTE R
          where R.EXCLUIDO is null
            and R.USA_ANDROID = 'S'
          into :VIDREPRESENTANTE
      do
      begin
      /* MUDANÇA DE CPF PARA CNPJ OU VICE VERSA E MUDANÇA DE CPF PARA OUTRO CPF E MUDANÇA DE CNPJ PARA OUTRO CNPJ */
         if (new.EXCLUIDO is null) then
         begin
             if ((new.TIPOCLIENTE <> old.TIPOCLIENTE) or (new.CPF <> old.CPF) or (new.CNPJ <> old.CNPJ)) then
             begin
               INSERT INTO LOG_ALTERACAO_ANDROID (IDFILIAL, IDREPRESENTANTE, ID, TIPO, IDFOLHA, SITUACAO) VALUES (old.IDFILIAL,:VIDREPRESENTANTE, old.IDCLIENTE, 'Cliente', NULL, 'E');
               INSERT INTO LOG_ALTERACAO_ANDROID (IDFILIAL, IDREPRESENTANTE, ID, TIPO, IDFOLHA, SITUACAO) VALUES (new.IDFILIAL,:VIDREPRESENTANTE, new.IDCLIENTE, 'Cliente', NULL, 'I');
             end
         end

      /* FIM DO CÓDIGO */

          if (not exists(select L.IDFILIAL from LOG_ALTERACAO_ANDROID L
                          where L.IDFILIAL = new.IDFILIAL
                            and L.ID = new.IDCLIENTE
                            and L.TIPO = 'Cliente'
                            and L.IDREPRESENTANTE = :VIDREPRESENTANTE)) then
          begin
             if (new.EXCLUIDO is null) then
               INSERT INTO LOG_ALTERACAO_ANDROID (IDFILIAL, IDREPRESENTANTE, ID, TIPO, IDFOLHA, SITUACAO) VALUES (new.IDFILIAL,:VIDREPRESENTANTE, new.IDCLIENTE, 'Cliente', NULL, 'A');
             else
               INSERT INTO LOG_ALTERACAO_ANDROID (IDFILIAL, IDREPRESENTANTE, ID, TIPO, IDFOLHA, SITUACAO) VALUES (new.IDFILIAL,:VIDREPRESENTANTE, new.IDCLIENTE, 'Cliente', NULL, 'E');
          end
      end
    end
  end

  if ((new.CPF <> old.CPF) or (new.CNPJ <> old.CNPJ)) then
  begin
      for select R.IDREPRESENTANTE from REPRESENTANTE R
          where R.EXCLUIDO is null
            and R.USA_ANDROID = 'S'
          into :VIDREPRESENTANTE
      do
      begin
          if (not exists(select L.IDFILIAL from LOG_ALTERACAO_ANDROID L
                          where L.IDFILIAL = new.IDFILIAL
                            and L.ID = new.IDCLIENTE
                            and L.TIPO = 'CPF/CNPJ'
                            and L.IDREPRESENTANTE = :VIDREPRESENTANTE)) then
          begin
             INSERT INTO LOG_ALTERACAO_ANDROID (IDFILIAL, IDREPRESENTANTE, ID, TIPO, IDFOLHA, SITUACAO) VALUES (new.IDFILIAL,:VIDREPRESENTANTE, new.IDCLIENTE, 'CPF/CNPJ', NULL, 'A');
          end
      end
  end
end
^

/* Trigger: TRG_CLIENTE_BF_INSERT */
CREATE TRIGGER TRG_CLIENTE_BF_INSERT FOR CLIENTE
INACTIVE BEFORE INSERT POSITION 0
AS
declare variable mContador smallint;
declare variable mIDCLIENTE integer;
declare variable VTRATAR_CLIENTES_REP varchar(1);
declare variable vIDCLIENTE varchar(5);
begin
  select F.TRATAR_CLIENTES_REP, F.IDCLIENTE from FILIAL F
    where F.IDFILIAL = new.IDFILIAL
    into :VTRATAR_CLIENTES_REP, :VIDCLIENTE;


  if ((:VTRATAR_CLIENTES_REP <> 'S') and (:VIDCLIENTE = 'TRUE')) then
  begin
      mContador = 0;
      while (mContador < 1)
      do
      begin
          mIDCLIENTE = gen_id(GEN_CLIENTE_ID,1);
          if (not exists(select C.IDCLIENTE from CLIENTE C
                       where C.IDCLIENTE = :MIDCLIENTE)) then
          begin
            new.IDCLIENTE = :MIDCLIENTE;
            MCONTADOR = 1;
          end
      end
  end
end
^

/* Trigger: TRG_CLIENTE_BF_INS_ANDROID */
CREATE TRIGGER TRG_CLIENTE_BF_INS_ANDROID FOR CLIENTE
ACTIVE BEFORE INSERT POSITION 0
AS
declare variable vIDCLIENTE integer;
begin
   if ((new.idcliente = 0) and (new.idcliente_palm <> 0) and (new.idrepresentante_palm <> 0)) then
   begin
     select max(c.idcliente)+1 from CLIENTE C
        into :vidcliente;

        if(:vidcliente is null) then vidcliente = 1;

        new.idcliente = :vidcliente;
   end
end
^

/* Trigger: TRG_CLIENTE_DELETE */
CREATE TRIGGER TRG_CLIENTE_DELETE FOR CLIENTE
ACTIVE AFTER DELETE POSITION 0
as
/* code here */
begin
   delete from REPCLIENTE R
      where R.IDCLIENTE = old.IDCLIENTE;

   delete from PAGTOCLIENTE P
      where P.IDCLIENTE = old.IDCLIENTE;
        
   delete from CONDPGTCLIENTE C
      where C.IDCLIENTE = old.IDCLIENTE;
end
^

/* Trigger: TRG_CLIENTE_NOVO_INSERT */
CREATE TRIGGER TRG_CLIENTE_NOVO_INSERT FOR CLIENTE
ACTIVE BEFORE INSERT POSITION 0
AS
begin
  if (not new.CLIENTE_NOVO is null) then
  begin
    if (coalesce(new.CLIENTE_NOVO,'') <> 'I') then
       new.CLIENTE_NOVO = 'A';
  end
end
^

/* Trigger: TRG_CLIENTE_NOVO_UPDATE */
CREATE TRIGGER TRG_CLIENTE_NOVO_UPDATE FOR CLIENTE
ACTIVE BEFORE UPDATE POSITION 0
AS
begin
  if (not new.CLIENTE_NOVO is null) then
  begin
    if (coalesce(new.CLIENTE_NOVO,'') <> 'I') then
       new.CLIENTE_NOVO = 'A';
  end
end
^

/* Trigger: TRG_CLIENTE_PRODUTO_AF_INSERT */
CREATE TRIGGER TRG_CLIENTE_PRODUTO_AF_INSERT FOR CLIENTE_PRODUTO
ACTIVE AFTER INSERT POSITION 0
AS
declare variable vIDREPRESENTANTE smallint;
begin
  for select R.IDREPRESENTANTE from REPRESENTANTE R
        where R.EXCLUIDO is null
          and R.USA_ANDROID = 'S'
            into :VIDREPRESENTANTE
  do
  begin
     if (not exists(select L.IDFILIAL from LOG_ALTERACAO_ANDROID L
                     where L.IDFILIAL = new.IDFILIAL
                       and L.ID = new.IDCLIENTE
                       and L.ID_2 = new.IDPRODUTO
                       and L.TIPO = 'Cliente Produto'
                       and L.IDREPRESENTANTE = :VIDREPRESENTANTE)) then
     begin
         INSERT INTO LOG_ALTERACAO_ANDROID (IDFILIAL, IDREPRESENTANTE, ID, TIPO, IDFOLHA, SITUACAO, ID_2) VALUES (new.IDFILIAL, :VIDREPRESENTANTE, new.IDCLIENTE, 'Cliente Produto', NULL, 'I', new.IDPRODUTO);
     end
  end
end
^

/* Trigger: TRG_CLIENTE_PRODUTO_AF_UPDATE */
CREATE TRIGGER TRG_CLIENTE_PRODUTO_AF_UPDATE FOR CLIENTE_PRODUTO
ACTIVE AFTER UPDATE POSITION 0
AS
declare variable vIDREPRESENTANTE smallint;
begin
  for select R.IDREPRESENTANTE from REPRESENTANTE R
        where R.EXCLUIDO is null
          and R.USA_ANDROID = 'S'
            into :VIDREPRESENTANTE
  do
  begin
     if (not exists(select L.IDFILIAL from LOG_ALTERACAO_ANDROID L
                     where L.IDFILIAL = new.IDFILIAL
                       and L.ID = new.IDCLIENTE
                       and L.ID_2 = new.IDPRODUTO
                       and L.TIPO = 'Cliente Produto'
                       and L.IDREPRESENTANTE = :VIDREPRESENTANTE)) then
     begin
         INSERT INTO LOG_ALTERACAO_ANDROID (IDFILIAL, IDREPRESENTANTE, ID, TIPO, IDFOLHA, SITUACAO, ID_2) VALUES (new.IDFILIAL, :VIDREPRESENTANTE, new.IDCLIENTE, 'Cliente Produto', NULL, 'A', new.IDPRODUTO);
     end
  end
end
^

/* Trigger: TRG_CLI_BF_INSERT_PRE_CAM_NO */
CREATE TRIGGER TRG_CLI_BF_INSERT_PRE_CAM_NO FOR CLIENTE
ACTIVE BEFORE INSERT POSITION 0
AS
declare variable vTRATAR_CLI_NOVOS varchar(1);
begin
  select F.TRATAR_CLI_NOVOS_MOBILE from FILIAL F
    where F.IDFILIAL = new.IDFILIAL
      into :VTRATAR_CLI_NOVOS;

  if (VTRATAR_CLI_NOVOS is null) then VTRATAR_CLI_NOVOS = 'N';

  if (new.situacaocredito is null) then
  begin
    if (VTRATAR_CLI_NOVOS = 'S') then
      new.SITUACAOCREDITO = 'N';
    else
      new.situacaocredito = 'L';
  end

  if (new.limitecredito is null) then
    new.limitecredito = 1500;

  if (new.contribuinte is null) then
    new.contribuinte = 'N';
end
^

/* Trigger: TRG_CONDICAOPAGTO_AF_INSERT */
CREATE TRIGGER TRG_CONDICAOPAGTO_AF_INSERT FOR CONDICAOPAGTO
ACTIVE AFTER INSERT POSITION 0
AS
declare variable VIDREPRESENTANTE smallint;
begin
  for select R.IDREPRESENTANTE from REPRESENTANTE R
        where R.EXCLUIDO is null
          and R.USA_ANDROID = 'S'
            into :VIDREPRESENTANTE
  do
  begin
     if (not exists(select L.IDFILIAL from LOG_ALTERACAO_ANDROID L
                     where L.IDFILIAL = new.IDFILIAL
                       and L.ID = new.IDCONDICAOPAGTO
                       and L.TIPO = 'Condição de Pagto'
                       and L.IDREPRESENTANTE = :VIDREPRESENTANTE)) then
     begin
       INSERT INTO LOG_ALTERACAO_ANDROID (IDFILIAL, IDREPRESENTANTE, ID, TIPO, IDFOLHA, SITUACAO) VALUES (new.IDFILIAL, :VIDREPRESENTANTE, new.IDCONDICAOPAGTO, 'Condição de Pagto', NULL, 'I');
     end
  end
end
^

/* Trigger: TRG_CONDICAOPAGTO_AF_UPDATE */
CREATE TRIGGER TRG_CONDICAOPAGTO_AF_UPDATE FOR CONDICAOPAGTO
ACTIVE AFTER UPDATE POSITION 0
AS
declare variable VIDREPRESENTANTE smallint;
begin
  for select R.IDREPRESENTANTE from REPRESENTANTE R
        where R.EXCLUIDO is null
          and R.USA_ANDROID = 'S'
            into :VIDREPRESENTANTE
  do
  begin
     if (not exists(select L.IDFILIAL from LOG_ALTERACAO_ANDROID L
                     where L.IDFILIAL = new.IDFILIAL
                       and L.ID = new.IDCONDICAOPAGTO
                       and L.TIPO = 'Condição de Pagto'
                       and L.IDREPRESENTANTE = :VIDREPRESENTANTE)) then
     begin
       if (new.EXCLUIDO is null) then
         INSERT INTO LOG_ALTERACAO_ANDROID (IDFILIAL, IDREPRESENTANTE, ID, TIPO, IDFOLHA, SITUACAO) VALUES (new.IDFILIAL, :VIDREPRESENTANTE, new.IDCONDICAOPAGTO, 'Condição de Pagto', NULL, 'A');
       else
         INSERT INTO LOG_ALTERACAO_ANDROID (IDFILIAL, IDREPRESENTANTE, ID, TIPO, IDFOLHA, SITUACAO) VALUES (new.IDFILIAL, :VIDREPRESENTANTE, new.IDCONDICAOPAGTO, 'Condição de Pagto', NULL, 'E');
     end
  end
end
^

/* Trigger: TRG_CONDPGTCLIENTE_AF_INSERT */
CREATE TRIGGER TRG_CONDPGTCLIENTE_AF_INSERT FOR CONDPGTCLIENTE
ACTIVE AFTER INSERT POSITION 0
AS
declare variable VN_ESCOLHER_CONDICAO varchar(1);
declare variable vIDREPRESENTANTE smallint;
begin
  select F.N_ESCOLHER_CONDICAO from FILIAL F
    where F.IDFILIAL = new.IDFILIAL
      into :VN_ESCOLHER_CONDICAO;

  if (VN_ESCOLHER_CONDICAO is null) then VN_ESCOLHER_CONDICAO = 'N';

  if (VN_ESCOLHER_CONDICAO = 'S') then
  begin
      for select R.IDREPRESENTANTE from REPRESENTANTE R
            where R.EXCLUIDO is null
              and R.USA_ANDROID = 'S'
                into :VIDREPRESENTANTE
      do
      begin
         if (not exists(select L.IDFILIAL from LOG_ALTERACAO_ANDROID L
                         where L.IDFILIAL = new.IDFILIAL
                           and L.ID = new.IDCLIENTE
                           and L.ID_2 = new.IDCONDICAOPAGTO
                           and L.TIPO = 'Cond. Pagto Cliente'
                           and L.IDREPRESENTANTE = :VIDREPRESENTANTE)) then
         begin
             INSERT INTO LOG_ALTERACAO_ANDROID (IDFILIAL, IDREPRESENTANTE, ID, TIPO, IDFOLHA, SITUACAO, ID_2) VALUES (new.IDFILIAL, :VIDREPRESENTANTE, new.IDCLIENTE, 'Cond. Pagto Cliente', NULL, 'I', new.IDCONDICAOPAGTO);
         end
      end
  end
end
^

/* Trigger: TRG_CONDPGTCLIENTE_AF_UPDATE */
CREATE TRIGGER TRG_CONDPGTCLIENTE_AF_UPDATE FOR CONDPGTCLIENTE
ACTIVE AFTER UPDATE POSITION 0
AS
declare variable VN_ESCOLHER_CONDICAO varchar(1);
declare variable vIDREPRESENTANTE smallint;
begin
  select F.N_ESCOLHER_CONDICAO from FILIAL F
    where F.IDFILIAL = new.IDFILIAL
      into :VN_ESCOLHER_CONDICAO;

  if (VN_ESCOLHER_CONDICAO is null) then VN_ESCOLHER_CONDICAO = 'N';

  if (VN_ESCOLHER_CONDICAO = 'S') then
  begin
      for select R.IDREPRESENTANTE from REPRESENTANTE R
            where R.EXCLUIDO is null
              and R.USA_ANDROID = 'S'
                into :VIDREPRESENTANTE
      do
      begin
         if (new.IDCONDICAOPAGTO <> old.IDCONDICAOPAGTO) then
         begin
             INSERT INTO LOG_ALTERACAO_ANDROID (IDFILIAL, IDREPRESENTANTE, ID, TIPO, IDFOLHA, SITUACAO, ID_2) VALUES (old.IDFILIAL, :VIDREPRESENTANTE, old.IDCLIENTE, 'Cond. Pagto Cliente', NULL, 'E', old.IDCONDICAOPAGTO);

             if (not exists(select L.IDFILIAL from LOG_ALTERACAO_ANDROID L
                             where L.IDFILIAL = new.IDFILIAL
                               and L.ID = new.IDCLIENTE
                               and L.ID_2 = new.IDCONDICAOPAGTO
                               and L.TIPO = 'Cond. Pagto Cliente'
                               and L.IDREPRESENTANTE = :VIDREPRESENTANTE)) then
             begin
                 INSERT INTO LOG_ALTERACAO_ANDROID (IDFILIAL, IDREPRESENTANTE, ID, TIPO, IDFOLHA, SITUACAO, ID_2) VALUES (new.IDFILIAL, :VIDREPRESENTANTE, new.IDCLIENTE, 'Cond. Pagto Cliente', NULL, 'I', new.IDCONDICAOPAGTO);
             end
         end
      end
  end
end
^

/* Trigger: TRG_CONDPGTCLIENTE_BF_DELETE */
CREATE TRIGGER TRG_CONDPGTCLIENTE_BF_DELETE FOR CONDPGTCLIENTE
ACTIVE BEFORE DELETE POSITION 0
AS
declare variable VN_ESCOLHER_CONDICAO varchar(1);
declare variable vIDREPRESENTANTE smallint;
begin
  select F.N_ESCOLHER_CONDICAO from FILIAL F
    where F.IDFILIAL = old.IDFILIAL
      into :VN_ESCOLHER_CONDICAO;

  if (VN_ESCOLHER_CONDICAO is null) then VN_ESCOLHER_CONDICAO = 'N';

  if (VN_ESCOLHER_CONDICAO = 'S') then
  begin
      for select R.IDREPRESENTANTE from REPRESENTANTE R
            where R.EXCLUIDO is null
              and R.USA_ANDROID = 'S'
                into :VIDREPRESENTANTE
      do
      begin
         INSERT INTO LOG_ALTERACAO_ANDROID (IDFILIAL, IDREPRESENTANTE, ID, TIPO, IDFOLHA, SITUACAO, ID_2) VALUES (old.IDFILIAL, :VIDREPRESENTANTE, old.IDCLIENTE, 'Cond. Pagto Cliente', NULL, 'E', old.IDCONDICAOPAGTO);
      end
  end
end
^

/* Trigger: TRG_CONDPGTCLIENTE_BF_INSERT */
CREATE TRIGGER TRG_CONDPGTCLIENTE_BF_INSERT FOR CONDPGTCLIENTE
ACTIVE BEFORE INSERT POSITION 0
AS
declare variable vCLIENTE_NOVO varchar(1);
begin
  select C.CLIENTE_NOVO from CLIENTE C
    where C.IDCLIENTE = new.IDCLIENTE
       into :VCLIENTE_NOVO;

  if (:VCLIENTE_NOVO = 'I') then
    new.COND_NOVO = 'I';

end
^

/* Trigger: TRG_CONSIGNACAO_AF_UPDATE */
CREATE TRIGGER TRG_CONSIGNACAO_AF_UPDATE FOR CONSIGNACAO
ACTIVE AFTER UPDATE POSITION 0
AS
declare variable vVEND_TRABALHA_C_CONSIG varchar(1);
declare variable vIDPRODUTO integer;
begin
  select coalesce(R.CONTROLA_PRODUTO_REPRESENTANTE,'N') from REPRESENTANTE R
    where R.IDFILIAL = new.IDFILIAL
      and R.IDREPRESENTANTE = new.IDREPRESENTANTE
      and R.USA_ANDROID = 'S'
      into :VVEND_TRABALHA_C_CONSIG;

  if (VVEND_TRABALHA_C_CONSIG = 'S') then
  begin
     if (new.SITUACAO = 'A') then
     begin
       if (new.IDREPRESENTANTE <> old.IDREPRESENTANTE) then
       begin
         for select I.IDPRODUTO from ITENS_CONSIGNACAO I
           where I.IDFILIAL = new.IDFILIAL
             and I.IDCONSIGNACAO = new.IDCONSIGNACAO
               into :VIDPRODUTO
         do
         begin
           INSERT INTO LOG_ALTERACAO_ANDROID (IDFILIAL, IDREPRESENTANTE, ID, TIPO, IDFOLHA, SITUACAO, ID_2) VALUES (old.IDFILIAL, old.IDREPRESENTANTE, old.IDCONSIGNACAO, 'Itens Consignacao', NULL, 'E', :VIDPRODUTO);

           if (not exists(select L.IDFILIAL from LOG_ALTERACAO_ANDROID L
                           where L.IDFILIAL = new.IDFILIAL
                             and L.ID = new.IDCONSIGNACAO
                             and L.ID_2 = :VIDPRODUTO
                             and L.TIPO = 'Itens Consignacao'
                             and L.IDREPRESENTANTE = new.IDREPRESENTANTE)) then
           begin
               INSERT INTO LOG_ALTERACAO_ANDROID (IDFILIAL, IDREPRESENTANTE, ID, TIPO, IDFOLHA, SITUACAO, ID_2) VALUES (new.IDFILIAL, new.IDREPRESENTANTE, new.IDCONSIGNACAO, 'Itens Consignacao', NULL, 'I', :VIDPRODUTO);
           end
         end
       end

       if ((old.SITUACAO = 'I') and (new.SITUACAO = 'A')) then
       begin
         for select I.IDPRODUTO from ITENS_CONSIGNACAO I
           where I.IDFILIAL = new.IDFILIAL
             and I.IDCONSIGNACAO = new.IDCONSIGNACAO
               into :VIDPRODUTO
         do
         begin
            if (not exists(select L.IDFILIAL from LOG_ALTERACAO_ANDROID L
                            where L.IDFILIAL = new.IDFILIAL
                              and L.ID = new.IDCONSIGNACAO
                              and L.ID_2 = :VIDPRODUTO
                              and L.TIPO = 'Itens Consignacao'
                              and L.IDREPRESENTANTE = new.IDREPRESENTANTE)) then
            begin
                INSERT INTO LOG_ALTERACAO_ANDROID (IDFILIAL, IDREPRESENTANTE, ID, TIPO, IDFOLHA, SITUACAO, ID_2) VALUES (new.IDFILIAL, new.IDREPRESENTANTE, new.IDCONSIGNACAO, 'Itens Consignacao', NULL, 'I', :VIDPRODUTO);
            end
            else
            begin
              update LOG_ALTERACAO_ANDROID L
                set L.SITUACAO = 'I'
                where L.IDFILIAL = new.IDFILIAL
                  and L.ID = new.IDCONSIGNACAO
                  and L.ID_2 = :VIDPRODUTO
                  and L.TIPO = 'Itens Consignacao'
                  and L.IDREPRESENTANTE = new.IDREPRESENTANTE;
            end
         end

       end

     end
     else
     begin
       if ((old.SITUACAO = 'A') and (new.SITUACAO = 'I')) then
       begin
         for select I.IDPRODUTO from ITENS_CONSIGNACAO I
           where I.IDFILIAL = new.IDFILIAL
             and I.IDCONSIGNACAO = new.IDCONSIGNACAO
               into :VIDPRODUTO
         do
         begin
            if (not exists(select L.IDFILIAL from LOG_ALTERACAO_ANDROID L
                            where L.IDFILIAL = new.IDFILIAL
                              and L.ID = new.IDCONSIGNACAO
                              and L.ID_2 = :VIDPRODUTO
                              and L.TIPO = 'Itens Consignacao'
                              and L.IDREPRESENTANTE = new.IDREPRESENTANTE)) then
            begin
              INSERT INTO LOG_ALTERACAO_ANDROID (IDFILIAL, IDREPRESENTANTE, ID, TIPO, IDFOLHA, SITUACAO,ID_2) VALUES (new.IDFILIAL, new.IDREPRESENTANTE, new.IDCONSIGNACAO, 'Itens Consignacao', NULL, 'E', :VIDPRODUTO);
            end
            else
            begin
              update LOG_ALTERACAO_ANDROID L
                set L.SITUACAO = 'E'
                where L.IDFILIAL = new.IDFILIAL
                  and L.ID = new.IDCONSIGNACAO
                  and L.ID_2 = :VIDPRODUTO
                  and L.TIPO = 'Itens Consignacao'
                  and L.IDREPRESENTANTE = new.IDREPRESENTANTE;
            end
         end
       end
     end
  end
end
^

/* Trigger: TRG_CONSIGNACAO_BF_DELETE */
CREATE TRIGGER TRG_CONSIGNACAO_BF_DELETE FOR CONSIGNACAO
ACTIVE BEFORE DELETE POSITION 0
AS
declare variable vIDREPRESENTANTE smallint;
declare variable vVEND_TRABALHA_C_CONSIG varchar(1);
begin
/*  select F.VEND_TRABALHA_C_CONSIG from FILIAL F
    where F.IDFILIAL = old.IDFILIAL
      into :VVEND_TRABALHA_C_CONSIG;

  if (VVEND_TRABALHA_C_CONSIG = 'S') then
  begin
     if (old.SITUACAO = 'A') then
     begin
       for select I.IDPRODUTO from ITENS_CONSIGNACAO I
         where I.IDFILIAL = old.IDFILIAL
           and I.IDCONSIGNACAO = new.IDCONSIGNACAO
             into :VIDPRODUTO
       do
       begin
           INSERT INTO LOG_ALTERACAO_ANDROID (IDFILIAL, IDREPRESENTANTE, ID, TIPO, IDFOLHA, SITUACAO) VALUES (old.IDFILIAL, old.IDREPRESENTANTE, old.IDCONSIGNACAO, 'Consignacao', NULL, 'E');
       end
     end
  end */
end
^

/* Trigger: TRG_CONVENIO_AF_INSERT */
CREATE TRIGGER TRG_CONVENIO_AF_INSERT FOR CONVENIO
ACTIVE AFTER INSERT POSITION 0
AS
declare variable VIDREPRESENTANTE smallint;
begin
  for select R.IDREPRESENTANTE from REPRESENTANTE R
        where R.EXCLUIDO is null
          and R.USA_ANDROID = 'S'
            into :VIDREPRESENTANTE
  do
  begin
     if (not exists(select L.IDFILIAL from LOG_ALTERACAO_ANDROID L
                     where L.IDFILIAL = new.IDFILIAL
                       and L.ID = new.IDCONVENIO
                       and L.TIPO = 'Convenio'
                       and L.IDREPRESENTANTE = :VIDREPRESENTANTE)) then
     begin
       INSERT INTO LOG_ALTERACAO_ANDROID (IDFILIAL, IDREPRESENTANTE, ID, TIPO, IDFOLHA, SITUACAO) VALUES (new.IDFILIAL, :VIDREPRESENTANTE, new.IDCONVENIO, 'Convenio', NULL, 'I');
     end
  end
end
^

/* Trigger: TRG_CONVENIO_AF_UPDATE */
CREATE TRIGGER TRG_CONVENIO_AF_UPDATE FOR CONVENIO
ACTIVE AFTER UPDATE POSITION 0
AS
declare variable VIDREPRESENTANTE smallint;
begin
  for select R.IDREPRESENTANTE from REPRESENTANTE R
        where R.EXCLUIDO is null
          and R.USA_ANDROID = 'S'
            into :VIDREPRESENTANTE
  do
  begin
     if (not exists(select L.IDFILIAL from LOG_ALTERACAO_ANDROID L
                     where L.IDFILIAL = new.IDFILIAL
                       and L.ID = new.IDCONVENIO
                       and L.TIPO = 'Convenio'
                       and L.IDREPRESENTANTE = :VIDREPRESENTANTE)) then
     begin
       if (new.EXCLUIDO is null) then
         INSERT INTO LOG_ALTERACAO_ANDROID (IDFILIAL, IDREPRESENTANTE, ID, TIPO, IDFOLHA, SITUACAO) VALUES (new.IDFILIAL, :VIDREPRESENTANTE, new.IDCONVENIO, 'Convenio', NULL, 'A');
       else
         INSERT INTO LOG_ALTERACAO_ANDROID (IDFILIAL, IDREPRESENTANTE, ID, TIPO, IDFOLHA, SITUACAO) VALUES (new.IDFILIAL, :VIDREPRESENTANTE, new.IDCONVENIO, 'Convenio', NULL, 'E');
     end
  end
end
^

/* Trigger: TRG_DEPOSITO_BF_DELETE */
CREATE TRIGGER TRG_DEPOSITO_BF_DELETE FOR DEPOSITO
ACTIVE BEFORE DELETE POSITION 0
AS
begin
   delete from ITENSDEPOSITO IT
      where IT.IDFILIAL = IT.IDFILIAL
        and IT.IDDEPOSITO = old.IDDEPOSITO;
end
^

/* Trigger: TRG_DEPOSITO_BF_INSERT */
CREATE TRIGGER TRG_DEPOSITO_BF_INSERT FOR DEPOSITO
ACTIVE BEFORE INSERT POSITION 0
as
  declare variable VIDPRODUTO integer;
  declare variable vQTDEATUAL numeric(10,3);
begin
   for select PR.IDPRODUTO, PR.QTDEATUAL from PRODUTO PR
      where PR.IDFILIAL = new.IDFILIAL
       into :vIDPRODUTO, :vQTDEATUAL
   do begin
      insert into
       ITENSDEPOSITO (IDFILIAL,IDDEPOSITO,IDPRODUTO,QTDE_ATUAL)
              values (new.IDFILIAL,new.IDDEPOSITO,:VIDPRODUTO,:VQTDEATUAL);
   end
end
^

/* Trigger: TRG_DEVOLUCAO_AF_INSERT_AND */
CREATE TRIGGER TRG_DEVOLUCAO_AF_INSERT_AND FOR DEVOLUCAO
ACTIVE AFTER INSERT POSITION 0
AS
declare variable VUSA_ANDROID varchar(1);
begin
  select R.USA_ANDROID from REPRESENTANTE R
     where R.IDREPRESENTANTE = new.IDREPRESENTANTE
      into :VUSA_ANDROID;

  if (VUSA_ANDROID = 'S') then
  begin
    if (new.SITUACAOPEDIDO = 'V') then
    begin
      if (new.TOTALPEDIDO <> 0) then
      begin
         if (not exists(select L.IDFILIAL from LOG_ALTERACAO_ANDROID L
                    where L.IDFILIAL = new.IDFILIAL
                      and L.ID = new.IDPEDIDO
                      and L.ID_2 = new.IDFOLHA
                      and L.TIPO = 'Devolução'
                      and L.IDREPRESENTANTE = new.IDREPRESENTANTE)) then
         begin
           INSERT INTO LOG_ALTERACAO_ANDROID (IDFILIAL, IDREPRESENTANTE, ID, TIPO, IDFOLHA, SITUACAO, ID_2) VALUES (new.IDFILIAL, new.IDREPRESENTANTE, new.IDPEDIDO, 'Devolução', NULL, 'I', new.IDFOLHA);
         end
         else
         begin
           update LOG_ALTERACAO_ANDROID L
             set L.SITUACAO = 'I'
            where L.IDFILIAL = new.IDFILIAL
              and L.ID = new.IDPEDIDO
              and L.ID_2 = new.IDFOLHA
              and L.TIPO = 'Devolução'
              and L.IDREPRESENTANTE = new.IDREPRESENTANTE;
         end
      end
    end
  end
end
^

/* Trigger: TRG_DEVOLUCAO_AF_UPDATE_AND */
CREATE TRIGGER TRG_DEVOLUCAO_AF_UPDATE_AND FOR DEVOLUCAO
ACTIVE AFTER UPDATE POSITION 0
AS
declare variable vUSA_ANDROID varchar(1);
begin
  select R.USA_ANDROID from REPRESENTANTE R
     where R.IDREPRESENTANTE = new.IDREPRESENTANTE
      into :VUSA_ANDROID;

  if (VUSA_ANDROID = 'S') then
  begin
    if (new.SITUACAOPEDIDO = 'V') then
    begin
      if (new.TOTALPEDIDO <> 0) then
      begin
         if (not exists(select L.IDFILIAL from LOG_ALTERACAO_ANDROID L
                    where L.IDFILIAL = new.IDFILIAL
                      and L.ID = new.IDPEDIDO
                      and L.ID_2 = new.IDFOLHA
                      and L.TIPO = 'Devolução'
                      and L.IDREPRESENTANTE = new.IDREPRESENTANTE)) then
         begin
           INSERT INTO LOG_ALTERACAO_ANDROID (IDFILIAL, IDREPRESENTANTE, ID, TIPO, IDFOLHA, SITUACAO, ID_2) VALUES (new.IDFILIAL, new.IDREPRESENTANTE, new.IDPEDIDO, 'Devolução', NULL, 'A', new.IDFOLHA);
         end
      end
    end
  end
end
^

/* Trigger: TRG_DEVOLUCAO_BEFORE_INSERT */
CREATE TRIGGER TRG_DEVOLUCAO_BEFORE_INSERT FOR DEVOLUCAO
ACTIVE BEFORE INSERT POSITION 0
as
begin
   if (new.IDROMANEIO is null) then begin
      select P.IDROMANEIO from PEDIDO P
        where P.IDFILIAL = new.IDFILIAL
          and P.IDPEDIDO = new.IDPEDIDO
          and P.IDFOLHA = new.IDFOLHA
        into new.IDROMANEIO;
   end

   update PEDIDO P
      set new.TIPO_PEDIDO = P.TIPO_PEDIDO
    where P.IDFILIAL = new.IDFILIAL
      and P.IDPEDIDO = new.IDPEDIDO
      and P.IDFOLHA = new.IDFOLHA;

   if (new.IDROMANEIO = 0) then
       new.IDROMANEIO = null;
end
^

/* Trigger: TRG_DEVOLUCAO_BF_DELETE_AND */
CREATE TRIGGER TRG_DEVOLUCAO_BF_DELETE_AND FOR DEVOLUCAO
ACTIVE BEFORE DELETE POSITION 0
AS
declare variable vUSA_ANDROID varchar(1);
begin
  select R.USA_ANDROID from REPRESENTANTE R
     where R.IDREPRESENTANTE = old.IDREPRESENTANTE
      into :VUSA_ANDROID;

  if (VUSA_ANDROID = 'S') then
  begin
    if (old.SITUACAOPEDIDO = 'V') then
    begin
      if (old.TOTALPEDIDO <> 0) then
      begin
         if (not exists(select L.IDFILIAL from LOG_ALTERACAO_ANDROID L
                    where L.IDFILIAL = old.IDFILIAL
                      and L.ID = old.IDPEDIDO
                      and L.ID_2 = old.IDFOLHA
                      and L.TIPO = 'Devolução'
                      and L.IDREPRESENTANTE = old.IDREPRESENTANTE)) then
         begin
           INSERT INTO LOG_ALTERACAO_ANDROID (IDFILIAL, IDREPRESENTANTE, ID, TIPO, IDFOLHA, SITUACAO, ID_2) VALUES (old.IDFILIAL, old.IDREPRESENTANTE, old.IDPEDIDO, 'Devolução', NULL, 'E', old.IDFOLHA);
         end
         else
         begin
           update LOG_ALTERACAO_ANDROID L
             set L.SITUACAO = 'E'
            where L.IDFILIAL = old.IDFILIAL
              and L.ID = old.IDPEDIDO
              and L.ID_2 = old.IDFOLHA
              and L.TIPO = 'Devolução'
              and L.IDREPRESENTANTE = old.IDREPRESENTANTE;
         end
      end
    end
  end
end
^

/* Trigger: TRG_DEVOLUCAO_BF_UPDATE */
CREATE TRIGGER TRG_DEVOLUCAO_BF_UPDATE FOR DEVOLUCAO
ACTIVE BEFORE UPDATE POSITION 0
AS
begin
  if (new.NOTAFISCAL is null) then
    new.DATANOTAFISCAL = null;

   if (new.IDROMANEIO = 0) then
       new.IDROMANEIO = null;
end
^

/* Trigger: TRG_ENTRADA_DELETE */
CREATE TRIGGER TRG_ENTRADA_DELETE FOR ENTRADA
ACTIVE AFTER DELETE POSITION 0
as
  declare variable IDENTRADA integer;
begin
  select first 1 P.IDENTRADA from PAGAR P
    where P.IDFILIAL = old.IDFILIAL
      and P.IDPAGAR = old.IDNOTA
      and P.IDFORNECEDOR = old.IDFORNECEDOR
    into :IDENTRADA;

  if (not IDENTRADA is null) then begin
      delete from PAGAR P
         where P.IDFILIAL = old.IDFILIAL
           and P.IDFORNECEDOR = old.IDFORNECEDOR
           and P.IDENTRADA = old.IDNOTA;
  end
end
^

/* Trigger: TRG_ENTRADA_INSERT */
CREATE TRIGGER TRG_ENTRADA_INSERT FOR ENTRADA
ACTIVE BEFORE INSERT POSITION 0
as
  declare variable vCONTADOR  integer;
  declare variable vVALORPARCELA numeric(16,2);
  declare variable vVALORDOCUMENTO numeric(16,2);
  declare variable vPRAZO1 smallint;
  declare variable vPRAZO2 smallint;
  declare variable vPRAZO3 smallint;
  declare variable vPRAZO4 smallint;
  declare variable vPRAZO5 smallint;
  declare variable vPRAZO6 smallint;
  declare variable vGERARFINANCEIRO char(1);
begin
  select CD.PRAZO, CD.PRAZO2, CD.PRAZO3,CD.PRAZO4,CD.PRAZO5,CD.PRAZO6 from CONDICAOPAGTO CD
     where CD.IDCONDICAOPAGTO = new.IDCONDICAOPAGTO
     into :vPRAZO1,:vPRAZO2,:vPRAZO3,:vPRAZO4,:vPRAZO5,:vPRAZO6;


  select CF.GERAFINANCEIRO from CFOP CF
     where CF.IDCFOP = new.IDCFOP
       and CF.IDFILIAL = new.IDFILIAL
      into :vGERARFINANCEIRO;

  if ((new.BONIFICACAO = 'N') and
     (:vGERARFINANCEIRO <> 'N')) then begin

    vCONTADOR = 1;
    vVALORDOCUMENTO = 0;
    if (not exists (select first 1 P.IDPAGAR from PAGAR P
                     where P.IDFILIAL = new.IDFILIAL
                       and P.IDFORNECEDOR = new.IDFORNECEDOR
                       and P.IDPAGAR = new.IDNOTA)) then begin
       vVALORPARCELA = new.TOTALLIQUIDO/new.PARCELAS;
       while (vCONTADOR <= new.PARCELAS) do begin
          insert into PAGAR   (IDFILIAL, IDPAGAR,  DOCUMENTO, DATAEMISSAO, DATAVENCIMENTO, IDFORNECEDOR, VALORDOCUMENTO,
                               IDFORMAPAGTO, IDORDEM, IDCENTROCUSTO, IDENTRADA, IDOBRAS)
                       values (new.IDFILIAL, new.IDNOTA, new.IDNOTA || '-' || :vCONTADOR || '/' || new.PARCELAS, new.DATAENTRADA, new.DATANOTAFISCAL+(if_nn(:vCONTADOR,'=',1,:vPRAZO1,0)+
                                                                                                                                                    + if_nn(:vCONTADOR,'=',2,if_nn(:vPRAZO2,'=',0,:vPRAZO1*2,:vPRAZO2),0)+
                                                                                                                                                    + if_nn(:vCONTADOR,'=',3,if_nn(:vPRAZO3,'=',0,:vPRAZO1*3,:vPRAZO3),0)+
                                                                                                                                                    + if_nn(:vCONTADOR,'=',4,if_nn(:vPRAZO4,'=',0,:vPRAZO1*4,:vPRAZO4),0)+
                                                                                                                                                    + if_nn(:vCONTADOR,'=',5,if_nn(:vPRAZO5,'=',0,:vPRAZO1*5,:vPRAZO5),0)+
                                                                                                                                                    + if_nn(:vCONTADOR,'=',6,if_nn(:VPRAZO6,'=',0,:vPRAZO1*6,:vPRAZO6),0)), new.IDFORNECEDOR, :vVALORPARCELA,

                                 new.IDFORMAPAGTO, :vCONTADOR, new.IDCENTROCUSTO, new.IDNOTA, new.IDOBRAS);
           vVALORDOCUMENTO = vVALORDOCUMENTO+vVALORPARCELA;
           if (vCONTADOR = new.PARCELAS) then begin
              update PAGAR P
                 set P.VALORDOCUMENTO = :vVALORPARCELA+(new.TOTALLIQUIDO-:vVALORDOCUMENTO)
               where P.IDFILIAL = new.IDFILIAL
                 and P.IDORDEM = new.PARCELAS
                 and P.IDFORNECEDOR = new.IDFORNECEDOR
                 and P.IDPAGAR = new.IDNOTA;
           end
           vCONTADOR = vCONTADOR+1;
        end
     end
     else begin
         delete from PAGAR P
          where P.IDFILIAL = new.IDFILIAL
            and P.IDFORNECEDOR = new.IDFORNECEDOR
             and P.IDPAGAR = new.IDNOTA;
      end
   end
end
^

/* Trigger: TRG_ENTRADA_UPDATE */
CREATE TRIGGER TRG_ENTRADA_UPDATE FOR ENTRADA
ACTIVE BEFORE UPDATE POSITION 0
as
  declare variable vCONTADOR  integer;
  declare variable vVALORPARCELA numeric(16,2);
  declare variable vVALORDOCUMENTO numeric(16,2);
  declare variable vPRAZO1 smallint;
  declare variable vPRAZO2 smallint;
  declare variable vPRAZO3 smallint;
  declare variable vPRAZO4 smallint;
  declare variable vPRAZO5 smallint;
  declare variable vPRAZO6 smallint;
  declare variable vGERARFINANCEIRO char(1);
  declare variable vOLD_GERARFINANCEIRO char(1);
  declare variable IDENTRADA integer;
--  declare variable vSIT_INVENTARIO varchar(1);
begin
--  select F.SIT_INVENTARIO from FILIAL F
--    where F.IDFILIAL = new.IDFILIAL
--   into :VSIT_INVENTARIO;

--  if (:VSIT_INVENTARIO is null) then begin

      select first 1 P.IDENTRADA from PAGAR P
        where P.IDFILIAL = old.IDFILIAL
          and P.IDPAGAR = old.IDNOTA
          and P.IDFORNECEDOR = old.IDFORNECEDOR
        into :IDENTRADA;
    
      select CD.PRAZO, CD.PRAZO2, CD.PRAZO3,CD.PRAZO4,CD.PRAZO5,CD.PRAZO6 from CONDICAOPAGTO CD
         where CD.IDCONDICAOPAGTO = new.IDCONDICAOPAGTO
         into :vPRAZO1,:vPRAZO2,:vPRAZO3,:vPRAZO4,:vPRAZO5,:vPRAZO6;
    
      select CF.GERAFINANCEIRO from CFOP CF
         where CF.IDCFOP = new.IDCFOP
           and CF.IDFILIAL = new.IDFILIAL
          into :vGERARFINANCEIRO;
    
      select CF.GERAFINANCEIRO from CFOP CF
         where CF.IDCFOP = old.IDCFOP
          and CF.IDFILIAL = new.IDFILIAL
          into :vOLD_GERARFINANCEIRO;
    
      if ((new.BONIFICACAO = 'N') and
         (:vGERARFINANCEIRO <> 'N'))
      then begin
           vCONTADOR = 1;
           vVALORDOCUMENTO = 0;

           if (not IDENTRADA is null)
           then begin
                delete from PAGAR P
                      where P.IDFILIAL = new.IDFILIAL
                        and P.IDFORNECEDOR = old.IDFORNECEDOR
                        and P.IDPAGAR = old.IDNOTA;
           end
    
           if (not exists (select first 1 P.IDPAGAR from PAGAR P
                         where P.IDFILIAL = new.IDFILIAL
                           and P.IDFORNECEDOR = new.IDFORNECEDOR
                           and P.IDPAGAR = new.IDNOTA)) then begin
           vVALORPARCELA = new.TOTALLIQUIDO/new.PARCELAS;
           while (vCONTADOR <= new.PARCELAS) do begin

              insert into PAGAR   (IDFILIAL, IDPAGAR,  DOCUMENTO, DATAEMISSAO, DATAVENCIMENTO, IDFORNECEDOR, VALORDOCUMENTO,
                                   IDFORMAPAGTO, IDORDEM, IDCENTROCUSTO, IDENTRADA, IDOBRAS)
                       values (new.IDFILIAL, new.IDNOTA, new.IDNOTA || '-' || :vCONTADOR || '/' || new.PARCELAS, new.DATAENTRADA, new.DATANOTAFISCAL+(if_nn(:vCONTADOR,'=',1,:vPRAZO1,0)+
                                                                                                                                                    + if_nn(:vCONTADOR,'=',2,if_nn(:vPRAZO2,'=',0,:vPRAZO1*2,:vPRAZO2),0)+
                                                                                                                                                    + if_nn(:vCONTADOR,'=',3,if_nn(:vPRAZO3,'=',0,:vPRAZO1*3,:vPRAZO3),0)+
                                                                                                                                                    + if_nn(:vCONTADOR,'=',4,if_nn(:vPRAZO4,'=',0,:vPRAZO1*4,:vPRAZO4),0)+
                                                                                                                                                    + if_nn(:vCONTADOR,'=',5,if_nn(:vPRAZO5,'=',0,:vPRAZO1*5,:vPRAZO5),0)+
                                                                                                                                                    + if_nn(:vCONTADOR,'=',6,if_nn(:VPRAZO6,'=',0,:vPRAZO1*6,:vPRAZO6),0)), new.IDFORNECEDOR, :vVALORPARCELA,

                                   new.IDFORMAPAGTO, :vCONTADOR, new.IDCENTROCUSTO, new.IDNOTA, new.IDOBRAS);
               vVALORDOCUMENTO = vVALORDOCUMENTO+vVALORPARCELA;
               if (vCONTADOR = new.PARCELAS) then begin
                  update PAGAR P
                     set P.VALORDOCUMENTO = :vVALORPARCELA+(new.TOTALLIQUIDO-:vVALORDOCUMENTO)
                   where P.IDFILIAL = new.IDFILIAL
                     and P.IDORDEM = new.PARCELAS
                     and P.IDFORNECEDOR = new.IDFORNECEDOR
                     and P.IDPAGAR = new.IDNOTA;
               end
               vCONTADOR = vCONTADOR+1;
            end
         end end
      else begin
        if (not IDENTRADA is null)
        then begin
             delete from PAGAR P
                   where P.IDFILIAL = new.IDFILIAL
                     and P.IDFORNECEDOR = new.IDFORNECEDOR
                     and P.IDPAGAR = new.IDNOTA;
        end
      end
--  end
end
^

/* Trigger: TRG_ESTOQUE_FISICO_BF_INSERT */
CREATE TRIGGER TRG_ESTOQUE_FISICO_BF_INSERT FOR ESTOQUE_FISICO
ACTIVE BEFORE INSERT POSITION 0
as
  declare variable vIDCONTROLE integer;
  declare variable vTMP integer;
begin
  select P.PRECOVENDAUNIT, P.CUSTONOTAUNIT, P.CUSTONOTAUNIT from PRODUTO P
    where P.IDFILIAL = new.IDFILIAL
      and P.IDPRODUTO = new.IDPRODUTO
   into new.PRECO_VENDA, new.CUSTO_PRODUTO, new.CUSTO_PRODUTO2;

  if (gen_id(INC_ESTOQUE_FISICO,0) = 0) then begin
     select max(E.IDCONTROLE) from ESTOQUE_FISICO E
       where E.IDFILIAL = new.IDFILIAL
      into :VIDCONTROLE;
      vTMP = gen_id(INC_ESTOQUE_FISICO,:vIDCONTROLE);
  end

  new.IDCONTROLE = gen_id(INC_ESTOQUE_FISICO,1);
  new.HORA = current_time;
end
^

/* Trigger: TRG_ESTOQUE_FISICO_D_BF_INSERT */
CREATE TRIGGER TRG_ESTOQUE_FISICO_D_BF_INSERT FOR ESTOQUE_FISICO_DEPOSITO
ACTIVE BEFORE INSERT POSITION 0
as
  declare variable vIDCONTROLE integer;
  declare variable vTMP integer;
begin
  select P.PRECOVENDAUNIT, P.CUSTONOTAUNIT from PRODUTO P
    where P.IDFILIAL = new.IDFILIAL
      and P.IDPRODUTO = new.IDPRODUTO
   into new.PRECO_VENDA, new.CUSTO_PRODUTO;

  if (gen_id(INC_ESTOQUE_FISICO_DEPOSITO,0) = 0) then begin
     select max(E.IDCONTROLE) from ESTOQUE_FISICO_DEPOSITO E
       where E.IDFILIAL = new.IDFILIAL
      into :VIDCONTROLE;
      vTMP = gen_id(INC_ESTOQUE_FISICO_DEPOSITO,:vIDCONTROLE);
  end

  new.IDCONTROLE = gen_id(INC_ESTOQUE_FISICO_DEPOSITO,1);
end
^

/* Trigger: TRG_FORMAPAGTO_AF_INSERT */
CREATE TRIGGER TRG_FORMAPAGTO_AF_INSERT FOR FORMAPAGTO
ACTIVE AFTER INSERT POSITION 0
AS
declare variable VIDREPRESENTANTE smallint;
begin
  for select R.IDREPRESENTANTE from REPRESENTANTE R
        where R.EXCLUIDO is null
          and R.USA_ANDROID = 'S'
            into :VIDREPRESENTANTE
  do
  begin
     if (not exists(select L.IDFILIAL from LOG_ALTERACAO_ANDROID L
                     where L.IDFILIAL = new.IDFILIAL
                       and L.ID = new.IDFORMAPAGTO
                       and L.TIPO = 'Forma de Pagto'
                       and L.IDREPRESENTANTE = :VIDREPRESENTANTE)) then
     begin
       INSERT INTO LOG_ALTERACAO_ANDROID (IDFILIAL, IDREPRESENTANTE, ID, TIPO, IDFOLHA, SITUACAO) VALUES (new.IDFILIAL, :VIDREPRESENTANTE, new.IDFORMAPAGTO, 'Forma de Pagto', NULL, 'I');
     end
  end
end
^

/* Trigger: TRG_FORMAPAGTO_AF_UPDATE */
CREATE TRIGGER TRG_FORMAPAGTO_AF_UPDATE FOR FORMAPAGTO
ACTIVE AFTER UPDATE POSITION 0
AS
declare variable VIDREPRESENTANTE smallint;
begin
  for select R.IDREPRESENTANTE from REPRESENTANTE R
        where R.EXCLUIDO is null
          and R.USA_ANDROID = 'S'
            into :VIDREPRESENTANTE
  do
  begin
     if (not exists(select L.IDFILIAL from LOG_ALTERACAO_ANDROID L
                     where L.IDFILIAL = new.IDFILIAL
                       and L.ID = new.IDFORMAPAGTO
                       and L.TIPO = 'Forma de Pagto'
                       and L.IDREPRESENTANTE = :VIDREPRESENTANTE)) then
     begin
       if (NEW.EXCLUIDO is null) then
         INSERT INTO LOG_ALTERACAO_ANDROID (IDFILIAL, IDREPRESENTANTE, ID, TIPO, IDFOLHA, SITUACAO) VALUES (new.IDFILIAL, :VIDREPRESENTANTE, new.IDFORMAPAGTO, 'Forma de Pagto', NULL, 'A');
       else
         INSERT INTO LOG_ALTERACAO_ANDROID (IDFILIAL, IDREPRESENTANTE, ID, TIPO, IDFOLHA, SITUACAO) VALUES (new.IDFILIAL, :VIDREPRESENTANTE, new.IDFORMAPAGTO, 'Forma de Pagto', NULL, 'E');
     end
  end
end
^

/* Trigger: TRG_ITENSDEVOLUCAO_AF_INSERT_SU */
CREATE TRIGGER TRG_ITENSDEVOLUCAO_AF_INSERT_SU FOR ITENSDEVOLUCAO
ACTIVE AFTER INSERT POSITION 0
AS
declare variable vIDMOVTO_SUPERVISOR integer;
declare variable vIDSUPERVISOR smallint;
declare variable VCPF_REPRESENTANTE varchar(14);
declare variable VIDREPRESENTANTE smallint;
declare variable vIDCLIENTE integer;
declare variable vDATAPEDIDO date;
declare variable vVALORMOVTO numeric(12,2);
declare variable vVALORMOVTONEG numeric(12,2);
declare variable VCONTROLA_CONTA_SUPERVISOR varchar(1);
declare variable vSITUACAOPEDIDO varchar(1);
begin
   select F.CONTROLA_CONTA_SUPERVISOR from FILIAL F
     where F.IDFILIAL = new.IDFILIAL
    into :VCONTROLA_CONTA_SUPERVISOR;
   if (:VCONTROLA_CONTA_SUPERVISOR = 'S') then
   begin
       select P.IDREPRESENTANTE, P.IDCLIENTE, P.DATAPEDIDO, P.SITUACAOPEDIDO from DEVOLUCAO P
         where P.IDFILIAL = new.IDFILIAL
           and P.IDPEDIDO = new.IDPEDIDO
           and P.IDFOLHA = new.IDFOLHA
          into :VIDREPRESENTANTE, :VIDCLIENTE, :VDATAPEDIDO, :VSITUACAOPEDIDO;
    
       select first 1 R.CPF_SUPERVISOR from REPRESENTANTE R
          where R.IDREPRESENTANTE = :VIDREPRESENTANTE
           into :VCPF_REPRESENTANTE;

       select first 1 R.IDREPRESENTANTE from REPRESENTANTE R
           where R.CPF = :VCPF_REPRESENTANTE
          into :VIDSUPERVISOR;
    
       if (:vidsupervisor > 0 ) then
       begin
          select cast(max(M.IDMOVTO_SUPERVISOR) as integer)+1 from MOVTO_SUPERVISOR M
            where M.IDFILIAL = NEW.IDFILIAL
              into :VIDMOVTO_SUPERVISOR;
           if (VIDMOVTO_SUPERVISOR is null) then VIDMOVTO_SUPERVISOR = 1;
    
           if (:VSITUACAOPEDIDO = 'V') then
           begin
             VVALORMOVTO = new.PRECOVENDA - new.PRECOTABELA;
             VVALORMOVTO = VVALORMOVTO * new.QTDEPEDIDO;
           end

           if ((:VSITUACAOPEDIDO = 'T') or (:VSITUACAOPEDIDO = 'B'))  then
           begin
             VVALORMOVTO = new.PRECOVENDA;
             VVALORMOVTO = VVALORMOVTO * new.QTDEPEDIDO;
             VVALORMOVTO = VVALORMOVTO * -1;
           end

           if (VVALORMOVTO < 0) then -- SE FOR MENOR ENTRA COMO CREDITO
           begin
             VVALORMOVTONEG = VVALORMOVTO*-1;
            INSERT INTO MOVTO_SUPERVISOR (IDFILIAL, IDMOVTO_SUPERVISOR, IDSUPERVISOR, DATA_MOVTO, IDREPRESENTANTE, IDCLIENTE, IDPRODUTO, VALOR_MOVTO, TIPO_OPERACAO, IDPEDIDO, IDFOLHA)
                                   VALUES(new.IDFILIAL,:VIDMOVTO_SUPERVISOR, :VIDSUPERVISOR, :VDATAPEDIDO , :VIDREPRESENTANTE, :VIDCLIENTE,new.IDPRODUTO,:VVALORMOVTONEG,'C',new.IDPEDIDO,new.IDFOLHA);
    
           end
           if (VVALORMOVTO > 0) then
           begin
            INSERT INTO MOVTO_SUPERVISOR (IDFILIAL, IDMOVTO_SUPERVISOR, IDSUPERVISOR, DATA_MOVTO, IDREPRESENTANTE, IDCLIENTE, IDPRODUTO, VALOR_MOVTO, TIPO_OPERACAO, IDPEDIDO, IDFOLHA)
                                   VALUES(new.IDFILIAL,:VIDMOVTO_SUPERVISOR, :VIDSUPERVISOR, :VDATAPEDIDO , :VIDREPRESENTANTE, :VIDCLIENTE,new.IDPRODUTO,:VVALORMOVTO,'D',new.IDPEDIDO,new.IDFOLHA);
    
           end
       end
   end
end
^

/* Trigger: TRG_ITENSDEVOLUCAO_AF_UPDATE_SU */
CREATE TRIGGER TRG_ITENSDEVOLUCAO_AF_UPDATE_SU FOR ITENSDEVOLUCAO
ACTIVE AFTER UPDATE POSITION 0
AS
declare variable vIDMOVTO_SUPERVISOR integer;
declare variable vIDSUPERVISOR smallint;
declare variable VCPF_REPRESENTANTE varchar(14);
declare variable VIDREPRESENTANTE smallint;
declare variable vIDCLIENTE integer;
declare variable vDATAPEDIDO date;
declare variable vVALORMOVTO numeric(12,2);
declare variable vVALORMOVTONEG numeric(12,2);
declare variable VVALORMOVTOOLD numeric(12,2);
declare variable VVALORMOVTOOLDNEG numeric(12,2);
declare variable vCONTROLA_CONTA_SUPERVISOR varchar(1);
declare variable vSITUACAOPEDIDO varchar(1);
begin
   select F.CONTROLA_CONTA_SUPERVISOR from FILIAL F
      where F.IDFILIAL = new.IDFILIAL
   into :VCONTROLA_CONTA_SUPERVISOR;
   if (:VCONTROLA_CONTA_SUPERVISOR = 'S') then
   begin
       if (OLD.PRECOTABELA - old.PRECOVENDA <> new.PRECOTABELA - new.PRECOVENDA) then
       begin
    
           select P.IDREPRESENTANTE, P.IDCLIENTE, P.DATAPEDIDO, P.SITUACAOPEDIDO from DEVOLUCAO P
             where P.IDFILIAL = new.IDFILIAL
               and P.IDPEDIDO = new.IDPEDIDO
               and P.IDFOLHA = new.IDFOLHA
              into :VIDREPRESENTANTE, :VIDCLIENTE, :VDATAPEDIDO, :VSITUACAOPEDIDO;
        
           select first 1 R.CPF_SUPERVISOR from REPRESENTANTE R
              where R.IDREPRESENTANTE = :VIDREPRESENTANTE
               into :VCPF_REPRESENTANTE;
        
        
           select first 1 R.IDREPRESENTANTE from REPRESENTANTE R
               where R.CPF = :VCPF_REPRESENTANTE
              into :VIDSUPERVISOR;
        
         if (:vidsupervisor > 0 ) then
         begin
           select cast(max(M.IDMOVTO_SUPERVISOR) as integer)+1 from MOVTO_SUPERVISOR M
              where M.IDFILIAL = new.IDFILIAL
                into :VIDMOVTO_SUPERVISOR;
        
            if (VIDMOVTO_SUPERVISOR is null) then VIDMOVTO_SUPERVISOR = 1;
        

            if (:VSITUACAOPEDIDO = 'V') then
            begin
              VVALORMOVTOOLD = old.PRECOVENDA - old.PRECOTABELA;
              VVALORMOVTOOLD = VVALORMOVTOOLD * old.QTDEPEDIDO;
            end

            if ((:VSITUACAOPEDIDO = 'T') or (:VSITUACAOPEDIDO = 'B'))  then
            begin
              VVALORMOVTOOLD = old.PRECOVENDA;
              VVALORMOVTOOLD = VVALORMOVTOOLD * old.QTDEPEDIDO;
              VVALORMOVTOOLD = VVALORMOVTOOLD * -1;
            end
        
            if (VVALORMOVTOOLD < 0) then
            begin
              VVALORMOVTOOLDNEG = VVALORMOVTOOLD*-1;
             INSERT INTO MOVTO_SUPERVISOR (IDFILIAL, IDMOVTO_SUPERVISOR, IDSUPERVISOR, DATA_MOVTO, IDREPRESENTANTE, IDCLIENTE, IDPRODUTO, VALOR_MOVTO, TIPO_OPERACAO, IDPEDIDO, IDFOLHA)
                                    VALUES(old.IDFILIAL,:VIDMOVTO_SUPERVISOR, :VIDSUPERVISOR, :VDATAPEDIDO , :VIDREPRESENTANTE, :VIDCLIENTE,old.IDPRODUTO,:VVALORMOVTOOLDNEG,'D',old.IDPEDIDO,old.IDFOLHA);
        
            end
        
            if (VVALORMOVTOOLD > 0) then
            begin
             INSERT INTO MOVTO_SUPERVISOR (IDFILIAL, IDMOVTO_SUPERVISOR, IDSUPERVISOR, DATA_MOVTO, IDREPRESENTANTE, IDCLIENTE, IDPRODUTO, VALOR_MOVTO, TIPO_OPERACAO, IDPEDIDO, IDFOLHA)
                                    VALUES(old.IDFILIAL,:VIDMOVTO_SUPERVISOR, :VIDSUPERVISOR, :VDATAPEDIDO , :VIDREPRESENTANTE, :VIDCLIENTE,old.IDPRODUTO,:VVALORMOVTOOLD,'C',old.IDPEDIDO,old.IDFOLHA);
        
            end
        
           select cast(max(M.IDMOVTO_SUPERVISOR) as integer)+1 from MOVTO_SUPERVISOR M
              where M.IDFILIAL = NEW.IDFILIAL
                into :VIDMOVTO_SUPERVISOR;
            if (VIDMOVTO_SUPERVISOR is null) then VIDMOVTO_SUPERVISOR = 1;

            if (:VSITUACAOPEDIDO = 'V') then
            begin
              VVALORMOVTO = new.PRECOVENDA - new.PRECOTABELA;
              VVALORMOVTO = VVALORMOVTO * new.QTDEPEDIDO;
            end

            if ((:VSITUACAOPEDIDO = 'T') or (:VSITUACAOPEDIDO = 'B'))  then
            begin
              VVALORMOVTO = new.PRECOVENDA;
              VVALORMOVTO = VVALORMOVTO * new.QTDEPEDIDO;
              VVALORMOVTO = vvalormovto * -1;
            end
        
            if (VVALORMOVTO < 0) then
            begin
              VVALORMOVTONEG = VVALORMOVTO*-1;
             INSERT INTO MOVTO_SUPERVISOR (IDFILIAL, IDMOVTO_SUPERVISOR, IDSUPERVISOR, DATA_MOVTO, IDREPRESENTANTE, IDCLIENTE, IDPRODUTO, VALOR_MOVTO, TIPO_OPERACAO, IDPEDIDO, IDFOLHA)
                                    VALUES(new.IDFILIAL,:VIDMOVTO_SUPERVISOR, :VIDSUPERVISOR, :VDATAPEDIDO , :VIDREPRESENTANTE, :VIDCLIENTE,new.IDPRODUTO,:VVALORMOVTONEG,'C',new.IDPEDIDO,new.IDFOLHA);
        
            end
            if (VVALORMOVTO > 0) then
            begin
             INSERT INTO MOVTO_SUPERVISOR (IDFILIAL, IDMOVTO_SUPERVISOR, IDSUPERVISOR, DATA_MOVTO, IDREPRESENTANTE, IDCLIENTE, IDPRODUTO, VALOR_MOVTO, TIPO_OPERACAO, IDPEDIDO, IDFOLHA)
                                    VALUES(new.IDFILIAL,:VIDMOVTO_SUPERVISOR, :VIDSUPERVISOR, :VDATAPEDIDO , :VIDREPRESENTANTE, :VIDCLIENTE,new.IDPRODUTO,:VVALORMOVTO,'D',new.IDPEDIDO,new.IDFOLHA);
        
            end
         end
       end
   end
end
^

/* Trigger: TRG_ITENSDEVOLUCAO_BF_DELETE_SU */
CREATE TRIGGER TRG_ITENSDEVOLUCAO_BF_DELETE_SU FOR ITENSDEVOLUCAO
ACTIVE BEFORE DELETE POSITION 0
AS
declare variable vIDMOVTO_SUPERVISOR integer;
declare variable vIDSUPERVISOR smallint;
declare variable VCPF_REPRESENTANTE varchar(14);
declare variable VIDREPRESENTANTE smallint;
declare variable vIDCLIENTE integer;
declare variable vDATAPEDIDO date;
declare variable VVALORMOVTOOLD numeric(12,2);
declare variable VVALORMOVTOOLDNEG numeric(12,2);
declare variable vCONTROLA_CONTA_SUPERVISOR varchar(1);
declare variable VSITUACAOPEDIDO varchar(1);
begin
   select F.CONTROLA_CONTA_SUPERVISOR from FILIAL F
     where F.IDFILIAL = old.IDFILIAL
    into :VCONTROLA_CONTA_SUPERVISOR;
   if (:VCONTROLA_CONTA_SUPERVISOR = 'S') then
   begin
       select P.IDREPRESENTANTE, P.IDCLIENTE, P.DATAPEDIDO, P.SITUACAOPEDIDO from DEVOLUCAO P
         where P.IDFILIAL = old.IDFILIAL
           and P.IDPEDIDO = old.IDPEDIDO
           and P.IDFOLHA = old.IDFOLHA
          into :VIDREPRESENTANTE, :VIDCLIENTE, :VDATAPEDIDO, :VSITUACAOPEDIDO;
    
       select first 1 R.CPF_SUPERVISOR from REPRESENTANTE R
          where R.IDREPRESENTANTE = :VIDREPRESENTANTE
           into :VCPF_REPRESENTANTE;
    
    
       select first 1 R.IDREPRESENTANTE from REPRESENTANTE R
           where R.CPF = :VCPF_REPRESENTANTE
          into :VIDSUPERVISOR;
    
       if (:vidsupervisor > 0 ) then
       begin

           select cast(max(M.IDMOVTO_SUPERVISOR) as integer)+1 from MOVTO_SUPERVISOR M
              where M.IDFILIAL = old.IDFILIAL
                into :VIDMOVTO_SUPERVISOR;
        
            if (VIDMOVTO_SUPERVISOR is null) then VIDMOVTO_SUPERVISOR = 1;
        
              if (:VSITUACAOPEDIDO = 'V') then
              begin
                VVALORMOVTOOLD = old.PRECOVENDA - old.PRECOTABELA;
                VVALORMOVTOOLD = VVALORMOVTOOLD * old.QTDEPEDIDO;
              end
    
              if ((:VSITUACAOPEDIDO = 'T') or (:VSITUACAOPEDIDO = 'B'))  then
              begin
                VVALORMOVTOOLD = old.PRECOVENDA;
                VVALORMOVTOOLD = VVALORMOVTOOLD * old.QTDEPEDIDO;
                VVALORMOVTOOLD = VVALORMOVTOOLD * -1;
              end
    
            if (VVALORMOVTOOLD < 0) then
            begin
              VVALORMOVTOOLDNEG = VVALORMOVTOOLD*-1;
             INSERT INTO MOVTO_SUPERVISOR (IDFILIAL, IDMOVTO_SUPERVISOR, IDSUPERVISOR, DATA_MOVTO, IDREPRESENTANTE, IDCLIENTE, IDPRODUTO, VALOR_MOVTO, TIPO_OPERACAO, IDPEDIDO, IDFOLHA)
                                    VALUES(old.IDFILIAL,:VIDMOVTO_SUPERVISOR, :VIDSUPERVISOR, :VDATAPEDIDO , :VIDREPRESENTANTE, :VIDCLIENTE,old.IDPRODUTO,:VVALORMOVTOOLDNEG,'D',old.IDPEDIDO,old.IDFOLHA);
        
            end
        
            if (VVALORMOVTOOLD > 0) then
            begin
             INSERT INTO MOVTO_SUPERVISOR (IDFILIAL, IDMOVTO_SUPERVISOR, IDSUPERVISOR, DATA_MOVTO, IDREPRESENTANTE, IDCLIENTE, IDPRODUTO, VALOR_MOVTO, TIPO_OPERACAO, IDPEDIDO, IDFOLHA)
                                    VALUES(old.IDFILIAL,:VIDMOVTO_SUPERVISOR, :VIDSUPERVISOR, :VDATAPEDIDO , :VIDREPRESENTANTE, :VIDCLIENTE,old.IDPRODUTO,:VVALORMOVTOOLD,'C',old.IDPEDIDO,old.IDFOLHA);
        
            end
        end
   end
end
^

/* Trigger: TRG_ITENSDEVOLUCAO_DELETE */
CREATE TRIGGER TRG_ITENSDEVOLUCAO_DELETE FOR ITENSDEVOLUCAO
ACTIVE AFTER DELETE POSITION 11
as
declare variable VESTOQUE_REPRES varchar(1);
declare variable VIDREPRES integer ;
declare variable VSIT_PEDIDO varchar(1);
begin
  select D.IDREPRESENTANTE, D.SITUACAOPEDIDO from DEVOLUCAO D
  where D.IDFILIAL = OLD.IDFILIAL
    and D.IDPEDIDO = OLD.IDPEDIDO
    and D.IDFOLHA  = OLD.IDFOLHA
  into :VIDREPRES, :VSIT_PEDIDO;

  select R.CONTROLA_PRODUTO_REPRESENTANTE  from REPRESENTANTE R
  where R.IDREPRESENTANTE = :VIDREPRES
  into :VESTOQUE_REPRES;

  if ( (VESTOQUE_REPRES='S') and (VSIT_PEDIDO='V') ) then
     -- NÃO ATUALIZA ESTOQUE
     VESTOQUE_REPRES='S';
  else begin
     execute procedure ATUALIZA_ESTOQUE(old.IDFILIAL,old.IDPRODUTO,(old.QTDEPEDIDO*old.FATORCONVERSAO),'-','EXCLUSÃO DEVOLUCAO DE VENDA PD:' || old.IDPEDIDO || '/' || old.IDFOLHA);
  end
   delete from CARTEIRA
          where (IDFILIAL = old.IDFILIAL) and
                (IDCARTEIRA = old.IDCARTEIRA);
end
^

/* Trigger: TRG_ITENSDEVOLUCAO_INSERT */
CREATE TRIGGER TRG_ITENSDEVOLUCAO_INSERT FOR ITENSDEVOLUCAO
ACTIVE BEFORE INSERT POSITION 0
as
declare variable NID integer;
declare variable NVALORCARTEIRA numeric(16,2);
declare variable DTPEDIDO date;
declare variable IDREPRES integer;
declare variable OPERACAO char(1);
declare variable SITPEDIDO char(1);
declare variable NOMEPRODUTO varchar(70);
declare variable VGERAR_CARTEIRA char(1);
declare variable vIDCLIENTE integer;
declare variable VESTOQUE_REPRES varchar(1);
  declare variable vMOVIMENTA_VENDA varchar(1);
  declare variable vMOVIMENTA_BONIFICACAO varchar(1);
  declare variable vMOVIMENTA_TROCA varchar(1);
  declare variable vMOVIMENTA_CONSIGNACAO varchar(1);
begin

    if (new.CONTADOR = 0) then begin
       select max(IT.CONTADOR)+1 from ITENSDEVOLUCAO IT
         where IT.IDFILIAL = new.IDFILIAL
           and IT.IDPEDIDO = new.IDPEDIDO
           and IT.IDFOLHA = new.IDFOLHA
         into new.CONTADOR;
    
       if (new.CONTADOR is null) then new.CONTADOR = 1;
   end

   select D.DATAPEDIDO, D.IDREPRESENTANTE, D.SITUACAOPEDIDO, D.IDCLIENTE from DEVOLUCAO D
               where D.IDFILIAL = new.IDFILIAL and
                     D.IDPEDIDO = new.IDPEDIDO and
                     D.IDFOLHA = new.IDFOLHA
                     into :DTPEDIDO, :IDREPRES, :SITPEDIDO, :VIDCLIENTE;

   select R.CONTROLA_PRODUTO_REPRESENTANTE from REPRESENTANTE R
   where R.IDREPRESENTANTE = :IDREPRES
   into :VESTOQUE_REPRES;

   if ((VESTOQUE_REPRES='S') and (SITPEDIDO='V') ) then
      -- NAO ATUALIZA ESTOQUE
      VESTOQUE_REPRES='S' ;
   else begin
        execute procedure ATUALIZA_ESTOQUE(new.IDFILIAL,new.IDPRODUTO,(new.QTDEPEDIDO*new.FATORCONVERSAO),'+','INCLUSÃO DA DEVOLUÇÃO PD:' || new.IDPEDIDO || '/' || new.IDFOLHA);
   end

   select D.DATAPEDIDO, D.IDREPRESENTANTE, D.SITUACAOPEDIDO  from DEVOLUCAO D
               where D.IDFILIAL = new.IDFILIAL and
                     D.IDPEDIDO = new.IDPEDIDO and
                     D.IDFOLHA = new.IDFOLHA
                     into :DTPEDIDO, :IDREPRES, :SITPEDIDO;

  select F.MOVIMENTA_VENDA,
         F.MOVIMENTA_BONIFICACAO,
         F.MOVIMENTA_TROCA,
         F.MOVIMENTA_CONSIGNACAO,F.GERA_CARTEIRA from FILIAL F
    where F.IDFILIAL = new.IDFILIAL
   into  :VMOVIMENTA_VENDA,
         :VMOVIMENTA_BONIFICACAO,
         :VMOVIMENTA_TROCA,
         :VMOVIMENTA_CONSIGNACAO,:vGERAR_CARTEIRA;


   if (vGERAR_CARTEIRA = 'S') then begin
     select COLLATEBR(P.ESPECIFICACAO || ' ' || P.EMBALAGEM)  from PRODUTO P
       where P.IDFILIAL = new.IDFILIAL
         and P.IDPRODUTO = new.IDPRODUTO into :NOMEPRODUTO;

/*
     if (SITPEDIDO='V') then begin
         if (new.TROCA = 'N') then
            nVALORCARTEIRA = new.QTDEPEDIDO*(new.PRECOVENDA-new.PRECOTABELA);
         else
            nVALORCARTEIRA = (new.QTDEPEDIDO*new.PRECOVENDA); end
     else begin
        if (SITPEDIDO='C') then begin
            nVALORCARTEIRA = new.QTDEPEDIDO*new.PRECOVENDA;
            nVALORCARTEIRA = nVALORCARTEIRA*-1;
        end
     end
*/

         if (SITPEDIDO = 'V') then begin
             if (:VMOVIMENTA_VENDA = 'S') then begin
                 if (new.TROCA = 'N') then
                    nVALORCARTEIRA = new.QTDEPEDIDO*(new.PRECOVENDA-new.PRECOTABELA);
                 else
                    nVALORCARTEIRA = (new.QTDEPEDIDO*new.PRECOVENDA);
             end
         end

         if (SITPEDIDO = 'B') then begin
             if (:VMOVIMENTA_BONIFICACAO = 'S') then begin
                 if (new.TROCA = 'N') then
                    nVALORCARTEIRA = new.QTDEPEDIDO*(new.PRECOVENDA-new.PRECOTABELA);
                 else
                    nVALORCARTEIRA = (new.QTDEPEDIDO*new.PRECOVENDA);
             end
         end

         if (SITPEDIDO = 'C') then begin
             if (:VMOVIMENTA_CONSIGNACAO = 'S') then begin
                 if (new.TROCA = 'N') then
                    nVALORCARTEIRA = new.QTDEPEDIDO*(new.PRECOVENDA-new.PRECOTABELA);
                 else
                    nVALORCARTEIRA = (new.QTDEPEDIDO*new.PRECOVENDA);
             end
         end

         if (SITPEDIDO = 'T') then begin
             if (:VMOVIMENTA_TROCA = 'S') then begin
                 if (new.TROCA = 'N') then
                    nVALORCARTEIRA = new.QTDEPEDIDO*(new.PRECOVENDA-new.PRECOTABELA);
                 else
                    nVALORCARTEIRA = (new.QTDEPEDIDO*new.PRECOVENDA);
            end
         end

         if (:SITPEDIDO = 'V') then begin
             if (new.TROCA = 'N') then
                nVALORCARTEIRA = new.QTDEPEDIDO*(new.PRECOVENDA-new.PRECOTABELA);
             else
                nVALORCARTEIRA = (new.QTDEPEDIDO*new.PRECOVENDA);
         end

     if (nVALORCARTEIRA <> 0.00) then begin
        if (nVALORCARTEIRA < 0.00) then begin
           OPERACAO      = 'C';
           nVALORCARTEIRA=(nVALORCARTEIRA*-1); end
        else begin
           OPERACAO      = 'D';
        end

        select C.INC_IDCARTEIRA from FILIAL C
                    where C.IDFILIAL = new.IDFILIAL into :nID;

        if (nID is null) then
            nID = 1;
        else
            nID = nID+1;

        update FILIAL F
           set F.INC_IDCARTEIRA = :nID
         where F.IDFILIAL = new.IDFILIAL;

        insert into CARTEIRA (IDFILIAL,IDCARTEIRA, HISTORICO ,IDPEDIDO,DATAPEDIDO,IDREPRESENTANTE,NATOPERACAO, VALORCARTEIRA, IDCLIENTE)
               values(new.IDFILIAL,:nID, :NOMEPRODUTO,new.IDPEDIDO,:DTPEDIDO,:IDREPRES,:OPERACAO, :nVALORCARTEIRA, :VIDCLIENTE);
        new.IDCARTEIRA = nID;
     end
   end
end
^

/* Trigger: TRG_ITENSDEVOLUCAO_UPDATE */
CREATE TRIGGER TRG_ITENSDEVOLUCAO_UPDATE FOR ITENSDEVOLUCAO
ACTIVE BEFORE UPDATE POSITION 0
as
declare variable NID integer;
declare variable NVALORCARTEIRA numeric(16,2);
declare variable DTPEDIDO date;
declare variable IDREPRES integer;
declare variable OPERACAO char(1);
declare variable NOMEPRODUTO varchar(70);
declare variable SITPEDIDO char(1);
declare variable VGERAR_CARTEIRA char(1);
declare variable vIDCLIENTE integer;
declare variable VESTOQUE_REPRES varchar(1);
  declare variable vMOVIMENTA_VENDA varchar(1);
  declare variable vMOVIMENTA_BONIFICACAO varchar(1);
  declare variable vMOVIMENTA_TROCA varchar(1);
  declare variable vMOVIMENTA_CONSIGNACAO varchar(1);
begin
  select D.DATAPEDIDO, D.IDREPRESENTANTE, D.SITUACAOPEDIDO, D.IDCLIENTE from DEVOLUCAO D
   where D.IDFILIAL = new.IDFILIAL
     and D.IDPEDIDO = new.IDPEDIDO
     and D.IDFOLHA = new.IDFOLHA
    into :DTPEDIDO, :IDREPRES, :SITPEDIDO, :VIDCLIENTE;

  select R.CONTROLA_PRODUTO_REPRESENTANTE from REPRESENTANTE R
  where R.IDREPRESENTANTE = :IDREPRES
  into :VESTOQUE_REPRES;

  if ( (VESTOQUE_REPRES='S') and (SITPEDIDO='V') ) then
     -- NAO ATUALIZA ESTOQUE
     VESTOQUE_REPRES='S';
  else begin
     if ((old.QTDEPEDIDO*old.FATORCONVERSAO) <> (new.QTDEPEDIDO*new.FATORCONVERSAO)) then begin
       /* --Retornando para o estoque */
       execute procedure ATUALIZA_ESTOQUE(old.IDFILIAL,old.IDPRODUTO,(old.QTDEPEDIDO*old.FATORCONVERSAO),'-','ALTERAÇÃO DA DEVOLUÇÃO PD:' || old.IDPEDIDO || '/' || old.IDFOLHA);
       /* --Retirando do Estoque */
       execute procedure ATUALIZA_ESTOQUE(new.IDFILIAL,new.IDPRODUTO,(new.QTDEPEDIDO*new.FATORCONVERSAO),'+','ALTERAÇÃO DA DEVOLUÇÃO PD:' || old.IDPEDIDO|| '/' || old.IDFOLHA);
     end
  end

  select F.MOVIMENTA_VENDA,
         F.MOVIMENTA_BONIFICACAO,
         F.MOVIMENTA_TROCA,
         F.MOVIMENTA_CONSIGNACAO,F.GERA_CARTEIRA from FILIAL F
    where F.IDFILIAL = new.IDFILIAL
   into  :VMOVIMENTA_VENDA,
         :VMOVIMENTA_BONIFICACAO,
         :VMOVIMENTA_TROCA,
         :VMOVIMENTA_CONSIGNACAO,:vGERAR_CARTEIRA;


   if (vGERAR_CARTEIRA = 'S') then begin


      select COLLATEBR(P.ESPECIFICACAO || ' ' || P.EMBALAGEM) from PRODUTO P
         where P.IDFILIAL = new.IDFILIAL
           and P.IDPRODUTO = new.IDPRODUTO into :NOMEPRODUTO;

         if (SITPEDIDO = 'V') then begin
             if (:VMOVIMENTA_VENDA = 'S') then begin
                 if (new.TROCA = 'N') then
                    nVALORCARTEIRA = new.QTDEPEDIDO*(new.PRECOVENDA-new.PRECOTABELA);
                 else
                    nVALORCARTEIRA = (new.QTDEPEDIDO*new.PRECOVENDA);
             end
         end

         if (SITPEDIDO = 'B') then begin
             if (:VMOVIMENTA_BONIFICACAO = 'S') then begin
                 if (new.TROCA = 'N') then
                    nVALORCARTEIRA = new.QTDEPEDIDO*(new.PRECOVENDA-new.PRECOTABELA);
                 else
                    nVALORCARTEIRA = (new.QTDEPEDIDO*new.PRECOVENDA);
             end
         end

         if (SITPEDIDO = 'C') then begin
             if (:VMOVIMENTA_CONSIGNACAO = 'S') then begin
                 if (new.TROCA = 'N') then
                    nVALORCARTEIRA = new.QTDEPEDIDO*(new.PRECOVENDA-new.PRECOTABELA);
                 else
                    nVALORCARTEIRA = (new.QTDEPEDIDO*new.PRECOVENDA);
             end
         end

         if (SITPEDIDO = 'T') then begin
             if (:VMOVIMENTA_TROCA = 'S') then begin
                 if (new.TROCA = 'N') then
                    nVALORCARTEIRA = new.QTDEPEDIDO*(new.PRECOVENDA-new.PRECOTABELA);
                 else
                    nVALORCARTEIRA = (new.QTDEPEDIDO*new.PRECOVENDA);
            end
         end

         if (:SITPEDIDO = 'V') then begin
             if (new.TROCA = 'N') then
                nVALORCARTEIRA = new.QTDEPEDIDO*(new.PRECOVENDA-new.PRECOTABELA);
             else
                nVALORCARTEIRA = (new.QTDEPEDIDO*new.PRECOVENDA);
         end

/*
     if (SITPEDIDO='V') then begin
         if (new.TROCA = 'N') then
            nVALORCARTEIRA = new.QTDEPEDIDO*(new.PRECOVENDA-new.PRECOTABELA);
         else
            nVALORCARTEIRA = (new.QTDEPEDIDO*new.PRECOVENDA); end
     else begin
        nVALORCARTEIRA = new.QTDEPEDIDO*new.PRECOVENDA;
        nVALORCARTEIRA = nVALORCARTEIRA*-1;
     end
*/

     if (nVALORCARTEIRA<> 0.00) then begin
        if (nVALORCARTEIRA < 0.00) then begin
          OPERACAO = 'C';
          nVALORCARTEIRA=(nVALORCARTEIRA-1); end
        else
          OPERACAO = 'D';
        if (new.IDCARTEIRA is null) then begin

            select C.INC_IDCARTEIRA from FILIAL C
                   where C.IDFILIAL = new.IDFILIAL into :nID;
           if (nID is null) then
               nID = 1;
           else
               nID = nID+1;

            update FILIAL F
               set F.INC_IDCARTEIRA = :nID
             where F.IDFILIAL = new.IDFILIAL;

           insert into CARTEIRA (IDFILIAL,IDCARTEIRA,HISTORICO,IDPEDIDO,DATAPEDIDO,IDREPRESENTANTE,NATOPERACAO, VALORCARTEIRA, IDCLIENTE)
                  values(new.IDFILIAL,:nID,:NOMEPRODUTO,new.IDPEDIDO,:DTPEDIDO,:IDREPRES,:OPERACAO, :nVALORCARTEIRA, :vIDCLIENTE);
           new.IDCARTEIRA = nID; end
        else begin
           update CARTEIRA C
                  set C.DATAPEDIDO      = :DTPEDIDO,
                      C.IDREPRESENTANTE = :IDREPRES,
                      C.IDCLIENTE       = :vIDCLIENTE,
                      C.NATOPERACAO     = :OPERACAO,
                      C.HISTORICO       = :NOMEPRODUTO,
                      C.VALORCARTEIRA   = :nVALORCARTEIRA
                      where C.IDFILIAL = new.IDFILIAL
                        and C.IDCARTEIRA = new.IDCARTEIRA;
        end end
     else begin
        nID = old.IDCARTEIRA;
        new.IDCARTEIRA = null;
        delete from CARTEIRA C
               where C.IDFILIAL = new.IDFILIAL
                 and C.IDCARTEIRA = :nID;
     end
  end
end
^

/* Trigger: TRG_ITENSENTRADA_AF_INSERT */
CREATE TRIGGER TRG_ITENSENTRADA_AF_INSERT FOR ITENSENTRADA
ACTIVE AFTER INSERT POSITION 0
AS
begin
   /* INSERE NA TABELA O CÓDIGO DE FABRICACAO */
   if (not new.IDPRODUTO_FAB is null) then begin
       if (exists(select F.IDFILIAL from FORNECEDOR_PRODUTO F
                  where F.IDFILIAL = new.IDFILIAL
                    and F.IDFORNECEDOR = new.IDFORNECEDOR
                    and F.IDPRODUTO = new.IDPRODUTO)) then begin
          update FORNECEDOR_PRODUTO F
             set F.IDPRODUTO_FAB = new.IDPRODUTO_FAB,
                 F.CUSTO = new.CUSTOPRODUTO,
                 F.IDPRODUTO = new.IDPRODUTO,
                 F.PRECOVENDA = new.PRECOVENDA
           where F.IDFILIAL = new.IDFILIAL
             and F.IDFORNECEDOR = new.IDFORNECEDOR
             and F.IDPRODUTO = new.IDPRODUTO; end
       else begin
         insert into FORNECEDOR_PRODUTO (IDFILIAL,IDFORNECEDOR,IDPRODUTO,IDPRODUTO_FAB,CUSTO,PRECOVENDA)
                                 values (new.IDFILIAL,new.IDFORNECEDOR,new.IDPRODUTO,new.IDPRODUTO_FAB,new.CUSTOPRODUTO,new.PRECOVENDA);
       end
   end
end
^

/* Trigger: TRG_ITENSENTRADA_BF_INS_UPD */
CREATE TRIGGER TRG_ITENSENTRADA_BF_INS_UPD FOR ITENSENTRADA
ACTIVE BEFORE INSERT OR UPDATE POSITION 0
AS
declare variable VTAXAICMS NUMERIC(10,2);
declare variable VVALOR_BASE numeric(14,2);
declare variable VVALOR_ICMS numeric(14,2);
declare variable VINSENTIVOFISCAL NUMERIC(10,4);
declare variable VSOMABASE numeric(14,2);
declare variable VSOMAINSENTIVO NUMERIC(10,4);
--declare variable VTIPOOPERACAO varchar(1);
declare variable VIDTRIBUTO smallint;
--declare variable VIDCFOP smallint;
declare variable VIDTRIBUTO_PRODUTO smallint;
--declare variable VCFOP_PRODUTO varchar(1);
declare variable VCFOP varchar(5);
begin

--   select CFP.CFOP_PRODUTO,CFP.CFOP, CFP.CFOP_PRINCIPAL, CFP.IDTRIBUTO from CFOP CFP
--    where CFP.IDFILIAL = new.IDFILIAL
--      and CFP.IDCFOP = new.IDCFOP
--     into :VCFOP_PRODUTO, :VCFOP,:VTIPOOPERACAO,:VIDTRIBUTO;

--    if (:VCFOP_PRODUTO = 'S') then
--    begin
--      select TB.CFOP from TRIBUTO TB
--        where TB.IDFILIAL = new.IDFILIAL
--          and TB.IDTRIBUTO = new.IDTRIBUTO
--        into :VCFOP;
--    end

/*$$IBEC$$   select C.CFOP_PRINCIPAL, C.IDTRIBUTO from CFOP C
    where C.IDFILIAL = new.IDFILIAL
      and C.IDCFOP = :VIDCFOP
 $$IBEC$$*/

--  if (:VTIPOOPERACAO = 'S') THEN
--  begin
    select T.TAXAICMS,T.INSENTIVOFISCAL from TRIBUTO T
     where T.IDFILIAL = new.IDFILIAL
       and T.IDTRIBUTO = new.IDTRIBUTO
     into :VTAXAICMS, :VINSENTIVOFISCAL;
--     new.IDTRIBUTO = :VIDTRIBUTO;
--  end
--  else
--  begin
/*    select T.TAXAICMS,T.INSENTIVOFISCAL from TRIBUTO T
     where T.IDFILIAL = new.IDFILIAL
       and T.IDTRIBUTO = :VIDTRIBUTO
     into :VTAXAICMS, :VINSENTIVOFISCAL;
     new.IDTRIBUTO = :VIDTRIBUTO; */
--  end

/*  if (:VCFOP_PRODUTO = 'S') then
  begin
    select T.TAXAICMS,T.INSENTIVOFISCAL from TRIBUTO T
     where T.IDFILIAL = new.IDFILIAL
       and T.IDTRIBUTO = :VIDTRIBUTO_PRODUTO
     into :VTAXAICMS, :VINSENTIVOFISCAL;
      new.IDTRIBUTO = :VIDTRIBUTO_PRODUTO;
  end */

  if (:VTAXAICMS <> 0) then
  begin
    VVALOR_BASE = 0;
    if (not :VINSENTIVOFISCAL is null) then
    begin
      VSOMABASE = new.CUSTOPRODUTO * new.QTDECOMPRA;
      VSOMAINSENTIVO = :VSOMABASE*:VINSENTIVOFISCAL/100;
      VVALOR_BASE = :VSOMABASE-:VSOMAINSENTIVO;
      VVALOR_ICMS = :VVALOR_BASE*:VTAXAICMS/100;
    end
    else
    begin
      VSOMABASE = new.CUSTOPRODUTO * new.QTDECOMPRA;
      VVALOR_BASE = :VSOMABASE;
      VVALOR_ICMS = :VVALOR_BASE*:VTAXAICMS/100;
    end
    if (:VINSENTIVOFISCAL is null) then
    begin
        new.TAXAICMS = :VTAXAICMS;
        new.VALOR_BASE = :VVALOR_BASE;
        new.VALOR_ICMS = :VVALOR_ICMS;
        new.INSENTIVOFISCAL = null;
    end
    if (not :VINSENTIVOFISCAL is null) then
    begin
        new.TAXAICMS = :VTAXAICMS;
        new.VALOR_BASE = :VVALOR_BASE;
        new.VALOR_ICMS = :VVALOR_ICMS;
        new.INSENTIVOFISCAL = :VINSENTIVOFISCAL;
    end
  end
end
^

/* Trigger: TRG_ITENSENTRADA_BF_UPDATE */
CREATE TRIGGER TRG_ITENSENTRADA_BF_UPDATE FOR ITENSENTRADA
ACTIVE BEFORE UPDATE POSITION 0
as
 begin
   /* INSERE NA TABELA O CÓDIGO DE FABRICACAO */
   if (not new.IDPRODUTO_FAB is null) then begin
       if (exists(select F.IDFILIAL from FORNECEDOR_PRODUTO F
                  where F.IDFILIAL = new.IDFILIAL
                    and F.IDFORNECEDOR = new.IDFORNECEDOR
                    and F.IDPRODUTO = new.IDPRODUTO)) then begin
          update FORNECEDOR_PRODUTO F
             set F.IDPRODUTO_FAB = new.IDPRODUTO_FAB,
                 F.CUSTO = new.CUSTOPRODUTO,
                 F.IDPRODUTO = new.IDPRODUTO,
                 F.PRECOVENDA = new.PRECOVENDA
           where F.IDFILIAL = new.IDFILIAL
             and F.IDFORNECEDOR = new.IDFORNECEDOR
             and F.IDPRODUTO = new.IDPRODUTO; end
       else begin
         insert into FORNECEDOR_PRODUTO (IDFILIAL,IDFORNECEDOR,IDPRODUTO,IDPRODUTO_FAB,CUSTO,PRECOVENDA)
                                 values (new.IDFILIAL,new.IDFORNECEDOR,new.IDPRODUTO,new.IDPRODUTO_FAB,new.CUSTOPRODUTO,new.PRECOVENDA);
       end
   end

   if ((old.QTDECOMPRA*old.FATORCONVERSAO) <> (new.QTDECOMPRA*new.FATORCONVERSAO)) then begin
       /* --Retornando para o estoque */
       execute procedure ATUALIZA_ESTOQUE(old.IDFILIAL,old.IDPRODUTO,(old.QTDECOMPRA*old.FATORCONVERSAO),'-','ALTERAÇÃO PRODUTO PELA ENTRADA NF:' || new.IDNOTA || '/' || new.IDFORNECEDOR);
       /* --Retirando do Estoque */
       execute procedure ATUALIZA_ESTOQUE(new.IDFILIAL,new.IDPRODUTO,(new.QTDECOMPRA*new.FATORCONVERSAO),'+','ALTERAÇÃO PRODUTO PELA ENTRADA NF:' || new.IDNOTA || '/' || new.IDFORNECEDOR);
   end

   if (new.CONFIRMAPRECO='S') then
   begin
      update PRODUTO PRO
      set PRO.CUSTONOTA=new.CUSTONOTA,
          PRO.CUSTOTRIBUTOS=new.CUSTOTRIBUTOS,
          PRO.CUSTOSENCARGOS=new.CUSTOSENCARGOS,
          PRO.PRECOVENDA=new.PRECOVENDA,
          PRO.CUSTONOTAUNIT=new.CUSTONOTAUNIT,
          PRO.CUSTOTRIBUTOSUNIT=new.CUSTOTRIBUTOSUNIT,
          PRO.CUSTOSENCARGOSUNIT=new.CUSTOSENCARGOSUNIT,
          PRO.PRECOVENDAUNIT=new.PRECOVENDAUNIT,
          PRO.IDTRIBUTOCOMPRA=new.IDTRIBUTO,
          PRO.TAXAIPI=new.TAXAIPI,
          PRO.TAXAFRETE=new.TAXAFRETE,
          PRO.TAXAICMSCOMPRA=new.TAXAICMSCOMPRA,
          PRO.TAXAICMSANTECIPADO=new.TAXAICMSANTECIPADO,
          PRO.TAXAIMPFEDERAL=new.TAXAIMPFEDERAL,
          PRO.TAXAFINANCEIRA=new.TAXAFINANCEIRA,
          PRO.TAXAREMARCACAO=new.TAXAREMARCACAO,
          PRO.TAXALUCRO=new.TAXALUCRO,
          PRO.TAXACOMISSAO=new.TAXACOMISSAO,
          PRO.TAXAOUTROS=new.TAXAOUTRAS,
          PRO.CHAMAR_TRIGGER = 'S',
          PRO.TAXA_CAPITAL=new.TAXA_CAPITAL
      where (PRO.IDFILIAL=new.IDFILIAL)
      and   (PRO.IDPRODUTO=new.IDPRODUTO);

      update ITENSTABELAPRECO IT
        set IT.CHAMAR_TRIGGER = 'S'
      where IT.IDFILIAL = new.IDFILIAL
        and IT.IDPRODUTO = new.IDPRODUTO;
   end
end
^

/* Trigger: TRG_ITENSENTRADA_DELETE */
CREATE TRIGGER TRG_ITENSENTRADA_DELETE FOR ITENSENTRADA
ACTIVE AFTER DELETE POSITION 0
as
 begin
   execute procedure ATUALIZA_ESTOQUE(old.IDFILIAL,old.IDPRODUTO,(old.QTDECOMPRA*old.FATORCONVERSAO),'-','EXCLUSÃO DE PRODUTO PELA ENTRADA NF:' || old.IDNOTA || '/' || old.IDFORNECEDOR);
end
^

/* Trigger: TRG_ITENSENTRADA_INSERT */
CREATE TRIGGER TRG_ITENSENTRADA_INSERT FOR ITENSENTRADA
ACTIVE BEFORE INSERT POSITION 0
as
 begin

   select max(IT.CONTADOR)+1 from ITENSENTRADA IT
     where IT.IDFILIAL     = new.IDFILIAL
       and IT.IDNOTA       = new.IDNOTA
       and IT.IDFORNECEDOR = new.IDFORNECEDOR
     into new.CONTADOR;
   if (new.CONTADOR is null) then new.CONTADOR = 1;

   execute procedure ATUALIZA_ESTOQUE(new.IDFILIAL,new.IDPRODUTO,(new.QTDECOMPRA*new.FATORCONVERSAO),'+','INCLUSÃO DE PRODUTO PELA ENTRADA NF:' || new.IDNOTA || '/' || new.IDFORNECEDOR);

   update PRODUTO PRO
     set  PRO.DTVENCIMENTO = new.DTVECIMENTO
   where  (PRO.IDPRODUTO=new.IDPRODUTO)
     and   (PRO.IDFILIAL=new.IDFILIAL);

   if (new.CONFIRMAPRECO='S') then
   begin
      update PRODUTO PRO
      set PRO.CUSTONOTA=new.CUSTONOTA,
          PRO.CUSTOTRIBUTOS=new.CUSTOTRIBUTOS,
          PRO.CUSTOSENCARGOS=new.CUSTOSENCARGOS,
          PRO.IDTRIBUTOCOMPRA=new.IDTRIBUTO,
          PRO.PRECOVENDA=new.PRECOVENDA,
          PRO.CUSTONOTAUNIT=new.CUSTONOTAUNIT,
          PRO.CUSTOTRIBUTOSUNIT=new.CUSTOTRIBUTOSUNIT,
          PRO.CUSTOSENCARGOSUNIT=new.CUSTOSENCARGOSUNIT,
          PRO.PRECOVENDAUNIT=new.PRECOVENDAUNIT,
          PRO.TAXAIPI=new.TAXAIPI,
          PRO.TAXAFRETE=new.TAXAFRETE,
          PRO.TAXAICMSCOMPRA=new.TAXAICMSCOMPRA,
          PRO.TAXAICMSANTECIPADO=new.TAXAICMSANTECIPADO,
          PRO.TAXAIMPFEDERAL=new.TAXAIMPFEDERAL,
          PRO.TAXAFINANCEIRA=new.TAXAFINANCEIRA,
          PRO.TAXAREMARCACAO=new.TAXAREMARCACAO,
          PRO.TAXALUCRO=new.TAXALUCRO,
          PRO.CHAMAR_TRIGGER = 'S',
          PRO.TAXACOMISSAO=new.TAXACOMISSAO,
          PRO.TAXAOUTROS=new.TAXAOUTRAS,
          PRO.TAXA_CAPITAL = new.TAXA_CAPITAL
      where (PRO.IDFILIAL=new.IDFILIAL)
      and   (PRO.IDPRODUTO=new.IDPRODUTO);

      update ITENSTABELAPRECO IT
        set IT.CHAMAR_TRIGGER = 'S'
      where IT.IDFILIAL = new.IDFILIAL
        and IT.IDPRODUTO = new.IDPRODUTO;
   end
   execute procedure ATULIZA_HISTORICO_PRODUTO(new.IDFILIAL,new.IDPRODUTO,null,new.QTDECOMPRA*new.FATORCONVERSAO,new.CUSTONOTA,new.PRECOVENDA,null);
end
^

/* Trigger: TRG_ITENSENT_MAT_AFTER_DELE */
CREATE TRIGGER TRG_ITENSENT_MAT_AFTER_DELE FOR ITENS_ENT_MATERIA_PRIMA
ACTIVE AFTER DELETE POSITION 0
AS
begin
  update PRODUTO M
     set M.QTDEATUAL=M.QTDEATUAL-(old.QTDE)
   where M.IDPRODUTO=old.IDMATERIA_PRIMA
     and M.IDFILIAL=old.IDFILIAL;
end
^

/* Trigger: TRG_ITENSENT_MAT_BEF_INSERT */
CREATE TRIGGER TRG_ITENSENT_MAT_BEF_INSERT FOR ITENS_ENT_MATERIA_PRIMA
ACTIVE BEFORE INSERT POSITION 0
AS
begin
    update PRODUTO M
      set M.QTDEATUAL=M.QTDEATUAL+(new.QTDE) ,
          M.CUSTONOTA = new.CUSTO,
          M.PRECOVENDA = new.CUSTO
    where M.IDPRODUTO=new.IDMATERIA_PRIMA
      and M.IDFILIAL=new.IDFILIAL;
end
^

/* Trigger: TRG_ITENSENT_MAT_BEF_UPDATE */
CREATE TRIGGER TRG_ITENSENT_MAT_BEF_UPDATE FOR ITENS_ENT_MATERIA_PRIMA
ACTIVE BEFORE UPDATE POSITION 0
AS
begin
   update PRODUTO M
      set M.QTDEATUAL=M.QTDEATUAL-(old.QTDE) ,
          M.CUSTONOTA = new.CUSTO,
          M.PRECOVENDA = new.CUSTO
    where M.IDPRODUTO=old.IDMATERIA_PRIMA
      and M.IDFILIAL=old.IDFILIAL;


  update PRODUTO M
     set M.QTDEATUAL=M.QTDEATUAL+(new.QTDE) ,
         M.CUSTONOTA = new.CUSTO,
         M.PRECOVENDA = new.CUSTO
   where M.IDPRODUTO=new.IDMATERIA_PRIMA
     and M.IDFILIAL=new.IDFILIAL;
end
^

/* Trigger: TRG_ITENSNOTA_BF_INS_UPD */
CREATE TRIGGER TRG_ITENSNOTA_BF_INS_UPD FOR ITENSNOTA
ACTIVE BEFORE INSERT OR UPDATE POSITION 0
AS
declare variable VTAXAICMS NUMERIC(10,2);
declare variable VVALOR_BASE numeric(14,2);
declare variable VVALOR_ICMS numeric(14,2);
declare variable VINSENTIVOFISCAL NUMERIC(10,4);
declare variable VSOMABASE numeric(14,2);
declare variable VSOMAINSENTIVO NUMERIC(10,4);
declare variable VCFOP_PRINCIPAL varchar(1);
declare variable VIDTRIBUTO smallint;
declare variable VIDCFOP smallint;
declare variable VIDTRIBUTO_PRODUTO smallint;
declare variable VCFOP_PRODUTO varchar(1);
declare variable VCFOP varchar(5);
declare variable vTIPOEMPRESA varchar(30);
declare variable vIE varchar(30);
declare variable vTIPOCLIENTE varchar(1);
begin

   select F.TIPOEMPRESA from FILIAL F
     where F.IDFILIAL = new.IDFILIAL
    into :VTIPOEMPRESA;

   select N.IDCFOP, C.INSESTADUAL, C.TIPOCLIENTE from NOTA N

      join CLIENTE C
        on C.IDCLIENTE = N.IDCLIENTE

    where N.IDFILIAL = new.IDFILIAL
      and N.IDNOTA = new.IDNOTA
      and N.TIPONOTA = new.TIPONOTA
      and N.SERIE = new.SERIE
     into :VIDCFOP, :vIE, :vTIPOCLIENTE;


   select CFP.CFOP_PRODUTO,CFP.CFOP, CFP.CFOP_PRINCIPAL, CFP.IDTRIBUTO from CFOP CFP
    where CFP.IDFILIAL = new.IDFILIAL
      and CFP.IDCFOP = :VIDCFOP
     into :VCFOP_PRODUTO, :VCFOP,:VCFOP_PRINCIPAL,:VIDTRIBUTO;


    /*-----------------------------*/
    /* PEGA O CFOP                 */
    /*-----------------------------*/
    select P.IDTRIBUTO from PRODUTO P
      where P.IDFILIAL = new.IDFILIAL
       and P.IDPRODUTO = new.IDPRODUTO
     into :VIDTRIBUTO_PRODUTO;
    
    if (:VCFOP_PRODUTO = 'S') then
    begin
      select TB.CFOP from TRIBUTO TB
        where TB.IDFILIAL = new.IDFILIAL
          and TB.IDTRIBUTO = :VIDTRIBUTO_PRODUTO
        into :VCFOP;
    end


    if (:VCFOP_PRINCIPAL = 'S') THEN
    begin
      select T.TAXAICMS,T.INSENTIVOFISCAL from TRIBUTO T
       where T.IDFILIAL = new.IDFILIAL
         and T.IDTRIBUTO = :VIDTRIBUTO
       into :VTAXAICMS, :VINSENTIVOFISCAL;
       new.IDTRIBUTO = :VIDTRIBUTO;
    end
    else
    begin

      select T.TAXAICMS,T.INSENTIVOFISCAL from TRIBUTO T
       where T.IDFILIAL = new.IDFILIAL
         and T.IDTRIBUTO = :VIDTRIBUTO_PRODUTO
       into :VTAXAICMS, :VINSENTIVOFISCAL;
       new.IDTRIBUTO = :VIDTRIBUTO_PRODUTO;
    end


    if (:VTIPOEMPRESA = 'ARTPAN') then
    begin
        -- VERIFICA SE A TABELA CFOP TRIBUTO TA PREENCHIDA
        if (exists(select first 1 C.IDCFOP from CFOP_TRIBUTO C
                    where C.IDFILIAL = new.IDFILIAL
                      and C.IDCFOP   = :VIDCFOP
                      and C.IDTRIBUTO_ORIGEM = new.IDTRIBUTO)) then
        begin
    
          if (:VTIPOCLIENTE = 'J') then
          begin
              if (:VIE <> '') then
              begin
                  if (:VIE <> 'ISENTO') then
                  begin

                      select first 1 C.IDTRIBUTO_DESTINO from CFOP_TRIBUTO C
                        where C.IDFILIAL = new.IDFILIAL
                          and C.IDCFOP   = :VIDCFOP
                          and C.IDTRIBUTO_ORIGEM = new.IDTRIBUTO
                       into new.IDTRIBUTO;
    
    
                      select T.TAXAICMS,T.INSENTIVOFISCAL from TRIBUTO T
                       where T.IDFILIAL = new.IDFILIAL
                         and T.IDTRIBUTO =  new.IDTRIBUTO
                       into :VTAXAICMS, :VINSENTIVOFISCAL;
                  end
              end
           end
        end
    end 



    if (:VTAXAICMS <> 0) then
    begin
      VVALOR_BASE = 0;
      if (not :VINSENTIVOFISCAL is null) then
      begin
        VSOMABASE = new.PRECOVENDA * new.QTDEPEDIDO;
        VSOMAINSENTIVO = :VSOMABASE*:VINSENTIVOFISCAL/100;
        VVALOR_BASE = :VSOMABASE-:VSOMAINSENTIVO;
        VVALOR_ICMS = :VVALOR_BASE*:VTAXAICMS/100;
      end
      else
      begin
        VSOMABASE = new.PRECOVENDA * new.QTDEPEDIDO;
        VVALOR_BASE = :VSOMABASE;
        VVALOR_ICMS = :VVALOR_BASE*:VTAXAICMS/100;
      end

      if (:VINSENTIVOFISCAL is null) then
      begin
          new.TAXAICMS = :VTAXAICMS;
          new.VALOR_BASE = :VVALOR_BASE;
          new.VALOR_ICMS = :VVALOR_ICMS;
          new.INSENTIVOFISCAL = 0;
      end
      else
      if (not :VINSENTIVOFISCAL is null) then
      begin
         new.TAXAICMS = :VTAXAICMS;
         new.VALOR_BASE = :VVALOR_BASE;
         new.VALOR_ICMS = :VVALOR_ICMS;
         new.INSENTIVOFISCAL = :VINSENTIVOFISCAL;
      end
    end
end
^

/* Trigger: TRG_ITENSNOTA_EAN */
CREATE TRIGGER TRG_ITENSNOTA_EAN FOR ITENSNOTA
ACTIVE BEFORE INSERT OR UPDATE POSITION 0
AS
declare variable vEAN varchar(15);
declare variable vEANTRIB varchar(15);
begin
   if ((inserting) or (updating))  then
   begin

      -- CODIGO BARRA  ==
      -- DUN           ==
      select P.DUN, P.CODIGO_BARRA  from PRODUTO P
        where P.IDFILIAL  = new.IDFILIAL
          and P.IDPRODUTO = new.IDPRODUTO
       into :VEAN, :VEANTRIB;

      if (not (STRLEN(:VEANTRIB) in (8,12,13,14))) then
         VEANTRIB = '';

      if (not (STRLEN(:VEAN) in (8,12,13,14))) then
         VEAN = '';

--      if (new.FATORCONVERSAO = 1) then
--      begin
         new.CEAN      = :VEAN;
         new.CEAN_TRIB = :VEANTRIB;
--      end
--      else /* SE FATOR DIFERENTE */
--      begin
--         new.CEAN      = :VEAN;
--         new.CEAN_TRIB = :VEANTRIB;
--      end

   end

end
^

/* Trigger: TRG_ITENSNOTA_INSERT */
CREATE TRIGGER TRG_ITENSNOTA_INSERT FOR ITENSNOTA
ACTIVE BEFORE INSERT POSITION 0
as
declare variable vTAXADESCONTO numeric(10,2);
declare variable vTOTALDESCONTO numeric(10,2);
begin
   select max(IT.CONTADOR)+1 from ITENSNOTA IT
     where IT.IDFILIAL = new.IDFILIAL
       and IT.IDNOTA = new.IDNOTA
     into new.CONTADOR;

   if (new.CONTADOR is null) then
     new.CONTADOR = 1;

   select P.TAXADESCONTO, P.TOTALDESCONTO from PEDIDO P
    where P.IDFILIAL = new.IDFILIAL
      and P.IDPEDIDO = new.IDPEDIDO
      and P.IDFOLHA = new.IDFOLHA
        into :vTAXADESCONTO, :vTOTALDESCONTO;

   if (:vTAXADESCONTO is null) then vTAXADESCONTO = 0;
   if (:vTOTALDESCONTO is null) then vTOTALDESCONTO = 0;

   if (:vTAXADESCONTO <> 0) then begin
     new.PRECOVENDA = cast( new.PRECOVENDA-(new.PRECOVENDA*:vTAXADESCONTO/100) as numeric(16,2) );
     new.TAXADESCONTO = 0;
     new.PRECOTABELA = new.PRECOVENDA;

     new.CUSTONOTA     = cast(new.CUSTONOTA-(new.CUSTONOTA*:vTAXADESCONTO/100) as numeric(16,2));
     new.CUSTOENCARGOS = cast(new.CUSTOENCARGOS-(new.CUSTOENCARGOS*:vTAXADESCONTO/100) as numeric(16,2));
     new.CUSTOTRIBUTADO = cast(new.CUSTOTRIBUTADO-(new.CUSTOTRIBUTADO*:vTAXADESCONTO/100) as numeric(16,2));
     new.CALCULO_VALOR_BASE_ST = cast(new.CALCULO_VALOR_BASE_ST-(new.CALCULO_VALOR_BASE_ST*:VTAXADESCONTO/100) as numeric(16,2));
     new.CALCULO_VALOR_ICMS_ST = cast(new.CALCULO_VALOR_ICMS_ST-(new.CALCULO_VALOR_ICMS_ST*:VTAXADESCONTO/100) as numeric(16,2));
     new.CALCULO_VALOR_BASE = cast(new.CALCULO_VALOR_BASE-(new.CALCULO_VALOR_BASE*:VTAXADESCONTO/100) as numeric(16,2));
     new.CALCULO_VALOR_ICMS = cast(new.CALCULO_VALOR_ICMS-(new.CALCULO_VALOR_ICMS*:VTAXADESCONTO/100) as numeric(16,2));
   end
end
^

/* Trigger: TRG_ITENSNOTA_UPDATE */
CREATE TRIGGER TRG_ITENSNOTA_UPDATE FOR ITENSNOTA
ACTIVE BEFORE UPDATE POSITION 0
as
declare variable vTAXADESCONTO numeric(10,2);
declare variable vTOTALDESCONTO numeric(10,2);
begin
/*
   select P.TAXADESCONTO, P.TOTALDESCONTO from PEDIDO P
    where P.IDFILIAL = new.IDFILIAL
      and P.IDPEDIDO = new.IDPEDIDO
      and P.IDFOLHA = new.IDFOLHA
        into :vTAXADESCONTO, :vTOTALDESCONTO;
   if (:vTAXADESCONTO is null) then vTAXADESCONTO = 0;
   if (:vTOTALDESCONTO is null) then vTOTALDESCONTO = 0;

   if (:vTAXADESCONTO <> 0) then begin
     new.PRECOVENDA = new.PRECOVENDA-(new.PRECOVENDA*:vTAXADESCONTO/100);
     new.TAXADESCONTO = 0;
     new.PRECOTABELA = new.PRECOVENDA;

     new.CUSTONOTA = new.CUSTONOTA-(new.CUSTONOTA*:vTAXADESCONTO/100);
     new.CUSTOENCARGOS = new.CUSTOENCARGOS-(new.CUSTOENCARGOS*:vTAXADESCONTO/100);
     new.CUSTOTRIBUTADO = new.CUSTOTRIBUTADO-(new.CUSTOTRIBUTADO*:vTAXADESCONTO/100);

   end
*/
end
^

/* Trigger: TRG_ITENSPEDIDO_AF_INSERT */
CREATE TRIGGER TRG_ITENSPEDIDO_AF_INSERT FOR ITENSPEDIDO
ACTIVE AFTER INSERT POSITION 1
AS
  declare variable VESTOQUE_REPRES varchar(1);
  declare variable vORCAMENTO_VENDA varchar(1);
begin
  select coalesce(P.ORCAMENTO_VENDA,'') from PEDIDO P
    where P.IDFILIAL = new.IDFILIAL
      and P.IDPEDIDO = new.IDPEDIDO
      and P.IDFOLHA  = new.IDFOLHA
   into :VORCAMENTO_VENDA;
   if (:VORCAMENTO_VENDA = 'O') then Exit;


   -- SE FOR DIFERENDE DE PENDENDE
   if ((new.SIT_PEDIDO <> 'P'))  then begin
       if (((new.ESTOQUE_REPRESENTANTE='S') and (new.SIT_PEDIDO='V')) or ((new.ESTOQUE_REPRESENTANTE='S') and (new.SIT_PEDIDO='B')))
       then
            VESTOQUE_REPRES='S';
       else
           if ((new.SIT_PEDIDO = 'C') and (new.ESTOQUE_REPRESENTANTE = 'S')) then
           begin
              VESTOQUE_REPRES='S';
              execute procedure ATUALIZA_ESTOQUE(new.IDFILIAL,new.IDPRODUTO,(new.QTDEPEDIDO*new.FATORCONVERSAO),'-','INCLUSAO DO PRODUTO P/ VENDA PD:' || new.IDPEDIDO || '/' || new.IDFOLHA);
           end
           else
              if (new.SIT_PEDIDO <> '-') then
                  execute procedure ATUALIZA_ESTOQUE(new.IDFILIAL,new.IDPRODUTO,(new.QTDEPEDIDO*new.FATORCONVERSAO),'-','INCLUSAO DO PRODUTO P/ VENDA PD:' || new.IDPEDIDO || '/' || new.IDFOLHA);
   end
end
^

/* Trigger: TRG_ITENSPEDIDO_AF_INSERT_SUP */
CREATE TRIGGER TRG_ITENSPEDIDO_AF_INSERT_SUP FOR ITENSPEDIDO
ACTIVE AFTER INSERT POSITION 0
AS
declare variable vIDMOVTO_SUPERVISOR integer;
declare variable vIDSUPERVISOR smallint;
declare variable VCPF_REPRESENTANTE varchar(14);
declare variable VIDREPRESENTANTE smallint;
declare variable vIDCLIENTE integer;
declare variable vDATAPEDIDO date;
declare variable vVALORMOVTO numeric(12,2);
declare variable vVALORMOVTONEG numeric(12,2);
declare variable VCONTROLA_CONTA_SUPERVISOR varchar(1);
declare variable vSITUACAOPEDIDO varchar(1);
declare variable vORCAMENTO_VENDA varchar(1);
begin
  select coalesce(P.ORCAMENTO_VENDA,'') from PEDIDO P
    where P.IDFILIAL = new.IDFILIAL
      and P.IDPEDIDO = new.IDPEDIDO
      and P.IDFOLHA  = new.IDFOLHA
   into :VORCAMENTO_VENDA;
  if (:VORCAMENTO_VENDA = 'O') then Exit;

   select F.CONTROLA_CONTA_SUPERVISOR from FILIAL F
     where F.IDFILIAL = new.IDFILIAL
    into :VCONTROLA_CONTA_SUPERVISOR;
   if (:VCONTROLA_CONTA_SUPERVISOR = 'S') then
   begin
       select P.IDREPRESENTANTE, P.IDCLIENTE, P.DATAPEDIDO from PEDIDO P
         where P.IDFILIAL = new.IDFILIAL
           and P.IDPEDIDO = new.IDPEDIDO
           and P.IDFOLHA = new.IDFOLHA
          into :VIDREPRESENTANTE, :VIDCLIENTE, :VDATAPEDIDO;
    
       select first 1 R.CPF_SUPERVISOR from REPRESENTANTE R
          where R.IDREPRESENTANTE = :VIDREPRESENTANTE
           into :VCPF_REPRESENTANTE;

    
    
       select first 1 R.IDREPRESENTANTE from REPRESENTANTE R
           where R.CPF = :VCPF_REPRESENTANTE
          into :VIDSUPERVISOR;
    
       if (not :VIDSUPERVISOR is null) then begin
          select cast(max(M.IDMOVTO_SUPERVISOR) as integer)+1 from MOVTO_SUPERVISOR M
            where M.IDFILIAL = NEW.IDFILIAL
              into :VIDMOVTO_SUPERVISOR;
           if (VIDMOVTO_SUPERVISOR is null) then VIDMOVTO_SUPERVISOR = 1;
    
           if (new.SIT_PEDIDO = 'V') then
           begin
             VVALORMOVTO = new.PRECOVENDA - new.PRECOTABELA;
             VVALORMOVTO = VVALORMOVTO * new.QTDEPEDIDO;
           end

           if ((new.SIT_PEDIDO = 'T') or (new.SIT_PEDIDO = 'B'))  then
           begin
             VVALORMOVTO = new.PRECOVENDA;
             VVALORMOVTO = VVALORMOVTO * new.QTDEPEDIDO;
             VVALORMOVTO = VVALORMOVTO*-1;
           end

           if (VVALORMOVTO < 0) then
           begin
             VVALORMOVTONEG = VVALORMOVTO*-1;
            INSERT INTO MOVTO_SUPERVISOR (IDFILIAL, IDMOVTO_SUPERVISOR, IDSUPERVISOR, DATA_MOVTO, IDREPRESENTANTE, IDCLIENTE, IDPRODUTO, VALOR_MOVTO, TIPO_OPERACAO, IDPEDIDO, IDFOLHA)
                                   VALUES(new.IDFILIAL,:VIDMOVTO_SUPERVISOR, :VIDSUPERVISOR, :VDATAPEDIDO , :VIDREPRESENTANTE, :VIDCLIENTE,new.IDPRODUTO,:VVALORMOVTONEG,'D',new.IDPEDIDO,new.IDFOLHA);
           end
           if (VVALORMOVTO > 0) then
           begin
            INSERT INTO MOVTO_SUPERVISOR (IDFILIAL, IDMOVTO_SUPERVISOR, IDSUPERVISOR, DATA_MOVTO, IDREPRESENTANTE, IDCLIENTE, IDPRODUTO, VALOR_MOVTO, TIPO_OPERACAO, IDPEDIDO, IDFOLHA)
                                   VALUES(new.IDFILIAL,:VIDMOVTO_SUPERVISOR, :VIDSUPERVISOR, :VDATAPEDIDO , :VIDREPRESENTANTE, :VIDCLIENTE,new.IDPRODUTO,:VVALORMOVTO,'C',new.IDPEDIDO,new.IDFOLHA);
    
           end
       end
   end
end
^

/* Trigger: TRG_ITENSPEDIDO_AF_UPDATE_SUP */
CREATE TRIGGER TRG_ITENSPEDIDO_AF_UPDATE_SUP FOR ITENSPEDIDO
ACTIVE AFTER UPDATE POSITION 0
AS
declare variable vIDMOVTO_SUPERVISOR integer;
declare variable vIDSUPERVISOR smallint;
declare variable VCPF_REPRESENTANTE varchar(14);
declare variable VIDREPRESENTANTE smallint;
declare variable vIDCLIENTE integer;
declare variable vDATAPEDIDO date;
declare variable vVALORMOVTO numeric(12,2);
declare variable vVALORMOVTONEG numeric(12,2);
declare variable VVALORMOVTOOLD numeric(12,2);
declare variable VVALORMOVTOOLDNEG numeric(12,2);
declare variable vCONTROLA_CONTA_SUPERVISOR varchar(1);
declare variable vORCAMENTO_VENDA varchar(1);
begin
  select coalesce(P.ORCAMENTO_VENDA,'') from PEDIDO P
    where P.IDFILIAL = new.IDFILIAL
      and P.IDPEDIDO = new.IDPEDIDO
      and P.IDFOLHA  = new.IDFOLHA
   into :VORCAMENTO_VENDA;
  if (:VORCAMENTO_VENDA = 'O') then Exit;

   select F.CONTROLA_CONTA_SUPERVISOR from FILIAL F
      where F.IDFILIAL = new.IDFILIAL
   into :VCONTROLA_CONTA_SUPERVISOR;
   if (:VCONTROLA_CONTA_SUPERVISOR = 'S') then
   begin
       if ( (OLD.PRECOTABELA - old.PRECOVENDA) <> (new.PRECOTABELA - new.PRECOVENDA) or (old.SIT_PEDIDO <> new.SIT_PEDIDO ) ) then
       begin
    
           select P.IDREPRESENTANTE, P.IDCLIENTE, P.DATAPEDIDO from PEDIDO P
             where P.IDFILIAL = new.IDFILIAL
               and P.IDPEDIDO = new.IDPEDIDO
               and P.IDFOLHA = new.IDFOLHA
              into :VIDREPRESENTANTE, :VIDCLIENTE, :VDATAPEDIDO;
        
           select first 1 R.CPF_SUPERVISOR from REPRESENTANTE R
              where R.IDREPRESENTANTE = :VIDREPRESENTANTE
               into :VCPF_REPRESENTANTE;
        
        
           select first 1 R.IDREPRESENTANTE from REPRESENTANTE R
               where R.CPF = :VCPF_REPRESENTANTE
              into :VIDSUPERVISOR;
        
           if (not :VIDSUPERVISOR is null) then begin
               select cast(max(M.IDMOVTO_SUPERVISOR) as integer)+1 from MOVTO_SUPERVISOR M
                  where M.IDFILIAL = new.IDFILIAL
                    into :VIDMOVTO_SUPERVISOR;
            
                if (VIDMOVTO_SUPERVISOR is null) then VIDMOVTO_SUPERVISOR = 1;
            
    
                if (old.SIT_PEDIDO = 'V') then
                begin
                  VVALORMOVTOOLD = old.PRECOVENDA - old.PRECOTABELA;
                  VVALORMOVTOOLD = VVALORMOVTOOLD * old.QTDEPEDIDO;
                end
    
                if ((old.SIT_PEDIDO = 'T') or (old.SIT_PEDIDO = 'B'))  then
                begin
                  VVALORMOVTOOLD = old.PRECOVENDA;
                  VVALORMOVTOOLD = VVALORMOVTOOLD * old.QTDEPEDIDO;
                  VVALORMOVTOOLD = VVALORMOVTOOLD*-1;
                end
            
                if (VVALORMOVTOOLD < 0) then
                begin
                  VVALORMOVTOOLDNEG = VVALORMOVTOOLD*-1;
                 INSERT INTO MOVTO_SUPERVISOR (IDFILIAL, IDMOVTO_SUPERVISOR, IDSUPERVISOR, DATA_MOVTO, IDREPRESENTANTE, IDCLIENTE, IDPRODUTO, VALOR_MOVTO, TIPO_OPERACAO, IDPEDIDO, IDFOLHA)
                                        VALUES(old.IDFILIAL,:VIDMOVTO_SUPERVISOR, :VIDSUPERVISOR, :VDATAPEDIDO , :VIDREPRESENTANTE, :VIDCLIENTE,old.IDPRODUTO,:VVALORMOVTOOLDNEG,'C',old.IDPEDIDO,old.IDFOLHA);
            
                end
            
                if (VVALORMOVTOOLD > 0) then
                begin
                 INSERT INTO MOVTO_SUPERVISOR (IDFILIAL, IDMOVTO_SUPERVISOR, IDSUPERVISOR, DATA_MOVTO, IDREPRESENTANTE, IDCLIENTE, IDPRODUTO, VALOR_MOVTO, TIPO_OPERACAO, IDPEDIDO, IDFOLHA)
                                        VALUES(old.IDFILIAL,:VIDMOVTO_SUPERVISOR, :VIDSUPERVISOR, :VDATAPEDIDO , :VIDREPRESENTANTE, :VIDCLIENTE,old.IDPRODUTO,:VVALORMOVTOOLD,'D',old.IDPEDIDO,old.IDFOLHA);
            
                end
            
               select cast(max(M.IDMOVTO_SUPERVISOR) as integer)+1 from MOVTO_SUPERVISOR M
                  where M.IDFILIAL = NEW.IDFILIAL
                    into :VIDMOVTO_SUPERVISOR;
                if (VIDMOVTO_SUPERVISOR is null) then VIDMOVTO_SUPERVISOR = 1;
            
                if ( new.SIT_PEDIDO = 'V') then
                begin
                  VVALORMOVTO = new.PRECOVENDA - new.PRECOTABELA;
                  VVALORMOVTO = VVALORMOVTO * new.QTDEPEDIDO;
                end
    
                if ((new.SIT_PEDIDO = 'T') or (new.SIT_PEDIDO = 'B'))  then
                begin
                  VVALORMOVTO = new.PRECOVENDA;
                  VVALORMOVTO = VVALORMOVTO * new.QTDEPEDIDO;
                  VVALORMOVTO = VVALORMOVTO*-1;
                end
            
                if (VVALORMOVTO < 0) then
                begin
                  VVALORMOVTONEG = VVALORMOVTO*-1;
                 INSERT INTO MOVTO_SUPERVISOR (IDFILIAL, IDMOVTO_SUPERVISOR, IDSUPERVISOR, DATA_MOVTO, IDREPRESENTANTE, IDCLIENTE, IDPRODUTO, VALOR_MOVTO, TIPO_OPERACAO, IDPEDIDO, IDFOLHA)
                                        VALUES(new.IDFILIAL,:VIDMOVTO_SUPERVISOR, :VIDSUPERVISOR, :VDATAPEDIDO , :VIDREPRESENTANTE, :VIDCLIENTE,new.IDPRODUTO,:VVALORMOVTONEG,'D',new.IDPEDIDO,new.IDFOLHA);
            
                end
                if (VVALORMOVTO > 0) then
                begin
                 INSERT INTO MOVTO_SUPERVISOR (IDFILIAL, IDMOVTO_SUPERVISOR, IDSUPERVISOR, DATA_MOVTO, IDREPRESENTANTE, IDCLIENTE, IDPRODUTO, VALOR_MOVTO, TIPO_OPERACAO, IDPEDIDO, IDFOLHA)
                                        VALUES(new.IDFILIAL,:VIDMOVTO_SUPERVISOR, :VIDSUPERVISOR, :VDATAPEDIDO , :VIDREPRESENTANTE, :VIDCLIENTE,new.IDPRODUTO,:VVALORMOVTO,'C',new.IDPEDIDO,new.IDFOLHA);
            
                end
           end
       end
   end
end
^

/* Trigger: TRG_ITENSPEDIDO_BF_DELETE_CORTE */
CREATE TRIGGER TRG_ITENSPEDIDO_BF_DELETE_CORTE FOR ITENSPEDIDO
ACTIVE BEFORE DELETE POSITION 0
AS
  declare variable VIDCLIENTE integer;
  declare variable VIDREPRESENTANTE integer;
  declare variable vDATAPEDIDO date;
begin
  if (OLD.HOUVE_CORTE = 'S') then begin
     select P.IDCLIENTE, P.IDREPRESENTANTE, P.DATAPEDIDO  from PEDIDO P
     where P.IDFILIAL = OLD.IDFILIAL
     and   P.IDPEDIDO = OLD.IDPEDIDO
     and   P.IDFOLHA = OLD.IDFOLHA
     into :VIDCLIENTE, :VIDREPRESENTANTE, :VDATAPEDIDO;

     insert into CORTES (IDFILIAL,
                         IDCLIENTE,
                         IDPEDIDO,
                         IDPRODUTO,
                         IDREPRESENTANTE,
                         QTDE,
                         PRECOVENDA,
                         IDFOLHA,
                         IDUNIDADEMEDIDA,
                         FATORCONVERSAO,
                         DATAPEDIDO)
                 values (OLD.IDFILIAL, 
                         :VIDCLIENTE,
                         OLD.IDPEDIDO,
                         OLD.IDPRODUTO,
                         :VIDREPRESENTANTE,
                         OLD.QTDEPEDIDO,
                         OLD.PRECOVENDA,
                         OLD.IDFOLHA,
                         OLD.IDUNIDADEMEDIDA,
                         OLD.FATORCONVERSAO,
                         :VDATAPEDIDO);
  end

end
^

/* Trigger: TRG_ITENSPEDIDO_BF_DELETE_SUP */
CREATE TRIGGER TRG_ITENSPEDIDO_BF_DELETE_SUP FOR ITENSPEDIDO
ACTIVE BEFORE DELETE POSITION 0
AS
declare variable vIDMOVTO_SUPERVISOR integer;
declare variable vIDSUPERVISOR smallint;
declare variable VCPF_REPRESENTANTE varchar(14);
declare variable VIDREPRESENTANTE smallint;
declare variable vIDCLIENTE integer;
declare variable vDATAPEDIDO date;
declare variable VVALORMOVTOOLD numeric(12,2);
declare variable VVALORMOVTOOLDNEG numeric(12,2);
declare variable vCONTROLA_CONTA_SUPERVISOR varchar(1);
begin
   select F.CONTROLA_CONTA_SUPERVISOR from FILIAL F
     where F.IDFILIAL = old.IDFILIAL
    into :VCONTROLA_CONTA_SUPERVISOR;
   if (:VCONTROLA_CONTA_SUPERVISOR = 'S') then
   begin
       select P.IDREPRESENTANTE, P.IDCLIENTE, P.DATAPEDIDO from PEDIDO P
         where P.IDFILIAL = old.IDFILIAL
           and P.IDPEDIDO = old.IDPEDIDO
           and P.IDFOLHA = old.IDFOLHA
          into :VIDREPRESENTANTE, :VIDCLIENTE, :VDATAPEDIDO;
    
       select first 1 R.CPF_SUPERVISOR from REPRESENTANTE R
          where R.IDREPRESENTANTE = :VIDREPRESENTANTE
           into :VCPF_REPRESENTANTE;
    
    
       select first 1 R.IDREPRESENTANTE from REPRESENTANTE R
           where R.CPF = :VCPF_REPRESENTANTE
          into :VIDSUPERVISOR;
    
       if (not :VIDSUPERVISOR is null) then begin    
           select cast(max(M.IDMOVTO_SUPERVISOR) as integer)+1 from MOVTO_SUPERVISOR M
              where M.IDFILIAL = old.IDFILIAL
                into :VIDMOVTO_SUPERVISOR;
        
            if (VIDMOVTO_SUPERVISOR is null) then VIDMOVTO_SUPERVISOR = 1;
        
              if (old.SIT_PEDIDO = 'V') then
              begin
                VVALORMOVTOOLD = old.PRECOVENDA - old.PRECOTABELA;
                VVALORMOVTOOLD = VVALORMOVTOOLD * old.QTDEPEDIDO;
              end
    
              if ((old.SIT_PEDIDO = 'T') or (old.SIT_PEDIDO = 'B'))  then
              begin
                VVALORMOVTOOLD = old.PRECOVENDA;
                VVALORMOVTOOLD = VVALORMOVTOOLD * old.QTDEPEDIDO;
                VVALORMOVTOOLD = VVALORMOVTOOLD*-1;
              end
    
            if (VVALORMOVTOOLD < 0) then
            begin
              VVALORMOVTOOLDNEG = VVALORMOVTOOLD*-1;
             INSERT INTO MOVTO_SUPERVISOR (IDFILIAL, IDMOVTO_SUPERVISOR, IDSUPERVISOR, DATA_MOVTO, IDREPRESENTANTE, IDCLIENTE, IDPRODUTO, VALOR_MOVTO, TIPO_OPERACAO, IDPEDIDO, IDFOLHA)
                                    VALUES(old.IDFILIAL,:VIDMOVTO_SUPERVISOR, :VIDSUPERVISOR, :VDATAPEDIDO , :VIDREPRESENTANTE, :VIDCLIENTE,old.IDPRODUTO,:VVALORMOVTOOLDNEG,'C',old.IDPEDIDO,old.IDFOLHA);
        
            end
        
            if (VVALORMOVTOOLD > 0) then
            begin
             INSERT INTO MOVTO_SUPERVISOR (IDFILIAL, IDMOVTO_SUPERVISOR, IDSUPERVISOR, DATA_MOVTO, IDREPRESENTANTE, IDCLIENTE, IDPRODUTO, VALOR_MOVTO, TIPO_OPERACAO, IDPEDIDO, IDFOLHA)
                                    VALUES(old.IDFILIAL,:VIDMOVTO_SUPERVISOR, :VIDSUPERVISOR, :VDATAPEDIDO , :VIDREPRESENTANTE, :VIDCLIENTE,old.IDPRODUTO,:VVALORMOVTOOLD,'D',old.IDPEDIDO,old.IDFOLHA);
        
            end
       end
   end
end
^

/* Trigger: TRG_ITENSPEDIDO_DELETE */
CREATE TRIGGER TRG_ITENSPEDIDO_DELETE FOR ITENSPEDIDO
ACTIVE BEFORE DELETE POSITION 0
as
declare variable ntmp char(1);
declare variable vSITUACAOPEDIDO char(1);
declare variable vESTOQUE_REPRES varchar(1);
declare variable vIDREPRES integer;
declare variable VCTR_VENCTO_PRODUTO varchar(1);
declare variable VSIT_PEDIDO varchar(1);
declare variable vORCAMENTO_VENDA varchar(1);
begin
  -- ********************************************************
  -- ********************************************************
  -- BAIXA DO VENCIMENTO
  -- ********************************************************
  -- ********************************************************
  select coalesce(P.ORCAMENTO_VENDA,''), P.SITUACAOPEDIDO from PEDIDO P
    where P.IDFILIAL = old.IDFILIAL
      and P.IDPEDIDO = old.IDPEDIDO
      and P.IDFOLHA  = old.IDFOLHA
   into :VORCAMENTO_VENDA, :VSIT_PEDIDO;

  if (:VORCAMENTO_VENDA = 'O') then Exit;

  if (:VSIT_PEDIDO <> 'C') then
  begin
      update PEDIDO P
         set P.TOTALDIGITADO = P.TOTALDIGITADO-(old.PRECOVENDA*old.QTDEPEDIDO)
       where P.IDFILIAL = old.IDFILIAL
         and P.IDPEDIDO = old.IDPEDIDO
         and P.IDFOLHA = old.IDFOLHA;
  end


  select F.CTR_VENCTO_PRODUTO from FILIAL F
    where F.IDFILIAL = old.IDFILIAL
   into :VCTR_VENCTO_PRODUTO;


   if (:VCTR_VENCTO_PRODUTO = 'S') then begin
      update VENCTO_PRODUTO VP
         set VP.QTDE = VP.QTDE+(old.QTDEPEDIDO*old.FATORCONVERSAO)
       where VP.IDFILIAL = old.IDFILIAL
         and VP.IDPRODUTO = old.IDPRODUTO
         and VP.SITUACAO = 'A'
         and VP.DATA_VENCTO = old.DATA_VENCTO;
   end


  --******* F  I   M   DA BAIXA DO VENCIMENTO ***************



    select P.SITUACAOPEDIDO, P.IDREPRESENTANTE from PEDIDO P
     where P.IDFILIAL = old.IDFILIAL
       and P.IDPEDIDO = old.IDPEDIDO
       and P.IDFOLHA = old.IDFOLHA
      into :vSITUACAOPEDIDO, :VIDREPRES;


    /* SE FOR DIFERENTE DE (P)ENDENTE ELE NÃO
       RETIRA DO ESTOQUE */


    if (old.SIT_PEDIDO <> 'P') then begin
       if ( (old.ESTOQUE_REPRESENTANTE='S') and (old.SIT_PEDIDO='V') ) then
          -- NAO BAIXA ESTOQUE
            VESTOQUE_REPRES='S';
       else begin
             if ((old.SIT_PEDIDO = 'C') and (old.ESTOQUE_REPRESENTANTE = 'S')) then
             begin
                 execute procedure ATUALIZA_ESTOQUE(old.IDFILIAL,old.IDPRODUTO,(old.QTDEPEDIDO*old.FATORCONVERSAO),'+','EXCLUSÃO DO PRODUTO P/ VENDA PD:' || old.IDPEDIDO || '/' || old.IDFOLHA);
                 NTMP = 'S';
             end
             else
                if (old.SIT_PEDIDO <> '-') then
                    execute procedure ATUALIZA_ESTOQUE(old.IDFILIAL,old.IDPRODUTO,(old.QTDEPEDIDO*old.FATORCONVERSAO),'+','EXCLUSÃO DO PRODUTO P/ VENDA PD:' || old.IDPEDIDO || '/' || old.IDFOLHA);
       end
    end

    if (old.IDCARTEIRA is not null) then begin
       delete from CARTEIRA C
          where C.IDFILIAL = old.IDFILIAL and
                C.IDCARTEIRA = old.IDCARTEIRA;
    end
end
^

/* Trigger: TRG_ITENSPEDIDO_DELETE_DEPOSITO */
CREATE TRIGGER TRG_ITENSPEDIDO_DELETE_DEPOSITO FOR ITENSPEDIDO
ACTIVE BEFORE DELETE POSITION 1
as
  declare variable vSITUACAOPEDIDO varchar(1);
  declare variable vMD_DEPOSITO varchar(1);
  declare variable vORCAMENTO_VENDA varchar(1);
begin
   select F.MD_DEPOSITO from FILIAL F
    where F.IDFILIAL = old.IDFILIAL
      into :VMD_DEPOSITO;

   if (:VMD_DEPOSITO = 'S') then begin
       select P.SITUACAOPEDIDO, P.ORCAMENTO_VENDA from PEDIDO P
        where P.IDFILIAL = old.IDFILIAL
          and P.IDPEDIDO = old.IDPEDIDO
          and P.IDFOLHA = old.IDFOLHA
        into :vSITUACAOPEDIDO, :VORCAMENTO_VENDA;
    
       -- APENAS VENDA DO CUPOPOM Q BAIXA
       if ( (VORCAMENTO_VENDA = 'V') or (VORCAMENTO_VENDA is null) ) then begin
           if (:vSITUACAOPEDIDO <> 'P') then begin
                 execute procedure ATUALIZA_ESTOQUE_DEPOSITO(old.IDFILIAL,old.IDDEPOSITO,old.IDPRODUTO,(old.QTDEPEDIDO*old.FATORCONVERSAO),'+','EXCLUSÃO DE PEDIDO PD:' || old.IDPEDIDO || '/' || old.IDFOLHA);
           end
       end
   end
end
^

/* Trigger: TRG_ITENSPEDIDO_INSERT */
CREATE TRIGGER TRG_ITENSPEDIDO_INSERT FOR ITENSPEDIDO
ACTIVE BEFORE INSERT POSITION 0
as
  declare variable NID integer;
  declare variable NVALORCARTEIRA numeric(16,2);
  declare variable DTPEDIDO date;
  declare variable NOMEPRODUTO varchar(70);
  declare variable IDREPRES smallint;
  declare variable OPERACAO char(1);
  declare variable SITUACAOPEDIDO char(1);
  declare variable VGERAR_CARTEIRA char(1);
  declare variable VIDCLIENTE integer;
  declare variable vCTR_VENCTO_PRODUTO varchar(1);
  declare variable VESTOQUE_REPRES varchar(1);

  declare variable vMOVIMENTA_VENDA varchar(1);
  declare variable vMOVIMENTA_BONIFICACAO varchar(1);
  declare variable vMOVIMENTA_TROCA varchar(1);
  declare variable vMOVIMENTA_CONSIGNACAO varchar(1);

  declare variable vCUSTONOTA numeric(16,4);
  declare variable vCUSTOTRIBUTADO numeric(16,4);
  declare variable vCUSTOENCARGO numeric(16,4);
  declare variable vORCAMENTO_VENDA varchar(1);
begin
  -- ********************************************************
  -- ********************************************************
  -- BAIXA ESTOQUE DO CONTROLE DE VENCIMENTO
  -- ********************************************************
  -- ********************************************************


  update PEDIDO P
     set P.TOTALDIGITADO = 0
   where P.IDFILIAL = new.IDFILIAL
     and P.IDPEDIDO = new.IDPEDIDO
     and P.TOTALDIGITADO is null
     and P.IDFOLHA = new.IDFOLHA;

  update PEDIDO P
     set P.TOTALDIGITADO = P.TOTALDIGITADO+(new.PRECOVENDA*new.QTDEPEDIDO)
   where P.IDFILIAL = new.IDFILIAL
     and P.IDPEDIDO = new.IDPEDIDO
     and P.IDFOLHA = new.IDFOLHA;


  select P.CUSTONOTAUNIT, P.CUSTOTRIBUTOSUNIT, P.CUSTOSENCARGOSUNIT from PRODUTO P
    where P.IDFILIAL = new.IDFILIAL
      and P.IDPRODUTO = new.IDPRODUTO
    into :VCUSTONOTA, :VCUSTOTRIBUTADO, :VCUSTOENCARGO;


    new.CUSTONOTA = :VCUSTONOTA * new.FATORCONVERSAO;
    new.CUSTOTRIBUTADO = :VCUSTOTRIBUTADO * new.FATORCONVERSAO;
    new.CUSTOENCARGOS = :VCUSTOENCARGO * new.FATORCONVERSAO;


  select F.CTR_VENCTO_PRODUTO, F.MOVIMENTA_VENDA,
         F.MOVIMENTA_BONIFICACAO,
         F.MOVIMENTA_TROCA,
         F.MOVIMENTA_CONSIGNACAO from FILIAL F
    where F.IDFILIAL = new.IDFILIAL
   into :VCTR_VENCTO_PRODUTO, :VMOVIMENTA_VENDA,
         :VMOVIMENTA_BONIFICACAO,
         :VMOVIMENTA_TROCA,
         :VMOVIMENTA_CONSIGNACAO;

   if (:VCTR_VENCTO_PRODUTO = 'S') then begin
      update VENCTO_PRODUTO VP
         set VP.QTDE = VP.QTDE-(new.QTDEPEDIDO*new.FATORCONVERSAO)
       where VP.IDFILIAL = new.IDFILIAL
         and VP.IDPRODUTO = new.IDPRODUTO
         and VP.SITUACAO = 'A'
         and VP.DATA_VENCTO = new.DATA_VENCTO;
   end
  --******* F  I  M **********

   select P.DATAPEDIDO, P.IDREPRESENTANTE, P.SITUACAOPEDIDO, P.IDCLIENTE from PEDIDO P
     where P.IDFILIAL = new.IDFILIAL
       and P.IDPEDIDO = new.IDPEDIDO
       and P.IDFOLHA = new.IDFOLHA
     into :DTPEDIDO, :IDREPRES, :SITUACAOPEDIDO, :vIDCLIENTE;

   select max(IT.CONTADOR)+1 from ITENSPEDIDO IT
     where IT.IDFILIAL = new.IDFILIAL
       and IT.IDPEDIDO = new.IDPEDIDO
       and IT.IDFOLHA = new.IDFOLHA
     into new.CONTADOR;

   if (new.CONTADOR is null) then new.CONTADOR = 1;

   /* SÓ BAIXA DO ESTOQUE E GERA CARTEIRA
      SE FOR DIFERENTE DE (P)endente */


   select coalesce(P.ORCAMENTO_VENDA,'') from PEDIDO P
    where P.IDFILIAL = new.IDFILIAL
      and P.IDPEDIDO = new.IDPEDIDO
      and P.IDFOLHA  = new.IDFOLHA
   into :VORCAMENTO_VENDA;
   if (:VORCAMENTO_VENDA = 'O') then Exit;



   if ((new.SIT_PEDIDO <> 'P') or (new.SIT_PEDIDO <> '-'))  then begin

       select F.GERA_CARTEIRA from FILIAL F
          where F.IDFILIAL = new.IDFILIAL
          into :vGERAR_CARTEIRA;
    
       if (vGERAR_CARTEIRA = 'S') then begin
            select COLLATEBR(P.ESPECIFICACAO  || ' ' ||  P.EMBALAGEM)  from PRODUTO P
                where P.IDFILIAL = new.IDFILIAL
                  and P.IDPRODUTO = new.IDPRODUTO into :NOMEPRODUTO;

/*
         if (:SITUACAOPEDIDO='V') then begin
             if (new.TROCA = 'N') then
                nVALORCARTEIRA = new.QTDEPEDIDO*(new.PRECOVENDA-new.PRECOTABELA);
             else
                nVALORCARTEIRA = (new.QTDEPEDIDO*new.PRECOVENDA); end
         else begin
            if (:SITUACAOPEDIDO = 'C') then begin
                nVALORCARTEIRA = new.QTDEPEDIDO*new.PRECOVENDA;
                nVALORCARTEIRA = nVALORCARTEIRA*-1;
            end
         end
*/

         if (SITUACAOPEDIDO = 'V') then begin
             if (:VMOVIMENTA_VENDA = 'S') then begin
                 if (new.TROCA = 'N') then
                    nVALORCARTEIRA = new.QTDEPEDIDO*(new.PRECOVENDA-new.PRECOTABELA);
                 else
                    nVALORCARTEIRA = (new.QTDEPEDIDO*new.PRECOVENDA);
             end
         end

         if (SITUACAOPEDIDO = 'B') then begin
             if (:VMOVIMENTA_BONIFICACAO = 'S') then begin
                 if (new.TROCA = 'N') then
                    nVALORCARTEIRA = new.QTDEPEDIDO*(new.PRECOVENDA-new.PRECOTABELA);
                 else
                    nVALORCARTEIRA = (new.QTDEPEDIDO*new.PRECOVENDA);
             end
         end

         if (SITUACAOPEDIDO = 'C') then begin
             if (:VMOVIMENTA_CONSIGNACAO = 'S') then begin
                 if (new.TROCA = 'N') then
                    nVALORCARTEIRA = new.QTDEPEDIDO*(new.PRECOVENDA-new.PRECOTABELA);
                 else
                    nVALORCARTEIRA = (new.QTDEPEDIDO*new.PRECOVENDA);
             end
         end

         if (SITUACAOPEDIDO = 'T') then begin
             if (:VMOVIMENTA_TROCA = 'S') then begin
                 if (new.TROCA = 'N') then
                    nVALORCARTEIRA = new.QTDEPEDIDO*(new.PRECOVENDA-new.PRECOTABELA);
                 else
                    nVALORCARTEIRA = (new.QTDEPEDIDO*new.PRECOVENDA);
            end
         end

         if (:SITUACAOPEDIDO = 'V') then begin
             if (new.TROCA = 'N') then
                nVALORCARTEIRA = new.QTDEPEDIDO*(new.PRECOVENDA-new.PRECOTABELA);
             else
                nVALORCARTEIRA = (new.QTDEPEDIDO*new.PRECOVENDA);
         end


         if (nVALORCARTEIRA <> 0.00) then begin
            if (nVALORCARTEIRA < 0.00) then begin
               OPERACAO      = 'D';
               nVALORCARTEIRA=(nVALORCARTEIRA*-1); end
            else begin
               OPERACAO      = 'C';
            end

            select C.INC_IDCARTEIRA from FILIAL C
             where C.IDFILIAL = new.IDFILIAL into :nID;


            if (nID is null) then
               nID = 1;
            else
               nID = nID+1;

            update FILIAL F
               set F.INC_IDCARTEIRA = :nID
             where F.IDFILIAL = new.IDFILIAL;

            insert into CARTEIRA (IDFILIAL,IDCARTEIRA,HISTORICO,IDPEDIDO,DATAPEDIDO,IDREPRESENTANTE,NATOPERACAO, VALORCARTEIRA, IDCLIENTE)
                   values(new.IDFILIAL,:nID,:NOMEPRODUTO,new.IDPEDIDO,:DTPEDIDO,:IDREPRES,:OPERACAO, :nVALORCARTEIRA, :vIDCLIENTE);
            if (new.IDCARTEIRA is null) then
                new.IDCARTEIRA = :nID;
         end
       end
   end
end
^

/* Trigger: TRG_ITENSPEDIDO_INSERT_DEPOSITO */
CREATE TRIGGER TRG_ITENSPEDIDO_INSERT_DEPOSITO FOR ITENSPEDIDO
ACTIVE BEFORE INSERT POSITION 1
as
  declare variable vSITUACAOPEDIDO varchar(1);
  declare variable vDEPOSITO_LOCAL integer;
  declare variable VDEPOSITO_EXTERNO integer;
  declare variable vTIPOPEDIDO varchar(1);
  declare variable VMD_DEPOSITO varchar(1);
  declare variable vLANCHONETE varchar(1);
  declare variable vORCAMENTO_VENDA varchar(1);
begin
   select coalesce(P.ORCAMENTO_VENDA,'') from PEDIDO P
    where P.IDFILIAL = new.IDFILIAL
      and P.IDPEDIDO = new.IDPEDIDO
      and P.IDFOLHA  = new.IDFOLHA
   into :VORCAMENTO_VENDA;
   if (:VORCAMENTO_VENDA = 'O') then Exit;



   select F.MD_DEPOSITO, F.DEPOSITO_LOCAL, F.DEPOSITO_EXTERNO from FILIAL F
    where F.IDFILIAL = new.IDFILIAL
     into :vMD_DEPOSITO, :VDEPOSITO_LOCAL, :VDEPOSITO_EXTERNO;

   if (vMD_DEPOSITO = 'S') then begin

       select P.SITUACAOPEDIDO, P.TIPO_PEDIDO, P.LANCHONETE, ORCAMENTO_VENDA from PEDIDO P
        where P.IDFILIAL = new.IDFILIAL
          and P.IDPEDIDO = new.IDPEDIDO
          and P.IDFOLHA = new.IDFOLHA
        into :vSITUACAOPEDIDO, :VTIPOPEDIDO, :VLANCHONETE, VORCAMENTO_VENDA;

       -- APENAS VENDA DO CUPOPOM Q BAIXA
       if ( (VORCAMENTO_VENDA = 'V') or (VORCAMENTO_VENDA is null) )  then begin
           if (:VLANCHONETE <> 'S') then begin
    
              if (new.IDDEPOSITO is null) then begin
                   if (VTIPOPEDIDO = 'F') then
                       new.IDDEPOSITO = :VDEPOSITO_EXTERNO;
                   else
                       new.IDDEPOSITO = :VDEPOSITO_LOCAL;
              end
    
           end
    
           if ((:vSITUACAOPEDIDO <> 'P') or (:VSITUACAOPEDIDO <> '-') ) then begin
              execute procedure ATUALIZA_ESTOQUE_DEPOSITO(new.IDFILIAL,new.IDDEPOSITO,new.IDPRODUTO,(new.QTDEPEDIDO*new.FATORCONVERSAO),'-','INCLUSÃO DE PEDIDO PD:' || new.IDPEDIDO || '/' || new.IDFOLHA);
           end
       end
   end
end
^

/* Trigger: TRG_ITENSPEDIDO_TOTAL_DIGITADO */
CREATE TRIGGER TRG_ITENSPEDIDO_TOTAL_DIGITADO FOR ITENSPEDIDO
ACTIVE AFTER UPDATE POSITION 1
AS
begin
  if ((old.PRECOVENDA*old.QTDEPEDIDO) <> (new.PRECOVENDA*new.QTDEPEDIDO)) then begin
      update PEDIDO P
         set P.TOTALDIGITADO = P.TOTALDIGITADO-(old.PRECOVENDA*old.QTDEPEDIDO)
       where P.IDFILIAL = old.IDFILIAL
         and P.IDPEDIDO = old.IDPEDIDO
         and P.IDFOLHA = old.IDFOLHA;

      update PEDIDO P
         set P.TOTALDIGITADO = P.TOTALDIGITADO+(new.PRECOVENDA*new.QTDEPEDIDO)
       where P.IDFILIAL = new.IDFILIAL
         and P.IDPEDIDO = new.IDPEDIDO
         and P.IDFOLHA = new.IDFOLHA;
  end
end
^

/* Trigger: TRG_ITENSPEDIDO_UPDATE */
CREATE TRIGGER TRG_ITENSPEDIDO_UPDATE FOR ITENSPEDIDO
ACTIVE BEFORE UPDATE POSITION 0
as
declare variable NID integer;
declare variable ntmp varchar(1);
declare variable NVALORCARTEIRA numeric(16,2);
declare variable DTPEDIDO date;
declare variable NOMEPRODUTO varchar(70);
declare variable IDREPRES smallint;
declare variable OPERACAO char(1);
declare variable SITPEDIDO char(1);
declare variable VGERAR_CARTEIRA char(1);
declare variable vIDCLIENTE integer;
declare variable vCTR_VENCTO_PRODUTO varchar(1);
declare variable vESTOQUE_REPRES varchar(1);
declare variable vMOVIMENTA_VENDA varchar(1);
declare variable vMOVIMENTA_BONIFICACAO varchar(1);
declare variable vMOVIMENTA_TROCA varchar(1);
declare variable vMOVIMENTA_CONSIGNACAO varchar(1);
declare variable vFATOR integer;
declare variable vORCAMENTO_VENDA varchar(1);
begin
  -- ********************************************************
  -- ********************************************************
  -- BAIXA DO VENCIMENTO
  -- ********************************************************
  -- ********************************************************

  select coalesce(P.ORCAMENTO_VENDA,'') from PEDIDO P
    where P.IDFILIAL = new.IDFILIAL
      and P.IDPEDIDO = new.IDPEDIDO
      and P.IDFOLHA  = new.IDFOLHA
   into :VORCAMENTO_VENDA;
  if (:VORCAMENTO_VENDA = 'O') then Exit;

  select U.FATORCONVERSAO from UNIDADEMEDIDA U
       where U.IDFILIAL = new.IDFILIAL
      and U.IDUNIDADEMEDIDA = new.IDUNIDADEMEDIDA
  into :VFATOR;
  if (:VFATOR <> new.FATORCONVERSAO) then
    new.FATORCONVERSAO = :VFATOR;

  select F.CTR_VENCTO_PRODUTO, F.MOVIMENTA_VENDA,
         F.MOVIMENTA_BONIFICACAO,
         F.MOVIMENTA_TROCA,
         F.MOVIMENTA_CONSIGNACAO from FILIAL F
    where F.IDFILIAL = new.IDFILIAL
   into :VCTR_VENCTO_PRODUTO, :VMOVIMENTA_VENDA,
         :VMOVIMENTA_BONIFICACAO,
         :VMOVIMENTA_TROCA,
         :VMOVIMENTA_CONSIGNACAO;


   if (:VCTR_VENCTO_PRODUTO = 'S') then begin
      update VENCTO_PRODUTO VP
         set VP.QTDE = VP.QTDE+(old.QTDEPEDIDO*old.FATORCONVERSAO)
       where VP.IDFILIAL = old.IDFILIAL
         and VP.IDPRODUTO = old.IDPRODUTO
         and VP.SITUACAO = 'A'
         and VP.DATA_VENCTO = old.DATA_VENCTO;

      update VENCTO_PRODUTO VP
         set VP.QTDE = VP.QTDE-(new.QTDEPEDIDO*new.FATORCONVERSAO)
       where VP.IDFILIAL = new.IDFILIAL
         and VP.IDPRODUTO = new.IDPRODUTO
         and VP.SITUACAO = 'A'
         and VP.DATA_VENCTO = new.DATA_VENCTO;
   end
  --******* F  I   M   DA BAIXA DO VENCIMENTO ***************



   select P.DATAPEDIDO, P.IDREPRESENTANTE, P.SITUACAOPEDIDO, P.IDCLIENTE from PEDIDO P
    where P.IDFILIAL = new.IDFILIAL
      and P.IDPEDIDO = new.IDPEDIDO
      and P.IDFOLHA = new.IDFOLHA
    into :DTPEDIDO, :IDREPRES, :SITPEDIDO, :vIDCLIENTE;

    -- ESTORNA PARA O ESTOQUE CASO O PEDIDO SEJA PENDENTE
    if ((old.SIT_PEDIDO <> new.SIT_PEDIDO) and (old.SIT_PEDIDO <> 'P'))
    then
       if ( (old.ESTOQUE_REPRESENTANTE='S') and (old.SIT_PEDIDO='V') )
       then SITPEDIDO=new.SIT_PEDIDO ;
       else begin
          if (( (new.QTDEPEDIDO*NEW.FATORCONVERSAO) <> (old.QTDEPEDIDO*old.FATORCONVERSAO)) or
             (old.SIT_PEDIDO <> new.SIT_PEDIDO)) then begin

             if ((old.SIT_PEDIDO = 'C') and (old.ESTOQUE_REPRESENTANTE = 'S')) then
             begin
                 NTMP = 'S';
                 execute procedure ATUALIZA_ESTOQUE(old.IDFILIAL,old.IDPRODUTO,(old.QTDEPEDIDO*old.FATORCONVERSAO),'+','ALTERAÇÃO DO PRODUTO P/ VENDA PD:' || old.IDPEDIDO || '/' || old.IDFOLHA);
             end
             else
                 if (old.SIT_PEDIDO <> '-') then
                     execute procedure ATUALIZA_ESTOQUE(old.IDFILIAL,old.IDPRODUTO,(old.QTDEPEDIDO*old.FATORCONVERSAO),'+','ALTERAÇÃO DO PRODUTO P/ VENDA PD:' || old.IDPEDIDO || '/' || old.IDFOLHA);

          end
       end
    else
       if ((old.SIT_PEDIDO <> 'P')) then
       begin
           if ((old.SIT_PEDIDO <> '-')) then
           begin
              if ( (old.ESTOQUE_REPRESENTANTE='S') and (old.SIT_PEDIDO='V') )
              then SITPEDIDO=new.SIT_PEDIDO ;
              else begin
                if (( (new.QTDEPEDIDO*new.FATORCONVERSAO) <> (old.QTDEPEDIDO*old.FATORCONVERSAO) ) or
                   (old.SIT_PEDIDO <> new.SIT_PEDIDO)) then begin
    
                   if ((old.SIT_PEDIDO = 'C') and (old.ESTOQUE_REPRESENTANTE = 'S')) then
                   begin
                       execute procedure ATUALIZA_ESTOQUE(old.IDFILIAL,old.IDPRODUTO,(old.QTDEPEDIDO*old.FATORCONVERSAO),'+','ALTERAÇÃO DO PRODUTO P/ VENDA PD:' || old.IDPEDIDO || '/' || old.IDFOLHA);
                       NTMP = 'S';
                   end
                   else
                     execute procedure ATUALIZA_ESTOQUE(old.IDFILIAL,old.IDPRODUTO,(old.QTDEPEDIDO*old.FATORCONVERSAO),'+','ALTERAÇÃO DO PRODUTO P/ VENDA PD:' || old.IDPEDIDO || '/' || old.IDFOLHA);
                end
              end
           end
        end

    -- RETIRA QTDE DO PEDIDO DO ESTOQUE
    if ((new.SIT_PEDIDO <> 'P'))  then
    begin
       if ((new.SIT_PEDIDO <> '-'))  then begin
           if (((new.ESTOQUE_REPRESENTANTE='S') and (new.SIT_PEDIDO='V')) or ((new.ESTOQUE_REPRESENTANTE='S') and (new.SIT_PEDIDO='B')))
           then SITPEDIDO=new.SIT_PEDIDO;
           else
           begin
              if (( (new.QTDEPEDIDO*new.FATORCONVERSAO) <> (old.QTDEPEDIDO*old.FATORCONVERSAO) ) or
                 (old.SIT_PEDIDO <> new.SIT_PEDIDO)) then begin
    
                 if ((new.SIT_PEDIDO = 'C') and (new.ESTOQUE_REPRESENTANTE = 'S')) then
                 begin
                     execute procedure ATUALIZA_ESTOQUE(new.IDFILIAL,new.IDPRODUTO,(new.QTDEPEDIDO*new.FATORCONVERSAO),'-','ALTERAÇÃO DO PRODUTO P/ VENDA PD:' || new.IDPEDIDO || '/' || new.IDFOLHA);
                     NTMP = 'S';
                 end
                 else
                     execute procedure ATUALIZA_ESTOQUE(new.IDFILIAL,new.IDPRODUTO,(new.QTDEPEDIDO*new.FATORCONVERSAO),'-','ALTERAÇÃO DO PRODUTO P/ VENDA PD:' || new.IDPEDIDO || '/' || new.IDFOLHA);
              end
           end
         end
      end

      select F.GERA_CARTEIRA from FILIAL F
       where F.IDFILIAL = new.IDFILIAL
          into :vGERAR_CARTEIRA;

       if (vGERAR_CARTEIRA = 'S') then
       begin

         select COLLATEBR(P.ESPECIFICACAO  || ' ' || P.EMBALAGEM)  from PRODUTO P
            where P.IDFILIAL = new.IDFILIAL
              and P.IDPRODUTO = new.IDPRODUTO into NOMEPRODUTO;

/*
         if (new.SIT_PEDIDO='V') then begin
             if (new.TROCA = 'N') then
                nVALORCARTEIRA = new.QTDEPEDIDO*(new.PRECOVENDA-new.PRECOTABELA);
             else
                nVALORCARTEIRA = (new.QTDEPEDIDO*new.PRECOVENDA); end
         else begin
           nVALORCARTEIRA = new.QTDEPEDIDO*new.PRECOVENDA;
           nVALORCARTEIRA = nVALORCARTEIRA*-1;
         end
*/

         if (SITPEDIDO = 'V') then begin
             if (:VMOVIMENTA_VENDA = 'S') then begin
                 if (new.TROCA = 'N') then
                    nVALORCARTEIRA = new.QTDEPEDIDO*(new.PRECOVENDA-new.PRECOTABELA);
                 else
                    nVALORCARTEIRA = (new.QTDEPEDIDO*new.PRECOVENDA);
             end
         end

         if (SITPEDIDO = 'B') then begin
             if (:VMOVIMENTA_BONIFICACAO = 'S') then begin
                 if (new.TROCA = 'N') then
                    nVALORCARTEIRA = new.QTDEPEDIDO*(new.PRECOVENDA-new.PRECOTABELA);
                 else
                    nVALORCARTEIRA = (new.QTDEPEDIDO*new.PRECOVENDA);
             end
         end

         if (SITPEDIDO = 'C') then begin
             if (:VMOVIMENTA_CONSIGNACAO = 'S') then begin
                 if (new.TROCA = 'N') then
                    nVALORCARTEIRA = new.QTDEPEDIDO*(new.PRECOVENDA-new.PRECOTABELA);
                 else
                    nVALORCARTEIRA = (new.QTDEPEDIDO*new.PRECOVENDA);
             end
         end

         if (SITPEDIDO = 'T') then begin
             if (:VMOVIMENTA_TROCA = 'S') then begin
                 if (new.TROCA = 'N') then
                    nVALORCARTEIRA = new.QTDEPEDIDO*(new.PRECOVENDA-new.PRECOTABELA);
                 else
                    nVALORCARTEIRA = (new.QTDEPEDIDO*new.PRECOVENDA);
            end
         end

         if (:SITPEDIDO = 'V') then begin
             if (new.TROCA = 'N') then
                nVALORCARTEIRA = new.QTDEPEDIDO*(new.PRECOVENDA-new.PRECOTABELA);
             else
                nVALORCARTEIRA = (new.QTDEPEDIDO*new.PRECOVENDA);
         end


         if (nVALORCARTEIRA <> 0.00) then begin
           if (nVALORCARTEIRA < 0.00) then begin
             OPERACAO = 'D';
             nVALORCARTEIRA=(nVALORCARTEIRA*-1); end
           else begin
             OPERACAO = 'C';
           end
           if (new.IDCARTEIRA is null) then begin

            select C.INC_IDCARTEIRA from FILIAL C
                where C.IDFILIAL = new.IDFILIAL into :nID;


             if (nID is null) then
                  nID = 1;
             else
                  nID = nID+1;

            update FILIAL F
               set F.INC_IDCARTEIRA = :nID
             where F.IDFILIAL = new.IDFILIAL;

             insert into CARTEIRA (IDFILIAL,IDCARTEIRA,HISTORICO,IDPEDIDO,DATAPEDIDO,IDREPRESENTANTE,NATOPERACAO, VALORCARTEIRA)
                    values(new.IDFILIAL,:nID,:NOMEPRODUTO,new.IDPEDIDO,:DTPEDIDO,:IDREPRES,:OPERACAO, :nVALORCARTEIRA);
             new.IDCARTEIRA = :nID; end
           else begin
             if (not exists (select C.IDCARTEIRA from carteira C
                              where C.IDFILIAL   = new.IDFILIAL
                                and C.IDCARTEIRA = new.IDCARTEIRA)) then begin

                select C.INC_IDCARTEIRA from FILIAL C
                    where C.IDFILIAL = new.IDFILIAL into :nID;
    
    
                 if (nID is null) then
                      nID = 1;
                 else
                      nID = nID+1;
    
                update FILIAL F
                   set F.INC_IDCARTEIRA = :nID
                 where F.IDFILIAL = new.IDFILIAL;

               insert into CARTEIRA (IDFILIAL,IDCARTEIRA,HISTORICO,IDPEDIDO,DATAPEDIDO,IDREPRESENTANTE,NATOPERACAO, VALORCARTEIRA, IDCLIENTE)
                      values(new.IDFILIAL,:nID,:NOMEPRODUTO,new.IDPEDIDO,:DTPEDIDO,:IDREPRES,:OPERACAO, :nVALORCARTEIRA, :vIDCLIENTE);
               new.IDCARTEIRA = :nID; end
             else begin
               update CARTEIRA C
                      set C.IDFILIAL        = new.IDFILIAL,
                          C.DATAPEDIDO      = :DTPEDIDO,
                          C.IDCLIENTE       = :vIDCLIENTE,
                          C.IDREPRESENTANTE = :IDREPRES,
                          C.NATOPERACAO     = :OPERACAO,
                          C.HISTORICO       = :NOMEPRODUTO,
                          C.VALORCARTEIRA   = :nVALORCARTEIRA
                          where C.IDFILIAL   = new.IDFILIAL
                            and C.IDCARTEIRA = new.IDCARTEIRA;
             end
           end
         end
         else begin
           delete from CARTEIRA C
            where C.IDFILIAL   = old.IDFILIAL
              and C.IDCARTEIRA = old.IDCARTEIRA;
         end
      end
end
^

/* Trigger: TRG_ITENSPEDIDO_UPDATE_DEPOSITO */
CREATE TRIGGER TRG_ITENSPEDIDO_UPDATE_DEPOSITO FOR ITENSPEDIDO
ACTIVE BEFORE UPDATE POSITION 1
as
  declare variable vSITUACAOPEDIDO varchar(1);
  declare variable vMD_DEPOSITO varchar(1);
  declare variable vORCAMENTO_VENDA varchar(1);
  declare variable vNOTAFISCAL integer;
  declare variable VDEPOSITO_EXTERNO smallint;
  declare variable vDEPOSITO_LOCAL   smallint;
begin

  select coalesce(P.ORCAMENTO_VENDA,''), P.NOTAFISCAL from PEDIDO P
    where P.IDFILIAL = new.IDFILIAL
      and P.IDPEDIDO = new.IDPEDIDO
      and P.IDFOLHA  = new.IDFOLHA
   into :VORCAMENTO_VENDA, :VNOTAFISCAL;

  if (:VORCAMENTO_VENDA = 'O') then Exit;

  select F.MD_DEPOSITO, F.DEPOSITO_LOCAL, F.DEPOSITO_EXTERNO from FILIAL F
   where F.IDFILIAL = new.IDFILIAL
    into :vMD_DEPOSITO, :VDEPOSITO_LOCAL, :VDEPOSITO_EXTERNO;


   if (:VMD_DEPOSITO = 'S') then begin
       select P.SITUACAOPEDIDO, P.ORCAMENTO_VENDA from PEDIDO P
        where P.IDFILIAL = new.IDFILIAL
          and P.IDPEDIDO = new.IDPEDIDO
          and P.IDFOLHA = new.IDFOLHA
        into :vSITUACAOPEDIDO, :VORCAMENTO_VENDA;

        if ( (:VORCAMENTO_VENDA = 'V') or (:VORCAMENTO_VENDA is null) ) then begin
           if (:VNOTAFISCAL is null) then
              new.IDDEPOSITO = :VDEPOSITO_LOCAL ;
           else
              new.IDDEPOSITO = NULL;

       end
       -- APENAS VENDA DO CUPOPOM Q BAIXA
       if ( (VORCAMENTO_VENDA = 'V') or (VORCAMENTO_VENDA is null) ) then begin
           if ((:vSITUACAOPEDIDO <> 'P') or (:vSITUACAOPEDIDO <> '-')) then begin
             execute procedure ATUALIZA_ESTOQUE_DEPOSITO(old.IDFILIAL,old.IDDEPOSITO,old.IDPRODUTO,(old.QTDEPEDIDO*old.FATORCONVERSAO),'+','ALTERAÇÃO DE PEDIDO PD:' || old.IDPEDIDO || '/' || old.IDFOLHA );
             execute procedure ATUALIZA_ESTOQUE_DEPOSITO(new.IDFILIAL,new.IDDEPOSITO,new.IDPRODUTO,(new.QTDEPEDIDO*new.FATORCONVERSAO),'-','ALTERAÇÃO DE PEDIDO PD:' || new.IDPEDIDO || '/' || new.IDFOLHA );
           end
       end
   end
end
^

/* Trigger: TRG_ITENSPENDENTE_BF_INSERT */
CREATE TRIGGER TRG_ITENSPENDENTE_BF_INSERT FOR ITENSPENDENTE
ACTIVE BEFORE INSERT POSITION 0
AS
begin
   select max(IT.CONTADOR)+1 from ITENSPENDENTE IT
     where IT.IDFILIAL = new.IDFILIAL
       and IT.IDPEDIDO = new.IDPEDIDO
       and IT.IDFOLHA = new.IDFOLHA
     into new.CONTADOR;

   if (new.CONTADOR is null) then new.CONTADOR = 1;
end
^

/* Trigger: TRG_ITENSPRODUCAO_BF_DELETE */
CREATE TRIGGER TRG_ITENSPRODUCAO_BF_DELETE FOR ITENSPRODUCAO
ACTIVE BEFORE DELETE POSITION 0
AS
begin
  execute procedure ATUALIZA_ESTOQUE(old.IDFILIAL,old.IDMATERIA_PRIMA,old.QTDE,'+','EXCLUSÃO PRODUCAO: ' || old.IDPRODUCAO);
end
^

/* Trigger: TRG_ITENSPRODUCAO_BF_INSERT */
CREATE TRIGGER TRG_ITENSPRODUCAO_BF_INSERT FOR ITENSPRODUCAO
ACTIVE BEFORE INSERT POSITION 0
as
begin
  execute procedure ATUALIZA_ESTOQUE(new.IDFILIAL,new.IDMATERIA_PRIMA,new.QTDE,'-','INCLUSÃO PRODUCAO: ' || new.IDPRODUCAO);
end
^

/* Trigger: TRG_ITENSROMANEIO_AFTER_DELETE */
CREATE TRIGGER TRG_ITENSROMANEIO_AFTER_DELETE FOR ITENSROMANEIO
ACTIVE AFTER DELETE POSITION 0
AS
declare variable vTIPOEMPRESA varchar(20);
declare variable vIDCONTROLE integer;
begin
   select F.TIPOEMPRESA from FILIAL F
     where F.IDFILIAL = old.IDFILIAL
    into :VTIPOEMPRESA;

   if (exists(select first 1 IT.IDCONTROLE from ITENSROMANEIO it
                where it.IDFILIAL = old.IDFILIAL
                  and it.IDPEDIDO = old.IDPEDIDO
                  and it.IDFOLHA = old.IDFOLHA)) then
   begin
     select first 1 IT.IDCONTROLE from ITENSROMANEIO it
              where IT.IDFILIAL = old.IDFILIAL
                and IT.IDPEDIDO = old.IDPEDIDO
                and IT.IDFOLHA = old.IDFOLHA
      into :VIDCONTROLE;

       update RECEBER R
          set R.IDROMANEIO = :VIDCONTROLE
        where R.IDFILIAL = old.IDFILIAL
          and R.IDRECEBER = old.IDPEDIDO
          and R.IDFOLHA   = old.IDFOLHA;
    
       update PEDIDO P
          set P.IDROMANEIO = :VIDCONTROLE
        where P.IDFILIAL = old.IDFILIAL
          and P.IDPEDIDO = old.IDPEDIDO
          and P.IDFOLHA  = old.IDFOLHA;
    
       update DEVOLUCAO P
          set P.IDROMANEIO = :VIDCONTROLE
        where P.IDFILIAL = old.IDFILIAL
          and P.IDPEDIDO = old.IDPEDIDO
          and P.IDFOLHA  = old.IDFOLHA;


   end
   else   -- SE NÃO EXISTIR
   begin
       if (:VTIPOEMPRESA = 'BREAD') then
       begin
           update PEDIDO S
              set S.SITUACAOROMANEIO = null
            where S.IDFILIAL = old.IDFILIAL
              and S.IDPEDIDO = old.IDPEDIDO
              and S.IDFOLHA = old.IDFOLHA;
       end

       update RECEBER R
          set R.IDROMANEIO = null
        where R.IDFILIAL = old.IDFILIAL
          and R.IDRECEBER = old.IDPEDIDO
          and R.IDFOLHA   = old.IDFOLHA;
    
       update PEDIDO P
          set P.IDROMANEIO = null
        where P.IDFILIAL = old.IDFILIAL
          and P.IDPEDIDO = old.IDPEDIDO
          and P.IDFOLHA  = old.IDFOLHA;
    
       update DEVOLUCAO P
          set P.IDROMANEIO = null
        where P.IDFILIAL = old.IDFILIAL
          and P.IDPEDIDO = old.IDPEDIDO
          and P.IDFOLHA  = old.IDFOLHA;


   end

end
^

/* Trigger: TRG_ITENSROMANEIO_INSERT */
CREATE TRIGGER TRG_ITENSROMANEIO_INSERT FOR ITENSROMANEIO
ACTIVE BEFORE INSERT POSITION 0
AS
declare variable vTIPOEMPRESA varchar(20);
begin
   new.DATA_HORA_INCLUSAO = current_timestamp;

   select F.TIPOEMPRESA from FILIAL F
     where F.IDFILIAL = new.IDFILIAL
    into :VTIPOEMPRESA;

   if (:VTIPOEMPRESA = 'BREAD') then
   begin
       update PEDIDO S
          set S.SITUACAOROMANEIO = '1'
        where S.IDFILIAL = new.IDFILIAL
          and S.IDPEDIDO = new.IDPEDIDO
          and S.IDFOLHA = new.IDFOLHA;
   end

   update RECEBER R
      set R.IDROMANEIO = new.IDCONTROLE
    where R.IDFILIAL = new.IDFILIAL
      and R.IDRECEBER = new.IDPEDIDO
      and R.IDFOLHA = NEW.IDFOLHA;

   update PEDIDO P
      set P.IDROMANEIO = new.IDCONTROLE
    where P.IDFILIAL = new.IDFILIAL
      and P.IDPEDIDO = new.IDPEDIDO
      and P.IDFOLHA = NEW.IDFOLHA;

   update DEVOLUCAO P
      set P.IDROMANEIO = new.IDCONTROLE
    where P.IDFILIAL = new.IDFILIAL
      and P.IDPEDIDO = new.IDPEDIDO
      and P.IDFOLHA = NEW.IDFOLHA;

   if (new.IDFOLHA is null) then begin
     update RECEBER R
        set R.IDROMANEIO = new.IDCONTROLE
      where R.IDFILIAL = new.IDFILIAL
        and R.IDRECEBER = new.IDPEDIDO; end
   else begin
     update RECEBER R
        set R.IDROMANEIO = new.IDCONTROLE
      where R.IDFILIAL = new.IDFILIAL
        and R.IDRECEBER = new.IDPEDIDO
        and R.IDFOLHA = new.IDFOLHA;
   end
end
^

/* Trigger: TRG_ITENSROMANEIO_UPDATE */
CREATE TRIGGER TRG_ITENSROMANEIO_UPDATE FOR ITENSROMANEIO
ACTIVE BEFORE UPDATE POSITION 0
as
begin

   update RECEBER R
      set R.IDROMANEIO = null
    where R.IDFILIAL = old.IDFILIAL
      and R.IDRECEBER = old.IDPEDIDO
      and R.IDFOLHA   = old.IDFOLHA;

   update PEDIDO P
      set P.IDROMANEIO = null
    where P.IDFILIAL = old.IDFILIAL
      and P.IDPEDIDO = old.IDPEDIDO
      and P.IDFOLHA  = old.IDFOLHA;

   update DEVOLUCAO P
      set P.IDROMANEIO = null
    where P.IDFILIAL = old.IDFILIAL
      and P.IDPEDIDO = old.IDPEDIDO
      and P.IDFOLHA  = old.IDFOLHA;


   if (new.IDFOLHA is null) then begin
     update RECEBER R
        set R.IDROMANEIO = null
      where R.IDFILIAL = old.IDFILIAL
        and R.IDRECEBER = old.IDPEDIDO; end
   else begin
     update RECEBER R
        set R.IDROMANEIO = null
      where R.IDFILIAL = old.IDFILIAL
        and R.IDRECEBER = old.IDPEDIDO
        and R.IDFOLHA = old.IDFOLHA;
   end



   update PEDIDO P
      set P.IDROMANEIO = new.IDCONTROLE
    where P.IDFILIAL = new.IDFILIAL
      and P.IDPEDIDO = new.IDPEDIDO
      and P.IDFOLHA  = new.IDFOLHA;

   update DEVOLUCAO D
      set D.IDROMANEIO = new.IDCONTROLE
    where D.IDFILIAL = new.IDFILIAL
      and D.IDPEDIDO = new.IDPEDIDO
      and D.IDFOLHA = new.IDFOLHA;


   update RECEBER R
      set R.IDROMANEIO = new.IDCONTROLE
    where R.IDFILIAL = new.IDFILIAL
      and R.IDRECEBER = new.IDPEDIDO
      and R.IDFOLHA   = new.IDFOLHA;



   if (new.IDFOLHA is null) then begin
     update RECEBER R
        set R.IDROMANEIO = new.IDCONTROLE
      where R.IDFILIAL = new.IDFILIAL
        and R.IDRECEBER = new.IDPEDIDO; end
   else begin
     update RECEBER R
        set R.IDROMANEIO = new.IDCONTROLE
      where R.IDFILIAL = new.IDFILIAL
        and R.IDRECEBER = new.IDPEDIDO
        and R.IDFOLHA = new.IDFOLHA;
   end
end
^

/* Trigger: TRG_ITENSTABELAPRECO_AF_INSERT */
CREATE TRIGGER TRG_ITENSTABELAPRECO_AF_INSERT FOR ITENSTABELAPRECO
ACTIVE AFTER INSERT POSITION 0
AS
declare variable vIDREPRESENTANTE smallint;
declare variable vTABELAPALM varchar(1);
declare variable vUSAR_TABELA_REP_MOBILE varchar(1);
begin
  select F.USAR_TABELA_REP_MOBILE from FILIAL F
     where F.IDFILIAL = new.IDFILIAL
       into :VUSAR_TABELA_REP_MOBILE;

  if (VUSAR_TABELA_REP_MOBILE = 'N') then
  begin
      select T.TABELAPALM from TABELAPRECO T
        where T.IDFILIAL = new.IDFILIAL
          and T.IDTABELAPRECO = new.IDTABELAPRECO
            into :VTABELAPALM;
    
    
      if (VTABELAPALM = 'S') then
      begin
          for select R.IDREPRESENTANTE from REPRESENTANTE R
                where R.EXCLUIDO is null
                  and R.USA_ANDROID = 'S'
                    into :VIDREPRESENTANTE
          do
          begin
             if (not exists(select L.IDFILIAL from LOG_ALTERACAO_ANDROID L
                             where L.IDFILIAL = new.IDFILIAL
                               and L.ID = new.IDTABELAPRECO
                               and L.ID_2 = new.IDPRODUTO
                               and L.TIPO = 'Itens Tabela Preco'
                               and L.IDREPRESENTANTE = :VIDREPRESENTANTE)) then
             begin
                 INSERT INTO LOG_ALTERACAO_ANDROID (IDFILIAL, IDREPRESENTANTE, ID, TIPO, IDFOLHA, SITUACAO, ID_2) VALUES (new.IDFILIAL, :VIDREPRESENTANTE, new.IDTABELAPRECO, 'Itens Tabela Preco', NULL, 'I', new.IDPRODUTO);
             end
          end
      end
  end
  else
  begin
    if (VUSAR_TABELA_REP_MOBILE = 'S') then
    begin
          for select R.IDREPRESENTANTE from REPRESENTANTE R
                where R.EXCLUIDO is null
                  and R.USA_ANDROID = 'S'
                  and R.IDTABELAPRECO = new.IDTABELAPRECO
                    into :VIDREPRESENTANTE
          do
          begin
             if (not exists(select L.IDFILIAL from LOG_ALTERACAO_ANDROID L
                             where L.IDFILIAL = new.IDFILIAL
                               and L.ID = new.IDTABELAPRECO
                               and L.ID_2 = new.IDPRODUTO
                               and L.TIPO = 'Itens Tabela Preco'
                               and L.IDREPRESENTANTE = :VIDREPRESENTANTE)) then
             begin
                 INSERT INTO LOG_ALTERACAO_ANDROID (IDFILIAL, IDREPRESENTANTE, ID, TIPO, IDFOLHA, SITUACAO, ID_2) VALUES (new.IDFILIAL, :VIDREPRESENTANTE, new.IDTABELAPRECO, 'Itens Tabela Preco', NULL, 'I', new.IDPRODUTO);
             end
          end
    end
  end
end
^

/* Trigger: TRG_ITENSTABELAPRECO_AF_UPDATE */
CREATE TRIGGER TRG_ITENSTABELAPRECO_AF_UPDATE FOR ITENSTABELAPRECO
ACTIVE AFTER UPDATE POSITION 0
AS
declare variable vIDREPRESENTANTE smallint;
declare variable vTABELAPALM varchar(1);
declare variable vUSAR_TABELA_REP_MOBILE varchar(1);
begin
  select F.USAR_TABELA_REP_MOBILE from FILIAL F
     where F.IDFILIAL = new.IDFILIAL
       into :VUSAR_TABELA_REP_MOBILE;

  if (VUSAR_TABELA_REP_MOBILE = 'N') then
  begin
      select T.TABELAPALM from TABELAPRECO T
        where T.IDFILIAL = new.IDFILIAL
          and T.IDTABELAPRECO = new.IDTABELAPRECO
            into :VTABELAPALM;
    
    
      if (VTABELAPALM = 'S') then
      begin
          for select R.IDREPRESENTANTE from REPRESENTANTE R
                where R.EXCLUIDO is null
                  and R.USA_ANDROID = 'S'
                    into :VIDREPRESENTANTE
          do
          begin
             if (not exists(select L.IDFILIAL from LOG_ALTERACAO_ANDROID L
                             where L.IDFILIAL = new.IDFILIAL
                               and L.ID = new.IDTABELAPRECO
                               and L.ID_2 = new.IDPRODUTO
                               and L.TIPO = 'Itens Tabela Preco'
                               and L.IDREPRESENTANTE = :VIDREPRESENTANTE)) then
             begin
                 INSERT INTO LOG_ALTERACAO_ANDROID (IDFILIAL, IDREPRESENTANTE, ID, TIPO, IDFOLHA, SITUACAO, ID_2) VALUES (new.IDFILIAL, :VIDREPRESENTANTE, new.IDTABELAPRECO, 'Itens Tabela Preco', NULL, 'A', new.IDPRODUTO);
             end
          end
      end
  end
  else
  begin
    if (VUSAR_TABELA_REP_MOBILE = 'S') then
    begin
          for select R.IDREPRESENTANTE from REPRESENTANTE R
                where R.EXCLUIDO is null
                  and R.USA_ANDROID = 'S'
                  and R.IDTABELAPRECO = new.IDTABELAPRECO
                    into :VIDREPRESENTANTE
          do
          begin
             if (not exists(select L.IDFILIAL from LOG_ALTERACAO_ANDROID L
                             where L.IDFILIAL = new.IDFILIAL
                               and L.ID = new.IDTABELAPRECO
                               and L.ID_2 = new.IDPRODUTO
                               and L.TIPO = 'Itens Tabela Preco'
                               and L.IDREPRESENTANTE = :VIDREPRESENTANTE)) then
             begin
                 INSERT INTO LOG_ALTERACAO_ANDROID (IDFILIAL, IDREPRESENTANTE, ID, TIPO, IDFOLHA, SITUACAO, ID_2) VALUES (new.IDFILIAL, :VIDREPRESENTANTE, new.IDTABELAPRECO, 'Itens Tabela Preco', NULL, 'A', new.IDPRODUTO);
             end
          end
    end
  end
end
^

/* Trigger: TRG_ITENSTABELAPRECO_BF_DELETE */
CREATE TRIGGER TRG_ITENSTABELAPRECO_BF_DELETE FOR ITENSTABELAPRECO
ACTIVE BEFORE DELETE POSITION 0
AS
declare variable vIDREPRESENTANTE smallint;
declare variable vTABELAPALM varchar(1);
declare variable vUSAR_TABELA_REP_MOBILE varchar(1);
begin
  select F.USAR_TABELA_REP_MOBILE from FILIAL F
     where F.IDFILIAL = old.IDFILIAL
       into :VUSAR_TABELA_REP_MOBILE;

  if (VUSAR_TABELA_REP_MOBILE = 'N') then
  begin
      select T.TABELAPALM from TABELAPRECO T
        where T.IDFILIAL = old.IDFILIAL
          and T.IDTABELAPRECO = old.IDTABELAPRECO
            into :VTABELAPALM;
    
    
      if (VTABELAPALM = 'S') then
      begin
          for select R.IDREPRESENTANTE from REPRESENTANTE R
                where R.EXCLUIDO is null
                  and R.USA_ANDROID = 'S'
                    into :VIDREPRESENTANTE
          do
          begin
            INSERT INTO LOG_ALTERACAO_ANDROID (IDFILIAL, IDREPRESENTANTE, ID, TIPO, IDFOLHA, SITUACAO, ID_2) VALUES (old.IDFILIAL, :VIDREPRESENTANTE, old.IDTABELAPRECO, 'Itens Tabela Preco', NULL, 'E', old.IDPRODUTO);
          end
      end
  end
  else
  begin
    if (VUSAR_TABELA_REP_MOBILE = 'S') then
    begin
          for select R.IDREPRESENTANTE from REPRESENTANTE R
                where R.EXCLUIDO is null
                  and R.USA_ANDROID = 'S'
                  and R.IDTABELAPRECO = old.IDTABELAPRECO
                    into :VIDREPRESENTANTE
          do
          begin
            INSERT INTO LOG_ALTERACAO_ANDROID (IDFILIAL, IDREPRESENTANTE, ID, TIPO, IDFOLHA, SITUACAO, ID_2) VALUES (old.IDFILIAL, :VIDREPRESENTANTE, old.IDTABELAPRECO, 'Itens Tabela Preco', NULL, 'E', old.IDPRODUTO);
          end
    end
  end
end
^

/* Trigger: TRG_ITENSTABELAPRECO_UPDATE */
CREATE TRIGGER TRG_ITENSTABELAPRECO_UPDATE FOR ITENSTABELAPRECO
ACTIVE BEFORE UPDATE POSITION 0
as
  declare variable vFATOR smallint;
  declare variable VRESULTADO numeric(16,4);
  declare variable VVALOR numeric(16,4);
  declare variable vTIPOEMPRESA varchar(20);
  declare variable vCAP_INT varchar(1);
  declare variable vTIPOPRECO varchar(1);
  declare variable vCUSTONOTA double precision;
  declare variable vCUSTOSENCARGOS double precision;
  declare variable vPRECOVENDA double precision;
begin
  select coalesce(T.TIPO_PRECO,'0') from TABELAPRECO T
    where T.IDFILIAL = new.IDFILIAL
      and T.IDTABELAPRECO = new.IDTABELAPRECO
     into :VTIPOPRECO;

  if (new.CHAMAR_TRIGGER = 'S') then begin
      if (new.PROMOCAO = 'N') then begin
            
         select F.TIPOEMPRESA from FILIAL F
           where F.IDFILIAL = new.IDFILIAL
              into :VTIPOEMPRESA;

         select T.PR_CAPITAL_INTERIOR from TABELAPRECO T
            where T.IDFILIAL = new.IDFILIAL
              and T.IDTABELAPRECO = new.IDTABELAPRECO
                into :VCAP_INT;

         if (:VTIPOEMPRESA = 'CENTRAL') then
         begin
           if (VCAP_INT = 'C') then
           begin
             select P.CUSTONOTA, P.CUSTOSENCARGOS, P.PRECOVENDA, P.FATORCONVERSAO from PRODUTO P
              where P.IDFILIAL = new.IDFILIAL
                and P.IDPRODUTO = new.IDPRODUTO
                  into :VCUSTONOTA, :VCUSTOSENCARGOS, :VPRECOVENDA, :vFATOR;

              if (:VTIPOPRECO = '0') then
                  new.PRECOTABELA = :VPRECOVENDA;

              if (:VTIPOPRECO = '1') then
                  new.PRECOTABELA = :VCUSTONOTA;

              if (:VTIPOPRECO = '2') then
                  new.PRECOTABELA = :VCUSTOSENCARGOS;
    
              if (new.DESCONTOTABELA is null) then new.DESCONTOTABELA = 0;
    
              VVALOR = cast(new.PRECOTABELA-(cast( new.PRECOTABELA as numeric(16,2))*new.DESCONTOTABELA/100) as double precision);
              new.PRECOVENDA = :VVALOR;
    --          new.PRECOVENDA = cast(new.PRECOTABELA-(cast( new.PRECOTABELA as numeric(16,2))*new.DESCONTOTABELA/100) as double precision);
              new.PRECOUNIT = cast(cast(new.PRECOVENDA as numeric(16,4)) /:vFATOR as numeric(16,4));
    /*
                select first 1 S.RESULT from SP_TRUNC(new.PRECOVENDA/:vFATOR,4) S
                     where not S.RESULT is null
                      into new.PRECOUNIT;
    */
           end
           else
           begin
             if (VCAP_INT = 'I') then
             begin
                 select P.PRECOVENDA_INTERIOR, P.FATORCONVERSAO from PRODUTO P
                  where P.IDFILIAL = new.IDFILIAL
                    and P.IDPRODUTO = new.IDPRODUTO
                      into new.PRECOTABELA, :vFATOR;
        
                  if (new.DESCONTOTABELA is null) then new.DESCONTOTABELA = 0;
        
                  VVALOR = cast(new.PRECOTABELA-(cast( new.PRECOTABELA as numeric(16,2))*new.DESCONTOTABELA/100) as double precision);
                  new.PRECOVENDA = :VVALOR;
        --          new.PRECOVENDA = cast(new.PRECOTABELA-(cast( new.PRECOTABELA as numeric(16,2))*new.DESCONTOTABELA/100) as double precision);
                  new.PRECOUNIT = cast(cast(new.PRECOVENDA as numeric(16,4)) /:vFATOR as numeric(16,4));
             end
           end
         end
         else
         begin
             select P.CUSTONOTA, P.CUSTOSENCARGOS, P.PRECOVENDA, P.FATORCONVERSAO from PRODUTO P
              where P.IDFILIAL = new.IDFILIAL
                and P.IDPRODUTO = new.IDPRODUTO
                  into :VCUSTONOTA, :VCUSTOSENCARGOS, :VPRECOVENDA, :vFATOR;

              if (:VTIPOPRECO = '0') then
                  new.PRECOTABELA = :VPRECOVENDA;

              if (:VTIPOPRECO = '1') then
                  new.PRECOTABELA = :VCUSTONOTA;

              if (:VTIPOPRECO = '2') then
                  new.PRECOTABELA = :VCUSTOSENCARGOS;

              if (new.DESCONTOTABELA is null) then new.DESCONTOTABELA = 0;
    
              VVALOR = cast(new.PRECOTABELA-(cast( new.PRECOTABELA as numeric(16,2))*new.DESCONTOTABELA/100) as double precision);
              new.PRECOVENDA = :VVALOR;
              new.PRECOUNIT = cast(cast(new.PRECOVENDA as numeric(16,4)) /:vFATOR as numeric(16,4));
    /*
                select first 1 S.RESULT from SP_TRUNC(new.PRECOVENDA/:vFATOR,4) S
                     where not S.RESULT is null
                      into new.PRECOUNIT;
    */
         end
      end

      new.CHAMAR_TRIGGER = null;
  end
end
^

/* Trigger: TRG_ITENSVEICULO_BF_INSERT */
CREATE TRIGGER TRG_ITENSVEICULO_BF_INSERT FOR ITENSVEICULO
ACTIVE BEFORE INSERT POSITION 0
AS
 declare variable vIDCONTROLE smallint;
begin
   select max(IDCONTROLE)+1 from ITENSVEICULO
      where IDFILIAL = new.IDFILIAL
        and IDPLACA = new.IDPLACA
      into :vIDCONTROLE;

    if (vIDCONTROLE is null) then vIDCONTROLE = 1;

    new.IDCONTROLE = :VIDCONTROLE;
end
^

/* Trigger: TRG_ITENS_CONSIGNACAO_AF_INSERT */
CREATE TRIGGER TRG_ITENS_CONSIGNACAO_AF_INSERT FOR ITENS_CONSIGNACAO
ACTIVE AFTER INSERT POSITION 0
AS
declare variable vSITUACAO varchar(1);
declare variable vIDREPRESENTANTE smallint;
declare variable vVEND_TRABALHA_C_CONSIG varchar(1);
begin
  select C.SITUACAO, C.IDREPRESENTANTE from CONSIGNACAO C
    where C.IDFILIAL = new.IDFILIAL
      and C.IDCONSIGNACAO = new.IDCONSIGNACAO
      into :VSITUACAO, :VIDREPRESENTANTE;

  select coalesce(R.CONTROLA_PRODUTO_REPRESENTANTE,'N') from REPRESENTANTE R
    where R.IDFILIAL = new.IDFILIAL
      and R.IDREPRESENTANTE = :VIDREPRESENTANTE
      and R.USA_ANDROID = 'S'
      into :VVEND_TRABALHA_C_CONSIG;

  if (VVEND_TRABALHA_C_CONSIG = 'S') then
  begin
      if (VSITUACAO = 'A') then
      begin
         if (not exists(select L.IDFILIAL from LOG_ALTERACAO_ANDROID L
                         where L.IDFILIAL = new.IDFILIAL
                           and L.ID = new.IDCONSIGNACAO
                           and L.ID_2 = new.IDPRODUTO
                           and L.TIPO = 'Itens Consignacao'
                           and L.IDREPRESENTANTE = :vIDREPRESENTANTE)) then
         begin
             INSERT INTO LOG_ALTERACAO_ANDROID (IDFILIAL, IDREPRESENTANTE, ID, ID_2, TIPO, IDFOLHA, SITUACAO) VALUES (new.IDFILIAL, :vIDREPRESENTANTE, new.IDCONSIGNACAO, new.IDPRODUTO, 'Itens Consignacao', NULL, 'I');
         end
      end
  end
end
^

/* Trigger: TRG_ITENS_CONSIGNACAO_AF_UPDATE */
CREATE TRIGGER TRG_ITENS_CONSIGNACAO_AF_UPDATE FOR ITENS_CONSIGNACAO
ACTIVE AFTER UPDATE POSITION 0
AS
declare variable vSITUACAO varchar(1);
declare variable vIDREPRESENTANTE smallint;
declare variable vVEND_TRABALHA_C_CONSIG varchar(1);
begin
  select C.SITUACAO, C.IDREPRESENTANTE from CONSIGNACAO C
    where C.IDFILIAL = new.IDFILIAL
      and C.IDCONSIGNACAO = new.IDCONSIGNACAO
      into :VSITUACAO, :VIDREPRESENTANTE;

  select coalesce(R.CONTROLA_PRODUTO_REPRESENTANTE,'N') from REPRESENTANTE R
    where R.IDFILIAL = new.IDFILIAL
      and R.IDREPRESENTANTE = :VIDREPRESENTANTE
      and R.USA_ANDROID = 'S'
      into :VVEND_TRABALHA_C_CONSIG;

  if (VVEND_TRABALHA_C_CONSIG = 'S') then
  begin
      if (VSITUACAO = 'A') then
      begin
         if (not exists(select L.IDFILIAL from LOG_ALTERACAO_ANDROID L
                         where L.IDFILIAL = new.IDFILIAL
                           and L.ID = new.IDCONSIGNACAO
                           and L.ID_2 = new.IDPRODUTO
                           and L.TIPO = 'Itens Consignacao'
                           and L.IDREPRESENTANTE = :vIDREPRESENTANTE)) then
         begin
             INSERT INTO LOG_ALTERACAO_ANDROID (IDFILIAL, IDREPRESENTANTE, ID, ID_2, TIPO, IDFOLHA, SITUACAO) VALUES (new.IDFILIAL, :vIDREPRESENTANTE, new.IDCONSIGNACAO, new.IDPRODUTO, 'Itens Consignacao', NULL, 'A');
         end
      end
  end
end
^

/* Trigger: TRG_ITENS_CONSIGNACAO_BF_DELETE */
CREATE TRIGGER TRG_ITENS_CONSIGNACAO_BF_DELETE FOR ITENS_CONSIGNACAO
ACTIVE BEFORE DELETE POSITION 0
AS
declare variable vSITUACAO varchar(1);
declare variable vIDREPRESENTANTE smallint;
declare variable vVEND_TRABALHA_C_CONSIG varchar(1);
begin
  select C.SITUACAO, C.IDREPRESENTANTE from CONSIGNACAO C
    where C.IDFILIAL = old.IDFILIAL
      and C.IDCONSIGNACAO = old.IDCONSIGNACAO
      into :VSITUACAO, :VIDREPRESENTANTE;

  select coalesce(R.CONTROLA_PRODUTO_REPRESENTANTE,'N') from REPRESENTANTE R
    where R.IDFILIAL = old.IDFILIAL
      and R.IDREPRESENTANTE = :VIDREPRESENTANTE
      and R.USA_ANDROID = 'S'
      into :VVEND_TRABALHA_C_CONSIG;

  if (VVEND_TRABALHA_C_CONSIG = 'S') then
  begin
      if (VSITUACAO = 'A') then
      begin
        INSERT INTO LOG_ALTERACAO_ANDROID (IDFILIAL, IDREPRESENTANTE, ID, ID_2, TIPO, IDFOLHA, SITUACAO) VALUES (old.IDFILIAL, :vIDREPRESENTANTE, old.IDCONSIGNACAO, old.IDPRODUTO, 'Itens Consignacao', NULL, 'E');
      end
  end
end
^

/* Trigger: TRG_ITENS_CONSIGNACAO_BF_INSERT */
CREATE TRIGGER TRG_ITENS_CONSIGNACAO_BF_INSERT FOR ITENS_CONSIGNACAO
ACTIVE BEFORE INSERT POSITION 0
AS
 declare variable vATUALIZA_ESTOQUE_PRODUTO varchar(1);
begin
  select f.tratar_clientes_novos from FILIAL F
  where f.idfilial = new.idfilial
  into :vatualiza_estoque_produto;

  if (vatualiza_estoque_produto = 'S') then begin
     update PRODUTO P
     set p.qtdeatual = (new.qtde_entrada-new.qtde_saida)
     where p.idfilial = new.idfilial
     and   p.idproduto = new.idproduto;
  end

end
^

/* Trigger: TRG_MOVTOCAIXA_BF_INSERT */
CREATE TRIGGER TRG_MOVTOCAIXA_BF_INSERT FOR MOVTOCAIXA
ACTIVE BEFORE INSERT POSITION 0
AS
begin
   if (new.COMPENSADO is null) then
       new.COMPENSADO = 'C';
end
^

/* Trigger: TRG_MOVTO_SUPERVISOR_BF_INSERT */
CREATE TRIGGER TRG_MOVTO_SUPERVISOR_BF_INSERT FOR MOVTO_SUPERVISOR
ACTIVE BEFORE INSERT POSITION 0
AS
begin
  if (new.IDREPRESENTANTE is null) then
     new.IDREPRESENTANTE = NEW.IDSUPERVISOR;

  if (new.IDCLIENTE is null) then
     new.IDCLIENTE = 0;

  if (new.IDPRODUTO is null) then
     new.IDPRODUTO = 0;

  if (new.IDPEDIDO is null) then
     new.IDPEDIDO = 0;

  if (new.IDFOLHA is null) then
     new.IDFOLHA = 0;
end
^

/* Trigger: TRG_NOTA_AF_UPDATE */
CREATE TRIGGER TRG_NOTA_AF_UPDATE FOR NOTA
ACTIVE AFTER UPDATE POSITION 0
AS
begin
  if (new.PROTOCOLO <> old.PROTOCOLO) then
  begin
    update PEDIDO P
       set P.NFE_ENVIADA = 'S'
       where P.IDFILIAL = new.IDFILIAL
         and P.IDPEDIDO = new.IDPEDIDO
         and P.IDFOLHA  = new.IDFOLHA
         and P.NFE_ENVIADA <> 'S';
  end

  if (new.SITUACAONOTA = 'C') then begin
      update ITENSNOTA IT
         set IT.SITUACAONOTA = 'C'
       where IT.IDFILIAL = new.IDFILIAL
         and IT.IDNOTA = new.IDNOTA
         and IT.TIPONOTA = new.TIPONOTA
         and IT.SERIE = new.SERIE;

      update C100_NF C
         set C.SITUACAONOTA = 'C'
       where C.IDFILIAL = new.IDFILIAL
         and C.IDNOTA   = new.IDNOTA;
  end
end
^

/* Trigger: TRG_NOTA_BF_INSERT */
CREATE TRIGGER TRG_NOTA_BF_INSERT FOR NOTA
ACTIVE BEFORE INSERT POSITION 0
AS
declare variable vDTPEDIDO date;
begin

   if (new.KIT is null) then
   begin
      if (exists(select IT.IDFILIAL from ITENSPEDIDO IT
           where IT.IDFILIAL = new.IDFILIAL
              and IT.IDPEDIDO = new.IDPEDIDO
              and IT.IDFOLHA = new.IDFOLHA
             and exists(select first 1 K.IDFILIAL from KIT_PRODUTO K
                                 where K.IDFILIAL = IT.IDFILIAL
                                   and K.IDPRODUTO = IT.IDPRODUTO))) then
      begin
         new.KIT = 'S';
      end
   end

   if (new.TIPO_NOTA = 'V') then
   begin
       if (new.KIT is null) then
       begin
           select sum(IT.VALOR_IPI), sum(IT.VALOR_PIS), sum(IT.VALOR_COFINS) from ITENSPEDIDO IT
             where IT.IDFILIAL = new.IDFILIAL
               and IT.IDPEDIDO = new.IDPEDIDO
               and IT.IDFOLHA = new.IDFOLHA
             into new.VALOR_IPI, new.VALOR_PIS, new.VALOR_CONFINS;
       end
       else begin
           select sum(IT.VALOR_IPI), sum(IT.VALOR_PIS), sum(IT.VALOR_COFINS) from ITENSNOTA IT
             where IT.IDFILIAL = new.IDFILIAL
               and IT.IDPEDIDO = new.IDPEDIDO
               and IT.IDFOLHA = new.IDFOLHA
               and IT.IDNOTA = new.IDNOTA
             into new.VALOR_IPI, new.VALOR_PIS, new.VALOR_CONFINS;
       end
   end
   else begin
       select sum(IT.VALOR_IPI), sum(IT.VALOR_PIS), sum(IT.VALOR_COFINS) from ITENSNOTA IT
         where IT.IDFILIAL = new.IDFILIAL
           and IT.IDPEDIDO = new.IDPEDIDO
           and IT.IDFOLHA = new.IDFOLHA
           and IT.IDNOTA = new.IDNOTA
         into new.VALOR_IPI, new.VALOR_PIS, new.VALOR_CONFINS;
   end


  select P.DATAPEDIDO from PEDIDO P
    where P.IDFILIAL = new.IDFILIAL
      and P.IDPEDIDO = new.IDPEDIDO
      and P.IDFOLHA = new.IDFOLHA
      into :VDTPEDIDO;

     new.DATAPEDIDO = :VDTPEDIDO;
end
^

/* Trigger: TRG_OS_AF_DELETE */
CREATE TRIGGER TRG_OS_AF_DELETE FOR OS
ACTIVE AFTER DELETE POSITION 0
AS
begin
  delete from OS_PECAS OP
    where OP.IDFILIAL = old.IDFILIAL
      and OP.IDOS = old.IDOS;

  delete from OS_MAOOBRA OM
    where OM.IDFILIAL = old.IDFILIAL
      and OM.IDOS = old.IDOS;


  delete from RECEBER R
    where R.IDFILIAL = old.IDFILIAL
      and R.IDOS = old.IDOS;

end
^

/* Trigger: TRG_OS_AF_INSERT */
CREATE TRIGGER TRG_OS_AF_INSERT FOR OS
ACTIVE AFTER INSERT POSITION 0
AS
declare variable vCONTADOR integer;
declare variable vVALORDOCUMENTO numeric(16,2);
declare variable vIDRECEBER integer;
declare variable vPRAZO01 smallint;
declare variable vPRAZO02 smallint;
declare variable vPRAZO03 smallint;
declare variable vPRAZO04 smallint;
declare variable vPRAZO05 smallint;
declare variable vPRAZO06 smallint;
declare variable MVALORDOCUMENTO numeric (16,2);
begin
  if (new.SITUACAO_OS = 'F') then
  begin

        select C.PRAZO, C.PRAZO2, C.PRAZO3, C.PRAZO4, C.PRAZO5, C.PRAZO6 from CONDICAOPAGTO C
         where C.IDCONDICAOPAGTO = new.IDCONDICAOPAGTO
        into :VPRAZO01, :VPRAZO02, :VPRAZO03, :VPRAZO04, :VPRAZO05, :VPRAZO06;
    
    
      vVALORDOCUMENTO = 0;
      mVALORDOCUMENTO = 0;

      if (not exists(select first 1 R.IDRECEBER from RECEBER R
                      where R.IDFILIAL = new.IDFILIAL
                        and R.IDOS = new.IDOS)) then
      begin
        VVALORDOCUMENTO = new.TOTAL_OS/new.PARCELA;
    
        VCONTADOR = 1;
        while(VCONTADOR <= new.PARCELA)do
        begin
          select max(R.IDRECEBER)+1 from RECEBER R
            where R.IDFILIAL = new.IDFILIAL
              and R.IDFOLHA = 1
              and R.IDPARCIAL = 1
              into :VIDRECEBER;
              if (:VIDRECEBER is null) then VIDRECEBER = 1;
    
          INSERT INTO RECEBER (IDRECEBER,
                               IDFILIAL,
                               DATAEMISSAO,
                               DATAVENCIMENTO,
                               VALORDOCUMENTO,
                               IDCENTROCUSTO,
                               IDREPRESENTANTE,
                               IDCLIENTE,
                               IDFORMAPAGTO,
                               IDORDEM,
                               IDFOLHA,
                               VALORPAGAMENTO,
                               DOCUMENTO,
                               TAXACOMISSAO,
                               IDCOBRANCA,
                               IDROMANEIO,
                               TOTALCOMISSAO,
                               IDOBRAS,
                               IDOS)
    
                      VALUES (:VIDRECEBER,
                              new.IDFILIAL,
                              current_date,
                              new.DATA_OS+(if_nn(:vCONTADOR,'=',1,:vPRAZO01,0)+
                                          +if_nn(:vCONTADOR,'=',2,:vPRAZO02,0)+
                                          +if_nn(:vCONTADOR,'=',3,:vPRAZO03,0)+
                                          +if_nn(:vCONTADOR,'=',4,:vPRAZO04,0)+
                                          +if_nn(:vCONTADOR,'=',5,:vPRAZO05,0)+
                                          +if_nn(:vCONTADOR,'=',6,:vPRAZO06,0)),
                              :VVALORDOCUMENTO,
                              new.IDCENTROCUSTO,
                              new.IDREPRESENTANTE,
                              new.IDCLIENTE,
                              new.IDFORMAPAGTO,
                              :VCONTADOR,
                              1,
                              null,
                              'OS: ' || new.IDOS || '-' || :VCONTADOR || '/' || new.PARCELA,
                              0,
                              null,
                              null,
                              null,
                              null,
                              new.IDOS);
          MVALORDOCUMENTO = MVALORDOCUMENTO+VVALORDOCUMENTO;
          vCONTADOR = vCONTADOR+1;
    
          if (vCONTADOR = new.PARCELA)
          then begin
               update RECEBER R
                 set  R.DATAVENCIMENTO = new.DATA_OS+(if_nn(:vCONTADOR,'=',1,:vPRAZO01,0)+
                                                        +if_nn(:vCONTADOR,'=',2,:vPRAZO02,0)+
                                                        +if_nn(:vCONTADOR,'=',3,:vPRAZO03,0)+
                                                        +if_nn(:vCONTADOR,'=',4,:vPRAZO04,0)+
                                                        +if_nn(:vCONTADOR,'=',5,:vPRAZO05,0)+
                                                        +if_nn(:vCONTADOR,'=',6,:vPRAZO06,0)),
                      R.VALORDOCUMENTO = :VVALORDOCUMENTO+(new.TOTAL_OS-:MVALORDOCUMENTO)
    
                where R.IDFILIAL = new.IDFILIAL
                  and R.IDORDEM = :VCONTADOR
                  and R.IDOS = new.IDOS;
    
          end
    
    
        end
      end
  end
end
^

/* Trigger: TRG_OS_AF_UPDATE */
CREATE TRIGGER TRG_OS_AF_UPDATE FOR OS
ACTIVE AFTER UPDATE POSITION 0
AS
declare variable vCONTADOR integer;
declare variable vVALORDOCUMENTO numeric(16,2);
declare variable vIDRECEBER integer;
declare variable vPRAZO01 smallint;
declare variable vPRAZO02 smallint;
declare variable vPRAZO03 smallint;
declare variable vPRAZO04 smallint;
declare variable vPRAZO05 smallint;
declare variable vPRAZO06 smallint;
declare variable MVALORDOCUMENTO numeric (16,2);
begin
  if ((new.TOTAL_OS <> old.TOTAL_OS) or
     (new.IDFORMAPAGTO <> old.IDFORMAPAGTO) or
     (new.IDCONDICAOPAGTO <> old.IDCONDICAOPAGTO) or
     (new.IDREPRESENTANTE <> old.IDREPRESENTANTE) or
     (new.IDCENTROCUSTO <> old.IDCENTROCUSTO) or
     (new.IDOS <> old.IDOS) or
     (new.IDPLACA <> old.IDPLACA) or
     (new.PARCELA <> old.PARCELA) or
     (new.IDCLIENTE <> old.IDCLIENTE) or
     (new.DATA_OS <> old.DATA_OS )or
     (new.SITUACAO_OS <> old.SITUACAO_OS))  then begin

       if (new.SITUACAO_OS = 'F') then
       begin
           delete from RECEBER R
                 where R.IDFILIAL = new.IDFILIAL
                   and R.IDOS  = new.IDOS;
    
    
            select C.PRAZO, C.PRAZO2, C.PRAZO3, C.PRAZO4, C.PRAZO5, C.PRAZO6 from CONDICAOPAGTO C
             where C.IDCONDICAOPAGTO = new.IDCONDICAOPAGTO
            into :VPRAZO01, :VPRAZO02, :VPRAZO03, :VPRAZO04, :VPRAZO05, :VPRAZO06;
        
        
          vVALORDOCUMENTO = 0;
          mVALORDOCUMENTO = 0;
    
          if (not exists(select first 1 R.IDRECEBER from RECEBER R
                          where R.IDFILIAL = new.IDFILIAL
                            and R.IDOS = new.IDOS)) then
          begin
            VVALORDOCUMENTO = new.TOTAL_OS/new.PARCELA;
        
            VCONTADOR = 1;
            while(VCONTADOR <= new.PARCELA)do
            begin
              select max(R.IDRECEBER)+1 from RECEBER R
                where R.IDFILIAL = new.IDFILIAL
                  and R.IDFOLHA = 1
                  and R.IDPARCIAL = 1
                  into :VIDRECEBER;
                  if (:VIDRECEBER is null) then VIDRECEBER = 1;
        
              INSERT INTO RECEBER (IDRECEBER,
                                   IDFILIAL,
                                   DATAEMISSAO,
                                   DATAVENCIMENTO,
                                   VALORDOCUMENTO,
                                   IDCENTROCUSTO,
                                   IDREPRESENTANTE,
                                   IDCLIENTE,
                                   IDFORMAPAGTO,
                                   IDORDEM,
                                   IDFOLHA,
                                   VALORPAGAMENTO,
                                   DOCUMENTO,
                                   TAXACOMISSAO,
                                   IDCOBRANCA,
                                   IDROMANEIO,
                                   TOTALCOMISSAO,
                                   IDOBRAS,
                                   IDOS)
        
                          VALUES (:VIDRECEBER,
                                  new.IDFILIAL,
                                  current_date,
                                  new.DATA_OS+(if_nn(:vCONTADOR,'=',1,:vPRAZO01,0)+
                                              +if_nn(:vCONTADOR,'=',2,:vPRAZO02,0)+
                                              +if_nn(:vCONTADOR,'=',3,:vPRAZO03,0)+
                                              +if_nn(:vCONTADOR,'=',4,:vPRAZO04,0)+
                                              +if_nn(:vCONTADOR,'=',5,:vPRAZO05,0)+
                                              +if_nn(:vCONTADOR,'=',6,:vPRAZO06,0)),
                                  :VVALORDOCUMENTO,
                                  new.IDCENTROCUSTO,
                                  new.IDREPRESENTANTE,
                                  new.IDCLIENTE,
                                  new.IDFORMAPAGTO,
                                  :VCONTADOR,
                                  1,
                                  null,
                                  'OS: ' || new.IDOS || '-' || :VCONTADOR || '/' || new.PARCELA,
                                  0,
                                  null,
                                  null,
                                  null,
                                  null,
                                  new.IDOS);
              MVALORDOCUMENTO = MVALORDOCUMENTO+VVALORDOCUMENTO;
              vCONTADOR = vCONTADOR+1;
        
              if (vCONTADOR = new.PARCELA)
              then begin
                   update RECEBER R
                     set  R.DATAVENCIMENTO = new.DATA_OS+(if_nn(:vCONTADOR,'=',1,:vPRAZO01,0)+
                                                            +if_nn(:vCONTADOR,'=',2,:vPRAZO02,0)+
                                                            +if_nn(:vCONTADOR,'=',3,:vPRAZO03,0)+
                                                            +if_nn(:vCONTADOR,'=',4,:vPRAZO04,0)+
                                                            +if_nn(:vCONTADOR,'=',5,:vPRAZO05,0)+
                                                            +if_nn(:vCONTADOR,'=',6,:vPRAZO06,0)),
                          R.VALORDOCUMENTO = :VVALORDOCUMENTO+(new.TOTAL_OS-:MVALORDOCUMENTO)
        
                    where R.IDFILIAL = new.IDFILIAL
                      and R.IDORDEM = :VCONTADOR
                      and R.IDOS = new.IDOS;
        
              end
        
        
            end
          end
    end
  end
end
^

/* Trigger: TRG_OS_MAOOBRA_BF_INSERT */
CREATE TRIGGER TRG_OS_MAOOBRA_BF_INSERT FOR OS_MAOOBRA
ACTIVE BEFORE INSERT POSITION 0
AS
declare variable vIDITEM integer;
begin

  select max(O.IDITEM)+1 from OS_MAOOBRA O
    where O.IDFILIAL = new.IDFILIAL
      and O.IDOS = new.IDOS
      into :VIDITEM;

  if(:VIDITEM is null) then VIDITEM = 1;

  new.IDITEM = :VIDITEM;
end
^

/* Trigger: TRG_OS_PECAS_AF_DELETE */
CREATE TRIGGER TRG_OS_PECAS_AF_DELETE FOR OS_PECAS
ACTIVE AFTER DELETE POSITION 0
AS
begin
   execute procedure ATUALIZA_ESTOQUE(old.IDFILIAL,old.IDPRODUTO,old.QTDE,'+','EXCLUSÃO DO PRODUTO P/ ORDEM DE SERVIÇO N°:' || old.IDOS);
end
^

/* Trigger: TRG_OS_PECAS_AF_INSERT */
CREATE TRIGGER TRG_OS_PECAS_AF_INSERT FOR OS_PECAS
ACTIVE AFTER INSERT POSITION 0
AS
begin
  execute procedure ATUALIZA_ESTOQUE(new.IDFILIAL,new.IDPRODUTO,new.QTDE,'-','INCLUSÃO DO PRODUTO P/ ORDEM DE SERVIÇO N°:' || new.IDOS);
end
^

/* Trigger: TRG_OS_PECAS_AF_UPDATE */
CREATE TRIGGER TRG_OS_PECAS_AF_UPDATE FOR OS_PECAS
ACTIVE AFTER UPDATE POSITION 0
AS
begin
    execute procedure ATUALIZA_ESTOQUE(old.IDFILIAL,old.IDPRODUTO,old.QTDE,'+','ALTERAÇÃO DO PRODUTO P/ ORDEM DE SERVIÇO N°:' || old.IDOS);
    execute procedure ATUALIZA_ESTOQUE(new.IDFILIAL,new.IDPRODUTO,new.QTDE,'-','ALTERAÇÃO DO PRODUTO P/ ORDEM DE SERVIÇO N°:' || new.IDOS);
end
^

/* Trigger: TRG_OS_PECAS_BF_INSERT */
CREATE TRIGGER TRG_OS_PECAS_BF_INSERT FOR OS_PECAS
ACTIVE BEFORE INSERT POSITION 0
AS
declare variable vIDITEM integer;
begin

  select max(O.IDITEM)+1 from OS_PECAS O
    where O.IDFILIAL = new.IDFILIAL
      and O.IDOS = new.IDOS
      into :VIDITEM;

  if(:VIDITEM is null) then VIDITEM = 1;

  new.IDITEM = :VIDITEM;
                                 
end
^

/* Trigger: TRG_PAGAR_BF_UPDATE */
CREATE TRIGGER TRG_PAGAR_BF_UPDATE FOR PAGAR
ACTIVE BEFORE UPDATE POSITION 0
AS
begin
  if (not new.DATAPAGAMENTO is null) then
      new.DTDIGITACAO_02 = current_date;
end
^

/* Trigger: TRG_PAGAR_DELETE */
CREATE TRIGGER TRG_PAGAR_DELETE FOR PAGAR
ACTIVE AFTER DELETE POSITION 0
as
begin
   if (OLD.IDPARCIAL <> 1) then begin
     update PAGAR P
        set P.VALORDOCUMENTO = P.VALORDOCUMENTO+OLD.VALORDOCUMENTO
      where P.IDFILIAL = OLD.IDFILIAL
        and P.IDFORNECEDOR = OLD.IDFORNECEDOR
        and P.IDPAGAR = OLD.IDPAGAR
        and P.IDORDEM = OLD.IDORDEM
        and P.IDPARCIAL = 1;
   end
   delete from MOVTOCAIXA M
     where M.IDMOVTOCAIXA = OLD.IDMOVTOCAIXA
       and M.IDFILIAL = OLD.IDFILIAL;
       
   delete from MOVTOFUNCIONARIO MF
     where MF.IDFILIAL = OLD.IDFILIAL
       and MF.IDCONTROLE = OLD.IDMOVTOFUNCIONARIO;
end
^

/* Trigger: TRG_PAGAR_INSERT */
CREATE TRIGGER TRG_PAGAR_INSERT FOR PAGAR
ACTIVE BEFORE INSERT POSITION 0
as
 declare variable vIDMOVTOCAIXA integer;
 declare variable vNOMEFORNECEDOR varchar(60);
 declare variable vBAIXA_DATA_PAG_MOV varchar(1);
 declare variable vDATAMOVIMENTO date;
begin
   -----------------------------------------------------
   -- VERIFICA QUAL A DATA QUE DEVE QUITAR            --
   -----------------------------------------------------
   select F.BAIXA_DATA_PAG_MOV from FILIAL F
    where F.IDFILIAL = NEW.IDFILIAL
    into :VBAIXA_DATA_PAG_MOV;

   if (:VBAIXA_DATA_PAG_MOV = 'P') then
     VDATAMOVIMENTO = new.DATAPAGAMENTO;
   else
     VDATAMOVIMENTO = current_date;
   -----------------------------------------------------
   new.DTDIGITACAO_01 = current_date;


   select F.NOME from FORNECEDOR F
     where F.IDFORNECEDOR = new.IDFORNECEDOR
   into :VNOMEFORNECEDOR;

   if (new.IDPARCIAL <> 1) then begin
     update PAGAR P
        set P.VALORDOCUMENTO = P.VALORDOCUMENTO-new.VALORDOCUMENTO
      where P.IDFILIAL = new.IDFILIAL
        and P.IDFORNECEDOR = new.IDFORNECEDOR
        and P.IDPAGAR = new.IDPAGAR
        and P.IDORDEM = new.IDORDEM
        and P.IDPARCIAL = 1;
   end
   if (not new.VALORPAGAMENTO is null) then begin
     if (not exists (select M.IDMOVTOCAIXA from MOVTOCAIXA M
                        where M.IDFILIAL = new.IDFILIAL
                          and M.IDMOVTOCAIXA = new.IDMOVTOCAIXA)) then begin
        select cast(max(M.IDMOVTOCAIXA) as integer)+1 from MOVTOCAIXA M
          where M.IDFILIAL = new.IDFILIAL
            into vIDMOVTOCAIXA;
            if (vIDMOVTOCAIXA is null) then vIDMOVTOCAIXA = 1;
            insert into MOVTOCAIXA (IDFILIAL    ,  IDMOVTOCAIXA ,  DOCUMENTO   , DESCRICAOHISTORICO, IDCENTROCUSTO, DTEMISSAO,
                                    DTMOVIMENTO, IDCAIXA, VALORMOVTO, TIPOOPERACAO, COMPLEMENTOHISTORICO, IDOBRAS)
                            values (new.IDFILIAL, :vIDMOVTOCAIXA, 'DC:' || new.IDPAGAR || '/' || new.IDORDEM || '-' || new.IDFORNECEDOR, new.COMPLEMENTOHISTORICO, new.IDCENTROCUSTO, new.DATAPAGAMENTO,
                                    :VDATAMOVIMENTO, new.IDCAIXA, new.VALORPAGAMENTO, 'D', :VNOMEFORNECEDOR, NEW.IDOBRAS);
               new.IDMOVTOCAIXA = :vIDMOVTOCAIXA; end
     else begin
       update MOVTOCAIXA M
          set M.DOCUMENTO = 'DC:' || new.IDPAGAR || '/' || new.IDORDEM || '-' || new.IDFORNECEDOR,
              M.DESCRICAOHISTORICO = new.COMPLEMENTOHISTORICO,
              M.COMPLEMENTOHISTORICO = :VNOMEFORNECEDOR,
              M.IDCENTROCUSTO = new.IDCENTROCUSTO,
              M.DTEMISSAO = new.DATAPAGAMENTO,
              M.DTMOVIMENTO = :VDATAMOVIMENTO,
              M.IDCAIXA = new.IDCAIXA,
              M.IDOBRAS = NEW.IDOBRAS,
              M.VALORMOVTO = new.VALORPAGAMENTO
        where M.IDMOVTOCAIXA = new.IDMOVTOCAIXA
          and M.IDFILIAL = new.IDFILIAL;
     end
   end
end
^

/* Trigger: TRG_PAGAR_UPDATE */
CREATE TRIGGER TRG_PAGAR_UPDATE FOR PAGAR
ACTIVE AFTER UPDATE POSITION 0
as
/* code here */
 declare variable vIDMOVTOCAIXA integer;
 declare variable vNOMEFORNECEDOR varchar(60);
 declare variable vBAIXA_DATA_PAG_MOV varchar(1);
 declare variable vDATAMOVIMENTO date;
begin
   -----------------------------------------------------
   -- VERIFICA QUAL A DATA QUE DEVE QUITAR            --
   -----------------------------------------------------
   select F.BAIXA_DATA_PAG_MOV from FILIAL F
    where F.IDFILIAL = NEW.IDFILIAL
    into :VBAIXA_DATA_PAG_MOV;

   if (:VBAIXA_DATA_PAG_MOV = 'P') then
     VDATAMOVIMENTO = new.DATAPAGAMENTO;
   else
     VDATAMOVIMENTO = current_date;
   -----------------------------------------------------

   select F.NOME from FORNECEDOR F
     where F.IDFORNECEDOR = new.IDFORNECEDOR
   into :VNOMEFORNECEDOR;

   if (not new.VALORPAGAMENTO is null) then begin
     if (not exists (select M.IDMOVTOCAIXA from MOVTOCAIXA M
                        where M.IDFILIAL = new.IDFILIAL
                          and M.IDMOVTOCAIXA = new.IDMOVTOCAIXA)) then begin
        select cast(max(M.IDMOVTOCAIXA) as integer)+1 from MOVTOCAIXA M
          where M.IDFILIAL = new.IDFILIAL
            into vIDMOVTOCAIXA;
            if (vIDMOVTOCAIXA is null) then vIDMOVTOCAIXA = 1;
            insert into MOVTOCAIXA (IDFILIAL    ,  IDMOVTOCAIXA ,  DOCUMENTO   , DESCRICAOHISTORICO, IDCENTROCUSTO, DTEMISSAO,
                                    DTMOVIMENTO, IDCAIXA, VALORMOVTO, TIPOOPERACAO, COMPLEMENTOHISTORICO, IDOBRAS)
                            values (new.IDFILIAL, :vIDMOVTOCAIXA, 'DC:' || new.IDPAGAR || '/' || new.IDORDEM || '-' || new.IDFORNECEDOR, new.COMPLEMENTOHISTORICO, new.IDCENTROCUSTO, new.DATAPAGAMENTO,
                                    :VDATAMOVIMENTO, new.IDCAIXA, new.VALORPAGAMENTO, 'D', :VNOMEFORNECEDOR, NEW.IDOBRAS);
            update PAGAR P
               set P.IDMOVTOCAIXA = :vIDMOVTOCAIXA
               where P.IDPAGAR = new.IDPAGAR
                 and P.IDFORNECEDOR = new.IDFORNECEDOR
                 and P.IDFILIAL = new.IDFILIAL
                 and P.IDPARCIAL = new.IDPARCIAL
                 and P.IDORDEM = new.IDORDEM;  end
/*            NEW.IDMOVTOCAIXA = :vIDMOVTOCAIXA; end */
     else begin
       update MOVTOCAIXA M
          set M.DOCUMENTO = 'DC:' || new.IDPAGAR || '/' || new.IDORDEM || '-' || new.IDFORNECEDOR,
              M.DESCRICAOHISTORICO = new.COMPLEMENTOHISTORICO,
              M.COMPLEMENTOHISTORICO = :VNOMEFORNECEDOR,
              M.IDCENTROCUSTO = new.IDCENTROCUSTO,
              M.DTEMISSAO = new.DATAPAGAMENTO,
              M.DTMOVIMENTO = :VDATAMOVIMENTO,
              M.IDCAIXA = new.IDCAIXA,
              M.IDOBRAS = NEW.IDOBRAS,
              M.VALORMOVTO = new.VALORPAGAMENTO
        where M.IDMOVTOCAIXA = new.IDMOVTOCAIXA
          and M.IDFILIAL = new.IDFILIAL;
     end end
   else begin
     delete from MOVTOCAIXA M
        where M.IDMOVTOCAIXA = old.IDMOVTOCAIXA
          and M.IDFILIAL = old.IDFILIAL;
   end
end
^

/* Trigger: TRG_PAGTOCLIENTE_AF_INSERT */
CREATE TRIGGER TRG_PAGTOCLIENTE_AF_INSERT FOR PAGTOCLIENTE
ACTIVE AFTER INSERT POSITION 0
AS
declare variable VN_ESCOLHER_FORMA varchar(1);
declare variable vIDREPRESENTANTE smallint;
begin
  select F.N_ESCOLHER_FORMA from FILIAL F
    where F.IDFILIAL = new.IDFILIAL
      into :VN_ESCOLHER_FORMA;

  if (VN_ESCOLHER_FORMA is null) then VN_ESCOLHER_FORMA = 'N';

  if (VN_ESCOLHER_FORMA = 'S') then
  begin
      for select R.IDREPRESENTANTE from REPRESENTANTE R
            where R.EXCLUIDO is null
              and R.USA_ANDROID = 'S'
                into :VIDREPRESENTANTE
      do
      begin
         if (not exists(select L.IDFILIAL from LOG_ALTERACAO_ANDROID L
                         where L.IDFILIAL = new.IDFILIAL
                           and L.ID = new.IDCLIENTE
                           and L.ID_2 = new.IDFORMAPAGTO
                           and L.TIPO = 'Forma Pagto Cliente'
                           and L.IDREPRESENTANTE = :VIDREPRESENTANTE)) then
         begin
             INSERT INTO LOG_ALTERACAO_ANDROID (IDFILIAL, IDREPRESENTANTE, ID, TIPO, IDFOLHA, SITUACAO, ID_2) VALUES (new.IDFILIAL, :VIDREPRESENTANTE, new.IDCLIENTE, 'Forma Pagto Cliente', NULL, 'I', new.IDFORMAPAGTO);
         end
      end
  end
end
^

/* Trigger: TRG_PAGTOCLIENTE_AF_UPDATE */
CREATE TRIGGER TRG_PAGTOCLIENTE_AF_UPDATE FOR PAGTOCLIENTE
ACTIVE AFTER UPDATE POSITION 0
AS
declare variable VN_ESCOLHER_FORMA varchar(1);
declare variable vIDREPRESENTANTE smallint;
begin
  select F.N_ESCOLHER_FORMA from FILIAL F
    where F.IDFILIAL = new.IDFILIAL
      into :VN_ESCOLHER_FORMA;

  if (VN_ESCOLHER_FORMA is null) then VN_ESCOLHER_FORMA = 'N';

  if (VN_ESCOLHER_FORMA = 'S') then
  begin
      for select R.IDREPRESENTANTE from REPRESENTANTE R
            where R.EXCLUIDO is null
              and R.USA_ANDROID = 'S'
                into :VIDREPRESENTANTE
      do
      begin
         if (new.IDFORMAPAGTO <> old.IDFORMAPAGTO) then
         begin
             INSERT INTO LOG_ALTERACAO_ANDROID (IDFILIAL, IDREPRESENTANTE, ID, TIPO, IDFOLHA, SITUACAO, ID_2) VALUES (old.IDFILIAL, :VIDREPRESENTANTE, old.IDCLIENTE, 'Forma Pagto Cliente', NULL, 'E', old.IDFORMAPAGTO);

             if (not exists(select L.IDFILIAL from LOG_ALTERACAO_ANDROID L
                             where L.IDFILIAL = new.IDFILIAL
                               and L.ID = new.IDCLIENTE
                               and L.ID_2 = new.IDFORMAPAGTO
                               and L.TIPO = 'Forma Pagto Cliente'
                               and L.IDREPRESENTANTE = :VIDREPRESENTANTE)) then
             begin
                 INSERT INTO LOG_ALTERACAO_ANDROID (IDFILIAL, IDREPRESENTANTE, ID, TIPO, IDFOLHA, SITUACAO, ID_2) VALUES (new.IDFILIAL, :VIDREPRESENTANTE, new.IDCLIENTE, 'Forma Pagto Cliente', NULL, 'I', new.IDFORMAPAGTO);
             end
         end
      end
  end
end
^

/* Trigger: TRG_PAGTOCLIENTE_BF_DELETE */
CREATE TRIGGER TRG_PAGTOCLIENTE_BF_DELETE FOR PAGTOCLIENTE
ACTIVE BEFORE DELETE POSITION 0
AS
declare variable VN_ESCOLHER_FORMA varchar(1);
declare variable vIDREPRESENTANTE smallint;
begin
  select F.N_ESCOLHER_FORMA from FILIAL F
    where F.IDFILIAL = old.IDFILIAL
      into :VN_ESCOLHER_FORMA;

  if (VN_ESCOLHER_FORMA is null) then VN_ESCOLHER_FORMA = 'N';

  if (VN_ESCOLHER_FORMA = 'S') then
  begin
      for select R.IDREPRESENTANTE from REPRESENTANTE R
            where R.EXCLUIDO is null
              and R.USA_ANDROID = 'S'
                into :VIDREPRESENTANTE
      do
      begin
             INSERT INTO LOG_ALTERACAO_ANDROID (IDFILIAL, IDREPRESENTANTE, ID, TIPO, IDFOLHA, SITUACAO, ID_2) VALUES (old.IDFILIAL, :VIDREPRESENTANTE, old.IDCLIENTE, 'Forma Pagto Cliente', NULL, 'E', old.IDFORMAPAGTO);
      end
  end
end
^

/* Trigger: TRG_PAGTOCLIENTE_BF_INSERT */
CREATE TRIGGER TRG_PAGTOCLIENTE_BF_INSERT FOR PAGTOCLIENTE
ACTIVE BEFORE INSERT POSITION 0
AS
declare variable vCLIENTE_NOVO varchar(1);
begin
  select C.CLIENTE_NOVO from CLIENTE C
    where C.IDCLIENTE = new.IDCLIENTE
       into :VCLIENTE_NOVO;

  if (:VCLIENTE_NOVO = 'I') then
    new.PAGTO_NOVO = 'I';

end
^

/* Trigger: TRG_PEDIDOPALM_BF_DELETE */
CREATE TRIGGER TRG_PEDIDOPALM_BF_DELETE FOR PEDIDOPALM
ACTIVE BEFORE DELETE POSITION 0
AS
begin
  DELETE FROM ITENSPEDIDOPALM I
    WHERE I.IDFILIAL = OLD.IDFILIAL
      AND I.IDPEDIDOPALM = OLD.IDPEDIDOPALM
      AND I.IDREPRESENTANTE = OLD.IDREPRESENTANTE;
end
^

/* Trigger: TRG_PEDIDO_AF_DELETE */
CREATE TRIGGER TRG_PEDIDO_AF_DELETE FOR PEDIDO
ACTIVE AFTER DELETE POSITION 0
as
begin

  delete from CORTES C
     where C.IDFILIAL = old.IDFILIAL
       and C.IDPEDIDO = old.IDPEDIDO
       and C.IDFOLHA  = old.IDFOLHA;

  delete from ITENSPEDIDO IT
     where IT.IDFILIAL = old.IDFILIAL
       and IT.IDPEDIDO = old.IDPEDIDO
       and IT.IDFOLHA = old.IDFOLHA;

  if ((old.IDFOLHA = 5) or (old.IDFOLHA = 9))  then begin
     delete from RECEBER R
       where R.IDFILIAL = old.IDFILIAL
         and R.IDRECEBER = old.IDPEDIDO
         and R.IDFOLHA = old.IDFOLHA
         and R.VALORPAGAMENTO is null;
  end
end
^

/* Trigger: TRG_PEDIDO_AF_INSERT_ANDR */
CREATE TRIGGER TRG_PEDIDO_AF_INSERT_ANDR FOR PEDIDO
ACTIVE AFTER INSERT POSITION 0
AS
declare variable vUSA_ANDROID varchar(1);
begin
  select R.USA_ANDROID from REPRESENTANTE R
    where R.IDREPRESENTANTE = new.IDREPRESENTANTE
        into :VUSA_ANDROID;

  if (VUSA_ANDROID = 'S') then
  begin
      if ((new.SITUACAOPEDIDO = 'V') or (new.SITUACAOPEDIDO = 'B') or (new.SITUACAOPEDIDO = 'T')) then
      begin
        if (new.TOTALPEDIDO <> 0) then
        begin
           if (not exists(select L.IDFILIAL from LOG_ALTERACAO_ANDROID L
                      where L.IDFILIAL = new.IDFILIAL
                        and L.ID = new.IDPEDIDO
                        and L.ID_2 = new.IDFOLHA
                        and L.TIPO = 'Pedido'
                        and L.IDREPRESENTANTE = new.IDREPRESENTANTE)) then
           begin
             INSERT INTO LOG_ALTERACAO_ANDROID (IDFILIAL, IDREPRESENTANTE, ID, TIPO, IDFOLHA, SITUACAO, ID_2) VALUES (new.IDFILIAL, new.IDREPRESENTANTE, new.IDPEDIDO, 'Pedido', NULL, 'I', new.IDFOLHA);
           end
        end
      end
  end

end
^

/* Trigger: TRG_PEDIDO_AF_UPDATE */
CREATE TRIGGER TRG_PEDIDO_AF_UPDATE FOR PEDIDO
ACTIVE AFTER UPDATE POSITION 0
as
declare variable VESTOQUE_REPRES varchar(1);
begin
  if (new.IDCONSIGNACAO is null) then
     VESTOQUE_REPRES = 'N' ;
  else
     VESTOQUE_REPRES = 'S'  ;

  if (new.SIT_INVENTARIO is null) then begin
      update ITENSPEDIDO IT
         set IT.SIT_PEDIDO = new.SITUACAOPEDIDO,
             IT.ESTOQUE_REPRESENTANTE = :VESTOQUE_REPRES
       where IT.IDFILIAL = new.IDFILIAL
         and IT.IDPEDIDO = new.IDPEDIDO
         and IT.IDFOLHA = new.IDFOLHA;
  end
end
^

/* Trigger: TRG_PEDIDO_AF_UPDATE_LOG_AND */
CREATE TRIGGER TRG_PEDIDO_AF_UPDATE_LOG_AND FOR PEDIDO
ACTIVE AFTER UPDATE POSITION 0
AS
declare variable vUSA_ANDROID varchar(1);
declare variable vUSA_ANDROID_OLD varchar(1);
declare variable VENTROU varchar(1);
begin
   VENTROU = 'N';
   if (new.IDREPRESENTANTE <> old.IDREPRESENTANTE) then
   begin
      -- GERA O LOG DO ANTIGO REPRESENTANTE
      select R.USA_ANDROID from REPRESENTANTE R
        where R.IDREPRESENTANTE = old.IDREPRESENTANTE
            into :VUSA_ANDROID_OLD;
    
      if (VUSA_ANDROID_OLD = 'S') then
      begin
          if ((old.SITUACAOPEDIDO = 'V') or (old.SITUACAOPEDIDO = 'B') or (old.SITUACAOPEDIDO = 'T')) then
          begin
            if (old.TOTALPEDIDO <> 0) then
            begin
              if (not old.IDPEDIDOPALM is null) then
              begin
                  if (not exists (select P.IDFILIAL from PEDIDO_STATUS P
                                    where P.IDFILIAL = old.IDFILIAL
                                      and P.IDPEDIDO = old.IDPEDIDOPALM
                                      and P.IDREPRESENTANTE = old.IDREPRESENTANTE)) then
                  begin
                    INSERT INTO PEDIDO_STATUS (IDFILIAL, IDPEDIDO, IDREPRESENTANTE, STATUS, MOBILE_STATUS)
                                       VALUES (old.IDFILIAL, old.IDPEDIDOPALM, old.IDREPRESENTANTE, 'E', NULL);
                  end
                  else
                  begin
                      update PEDIDO_STATUS P
                        set P.STATUS = 'E',
                            P.MOBILE_STATUS = null
                      where P.IDFILIAL = old.IDFILIAL
                        and P.IDPEDIDO = old.IDPEDIDOPALM
                        and P.IDREPRESENTANTE = old.IDREPRESENTANTE;
                  end

                 VENTROU = 'S';
              end
              else
              begin
                delete from LOG_ALTERACAO_ANDROID L
                      where L.IDFILIAL = old.IDFILIAL
                        and L.ID = old.IDPEDIDO
                        and L.ID_2 = old.IDFOLHA
                        and L.TIPO = 'Pedido'
                        and L.IDREPRESENTANTE = old.IDREPRESENTANTE;
              end
            end
          end
      end
   end



  select R.USA_ANDROID from REPRESENTANTE R
    where R.IDREPRESENTANTE = new.IDREPRESENTANTE
        into :VUSA_ANDROID;

  if (VUSA_ANDROID = 'S') then
  begin
      if ((new.SITUACAOPEDIDO = 'V') or (new.SITUACAOPEDIDO = 'B') or (new.SITUACAOPEDIDO = 'T')) then
      begin
        if (new.TOTALPEDIDO <> 0) then
        begin
           if (not exists(select L.IDFILIAL from LOG_ALTERACAO_ANDROID L
                      where L.IDFILIAL = new.IDFILIAL
                        and L.ID = new.IDPEDIDO
                        and L.ID_2 = new.IDFOLHA
                        and L.TIPO = 'Pedido'
                        and L.IDREPRESENTANTE = new.IDREPRESENTANTE)) then
           begin
             INSERT INTO LOG_ALTERACAO_ANDROID (IDFILIAL, IDREPRESENTANTE, ID, TIPO, IDFOLHA, SITUACAO, ID_2) VALUES (new.IDFILIAL, new.IDREPRESENTANTE, new.IDPEDIDO, 'Pedido', NULL, 'A', new.IDFOLHA);
           end
        end
      end
  end


  if (VENTROU = 'S') then
  begin
    if (new.IDFOLHA = 1) then
    begin
        update PEDIDO P
          set P.IDPEDIDOPALM = null
         where P.IDFILIAL = new.IDFILIAL
           and P.IDPEDIDO = new.IDPEDIDO
           and P.IDFOLHA = new.IDFOLHA;
    end
  end
end
^

/* Trigger: TRG_PEDIDO_AF_UPDATE_MOBILE */
CREATE TRIGGER TRG_PEDIDO_AF_UPDATE_MOBILE FOR PEDIDO
ACTIVE AFTER UPDATE POSITION 0
AS
begin
  if (not new.IDPEDIDOPALM is null) then
  begin
      if (not exists (select P.IDFILIAL from PEDIDO_STATUS P
                        where P.IDFILIAL = new.IDFILIAL
                          and P.IDPEDIDO = new.IDPEDIDOPALM
                          and P.IDREPRESENTANTE = new.IDREPRESENTANTE)) then
      begin
        if (new.SITUACAOPEDIDO = '-') then
        begin
          INSERT INTO PEDIDO_STATUS (IDFILIAL, IDPEDIDO, IDREPRESENTANTE, STATUS, MOBILE_STATUS)
                             VALUES (new.IDFILIAL, new.IDPEDIDOPALM, new.IDREPRESENTANTE, 'C', NULL);
        end
        else
        begin
          if (new.SITUACAOPEDIDO <> old.SITUACAOPEDIDO) then
          begin
            INSERT INTO PEDIDO_STATUS (IDFILIAL, IDPEDIDO, IDREPRESENTANTE, STATUS, MOBILE_STATUS)
                               VALUES (new.IDFILIAL, new.IDPEDIDOPALM, new.IDREPRESENTANTE, new.SITUACAOPEDIDO, NULL);
          end
        end
      end
      else
      begin
          if (exists (select P.IDFILIAL from PEDIDO_STATUS P
                            where P.IDFILIAL = new.IDFILIAL
                              and P.IDPEDIDO = new.IDPEDIDOPALM
                              and P.IDREPRESENTANTE = new.IDREPRESENTANTE)) then
          begin
            if ((new.SITUACAOPEDIDO = '-') and (old.SITUACAOPEDIDO <> '-')) then
            begin
              update PEDIDO_STATUS P
                set P.STATUS = 'C',
                    P.MOBILE_STATUS = null
              where P.IDFILIAL = new.IDFILIAL
                and P.IDPEDIDO = new.IDPEDIDOPALM
                and P.IDREPRESENTANTE = new.IDREPRESENTANTE;
            end
            else
            begin
              if (new.SITUACAOPEDIDO <> old.SITUACAOPEDIDO) then
              update PEDIDO_STATUS P
                set P.STATUS = new.SITUACAOPEDIDO,
                    P.MOBILE_STATUS = null
              where P.IDFILIAL = new.IDFILIAL
                and P.IDPEDIDO = new.IDPEDIDOPALM
                and P.IDREPRESENTANTE = new.IDREPRESENTANTE;
            end
          end
    
      end
  end
end
^

/* Trigger: TRG_PEDIDO_BF_DELETE_MOBILE */
CREATE TRIGGER TRG_PEDIDO_BF_DELETE_MOBILE FOR PEDIDO
ACTIVE BEFORE DELETE POSITION 0
AS
begin
  if (not old.IDPEDIDOPALM is null) then
  begin
      if (not exists (select P.IDFILIAL from PEDIDO_STATUS P
                        where P.IDFILIAL = old.IDFILIAL
                          and P.IDPEDIDO = old.IDPEDIDOPALM
                          and P.IDREPRESENTANTE = old.IDREPRESENTANTE)) then
      begin
        INSERT INTO PEDIDO_STATUS (IDFILIAL, IDPEDIDO, IDREPRESENTANTE, STATUS, MOBILE_STATUS)
                           VALUES (old.IDFILIAL, old.IDPEDIDOPALM, old.IDREPRESENTANTE, 'E', NULL);
      end
      else
      begin
          update PEDIDO_STATUS P
            set P.STATUS = 'E',
                P.MOBILE_STATUS = null
          where P.IDFILIAL = old.IDFILIAL
            and P.IDPEDIDO = old.IDPEDIDOPALM
            and P.IDREPRESENTANTE = old.IDREPRESENTANTE;
      end
  end
end
^

/* Trigger: TRG_PEDIDO_BF_UPDATE */
CREATE TRIGGER TRG_PEDIDO_BF_UPDATE FOR PEDIDO
ACTIVE BEFORE UPDATE POSITION 0
AS
begin
  if (new.NOTAFISCAL is null) then
    new.DATANOTAFISCAL = null;
end
^

/* Trigger: TRG_PEDIDO_INSERT */
CREATE TRIGGER TRG_PEDIDO_INSERT FOR PEDIDO
ACTIVE AFTER INSERT POSITION 0
as
begin
  update CLIENTE C
     set C.DTULTIMACOMPRA = new.DATAPEDIDO
   where C.IDCLIENTE = new.IDCLIENTE;
end
^

/* Trigger: TRG_PEDIDO_MAOOBRA_BF_INSERT */
CREATE TRIGGER TRG_PEDIDO_MAOOBRA_BF_INSERT FOR PEDIDO_MAOOBRA
ACTIVE BEFORE INSERT POSITION 0
AS
declare variable vIDITEM integer;
begin

  select max(O.IDITEM)+1 from PEDIDO_MAOOBRA O
    where O.IDFILIAL = new.IDFILIAL
      and O.IDPEDIDO = new.IDPEDIDO
      and O.IDFOLHA  = new.IDFOLHA
      into :VIDITEM;

  if(:VIDITEM is null) then VIDITEM = 1;

  new.IDITEM = :VIDITEM;
end
^

/* Trigger: TRG_PRODUCAO_AF_UPDATE */
CREATE TRIGGER TRG_PRODUCAO_AF_UPDATE FOR PRODUCAO
ACTIVE AFTER UPDATE POSITION 0
AS
 declare variable vIDRECEITA integer;
 declare variable vIDMATEIRA_PRIMA integer;
 declare variable vQTDE numeric(10,2);
 declare variable vCUSTO numeric(16,2);
 declare variable vTIPOOPERACAO varchar(1);
 declare variable vPRECO numeric(15,2);
begin

   /* INSERINDO OS ITENS DE PRODUCAO */
   for select IT.IDCONTROLE, IT.IDMATERIA_PRIMA,
              IT.QTDE, IT.CUSTO, IT.TIPO_OPERACAO from ITENSRECEITA IT
        where IT.IDFILIAL = new.IDFILIAL
          and IT.IDCONTROLE = new.IDRECEITA
      into :vIDRECEITA, :vIDMATEIRA_PRIMA, :vQTDE, :vCUSTO, :VTIPOOPERACAO
   do
   begin
      if (:VTIPOOPERACAO = '+') then begin
          insert into ITENSPRODUCAO (IDFILIAL, IDRECEITA, IDPRODUCAO, IDMATERIA_PRIMA, QTDE, CUSTO, TIPO_OPERACAO)
                             values (new.IDFILIAL, :vIDRECEITA, new.IDCONTROLE,:vIDMATEIRA_PRIMA, :vQTDE, :vCUSTO, :VTIPOOPERACAO);
      end
      else if (:vTIPOOPERACAO = '*') then  begin
          insert into ITENSPRODUCAO (IDFILIAL, IDRECEITA, IDPRODUCAO, IDMATERIA_PRIMA, QTDE, CUSTO, TIPO_OPERACAO)
                             values (new.IDFILIAL, :vIDRECEITA, new.IDCONTROLE,
                                    :vIDMATEIRA_PRIMA, :vQTDE*new.QTDE_RECEITA, :vCUSTO, :VTIPOOPERACAO);
      end

--      VPRECO = :VPRECO+(:VCUSTO*:VQTDE);
   end

/*
   for select IT.IDCONTROLE, IT.IDMATERIA_PRIMA,
              IT.QTDE, IT.CUSTO, IT.TIPO_OPERACAO from ITENSRECEITA IT
        where IT.IDFILIAL = new.IDFILIAL
          and IT.IDCONTROLE = new.IDRECEITA
      into :vIDRECEITA, :vIDMATEIRA_PRIMA, :vQTDE, :vCUSTO, :VTIPOOPERACAO
   do
   begin
      if (:vTIPOOPERACAO = '*') then  begin
          update ITENSPRODUCAO IT1
             set IT1.QTDE = :vQTDE*old.QTDE_RECEITA
           where IT1.IDFILIAL = old.IDFILIAL
             and IT1.IDRECEITA = :VIDRECEITA
             and IT1.IDMATERIA_PRIMA = :VIDMATEIRA_PRIMA;

          update ITENSPRODUCAO IT2
             set IT2.QTDE = :vQTDE*new.QTDE_RECEITA
           where IT2.IDFILIAL = new.IDFILIAL
             and IT2.IDRECEITA = :VIDRECEITA
             and IT2.IDMATERIA_PRIMA = :VIDMATEIRA_PRIMA;
      end
   end
*/
end
^

/* Trigger: TRG_PRODUCAO_BF_DELETE */
CREATE TRIGGER TRG_PRODUCAO_BF_DELETE FOR PRODUCAO
ACTIVE BEFORE DELETE POSITION 0
AS
begin
   execute procedure ATUALIZA_ESTOQUE(old.IDFILIAL,old.IDPRODUTO,(old.QTDE_PRODUZIR),'-','EXLUSÃO PRODUCAO: ' || old.IDCONTROLE);

   delete from ITENSPRODUCAO IT
    where IT.IDFILIAL = old.IDFILIAL
      and IT.IDPRODUCAO = old.IDCONTROLE;
end
^

/* Trigger: TRG_PRODUCAO_BF_INSERT */
CREATE TRIGGER TRG_PRODUCAO_BF_INSERT FOR PRODUCAO
ACTIVE BEFORE INSERT POSITION 0
as
 declare variable vIDRECEITA integer;
 declare variable vIDMATEIRA_PRIMA integer;
 declare variable vQTDE numeric(10,2);
 declare variable vCUSTO numeric(16,2);
 declare variable vTIPOOPERACAO varchar(1);
begin
   execute procedure ATUALIZA_ESTOQUE(new.IDFILIAL,new.IDPRODUTO,(new.QTDE_PRODUZIR),'+','INCLUSÃO PRODUCAO: ' || new.IDCONTROLE);


   /* INSERINDO OS ITENS DE PRODUCAO */
   for select IT.IDCONTROLE, IT.IDMATERIA_PRIMA,
              IT.QTDE, IT.CUSTO, IT.TIPO_OPERACAO from ITENSRECEITA IT
        where IT.IDFILIAL = new.IDFILIAL
          and IT.IDCONTROLE = new.IDRECEITA
      into :vIDRECEITA, :vIDMATEIRA_PRIMA, :vQTDE, :vCUSTO, :VTIPOOPERACAO
   do
   begin
      if (:VTIPOOPERACAO = '+') then begin
          insert into ITENSPRODUCAO (IDFILIAL, IDRECEITA, IDPRODUCAO, IDMATERIA_PRIMA, QTDE, CUSTO, TIPO_OPERACAO)
                             values (new.IDFILIAL, :vIDRECEITA, new.IDCONTROLE,:vIDMATEIRA_PRIMA, :vQTDE, :vCUSTO, :VTIPOOPERACAO);
      end
      else if (:vTIPOOPERACAO = '*') then  begin
          insert into ITENSPRODUCAO (IDFILIAL, IDRECEITA, IDPRODUCAO, IDMATERIA_PRIMA, QTDE, CUSTO, TIPO_OPERACAO)
                             values (new.IDFILIAL, :vIDRECEITA, new.IDCONTROLE,
                                    :vIDMATEIRA_PRIMA, :vQTDE*new.QTDE_RECEITA, :vCUSTO, :VTIPOOPERACAO);
      end
   end
end
^

/* Trigger: TRG_PRODUCAO_BF_UPDATE */
CREATE TRIGGER TRG_PRODUCAO_BF_UPDATE FOR PRODUCAO
ACTIVE BEFORE UPDATE POSITION 0
as
begin
   execute procedure ATUALIZA_ESTOQUE(old.IDFILIAL,old.IDPRODUTO,(old.QTDE_PRODUZIR),'-','ALTERAÇÃO PRODUCAO: ' || old.IDCONTROLE);

   execute procedure ATUALIZA_ESTOQUE(new.IDFILIAL,new.IDPRODUTO,(new.QTDE_PRODUZIR),'+','ALTERAÇÃO PRODUCAO: ' || new.IDCONTROLE);

   delete from ITENSPRODUCAO IT
   where IT.IDFILIAL = old.IDFILIAL
     and IT.IDPRODUCAO = old.IDCONTROLE;
end
^

/* Trigger: TRG_PRODUCAO_CESTA_AF_DELETE */
CREATE TRIGGER TRG_PRODUCAO_CESTA_AF_DELETE FOR PRODUCAO_CESTA
ACTIVE AFTER DELETE POSITION 0
AS
begin
  execute procedure atualiza_estoque(old.id_filial,old.id_cesta,old.qtde_entrada,'-','EXCLUSÃO P/ PRODUÇÃO:' || old.id_producao);
end
^

/* Trigger: TRG_PRODUCAO_CESTA_AF_INSERT */
CREATE TRIGGER TRG_PRODUCAO_CESTA_AF_INSERT FOR PRODUCAO_CESTA
ACTIVE AFTER INSERT POSITION 0
AS
begin
  execute procedure atualiza_estoque(new.id_filial,new.id_cesta,new.qtde_entrada,'+','ENTRADA P/ PRODUÇÃO:' || new.id_producao);
end
^

/* Trigger: TRG_PRODUCAO_CESTA_AF_UPDATE */
CREATE TRIGGER TRG_PRODUCAO_CESTA_AF_UPDATE FOR PRODUCAO_CESTA
ACTIVE AFTER UPDATE POSITION 0
AS
begin
  execute procedure atualiza_estoque(old.id_filial,old.id_cesta,old.qtde_entrada,'-','ALTERAÇÃO P/ PRODUÇÃO:' || old.id_producao);
  execute procedure atualiza_estoque(new.id_filial,new.id_cesta,new.qtde_entrada,'+','ALTERAÇÃO P/ PRODUÇÃO:' || new.id_producao);
end
^

/* Trigger: TRG_PRODUCAO_CESTA_ITEM_AF_DEL */
CREATE TRIGGER TRG_PRODUCAO_CESTA_ITEM_AF_DEL FOR PRODUCAO_CESTA_ITEM
ACTIVE AFTER DELETE POSITION 0
AS
begin
  execute procedure atualiza_estoque(old.id_filial,old.id_produto,old.qtde_produto,'+','EXCLUSÃO DE ITENS P/ PRODUÇÃO:' || old.id_producao);
end
^

/* Trigger: TRG_PRODUCAO_CESTA_ITEM_AF_INS */
CREATE TRIGGER TRG_PRODUCAO_CESTA_ITEM_AF_INS FOR PRODUCAO_CESTA_ITEM
ACTIVE AFTER INSERT POSITION 0
AS
begin
  execute procedure atualiza_estoque(new.id_filial,new.id_produto,new.qtde_produto,'-','SAIDA P/ PRODUÇÃO:' || NEW.id_producao);
end
^

/* Trigger: TRG_PRODUCAO_CESTA_ITEM_AF_UPD */
CREATE TRIGGER TRG_PRODUCAO_CESTA_ITEM_AF_UPD FOR PRODUCAO_CESTA_ITEM
ACTIVE AFTER UPDATE POSITION 0
AS
begin
  execute procedure atualiza_estoque(old.id_filial,old.id_produto,old.qtde_produto,'+','ALTERAÇÃO DE ITENS P/ PRODUÇÃO:' || old.id_producao);
  execute procedure atualiza_estoque(new.id_filial,new.id_produto,new.qtde_produto,'-','ALTERAÇÃO DE ITENS P/ PRODUÇÃO:' || NEW.id_producao);
end
^

/* Trigger: TRG_PRODUTO_AF_INSERT_AND */
CREATE TRIGGER TRG_PRODUTO_AF_INSERT_AND FOR PRODUTO
ACTIVE AFTER INSERT POSITION 0
AS
declare variable vIDREPRESENTANTE smallint;
begin
  for select R.IDREPRESENTANTE from REPRESENTANTE R
        where R.EXCLUIDO is null
          and R.USA_ANDROID = 'S'
          and coalesce(R.CONTROLA_PRODUTO_REPRESENTANTE,'N') = 'N'
            into :VIDREPRESENTANTE
  do
  begin
     if (not exists(select L.IDFILIAL from LOG_ALTERACAO_ANDROID L
                     where L.IDFILIAL = new.IDFILIAL
                       and L.ID = new.IDPRODUTO
                       and L.TIPO = 'Produto'
                       and L.IDREPRESENTANTE = :VIDREPRESENTANTE)) then
     begin
         INSERT INTO LOG_ALTERACAO_ANDROID (IDFILIAL, IDREPRESENTANTE, ID, TIPO, IDFOLHA, SITUACAO) VALUES (new.IDFILIAL, :VIDREPRESENTANTE, new.IDPRODUTO, 'Produto', NULL, 'I');
     end
  end
end
^

/* Trigger: TRG_PRODUTO_AF_UPDATE_ANDR */
CREATE TRIGGER TRG_PRODUTO_AF_UPDATE_ANDR FOR PRODUTO
ACTIVE AFTER UPDATE POSITION 0
AS
declare variable vIDREPRESENTANTE smallint;
begin
  for select R.IDREPRESENTANTE from REPRESENTANTE R
        where R.EXCLUIDO is null
          and R.USA_ANDROID = 'S'
          and coalesce(R.CONTROLA_PRODUTO_REPRESENTANTE,'N') = 'N'
            into :VIDREPRESENTANTE
  do
  begin
     if (not exists(select L.IDFILIAL from LOG_ALTERACAO_ANDROID L
                     where L.IDFILIAL = new.IDFILIAL
                       and L.ID = new.IDPRODUTO
                       and L.TIPO = 'Produto'
                       and L.IDREPRESENTANTE = :VIDREPRESENTANTE)) then
     begin
       if (new.EXCLUIDO is null) then
         INSERT INTO LOG_ALTERACAO_ANDROID (IDFILIAL, IDREPRESENTANTE, ID, TIPO, IDFOLHA, SITUACAO) VALUES (new.IDFILIAL, :VIDREPRESENTANTE, new.IDPRODUTO, 'Produto', NULL, 'A');
       else
         INSERT INTO LOG_ALTERACAO_ANDROID (IDFILIAL, IDREPRESENTANTE, ID, TIPO, IDFOLHA, SITUACAO) VALUES (new.IDFILIAL, :VIDREPRESENTANTE, new.IDPRODUTO, 'Produto', NULL, 'E');
     end
  end
end
^

/* Trigger: TRG_PRODUTO_BEFORE_INSERT */
CREATE TRIGGER TRG_PRODUTO_BEFORE_INSERT FOR PRODUTO
ACTIVE BEFORE INSERT POSITION 0
as
  declare variable vIDDEPOSITO integer;
begin
  if ((new.consumo is null) or (new.consumo='N'))  then begin
      if (new.QTDEATUAL is null) then
          new.QTDEATUAL = 0;
    
      new.QTDEANTERIOR = 0;
      if (new.REPLICAR is null) then
         new.REPLICAR = 'S';
    
      for select D.IDDEPOSITO from DEPOSITO D
        where D.IDFILIAL = new.IDFILIAL
          into :VIDDEPOSITO
      do begin
        if (not(exists(select IT.IDFILIAL from ITENSDEPOSITO IT
                    where IT.IDFILIAL = new.IDFILIAL
                      and IT.IDPRODUTO = new.IDPRODUTO
                      and IT.IDDEPOSITO = :vIDDEPOSITO))) then begin
           insert into ITENSDEPOSITO (IDFILIAL,IDDEPOSITO,IDPRODUTO,QTDE_ATUAL)
                 values (new.IDFILIAL,:vIDDEPOSITO,new.IDPRODUTO,new.QTDEATUAL);
        end
      end
  end
end
^

/* Trigger: TRG_PRODUTO_DELETE */
CREATE TRIGGER TRG_PRODUTO_DELETE FOR PRODUTO
ACTIVE AFTER DELETE POSITION 0
as
/* code here */
begin
   delete from UNIDADEPRODUTO UNI
      where UNI.IDFILIAL = old.IDFILIAL
        and UNI.IDPRODUTO = old.IDPRODUTO;
end
^

/* Trigger: TRG_PRODUTO_INSERT */
CREATE TRIGGER TRG_PRODUTO_INSERT FOR PRODUTO
ACTIVE AFTER INSERT POSITION 0
as
declare variable vIDTABELAPRECO integer;
declare variable vCLIENTEESPECIAL char(1);
declare variable vDESCONTO_TABELA numeric(16,2);
declare variable vTIPOEMPRESA varchar(20);
declare variable vCAP_INT varchar(1);
declare variable vPRECOVENDA numeric(16,2);
declare variable vTIPOPRECO varchar(1);
declare variable DEF_DESCONTOTABELA numeric(16,2);
declare variable DEF_DESCONTO numeric(16,2);
begin
  if ((new.CONSUMO = 'N') or (new.CONSUMO is null))  then
  begin
    for select T.IDTABELAPRECO, T.CLIENTEESPECIAL, T.PR_CAPITAL_INTERIOR, coalesce(T.TIPO_PRECO,'0'), T.DESCONTO_TABELA, T.DESCONTO from TABELAPRECO T
      where T.IDFILIAL = new.IDFILIAL
        and T.SITUACAO = 'A'
         into :vIDTABELAPRECO, :vCLIENTEESPECIAL, :VCAP_INT, :VTIPOPRECO, :DEF_DESCONTOTABELA, :DEF_DESCONTO
      do
        begin
          if (:vCLIENTEESPECIAL <> 'S') then begin
              select F.TIPOEMPRESA from FILIAL F
                where F.IDFILIAL = new.IDFILIAL
                   into :VTIPOEMPRESA;

             if (VTIPOEMPRESA = 'CENTRAL') then
             begin
               if (VCAP_INT = 'C') then
               begin
                  if (:VTIPOPRECO = '0') then VPRECOVENDA = new.PRECOVENDA;
                  if (:VTIPOPRECO = '1') then VPRECOVENDA = new.CUSTONOTA;
                  if (:VTIPOPRECO = '2') then VPRECOVENDA = new.CUSTOSENCARGOS;
               end
               else
                  if (VCAP_INT = 'I') then
                     VPRECOVENDA = new.PRECOVENDA_INTERIOR;
             end
             else begin
                  if (:VTIPOPRECO = '0') then VPRECOVENDA = new.PRECOVENDA;
                  if (:VTIPOPRECO = '1') then VPRECOVENDA = new.CUSTONOTA;
                  if (:VTIPOPRECO = '2') then VPRECOVENDA = new.CUSTOSENCARGOS;
             end



              if (not exists (select IT.IDPRODUTO from ITENSTABELAPRECO IT
                               where IT.IDFILIAL = new.IDFILIAL
                                 and IT.IDTABELAPRECO = :vIDTABELAPRECO
                                 and IT.IDPRODUTO = new.IDPRODUTO)) then begin
                 insert into ITENSTABELAPRECO(IDFILIAL    ,IDTABELAPRECO  ,IDPRODUTO    ,PRECOUNIT        ,QUANTIDADEMAXIMA,PRECOVENDA    ,PROMOCAO, TAXADESCONTO, PRECOTABELA, DESCONTOTABELA)
                                      values (new.IDFILIAL,:vIDTABELAPRECO,new.IDPRODUTO,new.PRECOVENDAUNIT    ,1000            ,:vPRECOVENDA, 'N', :DEF_DESCONTO, :vPRECOVENDA,:DEF_DESCONTOTABELA);
    
    
                 VDESCONTO_TABELA = 0;
/*
                 select first 1 IT.DESCONTOTABELA from ITENSTABELAPRECO IT
                    where IT.IDFILIAL = new.IDFILIAL
                      and IT.IDTABELAPRECO = :VIDTABELAPRECO
                      and IT.IDPRODUTO <> new.IDPRODUTO
                      and IT.DESCONTOTABELA <> 0
                    into :VDESCONTO_TABELA;
    
                 update ITENSTABELAPRECO IT
                     set IT.DESCONTOTABELA = :VDESCONTO_TABELA,
                         IT.CHAMAR_TRIGGER = 'S'
                  where IT.IDFILIAL = new.IDFILIAL
                    and IT.IDPRODUTO = new.IDPRODUTO
                    and IT.IDTABELAPRECO = :VIDTABELAPRECO;
*/
    
              end
          end
        end
  end
end
^

/* Trigger: TRG_PRODUTO_UPDATE_BEFORE */
CREATE TRIGGER TRG_PRODUTO_UPDATE_BEFORE FOR PRODUTO
ACTIVE BEFORE UPDATE POSITION 0
as
declare variable vSIT_PRODUTO char(1);
declare variable vTIPOEMPRESA varchar(20);
declare variable vIDTABELAPRECO integer;
declare variable vTIPOPRECO varchar(1);
declare variable vPRECOVENDA double precision;
begin
 if (new.CLASSIFICACAO_FISCAL = '') then
     new.CLASSIFICACAO_FISCAL = null;

 if (new.PRECOVENDA <> old.PRECOVENDA) then
    new.DTREMARCACAO = current_date;

 select F.SIT_PRODUTO, f.TIPOEMPRESA from FILIAL F
  where F.IDFILIAL = new.IDFILIAL
   into :vSIT_PRODUTO, :VTIPOEMPRESA;

  if (vSIT_PRODUTO = 'S') then begin
      if (new.QTDEATUAL > 0) then
         new.SITUACAOPRODUTO = 'A';
      else
         new.SITUACAOPRODUTO = 'I';
  end

  if ((new.CONSUMO = 'N') or (new.CONSUMO is null))  then
  begin
    if (new.CHAMAR_TRIGGER = 'S') then begin
        if (:VTIPOEMPRESA = 'CENTRAL') then
        begin
            for select T.IDTABELAPRECO, coalesce(T.TIPO_PRECO,'0') from TABELAPRECO T
              where T.IDFILIAL = new.IDFILIAL
                into :vIDTABELAPRECO, :VTIPOPRECO
            do
            begin

              if (:VTIPOPRECO = '0') then
                  VPRECOVENDA = new.PRECOVENDA;

              if (:VTIPOPRECO = '1') then
                  VPRECOVENDA = new.CUSTONOTA;

              if (:VTIPOPRECO = '2') then
                  VPRECOVENDA = new.CUSTOSENCARGOS;

                update ITENSTABELAPRECO IT
                   set IT.PRECOTABELA = :vPRECOVENDA,
                       IT.PRECOVENDA = cast(:vPRECOVENDA-(cast( :vPRECOVENDA as numeric(16,4))*IT.DESCONTOTABELA/100) as double precision)
                 where IT.IDFILIAL = new.IDFILIAL
                   and IT.IDTABELAPRECO = :VIDTABELAPRECO
                   and IT.IDPRODUTO = new.IDPRODUTO
                   and exists (select T.IDFILIAL from TABELAPRECO T
                                 where T.IDFILIAL = IT.IDFILIAL
                                   and T.IDTABELAPRECO = IT.IDTABELAPRECO
                                   and T.PR_CAPITAL_INTERIOR = 'C')
                   and IT.PROMOCAO = 'N';

    
                update ITENSTABELAPRECO IT
                   set IT.PRECOUNIT = cast(cast(:vPRECOVENDA-(cast( :vPRECOVENDA as numeric(16,4))*IT.DESCONTOTABELA/100) as double precision) / new.FATORCONVERSAO as numeric(16,4))
                 where IT.IDFILIAL = new.IDFILIAL
                   and IT.IDTABELAPRECO = :VIDTABELAPRECO
                   and IT.IDPRODUTO = new.IDPRODUTO
                   and exists (select T.IDFILIAL from TABELAPRECO T
                                 where T.IDFILIAL = IT.IDFILIAL
                                   and T.IDTABELAPRECO = IT.IDTABELAPRECO
                                   and T.PR_CAPITAL_INTERIOR = 'C')
                   and IT.PROMOCAO = 'N';
            end


            update ITENSTABELAPRECO IT
               set IT.PRECOTABELA = new.PRECOVENDA_INTERIOR,
                   IT.PRECOVENDA = cast(new.PRECOVENDA_INTERIOR-(cast( new.PRECOVENDA_INTERIOR as numeric(16,4))*IT.DESCONTOTABELA/100) as double precision)
             where IT.IDFILIAL = new.IDFILIAL
               and IT.IDPRODUTO = new.IDPRODUTO
               and exists (select T.IDFILIAL from TABELAPRECO T
                             where T.IDFILIAL = IT.IDFILIAL
                               and T.IDTABELAPRECO = IT.IDTABELAPRECO
                               and T.PR_CAPITAL_INTERIOR = 'I')
               and IT.PROMOCAO = 'N';

                update ITENSTABELAPRECO IT
                   set IT.PRECOUNIT = cast(cast(new.PRECOVENDA_INTERIOR-(cast( new.PRECOVENDA_INTERIOR as numeric(16,4))*IT.DESCONTOTABELA/100) as double precision) / new.FATORCONVERSAO as numeric(16,4))
                 where IT.IDFILIAL = new.IDFILIAL
                   and IT.IDPRODUTO = new.IDPRODUTO
                   and exists (select T.IDFILIAL from TABELAPRECO T
                                 where T.IDFILIAL = IT.IDFILIAL
                                   and T.IDTABELAPRECO = IT.IDTABELAPRECO
                                   and T.PR_CAPITAL_INTERIOR = 'I')
                   and IT.PROMOCAO = 'N';



        end
        else
        begin
            for select T.IDTABELAPRECO, coalesce(T.TIPO_PRECO,'0') from TABELAPRECO T
              where T.IDFILIAL = new.IDFILIAL
                into :vIDTABELAPRECO, :VTIPOPRECO
            do
            begin

              if (:VTIPOPRECO = '0') then
                  VPRECOVENDA = new.PRECOVENDA;

              if (:VTIPOPRECO = '1') then
                  VPRECOVENDA = new.CUSTONOTA;

              if (:VTIPOPRECO = '2') then
                  VPRECOVENDA = new.CUSTOSENCARGOS;

                update ITENSTABELAPRECO IT
                   set IT.PRECOTABELA = :vPRECOVENDA,
                       IT.PRECOVENDA = cast(:vPRECOVENDA-(cast( :vPRECOVENDA as numeric(16,4))*IT.DESCONTOTABELA/100) as double precision)
                 where IT.IDFILIAL = new.IDFILIAL
                   and IT.IDTABELAPRECO = :vIDTABELAPRECO
                   and IT.IDPRODUTO = new.IDPRODUTO
                   and IT.PROMOCAO = 'N';
        
                update ITENSTABELAPRECO IT
                   set IT.PRECOUNIT = cast(cast(:vPRECOVENDA-(cast( :vPRECOVENDA as numeric(16,4))*IT.DESCONTOTABELA/100) as double precision) / new.FATORCONVERSAO as numeric(16,4))
                 where IT.IDFILIAL = new.IDFILIAL
                   and IT.IDTABELAPRECO = :vIDTABELAPRECO
                   and IT.IDPRODUTO = new.IDPRODUTO
                   and IT.PROMOCAO = 'N';
            end
        end

        new.CHAMAR_TRIGGER = null;
  end
  end
end
^

/* Trigger: TRG_RECEBER_BF_UPDATE */
CREATE TRIGGER TRG_RECEBER_BF_UPDATE FOR RECEBER
ACTIVE BEFORE UPDATE POSITION 0
AS
  declare variable TIPO_EMPRESA varchar(20);
begin
   if (not new.DATAPAGAMENTO is null) then
       new.DTDIGITACAO_02 = current_date;

   select F.TIPOEMPRESA from FILIAL F
     where F.IDFILIAL = new.IDFILIAL
   into :TIPO_EMPRESA;

   if (:TIPO_EMPRESA = 'ARTPAN') then begin
      if (new.GB_NOSSONUMERO <> '') then
--          if (new.DOCUMENTO <> new.GB_NOSSONUMERO) then
              new.DOCUMENTO = new.GB_NOSSONUMERO;
   end
end
^

/* Trigger: TRG_RECEBER_BF_UPDATE_1 */
CREATE TRIGGER TRG_RECEBER_BF_UPDATE_1 FOR RECEBER
ACTIVE BEFORE UPDATE POSITION 1
as
declare variable vIDPARCIAL integer;
declare variable vVALORDIF numeric(15,2);
begin
   if ((new.F_PARCIAL = 'S'))
   then begin
        select max(R.IDPARCIAL)+1 from RECEBER R
             where R.IDFILIAL = new.IDFILIAL
               and R.IDRECEBER = new.IDRECEBER
               and R.IDFOLHA = new.IDFOLHA
               and R.IDORDEM = new.IDORDEM
           into :VIDPARCIAL;

        vVALORDIF = new.VALORDOCUMENTO-new.VALORPAGAMENTO;


        INSERT INTO RECEBER (IDFILIAL, IDRECEBER, IDFOLHA,
                             IDORDEM, IDPARCIAL, IDCENTROCUSTO,
                             IDREPRESENTANTE, IDCLIENTE, IDFORMAPAGTO,
                             IDCOBRANCA, DOCUMENTO, DATAEMISSAO,
                             DATAVENCIMENTO, DATAPAGAMENTO, VALORDOCUMENTO,
                             VALORJUROS, VALORPAGAMENTO, IDMOVTOCAIXA,
                             SITUACAOREGISTRO, HISTORICO, IDCAIXA,
                             TAXACOMISSAO, IDROMANEIO,
                             DTDIGITACAO, SIT_BALCAO,
                             F_PARCIAL)

               values (new.IDFILIAL, new.IDRECEBER ,new.IDFOLHA,
                       new.IDORDEM,:vIDPARCIAL,new.IDCENTROCUSTO,
                       new.IDREPRESENTANTE,new.IDCLIENTE,new.IDFORMAPAGTO,
                       new.IDCOBRANCA,new.DOCUMENTO,new.DATAEMISSAO,
                       new.DATAVENCIMENTO,new.DATAPAGAMENTO,
                       new.VALORDOCUMENTO-(:VVALORDIF),new.VALORJUROS,
                       new.VALORPAGAMENTO,null,new.SITUACAOREGISTRO,new.HISTORICO,
                       new.IDCAIXA,new.TAXACOMISSAO,new.IDROMANEIO,new.DTDIGITACAO,
                       new.SIT_BALCAO, 'N');


                       new.VALORDOCUMENTO = :VVALORDIF;
                       new.VALORPAGAMENTO = null;
                       new.F_PARCIAL = null;
                       new.DATAPAGAMENTO = null;
   end
end
^

/* Trigger: TRG_RECEBER_BIU_LOG_NOSSONUMERO */
CREATE TRIGGER TRG_RECEBER_BIU_LOG_NOSSONUMERO FOR RECEBER
ACTIVE BEFORE UPDATE POSITION 0
AS
begin
    if (coalesce(new.gb_nossonumero,'') <> coalesce(old.GB_NOSSONUMERO,'')) then
    begin
         INSERT INTO LOG_NOSSONUMERO (IDFILIAL, IDRECEBER, IDFOLHA, IDORDEM, NOSSO_NUMERO, DATA, DIGITO)
             VALUES (new.IDFILIAL, new.IDRECEBER, new.IDFOLHA, new.IDORDEM, new.GB_NOSSONUMERO,current_date, new.GB_DIGITONOSSONUMERO);
    end
end
^

/* Trigger: TRG_RECEBER_DELETE */
CREATE TRIGGER TRG_RECEBER_DELETE FOR RECEBER
ACTIVE AFTER DELETE POSITION 0
as
begin

   if (OLD.IDPARCIAL <> 1) then begin
     update RECEBER R
        set R.VALORDOCUMENTO = R.VALORDOCUMENTO+OLD.VALORDOCUMENTO
      where R.IDFILIAL = OLD.IDFILIAL
        and R.IDRECEBER = OLD.IDRECEBER
        and R.IDFOLHA = OLD.IDFOLHA
        and R.IDORDEM = OLD.IDORDEM
        and R.IDPARCIAL = 1;
   end

   delete from MOVTOCAIXA M
     where M.IDMOVTOCAIXA = OLD.IDMOVTOCAIXA
       and M.IDFILIAL = OLD.IDFILIAL;
end
^

/* Trigger: TRG_RECEBER_INSERT */
CREATE TRIGGER TRG_RECEBER_INSERT FOR RECEBER
ACTIVE BEFORE INSERT POSITION 0
as
/* code here */
 declare variable vIDMOVTOCAIXA integer;
 declare variable vNOMECLIENTE varchar(60);
 declare variable VIDROMANEIO integer;
 declare variable vBAIXA_DATA_PAG_MOV varchar(1);
 declare variable vDATAMOVIMENTO date;
begin
   -----------------------------------------------------
   -- VERIFICA QUAL A DATA QUE DEVE QUITAR            --
   -----------------------------------------------------
   select F.BAIXA_DATA_PAG_MOV from FILIAL F
    where F.IDFILIAL = NEW.IDFILIAL
    into :VBAIXA_DATA_PAG_MOV;

   if (:VBAIXA_DATA_PAG_MOV = 'P') then
     VDATAMOVIMENTO = new.DATAPAGAMENTO;
   else
     VDATAMOVIMENTO = current_date;
   -----------------------------------------------------

   new.DTDIGITACAO_01 = current_date;
   new.DTDIGITACAO = current_date;

   select C.NOME from CLIENTE C
      where C.IDCLIENTE = new.IDCLIENTE
   into :VNOMECLIENTE;

/*
   select max(IT.IDCONTROLE) from ITENSROMANEIO IT
     where IT.IDFILIAL = new.IDFILIAL
       and IT.IDPEDIDO = new.IDRECEBER
       and IT.IDFOLHA = new.IDFOLHA
      into :VIDROMANEIO;
   if (new.IDROMANEIO is null) then
     if (:VIDROMANEIO > 0) then
        if (new.IDROMANEIO <> :VIDROMANEIO) then
            new.IDROMANEIO = :VIDROMANEIO;

*/

   if (new.IDPARCIAL <> 1) then begin
     update RECEBER R
        set R.VALORDOCUMENTO = R.VALORDOCUMENTO-new.VALORPAGAMENTO
      where R.IDFILIAL = new.IDFILIAL
        and R.IDRECEBER = new.IDRECEBER
        and R.IDFOLHA = new.IDFOLHA
        and R.IDORDEM = new.IDORDEM
        and R.IDPARCIAL = 1;
   end

   /*--- Granvando no Caixa/Banco */
   if (not new.VALORPAGAMENTO is null) then begin
     if (not exists (select M.IDMOVTOCAIXA from MOVTOCAIXA M
                        where M.IDFILIAL = new.IDFILIAL
                          and M.IDMOVTOCAIXA = new.IDMOVTOCAIXA)) then begin
        select cast(max(M.IDMOVTOCAIXA) as integer)+1 from MOVTOCAIXA M
          where M.IDFILIAL = new.IDFILIAL
            into vIDMOVTOCAIXA;
            if (vIDMOVTOCAIXA is null) then vIDMOVTOCAIXA = 1;
            insert into MOVTOCAIXA (IDFILIAL    ,  IDMOVTOCAIXA ,  DOCUMENTO   , DESCRICAOHISTORICO, IDCENTROCUSTO, DTEMISSAO,
                                    DTMOVIMENTO, IDCAIXA, VALORMOVTO, TIPOOPERACAO, COMPLEMENTOHISTORICO, IDOBRAS)
                            values (new.IDFILIAL, :vIDMOVTOCAIXA, 'PD:' || new.IDRECEBER || '/' || new.IDFOLHA || '-' || new.IDORDEM, new.HISTORICO, new.IDCENTROCUSTO, new.DATAPAGAMENTO,
                                    :VDATAMOVIMENTO, new.IDCAIXA, new.VALORPAGAMENTO, 'C', :VNOMECLIENTE, NEW.IDOBRAS);

            new.IDMOVTOCAIXA = :vIDMOVTOCAIXA; end
     else begin
       update MOVTOCAIXA M
          set M.DOCUMENTO = 'PD:' || new.IDRECEBER || '/' || new.IDFOLHA || '-' || new.IDORDEM,
              M.DESCRICAOHISTORICO = new.HISTORICO,
              M.COMPLEMENTOHISTORICO = :VNOMECLIENTE,
              M.IDCENTROCUSTO = new.IDCENTROCUSTO,
              M.DTEMISSAO = new.DATAPAGAMENTO,
              M.DTMOVIMENTO = :VDATAMOVIMENTO,
              M.IDCAIXA = new.IDCAIXA,
              M.IDOBRAS = new.IDOBRAS,
              M.VALORMOVTO = new.VALORPAGAMENTO
        where M.IDMOVTOCAIXA = new.IDMOVTOCAIXA
          and M.IDFILIAL = new.IDFILIAL;
     end
   end
end
^

/* Trigger: TRG_RECEBER_UPDATE */
CREATE TRIGGER TRG_RECEBER_UPDATE FOR RECEBER
ACTIVE AFTER UPDATE POSITION 0
as
/* code here */
 declare variable vIDMOVTOCAIXA integer;
 declare variable vNOMECLIENTE varchar(60);
 declare variable vBAIXA_DATA_PAG_MOV varchar(1);
 declare variable vDATAMOVIMENTO date;
begin
   -----------------------------------------------------
   -- VERIFICA QUAL A DATA QUE DEVE QUITAR            --
   -----------------------------------------------------
   select F.BAIXA_DATA_PAG_MOV from FILIAL F
    where F.IDFILIAL = NEW.IDFILIAL
    into :VBAIXA_DATA_PAG_MOV;

   if (:VBAIXA_DATA_PAG_MOV = 'P') then
     VDATAMOVIMENTO = new.DATAPAGAMENTO;
   else
     VDATAMOVIMENTO = current_date;
   -----------------------------------------------------

   select C.NOME from CLIENTE C
     where C.IDCLIENTE = new.IDCLIENTE
   into :VNOMECLIENTE;

   /*--- Granvando no Caixa/Banco */
   if (not NEW.VALORPAGAMENTO is null) then begin
     if (not exists (select M.IDMOVTOCAIXA from MOVTOCAIXA M
                        where M.IDFILIAL = NEW.IDFILIAL
                          and M.IDMOVTOCAIXA = NEW.IDMOVTOCAIXA)) then begin
        select cast(max(M.IDMOVTOCAIXA) as integer)+1 from MOVTOCAIXA M
          where M.IDFILIAL = NEW.IDFILIAL
            into vIDMOVTOCAIXA;
            if (vIDMOVTOCAIXA is null) then vIDMOVTOCAIXA = 1;
            insert into MOVTOCAIXA (IDFILIAL    ,  IDMOVTOCAIXA ,  DOCUMENTO   , DESCRICAOHISTORICO, IDCENTROCUSTO, DTEMISSAO,
                                    DTMOVIMENTO, IDCAIXA, VALORMOVTO, TIPOOPERACAO, COMPLEMENTOHISTORICO, IDOBRAS)
                            values (NEW.IDFILIAL, :vIDMOVTOCAIXA,'PD:' || new.IDRECEBER || '/' || new.IDFOLHA || '-' || new.IDORDEM, NEW.HISTORICO, NEW.IDCENTROCUSTO, NEW.DATAPAGAMENTO,
                                    :VDATAMOVIMENTO, NEW.IDCAIXA, NEW.VALORPAGAMENTO, 'C', :VNOMECLIENTE, NEW.IDOBRAS);
            update RECEBER R
               set R.IDMOVTOCAIXA = :vIDMOVTOCAIXA
               where R.IDRECEBER = NEW.IDRECEBER
                 and R.IDFOLHA = NEW.IDFOLHA
                 and R.IDFILIAL = NEW.IDFILIAL
                 and R.IDPARCIAL = NEW.IDPARCIAL
                 and R.IDORDEM = NEW.IDORDEM;  end
     else begin
       update MOVTOCAIXA M
          set M.DOCUMENTO = 'PD:' || new.IDRECEBER || '/' || new.IDFOLHA || '-' || new.IDORDEM,
              M.DESCRICAOHISTORICO = NEW.HISTORICO,
              M.COMPLEMENTOHISTORICO = :VNOMECLIENTE,
              M.IDCENTROCUSTO = NEW.IDCENTROCUSTO,
              M.DTEMISSAO = NEW.DATAPAGAMENTO,
              M.DTMOVIMENTO = :VDATAMOVIMENTO,
              M.IDCAIXA = NEW.IDCAIXA,
              M.IDOBRAS = NEW.IDOBRAS, 
              M.VALORMOVTO = NEW.VALORPAGAMENTO
        where M.IDMOVTOCAIXA = NEW.IDMOVTOCAIXA
          and M.IDFILIAL = NEW.IDFILIAL;
     end end
   else begin
     delete from MOVTOCAIXA M
        where M.IDMOVTOCAIXA = OLD.IDMOVTOCAIXA
          and M.IDFILIAL = OLD.IDFILIAL;
   end
end
^

/* Trigger: TRG_REGIAO_AF_INSERT */
CREATE TRIGGER TRG_REGIAO_AF_INSERT FOR REGIAO
ACTIVE AFTER INSERT POSITION 0
AS
declare variable VIDREPRESENTANTE smallint;
begin
  for select R.IDREPRESENTANTE from REPRESENTANTE R
        where R.EXCLUIDO is null
          and R.USA_ANDROID = 'S'
            into :VIDREPRESENTANTE
  do
  begin
     if (not exists(select L.IDFILIAL from LOG_ALTERACAO_ANDROID L
                     where L.IDFILIAL = new.IDFILIAL
                       and L.ID = new.IDREGIAO
                       and L.TIPO = 'Região'
                       and L.IDREPRESENTANTE = :VIDREPRESENTANTE)) then
     begin
       INSERT INTO LOG_ALTERACAO_ANDROID (IDFILIAL, IDREPRESENTANTE, ID, TIPO, IDFOLHA, SITUACAO) VALUES (new.IDFILIAL, :VIDREPRESENTANTE, new.IDREGIAO, 'Região', NULL, 'I');
     end
  end
end
^

/* Trigger: TRG_REGIAO_AF_UPDATE */
CREATE TRIGGER TRG_REGIAO_AF_UPDATE FOR REGIAO
ACTIVE AFTER UPDATE POSITION 0
AS
declare variable VIDREPRESENTANTE smallint;
begin
  for select R.IDREPRESENTANTE from REPRESENTANTE R
        where R.EXCLUIDO is null
          and R.USA_ANDROID = 'S'
            into :VIDREPRESENTANTE
  do
  begin
     if (not exists(select L.IDFILIAL from LOG_ALTERACAO_ANDROID L
                     where L.IDFILIAL = new.IDFILIAL
                       and L.ID = new.IDREGIAO
                       and L.TIPO = 'Região'
                       and L.IDREPRESENTANTE = :VIDREPRESENTANTE)) then
     begin
       if (new.EXCLUIDO is null) then
         INSERT INTO LOG_ALTERACAO_ANDROID (IDFILIAL, IDREPRESENTANTE, ID, TIPO, IDFOLHA, SITUACAO) VALUES (new.IDFILIAL, :VIDREPRESENTANTE, new.IDREGIAO, 'Região', NULL, 'A');
       else
         INSERT INTO LOG_ALTERACAO_ANDROID (IDFILIAL, IDREPRESENTANTE, ID, TIPO, IDFOLHA, SITUACAO) VALUES (new.IDFILIAL, :VIDREPRESENTANTE, new.IDREGIAO, 'Região', NULL, 'E');
     end
  end
end
^

/* Trigger: TRG_REPCLIENTE_AF_INSERT */
CREATE TRIGGER TRG_REPCLIENTE_AF_INSERT FOR REPCLIENTE
ACTIVE AFTER INSERT POSITION 0
AS
declare variable vLEVAR_TODOS_CLIENTES_MOB varchar(1);
declare variable vIDREPRESENTANTE integer;
begin
  select F.LEVAR_TODOS_CLIENTES_MOB from FILIAL F
    where F.IDFILIAL = new.IDFILIAL
       into :VLEVAR_TODOS_CLIENTES_MOB;

  if (:VLEVAR_TODOS_CLIENTES_MOB = 'N') then
  begin
      if (not exists(select L.IDFILIAL from LOG_ALTERACAO_ANDROID L
                      where L.IDFILIAL = new.IDFILIAL
                        and L.ID = new.IDCLIENTE
                        and L.TIPO = 'Cliente'
                        and L.IDREPRESENTANTE = new.IDREPRESENTANTE)) then
      begin
         INSERT INTO LOG_ALTERACAO_ANDROID (IDFILIAL, IDREPRESENTANTE, ID, TIPO, IDFOLHA, SITUACAO) VALUES (new.IDFILIAL,new.IDREPRESENTANTE, new.IDCLIENTE, 'Cliente', NULL, 'I');
      end
      else
      begin
        update LOG_ALTERACAO_ANDROID L
           set L.SITUACAO = 'I'
         where L.IDFILIAL = new.IDFILIAL
           and L.ID = new.IDCLIENTE
           and L.TIPO = 'Cliente'
           and L.IDREPRESENTANTE = new.IDREPRESENTANTE;
      end
    end
end
^

/* Trigger: TRG_REPCLIENTE_AF_UPDATE */
CREATE TRIGGER TRG_REPCLIENTE_AF_UPDATE FOR REPCLIENTE
ACTIVE AFTER UPDATE POSITION 0
AS
declare variable vLEVAR_TODOS_CLIENTES_MOB varchar(1);
declare variable vIDREPRESENTANTE integer;
begin
  select F.LEVAR_TODOS_CLIENTES_MOB from FILIAL F
    where F.IDFILIAL = new.IDFILIAL
       into :VLEVAR_TODOS_CLIENTES_MOB;

  if (:VLEVAR_TODOS_CLIENTES_MOB = 'N') then
  begin
      if (new.IDREPRESENTANTE <> old.IDREPRESENTANTE) then
      begin
          INSERT INTO LOG_ALTERACAO_ANDROID (IDFILIAL, IDREPRESENTANTE, ID, TIPO, IDFOLHA, SITUACAO) VALUES (old.IDFILIAL,old.IDREPRESENTANTE, old.IDCLIENTE, 'Cliente', NULL, 'E');

          if (not exists(select L.IDFILIAL from LOG_ALTERACAO_ANDROID L
                          where L.IDFILIAL = new.IDFILIAL
                            and L.ID = new.IDCLIENTE
                            and L.TIPO = 'Cliente'
                            and L.IDREPRESENTANTE = new.IDREPRESENTANTE)) then
          begin
             INSERT INTO LOG_ALTERACAO_ANDROID (IDFILIAL, IDREPRESENTANTE, ID, TIPO, IDFOLHA, SITUACAO) VALUES (new.IDFILIAL,new.IDREPRESENTANTE, new.IDCLIENTE, 'Cliente', NULL, 'I');
          end
      end
    end
end
^

/* Trigger: TRG_REPCLIENTE_AF_UPD_CLI_PALM */
CREATE TRIGGER TRG_REPCLIENTE_AF_UPD_CLI_PALM FOR REPCLIENTE
ACTIVE AFTER UPDATE POSITION 0
AS
begin
  if (new.IDREPRESENTANTE <> old.IDREPRESENTANTE) then
  begin
    update CLIENTE C
       set C.IDCLIENTE_PALM = null,
           C.IDREPRESENTANTE_PALM = null
    where C.IDCLIENTE = new.IDCLIENTE
      and not C.IDCLIENTE_PALM is null
      and not C.IDREPRESENTANTE_PALM is null;
  end
end
^

/* Trigger: TRG_REPCLIENTE_BF_DELETE */
CREATE TRIGGER TRG_REPCLIENTE_BF_DELETE FOR REPCLIENTE
ACTIVE BEFORE DELETE POSITION 0
AS
declare variable vLEVAR_TODOS_CLIENTES_MOB varchar(1);
declare variable vIDREPRESENTANTE integer;
begin
  select F.LEVAR_TODOS_CLIENTES_MOB from FILIAL F
    where F.IDFILIAL = old.IDFILIAL
       into :VLEVAR_TODOS_CLIENTES_MOB;

  if (:VLEVAR_TODOS_CLIENTES_MOB = 'N') then
  begin
      if (not exists(select L.IDFILIAL from LOG_ALTERACAO_ANDROID L
                      where L.IDFILIAL = old.IDFILIAL
                        and L.ID = old.IDCLIENTE
                        and L.TIPO = 'Cliente'
                        and L.IDREPRESENTANTE = old.IDREPRESENTANTE)) then
      begin
         INSERT INTO LOG_ALTERACAO_ANDROID (IDFILIAL, IDREPRESENTANTE, ID, TIPO, IDFOLHA, SITUACAO) VALUES (old.IDFILIAL,old.IDREPRESENTANTE, old.IDCLIENTE, 'Cliente', NULL, 'E');
      end
      else
      begin
        update LOG_ALTERACAO_ANDROID L
           set L.SITUACAO = 'E'
         where L.IDFILIAL = old.IDFILIAL
           and L.ID = old.IDCLIENTE
           and L.TIPO = 'Cliente'
           and L.IDREPRESENTANTE = old.IDREPRESENTANTE;
      end
  end
end
^

/* Trigger: TRG_REPCLIENTE_BF_INSERT */
CREATE TRIGGER TRG_REPCLIENTE_BF_INSERT FOR REPCLIENTE
ACTIVE BEFORE INSERT POSITION 0
AS
declare variable vCLIENTE_NOVO varchar(1);
begin
  select C.CLIENTE_NOVO from CLIENTE C
    where C.IDCLIENTE = new.IDCLIENTE
       into :VCLIENTE_NOVO;

  if (:VCLIENTE_NOVO = 'I') then
    new.REP_NOVO = 'I';
end
^

/* Trigger: TRG_REPRESENTANTE_AF_INSERT */
CREATE TRIGGER TRG_REPRESENTANTE_AF_INSERT FOR REPRESENTANTE
ACTIVE AFTER INSERT POSITION 0
AS
declare variable vUSAR_TABELA_REP_MOBILE varchar(1);
declare variable vIDPRODUTO integer;
begin
  if (new.USA_ANDROID = 'S') then
  begin
      select F.USAR_TABELA_REP_MOBILE from FILIAL F
         where F.IDFILIAL = new.IDFILIAL
           into :VUSAR_TABELA_REP_MOBILE;
    
      if (VUSAR_TABELA_REP_MOBILE = 'S') then
      begin
        if (not new.IDTABELAPRECO is null) then
        begin
            if (not exists(select L.IDFILIAL from LOG_ALTERACAO_ANDROID L
                            where L.IDFILIAL = new.IDFILIAL
                              and L.ID = new.IDTABELAPRECO
                              and L.TIPO = 'Tabela Preco'
                              and L.IDREPRESENTANTE = new.IDREPRESENTANTE)) then
            begin
               INSERT INTO LOG_ALTERACAO_ANDROID (IDFILIAL, IDREPRESENTANTE, ID, TIPO, IDFOLHA, SITUACAO) VALUES (new.IDFILIAL, new.IDREPRESENTANTE, new.IDTABELAPRECO, 'Tabela Preco', NULL, 'I');
            end
    
            for select I.IDPRODUTO from ITENSTABELAPRECO I
              where I.IDFILIAL = new.IDFILIAL
                and I.IDTABELAPRECO = new.IDTABELAPRECO
                into :VIDPRODUTO
            do
            begin
              if (not exists(select L.IDFILIAL from LOG_ALTERACAO_ANDROID L
                              where L.IDFILIAL = new.IDFILIAL
                                and L.ID = new.IDTABELAPRECO
                                and L.ID_2 = :vIDPRODUTO
                                and L.TIPO = 'Itens Tabela Preco'
                                and L.IDREPRESENTANTE = new.IDREPRESENTANTE)) then
              begin
                  INSERT INTO LOG_ALTERACAO_ANDROID (IDFILIAL, IDREPRESENTANTE, ID, TIPO, IDFOLHA, SITUACAO, ID_2) VALUES (new.IDFILIAL, new.IDREPRESENTANTE, new.IDTABELAPRECO, 'Itens Tabela Preco', NULL, 'I', :vIDPRODUTO);
              end
            end
        end
      end
  end
end
^

/* Trigger: TRG_REPRESENTANTE_AF_UPDATE */
CREATE TRIGGER TRG_REPRESENTANTE_AF_UPDATE FOR REPRESENTANTE
ACTIVE AFTER UPDATE POSITION 0
AS
declare variable vUSAR_TABELA_REP_MOBILE varchar(1);
declare variable vTABELAPALM varchar(1);
declare variable vIDPRODUTO integer;
begin
  if (new.USA_ANDROID = 'S') then
  begin
      select F.USAR_TABELA_REP_MOBILE from FILIAL F
         where F.IDFILIAL = new.IDFILIAL
           into :VUSAR_TABELA_REP_MOBILE;
    
      if (VUSAR_TABELA_REP_MOBILE = 'S') then
      begin
        if (not new.IDTABELAPRECO is null) then
        begin
            if (new.IDTABELAPRECO <> old.IDTABELAPRECO) then
            begin
                if (not old.IDTABELAPRECO is null) then
                begin
                    /* OLD */
                    if (not exists(select L.IDFILIAL from LOG_ALTERACAO_ANDROID L
                                    where L.IDFILIAL = old.IDFILIAL
                                      and L.ID = old.IDTABELAPRECO
                                      and L.TIPO = 'Tabela Preco'
                                      and L.IDREPRESENTANTE = old.IDREPRESENTANTE)) then
                    begin
                       INSERT INTO LOG_ALTERACAO_ANDROID (IDFILIAL, IDREPRESENTANTE, ID, TIPO, IDFOLHA, SITUACAO) VALUES (old.IDFILIAL, old.IDREPRESENTANTE, old.IDTABELAPRECO, 'Tabela Preco', NULL, 'E');
                    end
                    else
                    begin
                      update LOG_ALTERACAO_ANDROID L
                        set L.SITUACAO = 'E'
                      where L.IDFILIAL = old.IDFILIAL
                        and L.ID = old.IDTABELAPRECO
                        and L.TIPO = 'Tabela Preco'
                        and L.IDREPRESENTANTE = old.IDREPRESENTANTE;
                    end
        
                    for select I.IDPRODUTO from ITENSTABELAPRECO I
                      where I.IDFILIAL = old.IDFILIAL
                        and I.IDTABELAPRECO = old.IDTABELAPRECO
                        into :VIDPRODUTO
                    do
                    begin
                      if (not exists(select L.IDFILIAL from LOG_ALTERACAO_ANDROID L
                                      where L.IDFILIAL = old.IDFILIAL
                                        and L.ID = old.IDTABELAPRECO
                                        and L.ID_2 = :vIDPRODUTO
                                        and L.TIPO = 'Itens Tabela Preco'
                                        and L.IDREPRESENTANTE = old.IDREPRESENTANTE)) then
                      begin
                          INSERT INTO LOG_ALTERACAO_ANDROID (IDFILIAL, IDREPRESENTANTE, ID, TIPO, IDFOLHA, SITUACAO, ID_2) VALUES (old.IDFILIAL, old.IDREPRESENTANTE, old.IDTABELAPRECO, 'Itens Tabela Preco', NULL, 'E', :vIDPRODUTO);
                      end
                      else
                      begin
                        update LOG_ALTERACAO_ANDROID L
                          set L.SITUACAO = 'E'
                        where L.IDFILIAL = old.IDFILIAL
                          and L.ID = old.IDTABELAPRECO
                          and L.ID_2 = :vIDPRODUTO
                          and L.TIPO = 'Itens Tabela Preco'
                          and L.IDREPRESENTANTE = old.IDREPRESENTANTE;
                      end
                    end
                end
    
    
    
    
                /* NEW */
                if (not exists(select L.IDFILIAL from LOG_ALTERACAO_ANDROID L
                                where L.IDFILIAL = new.IDFILIAL
                                  and L.ID = new.IDTABELAPRECO
                                  and L.TIPO = 'Tabela Preco'
                                  and L.IDREPRESENTANTE = new.IDREPRESENTANTE)) then
                begin
                   INSERT INTO LOG_ALTERACAO_ANDROID (IDFILIAL, IDREPRESENTANTE, ID, TIPO, IDFOLHA, SITUACAO) VALUES (new.IDFILIAL, new.IDREPRESENTANTE, new.IDTABELAPRECO, 'Tabela Preco', NULL, 'I');
                end
                else
                begin
                  update LOG_ALTERACAO_ANDROID L
                    set L.SITUACAO = 'I'
                  where L.IDFILIAL = new.IDFILIAL
                    and L.ID = new.IDTABELAPRECO
                    and L.TIPO = 'Tabela Preco'
                    and L.IDREPRESENTANTE = new.IDREPRESENTANTE;
                end
    
                for select I.IDPRODUTO from ITENSTABELAPRECO I
                  where I.IDFILIAL = new.IDFILIAL
                    and I.IDTABELAPRECO = new.IDTABELAPRECO
                    into :VIDPRODUTO
                do
                begin
                  if (not exists(select L.IDFILIAL from LOG_ALTERACAO_ANDROID L
                                  where L.IDFILIAL = new.IDFILIAL
                                    and L.ID = new.IDTABELAPRECO
                                    and L.ID_2 = :vIDPRODUTO
                                    and L.TIPO = 'Itens Tabela Preco'
                                    and L.IDREPRESENTANTE = new.IDREPRESENTANTE)) then
                  begin
                      INSERT INTO LOG_ALTERACAO_ANDROID (IDFILIAL, IDREPRESENTANTE, ID, TIPO, IDFOLHA, SITUACAO, ID_2) VALUES (new.IDFILIAL, new.IDREPRESENTANTE, new.IDTABELAPRECO, 'Itens Tabela Preco', NULL, 'I', :vIDPRODUTO);
                  end
                  else
                  begin
                    update LOG_ALTERACAO_ANDROID L
                      set L.SITUACAO = 'I'
                    where L.IDFILIAL = new.IDFILIAL
                      and L.ID = new.IDTABELAPRECO
                      and L.ID_2 = :vIDPRODUTO
                      and L.TIPO = 'Itens Tabela Preco'
                      and L.IDREPRESENTANTE = new.IDREPRESENTANTE;
                  end
                end
    
            end
        end
      end
  end
end
^

/* Trigger: TRG_REPR_ROMENEIO_INSERT */
CREATE TRIGGER TRG_REPR_ROMENEIO_INSERT FOR REPRESENTANTE_ROMANEIO
ACTIVE AFTER INSERT POSITION 0
as
  declare variable vDTINI date;
  declare variable vDTFIM date;
  declare variable vIDPEDIDO integer;
begin

   select R.DTINI, R.DTFIM from ROMANEIO R
     where R.IDFILIAL = NEW.IDFILIAL
       and R.IDCONTROLE = NEW.IDCONTROLE
     into :vDTINI, :vDTFIM;

  execute procedure INSERT_REPRESENTANTE_ROMANEIO(NEW.IDFILIAL, NEW.IDREPRESENTANTE,
                                               :vDTINI, :vDTFIM, NEW.IDCONTROLE) returning_values (:vIDPEDIDO);
end
^

/* Trigger: TRG_RESERVA_IDPEDIDO_BF_INSERT */
CREATE TRIGGER TRG_RESERVA_IDPEDIDO_BF_INSERT FOR RESERVA_IDPEDIDO
ACTIVE BEFORE INSERT POSITION 0
as
  declare variable vIDPEDIDO integer;
begin
   for select count(R.IDPEDIDO) from RESERVA_IDPEDIDO R
        where R.IDFILIAL = new.IDFILIAL
          and R.IDPEDIDO = new.IDPEDIDO
        into :vIDPEDIDO
   do begin
      delete from RESERVA_IDPEDIDO R
       where R.IDPEDIDO = new.IDPEDIDO;
   end
end
^

/* Trigger: TRG_SUB_ATIVIDADE_BF_INSERT */
CREATE TRIGGER TRG_SUB_ATIVIDADE_BF_INSERT FOR SUB_ATIVIDADE
ACTIVE BEFORE INSERT POSITION 0
AS
  declare variable vIDSUBATIVIDADE integer;
begin
   select max(S.IDSUB_ATIVIDADE)+1 from SUB_ATIVIDADE S
    into :vIDSUBATIVIDADE;

    if (:VIDSUBATIVIDADE is null) then VIDSUBATIVIDADE = 1;

    new.IDSUB_ATIVIDADE = :VIDSUBATIVIDADE;
end
^

/* Trigger: TRG_SUB_CONVENIO_BF_INSERT */
CREATE TRIGGER TRG_SUB_CONVENIO_BF_INSERT FOR SUB_CONVENIO
ACTIVE BEFORE INSERT POSITION 0
AS
  declare variable vIDSUBCONVENIO integer;
begin
   select max(S.IDSUB_CONVENIO)+1 from SUB_CONVENIO S
    into :vIDSUBCONVENIO;

    if (:VIDSUBCONVENIO is null) then VIDSUBCONVENIO = 1;

    new.IDSUB_CONVENIO = :VIDSUBCONVENIO;
end
^

/* Trigger: TRG_SUB_GRUPO_BF_INSERT */
CREATE TRIGGER TRG_SUB_GRUPO_BF_INSERT FOR SUB_GRUPO
ACTIVE BEFORE INSERT POSITION 0
AS
  declare variable vIDSUBGRUPO integer;
begin
   select max(S.IDSUB_GRUPO)+1 from SUB_GRUPO S
    into :VIDSUBGRUPO;

    if (:VIDSUBGRUPO is null) then VIDSUBGRUPO = 1;

    new.IDSUB_GRUPO = :VIDSUBGRUPO;
end
^

/* Trigger: TRG_SUB_REGIAO_BF_INSERT */
CREATE TRIGGER TRG_SUB_REGIAO_BF_INSERT FOR SUB_REGIAO
ACTIVE BEFORE INSERT POSITION 0
AS
  declare variable VIDSUB_REGIAO smallint;
begin
   select max(S.IDSUB_REGIAO) from SUB_REGIAO S
      where S.IDREGIAO = new.IDREGIAO
       into :VIDSUB_REGIAO;

   if (:VIDSUB_REGIAO is null) then
      new.IDSUB_REGIAO = 1;
   else
      new.IDSUB_REGIAO = :VIDSUB_REGIAO+1;
end
^

/* Trigger: TRG_TABELAPRECO_AF_INSERT */
CREATE TRIGGER TRG_TABELAPRECO_AF_INSERT FOR TABELAPRECO
ACTIVE AFTER INSERT POSITION 0
AS
declare variable vIDREPRESENTANTE smallint;
declare variable vUSAR_TABELA_REP_MOBILE varchar(1);
begin
  select F.USAR_TABELA_REP_MOBILE from FILIAL F
     where F.IDFILIAL = new.IDFILIAL
       into :VUSAR_TABELA_REP_MOBILE;

  if (VUSAR_TABELA_REP_MOBILE = 'N') then
  begin
      for select R.IDREPRESENTANTE from REPRESENTANTE R
            where R.EXCLUIDO is null
              and R.USA_ANDROID = 'S'
                into :VIDREPRESENTANTE
      do
      begin
         if (new.TABELAPALM = 'S') then
         begin
             if (not exists(select L.IDFILIAL from LOG_ALTERACAO_ANDROID L
                             where L.IDFILIAL = new.IDFILIAL
                               and L.ID = new.IDTABELAPRECO
                               and L.TIPO = 'Tabela Preco'
                               and L.IDREPRESENTANTE = :VIDREPRESENTANTE)) then
             begin
                 INSERT INTO LOG_ALTERACAO_ANDROID (IDFILIAL, IDREPRESENTANTE, ID, TIPO, IDFOLHA, SITUACAO) VALUES (new.IDFILIAL, :VIDREPRESENTANTE, new.IDTABELAPRECO, 'Tabela Preco', NULL, 'I');
             end
         end
      end
  end
end
^

/* Trigger: TRG_TABELAPRECO_AF_UPDATE */
CREATE TRIGGER TRG_TABELAPRECO_AF_UPDATE FOR TABELAPRECO
ACTIVE AFTER UPDATE POSITION 0
AS
declare variable vIDREPRESENTANTE smallint;
declare variable vUSAR_TABELA_REP_MOBILE varchar(1);
begin
  select F.USAR_TABELA_REP_MOBILE from FILIAL F
     where F.IDFILIAL = new.IDFILIAL
       into :VUSAR_TABELA_REP_MOBILE;

  if (VUSAR_TABELA_REP_MOBILE = 'N') then
  begin
      for select R.IDREPRESENTANTE from REPRESENTANTE R
            where R.EXCLUIDO is null
              and R.USA_ANDROID = 'S'
                into :VIDREPRESENTANTE
      do
      begin
         if (new.TABELAPALM = 'S') then
         begin
             if (not exists(select L.IDFILIAL from LOG_ALTERACAO_ANDROID L
                             where L.IDFILIAL = new.IDFILIAL
                               and L.ID = new.IDTABELAPRECO
                               and L.TIPO = 'Tabela Preco'
                               and L.IDREPRESENTANTE = :VIDREPRESENTANTE)) then
             begin
                 if (new.EXCLUIDO is null) then
                   INSERT INTO LOG_ALTERACAO_ANDROID (IDFILIAL, IDREPRESENTANTE, ID, TIPO, IDFOLHA, SITUACAO) VALUES (new.IDFILIAL, :VIDREPRESENTANTE, new.IDTABELAPRECO, 'Tabela Preco', NULL, 'A');
                 else
                   INSERT INTO LOG_ALTERACAO_ANDROID (IDFILIAL, IDREPRESENTANTE, ID, TIPO, IDFOLHA, SITUACAO) VALUES (new.IDFILIAL, :VIDREPRESENTANTE, new.IDTABELAPRECO, 'Tabela Preco', NULL, 'E');
             end
         end
      end
  end
  else
  begin
    if (VUSAR_TABELA_REP_MOBILE = 'S') then
    begin
       for select R.IDREPRESENTANTE from REPRESENTANTE R
             where R.EXCLUIDO is null
               and R.USA_ANDROID = 'S'
               and R.IDTABELAPRECO = new.IDTABELAPRECO
                 into :VIDREPRESENTANTE
       do
       begin
          if (not exists(select L.IDFILIAL from LOG_ALTERACAO_ANDROID L
                          where L.IDFILIAL = new.IDFILIAL
                            and L.ID = new.IDTABELAPRECO
                            and L.TIPO = 'Tabela Preco'
                            and L.IDREPRESENTANTE = :VIDREPRESENTANTE)) then
          begin
              if (new.EXCLUIDO is null) then
                INSERT INTO LOG_ALTERACAO_ANDROID (IDFILIAL, IDREPRESENTANTE, ID, TIPO, IDFOLHA, SITUACAO) VALUES (new.IDFILIAL, :VIDREPRESENTANTE, new.IDTABELAPRECO, 'Tabela Preco', NULL, 'A');
              else
                INSERT INTO LOG_ALTERACAO_ANDROID (IDFILIAL, IDREPRESENTANTE, ID, TIPO, IDFOLHA, SITUACAO) VALUES (new.IDFILIAL, :VIDREPRESENTANTE, new.IDTABELAPRECO, 'Tabela Preco', NULL, 'E');
          end
       end
    end
  end
end
^

/* Trigger: TRG_TABELAPRECO_BF_UPDATE */
CREATE TRIGGER TRG_TABELAPRECO_BF_UPDATE FOR TABELAPRECO
ACTIVE BEFORE UPDATE POSITION 0
AS
begin
  UPDATE REPRESENTANTE R
  SET R.gerardadospalm = 'S'
  WHERE R.venda_palm = 'S';
end
^

/* Trigger: TRG_UNIDADEPRODUTO_AF_INSERT */
CREATE TRIGGER TRG_UNIDADEPRODUTO_AF_INSERT FOR UNIDADEPRODUTO
ACTIVE AFTER INSERT POSITION 0
AS
declare variable vIDREPRESENTANTE smallint;
begin
  for select R.IDREPRESENTANTE from REPRESENTANTE R
        where R.EXCLUIDO is null
          and R.USA_ANDROID = 'S'
            into :VIDREPRESENTANTE
  do
  begin
     if (not exists(select L.IDFILIAL from LOG_ALTERACAO_ANDROID L
                     where L.IDFILIAL = new.IDFILIAL
                       and L.ID = new.IDPRODUTO
                       and L.ID_2 = new.IDUNIDADEMEDIDA
                       and L.TIPO = 'Prod. Und. Med.'
                       and L.IDREPRESENTANTE = :VIDREPRESENTANTE)) then
     begin
         INSERT INTO LOG_ALTERACAO_ANDROID (IDFILIAL, IDREPRESENTANTE, ID, TIPO, IDFOLHA, SITUACAO, ID_2) VALUES (new.IDFILIAL, :VIDREPRESENTANTE, new.IDPRODUTO, 'Prod. Und. Med.', NULL, 'I', new.IDUNIDADEMEDIDA);
     end
     else
     begin
       update LOG_ALTERACAO_ANDROID L
         set L.SITUACAO = 'I'
         where L.IDFILIAL = new.IDFILIAL
           and L.ID = new.IDPRODUTO
           and L.ID_2 = new.IDUNIDADEMEDIDA
           and L.TIPO = 'Prod. Und. Med.'
           and L.IDREPRESENTANTE = :VIDREPRESENTANTE;
     end
  end
end
^

/* Trigger: TRG_UNIDADEPRODUTO_AF_UPDATE */
CREATE TRIGGER TRG_UNIDADEPRODUTO_AF_UPDATE FOR UNIDADEPRODUTO
ACTIVE AFTER UPDATE POSITION 0
AS
declare variable vIDREPRESENTANTE smallint;
begin
  for select R.IDREPRESENTANTE from REPRESENTANTE R
        where R.EXCLUIDO is null
          and R.USA_ANDROID = 'S'
            into :VIDREPRESENTANTE
  do
  begin
     if (new.IDUNIDADEMEDIDA <> old.IDUNIDADEMEDIDA) then
     begin
         INSERT INTO LOG_ALTERACAO_ANDROID (IDFILIAL, IDREPRESENTANTE, ID, TIPO, IDFOLHA, SITUACAO, ID_2) VALUES (old.IDFILIAL, :VIDREPRESENTANTE, old.IDPRODUTO, 'Prod. Und. Med.', NULL, 'E', old.IDUNIDADEMEDIDA);

         if (not exists(select L.IDFILIAL from LOG_ALTERACAO_ANDROID L
                         where L.IDFILIAL = new.IDFILIAL
                           and L.ID = new.IDPRODUTO
                           and L.ID_2 = new.IDUNIDADEMEDIDA
                           and L.TIPO = 'Prod. Und. Med.'
                           and L.IDREPRESENTANTE = :VIDREPRESENTANTE)) then
         begin
             INSERT INTO LOG_ALTERACAO_ANDROID (IDFILIAL, IDREPRESENTANTE, ID, TIPO, IDFOLHA, SITUACAO, ID_2) VALUES (new.IDFILIAL, :VIDREPRESENTANTE, new.IDPRODUTO, 'Prod. Und. Med.', NULL, 'I', new.IDUNIDADEMEDIDA);
         end
     end
  end
end
^

/* Trigger: TRG_UNIDADEPRODUTO_BF_DELETE */
CREATE TRIGGER TRG_UNIDADEPRODUTO_BF_DELETE FOR UNIDADEPRODUTO
ACTIVE BEFORE DELETE POSITION 0
AS
declare variable vIDREPRESENTANTE smallint;
begin
  for select R.IDREPRESENTANTE from REPRESENTANTE R
        where R.EXCLUIDO is null
          and R.USA_ANDROID = 'S'
            into :VIDREPRESENTANTE
  do
  begin
     if (not exists(select L.IDFILIAL from LOG_ALTERACAO_ANDROID L
                     where L.IDFILIAL = old.IDFILIAL
                       and L.ID = old.IDPRODUTO
                       and L.ID_2 = old.IDUNIDADEMEDIDA
                       and L.TIPO = 'Prod. Und. Med.'
                       and L.IDREPRESENTANTE = :VIDREPRESENTANTE)) then
     begin
       INSERT INTO LOG_ALTERACAO_ANDROID (IDFILIAL, IDREPRESENTANTE, ID, TIPO, IDFOLHA, SITUACAO, ID_2) VALUES (old.IDFILIAL, :VIDREPRESENTANTE, old.IDPRODUTO, 'Prod. Und. Med.', NULL, 'E', old.IDUNIDADEMEDIDA);
     end
     else
     begin
       update LOG_ALTERACAO_ANDROID L
         set L.SITUACAO = 'E'
         where L.IDFILIAL = old.IDFILIAL
           and L.ID = old.IDPRODUTO
           and L.ID_2 = old.IDUNIDADEMEDIDA
           and L.TIPO = 'Prod. Und. Med.'
           and L.IDREPRESENTANTE = :VIDREPRESENTANTE;
     end
  end
end
^

/* Trigger: TRG_VENDA_BALCAO_AF_UPDATE */
CREATE TRIGGER TRG_VENDA_BALCAO_AF_UPDATE FOR VENDA_BALCAO
ACTIVE AFTER UPDATE POSITION 0
AS
  declare variable vIDCENTROCUSTO integer;
  declare variable vIDCONDICAOPAGTO smallint;
  declare variable vPRAZO smallint;
begin
   update PEDIDO P
     set P.IDPDV = new.IDVENDA
    where P.IDFILIAL = new.IDFILIAL
      and P.IDPEDIDO = new.IDPEDIDO_RETAGUARDA
      and P.IDFOLHA  = 5;


   if (new.TMP = 'S') then
   begin
       if (new.IDPEDIDO_RETAGUARDA is null) then exit;

       -- VERIFICANDO SE CENTROCUSTO PADRAO NAO E ISNULL
       select F.PDV_DEF_IDCENTROCUSTO from FILIAL F
          where F.IDFILIAL = new.IDFILIAL
        into :VIDCENTROCUSTO;
        if (:VIDCENTROCUSTO <= 0) then VIDCENTROCUSTO = 1;

        select FP.IDCONDICAOPAGTO from FORMAPAGTO FP
          where FP.IDFORMAPAGTO = new.IDFORMA_F1
             into :VIDCONDICAOPAGTO;

         select C.PRAZO from CONDICAOPAGTO C
           where C.IDCONDICAOPAGTO = :VIDCONDICAOPAGTO
             into :VPRAZO;


       if (not exists(select R.IDRECEBER from RECEBER R where R.IDFILIAL = new.IDFILIAL
                                                          and R.IDRECEBER = new.IDPEDIDO_RETAGUARDA
                                                          and R.IDFOLHA = 5
                                                          and R.IDORDEM = 1)) then begin
            insert into RECEBER (IDFILIAL, IDRECEBER, IDFOLHA, IDORDEM, DOCUMENTO, DATAVENCIMENTO, DATAEMISSAO, IDCLIENTE,
                                 IDREPRESENTANTE, IDFORMAPAGTO, VALORDOCUMENTO,IDCENTROCUSTO, TAXACOMISSAO)
                         values (new.IDFILIAL, new.IDPEDIDO_RETAGUARDA,'5'   ,'1'     ,'PDV'    , new.DATAVENDA+:VPRAZO, new.DATAVENDA, new.IDCLIENTE,
                                 new.IDREPRESENTANTE, new.idforma_f1,new.TOTALVENDA,:vIDCENTROCUSTO, 0 );
       end
    end
end
^

/* Trigger: TRG_VENDA_BALCAO_BF_DELETE */
CREATE TRIGGER TRG_VENDA_BALCAO_BF_DELETE FOR VENDA_BALCAO
ACTIVE BEFORE DELETE POSITION 0
AS
begin
   delete from ITENS_VENDA_BALCAO IT
      where IT.IDFILIAL = old.IDFILIAL
        and IT.TIPO     = old.TIPO
        and IT.IDVENDA  = old.IDVENDA;

   delete from PEDIDO P
      where P.IDFILIAL = old.IDFILIAL
        and P.IDPEDIDO = old.IDPEDIDO_RETAGUARDA
        and P.IDFOLHA = 5;

   delete from RECEBER R
      where R.IDFILIAL = old.IDFILIAL
        and R.IDRECEBER = old.IDPEDIDO_RETAGUARDA
        and R.IDFOLHA = 5;
end
^

/* Trigger: TRIBUTO_BU0 */
CREATE TRIGGER TRIBUTO_BU0 FOR TRIBUTO
ACTIVE BEFORE UPDATE POSITION 0
AS
begin
    if (old.taxaicms <> new.taxaicms) then
    begin
       update cfop c
         set c.aliquotaicms = new.taxaicms
       where c.idtributo = new.idtributo
         and c.idfilial = new.idfilial;
    end
end
^

/* Trigger: VENCTO_PRODUTO_BF_UPDATE */
CREATE TRIGGER VENCTO_PRODUTO_BF_UPDATE FOR VENCTO_PRODUTO
ACTIVE BEFORE UPDATE POSITION 0
AS
begin
  if (new.QTDE <= 0) then
      new.SITUACAO = 'I';
end
^

/* Trigger: VENDA_BALCAO_BU0 */
CREATE TRIGGER VENDA_BALCAO_BU0 FOR VENDA_BALCAO
ACTIVE BEFORE UPDATE POSITION 0
AS
  declare variable vSERIE integer;
  declare variable vIDPEDIDO integer;
begin
   /*  SE TIVER ALGUMA COISA NO NOME DO ARQUIVO */
   if (not new.NOME_ARQ_ELETRONICO is null) then
   begin
       select coalesce(F.SERIE,1) from FILIAL F
         where F.IDFILIAL = new.IDFILIAL
        into :VSERIE;

       select N.IDPEDIDO from NOTA N
        where N.IDFILIAL = new.IDFILIAL
          and N.IDNOTA = new.IDNOTAFISCAL
          and N.TIPONOTA = 'NFC'
          and N.SERIE = :VSERIE
        into :VIDPEDIDO;

       update NOTA N
          set N.NOME_ARQ_ELETRONICO = new.NOME_ARQ_ELETRONICO
        where N.IDFILIAL = new.IDFILIAL
          and N.IDNOTA = new.IDNOTAFISCAL
          and N.TIPONOTA = 'NFC'
          and N.SERIE = :VSERIE;

       update PEDIDO P
          set P.VALIDADAS = 'S',
              P.NFE_MOTIVO = 'Autorizado o uso da NF-e',
              P.NFE_ENVIADA = 'S',
              P.NFE_IMPRESSA = 'S'
        where P.IDFILIAL = new.IDFILIAL
          and P.IDPEDIDO = :VIDPEDIDO
          and P.IDFOLHA = 5;
   end
end
^

SET TERM ; ^



/******************************************************************************/
/***                           Stored Procedures                            ***/
/******************************************************************************/


SET TERM ^ ;

ALTER PROCEDURE AFA_SINTEGRA_R50 (
    IDFILIAL INTEGER,
    DTINI DATE,
    DTFIM DATE)
RETURNS (
    CPF_CNPJ VARCHAR(18),
    INSESTADUAL VARCHAR(20),
    DATAFINAL DATE,
    UF VARCHAR(2),
    MODELO VARCHAR(2),
    SER VARCHAR(3),
    NOTA INTEGER,
    CFOP VARCHAR(4),
    EMISSORDOCUMENTO VARCHAR(1),
    VALORDOCUMENTO NUMERIC(15,2),
    ALIQUOTA NUMERIC(15,2),
    BASECALCULO NUMERIC(15,2),
    VALORICMS NUMERIC(15,2),
    VALOROUTROS NUMERIC(15,2),
    SITUACAO VARCHAR(1),
    VALORISENTOS NUMERIC(15,2))
AS
begin

    for select C.CPF_CNPJ, coalesce(S.INSESTADUAL,'ISENTO') , S.UF, C100.SER, C100.COD_MOD,
               C.IDNOTA, C.CFOP, IF_SS(c100.CHAVE_NFE,'=','','T','P'),
               C100.VL_DOC, C.ALIQ_ICMS, sum(IF_NN(C.ALIQ_ICMS,'<>',0,C.VL_BC_ICMS,0)),
               sum(IF_NN(C.ALIQ_ICMS,'<>',0,c.VL_ICMS,0)),  coalesce(C100.SITUACAONOTA,'N'),
               sum(IF_NN(C.ALIQ_ICMS,'=',0,(C.VL_ITEM) ,0)), C100.DT_DOC

                 from  C170_ITENS_NF C

        left join C100_NF C100
            on C100.IDFILIAL = C.IDFILIAL
           and C100.IDNOTA = C.IDNOTA
           and C100.NOTA_PROPRIA_TERCEIROS = C.NOTA_PROPRIA_TERCEIROS
           and C100.CPF_CNPJ = C.CPF_CNPJ

        left join SPED_0150 S
           on S.IDPARTICIPANTE = C100.IDPARTICIPANTE

        WHERE C.IDFILIAL = :IDFILIAL
              AND C100.DT_DOC between :DTINI and :DTFIM

        group by C.CPF_CNPJ, S.INSESTADUAL, S.UF, C100.SER, C100.COD_MOD,
               C.IDNOTA, C.CFOP, IF_SS(c100.CHAVE_NFE,'=','','T','P'),
               C100.VL_DOC, C.ALIQ_ICMS, C100.SITUACAONOTA, C100.DT_DOC

        into :CPF_CNPJ, :INSESTADUAL, :UF, :SER, :MODELO, :NOTA,
             :CFOP, :EMISSORDOCUMENTO, :VALORDOCUMENTO, :ALIQUOTA,
             :BASECALCULO, :VALORICMS, :SITUACAO, :VALORISENTOS, :DATAFINAL

    do begin
      if (:SITUACAO = 'C') then
          SITUACAO = 'S';
      if (TRIM(:INSESTADUAL) = '') then
         INSESTADUAL = 'ISENTO';
      suspend;
    end
end^


ALTER PROCEDURE AFA_SINTEGRA_R51 (
    IDFILIAL INTEGER,
    DTINI DATE,
    DTFIM DATE)
RETURNS (
    CPF_CNPJ VARCHAR(18),
    INSESTADUAL VARCHAR(20),
    DATAFINAL DATE,
    UF VARCHAR(2),
    MODELO VARCHAR(2),
    SER VARCHAR(3),
    NOTA INTEGER,
    CFOP VARCHAR(4),
    EMISSORDOCUMENTO VARCHAR(1),
    VALORDOCUMENTO NUMERIC(15,2),
    VALORIPI NUMERIC(15,2),
    ALIQUOTA NUMERIC(15,2),
    VALOROUTRAS NUMERIC(15,2),
    VALORISENTA NUMERIC(15,2),
    SITUACAO VARCHAR(1))
AS
begin
    for select C.CPF_CNPJ, coalesce(S.INSESTADUAL,'ISENTO'), S.UF, C100.SER, C100.COD_MOD,
               C.IDNOTA, C.CFOP, IF_SS(c100.CHAVE_NFE,'=','','T','P'),
               C100.VL_DOC, C.ALIQ_IPI,
               coalesce(C100.SITUACAONOTA,'N'), sum(if_nn(C.ALIQ_IPI,'<>',0,C.VL_IPI,0)),
               sum( case when (C.CST_IPI in ('02','03','04','52','53','54','51')) then C.QTD*C.VL_ITEM end),
               C100.DT_DOC

                 from  C170_ITENS_NF C

        left join C100_NF C100
            on C100.IDFILIAL = C.IDFILIAL
           and C100.IDNOTA = C.IDNOTA
           and C100.NOTA_PROPRIA_TERCEIROS = C.NOTA_PROPRIA_TERCEIROS
           and C100.CPF_CNPJ = C.CPF_CNPJ

        left join SPED_0150 S
           on S.IDPARTICIPANTE = C100.IDPARTICIPANTE

        WHERE C.IDFILIAL = :IDFILIAL
              AND C100.DT_DOC between :DTINI and :DTFIM
              and C.CST_IPI in ('02','03','04','52','53','54','51')

        group by C.CPF_CNPJ, S.INSESTADUAL, S.UF, C100.SER, C100.COD_MOD,
               C.IDNOTA, C.CFOP, IF_SS(c100.CHAVE_NFE,'=','','T','P'),
               C100.VL_DOC, C.ALIQ_IPI, C100.SITUACAONOTA, C100.DT_DOC

        into :CPF_CNPJ, :INSESTADUAL, :UF, :SER, :MODELO, :NOTA,
             :CFOP, :EMISSORDOCUMENTO, :VALORDOCUMENTO, :ALIQUOTA,
             :SITUACAO, :VALORIPI, :VALORISENTA, :DATAFINAL

    do begin
      if (:SITUACAO = 'C') then
          SITUACAO = 'S';
      if (TRIM(:INSESTADUAL) = '') then
         INSESTADUAL = 'ISENTO';
      suspend;
    end
end^


ALTER PROCEDURE AFA_SINTEGRA_R53 (
    IDFILIAL INTEGER,
    DTINI DATE,
    DTFIM DATE)
RETURNS (
    CPF_CNPJ VARCHAR(18),
    INSESTADUAL VARCHAR(20),
    DATAFINAL DATE,
    UF VARCHAR(2),
    MODELO VARCHAR(2),
    SER VARCHAR(3),
    NOTA INTEGER,
    CFOP VARCHAR(4),
    EMISSORDOCUMENTO VARCHAR(1),
    VALORDOCUMENTO NUMERIC(15,2),
    SITUACAO VARCHAR(1),
    ICMSRETIDO NUMERIC(15,2),
    DESPESAS NUMERIC(15,2),
    BASEST NUMERIC(15,2))
AS
begin
    for select C.CPF_CNPJ, coalesce(S.INSESTADUAL,'ISENTO'), S.UF, C100.SER, C100.COD_MOD,
               C.IDNOTA, C.CFOP, IF_SS(c100.CHAVE_NFE,'=','','T','P'),
               C100.VL_DOC, sum(IF_NN(C.ALIQ_ICMS,'<>',0,C.VL_BC_ICMS_ST,0)),
               sum(IF_NN(C.ALIQ_ST,'<>',0,c.VL_ICMS_ST,0)),  coalesce(C100.SITUACAONOTA,'N'), C100.DT_DOC


                 from  C170_ITENS_NF C

        left join C100_NF C100
            on C100.IDFILIAL = C.IDFILIAL
           and C100.IDNOTA = C.IDNOTA
           and C100.NOTA_PROPRIA_TERCEIROS = C.NOTA_PROPRIA_TERCEIROS
           and C100.CPF_CNPJ = C.CPF_CNPJ

        left join SPED_0150 S
           on S.IDPARTICIPANTE = C100.IDPARTICIPANTE

        WHERE C.IDFILIAL = :IDFILIAL
              AND C100.DT_DOC between :DTINI and :DTFIM
              AND C.CST_ICMS in ('010','030','060','070')

        group by C.CPF_CNPJ, S.INSESTADUAL, S.UF, C100.SER, C100.COD_MOD,
               C.IDNOTA, C.CFOP, IF_SS(c100.CHAVE_NFE,'=','','T','P'),
               C100.VL_DOC, C.ALIQ_ICMS, C100.SITUACAONOTA, C100.DT_DOC

        into :CPF_CNPJ, :INSESTADUAL, :UF, :SER, :MODELO, :NOTA,
             :CFOP, :EMISSORDOCUMENTO, :VALORDOCUMENTO,
             :BASEST, :ICMSRETIDO, :SITUACAO, :DATAFINAL

    do begin
      DESPESAS  = 0;
      if (:SITUACAO = 'C') then
          SITUACAO = 'S';
      if (TRIM(:INSESTADUAL) = '') then
         INSESTADUAL = 'ISENTO';

      if (not ((:ICMSRETIDO = 0) and (BASEST = 0))) then
      suspend;
    end
end^


ALTER PROCEDURE AFA_SINTEGRA_R54 (
    IDFILIAL INTEGER,
    DTINI DATE,
    DTFIM DATE)
RETURNS (
    CPF_CNPJ VARCHAR(18),
    NOMEPRODUTO VARCHAR(60),
    NUMERO INTEGER,
    CST VARCHAR(3),
    CFOP VARCHAR(4),
    COD_MODELO VARCHAR(2),
    SERIE VARCHAR(3),
    CONTADOR INTEGER,
    ALIQUOTA NUMERIC(15,2),
    BASE_ST NUMERIC(15,2),
    QTDE NUMERIC(15,3),
    VALOR_BASE NUMERIC(15,2),
    VALOR_IPI NUMERIC(15,2),
    VL_ITEM NUMERIC(15,2),
    VL_DESCONTO NUMERIC(15,2),
    IDPRODUTO INTEGER)
AS
begin
/*
    for select C.CPF_CNPJ, P.ESPECIFICACAO, C.IDNOTA, C.CST_ICMS, C.CFOP,
               C100.COD_MOD, C100.SER, C.CONTADOR, C.ALIQ_ICMS,
               C.VL_BC_ICMS_ST, C.QTD, C.VL_BC_ICMS, C.VL_IPI,
               C.VL_ITEM, C.VL_DESC, C.IDPRODUTO

                 from  C170_ITENS_NF C

        left join C100_NF C100
            on C100.IDFILIAL = C.IDFILIAL
           and C100.IDNOTA = C.IDNOTA
           and C100.NOTA_PROPRIA_TERCEIROS = C.NOTA_PROPRIA_TERCEIROS
           and C100.CPF_CNPJ = C.CPF_CNPJ

        left join PRODUTO P
          on P.IDFILIAL = C.IDFILIAL
         and P.IDPRODUTO = C.IDPRODUTO

        left join SPED_0150 S
           on S.IDPARTICIPANTE = C100.IDPARTICIPANTE

        WHERE C.IDFILIAL = :IDFILIAL
              AND C100.DT_E_S between :DTINI and :DTFIM
              and TRIM(IF_SS(c100.CHAVE_NFE,'=','','T','P')) = 'P'


        into :CPF_CNPJ, :NOMEPRODUTO, :NUMERO, :CST, :CFOP,
             :COD_MODELO, :SERIE, :CONTADOR, :ALIQUOTA, :BASE_ST,
             :QTDE, :VALOR_BASE, :VALOR_IPI, :VL_ITEM, :VL_DESCONTO,
             :IDPRODUTO
    do begin
      suspend;
    end
*/
end^


ALTER PROCEDURE ARRUMA_CHAVE_NOTA (
    IDFILIAL INTEGER,
    IDREPRESENTANTE SMALLINT)
RETURNS (
    COUNT_ID INTEGER,
    IDPEDIDOPALM INTEGER,
    IDPEDIDO INTEGER)
AS
begin
   for select count(*) , p.idpedidopalm from PEDIDO P

    
    WHERE P.idfilial = :IDFILIAL
      AND P.idrepresentante = :IDREPRESENTANTE
        AND P.idfolha = 99
    
    group by p.idpedidopalm
    
    having count(*) > 1

    into :count_ID, :IDPEDIDOPALM

  do
  begin
    select first 1 PE.IDPEDIDO from PEDIDO PE
      where PE.IDFILIAL = :IDFILIAL
        AND PE.IDPEDIDOPALM = :IDPEDIDOPALM
        AND PE.IDFOLHA = 99
        ORDER BY PE.DATAPEDIDO ASC
        INTO :IDPEDIDO;


    update pedido p
      set p.IDPEDIDOPALM = null
     where p.IDFILIAL = :IDFILIAL
       and p.IDPEDIDO = :IDPEDIDO
       and p.IDFOLHA = 99;
  end

--    suspend;
end^


ALTER PROCEDURE ARRUMA_TIPO_PAGTO_NF (
    IDFILIAL INTEGER)
AS
declare variable IDNOTA integer;
declare variable TIPOFORMA varchar(1);
declare variable RESULTADO varchar(1);
begin
/*
   for select N.IDNOTA, F.TIPOFORMA from NOTA N
      left join  FORMAPAGTO F
        on F.IDFORMAPAGTO = N.IDFORMAPAGTO

     where N.TIPO_PAGAMENTO is null
       and N.TIPONOTA = 'NF'
       and N.IDFILIAL = :IDFILIAL
     into :IDNOTA, :TIPOFORMA
   do begin
      if (:TIPOFORMA = 'A') then
        RESULTADO = '0';
      else if (:TIPOFORMA = 'P') then
        RESULTADO = '1';
      else if (:TIPOFORMA = 'O') then
        RESULTADO = '9';
      else
        RESULTADO = '0';

      update NOTA N
         set N.TIPO_PAGAMENTO = :RESULTADO
       where N.IDFILIAL = :IDFILIAL
         and N.TIPONOTA = 'NF'
         and N.IDNOTA = :IDNOTA;
   end
*/
end^


ALTER PROCEDURE ATUALIZA_CAMPO_SERIE_NOTA (
    IDFILIAL SMALLINT)
AS
declare variable VSERIE smallint;
begin
  select F.SERIE from FILIAL F
    where F.IDFILIAL = :IDFILIAL
    into :VSERIE;
  if ((:VSERIE is null) or (:VSERIE = 0)) then
    VSERIE = 1;

   update NOTA N
     set N.SERIE = :VSERIE
    where N.IDFILIAL = :IDFILIAL;

   update ITENSNOTA IT
     set IT.SERIE = :VSERIE
    where IT.IDFILIAL = :IDFILIAL;
end^


ALTER PROCEDURE ATUALIZA_CARTEIRA (
    IDFILIAL INTEGER,
    DTINI DATE,
    DTFIM DATE)
RETURNS (
    IDPEDIDO INTEGER,
    IDFOLHA INTEGER,
    IDPRODUTO INTEGER,
    IDCARTEIRA INTEGER,
    FATOR INTEGER,
    IDUNIDADEMEDIDA INTEGER)
AS
DECLARE VARIABLE VIDREPRESENTANTE INTEGER;
begin
   for select IT.IDPEDIDO,IT.IDFOLHA, IT.IDPRODUTO, IT.FATORCONVERSAO, IT.IDCARTEIRA, IT.IDUNIDADEMEDIDA,
              P.IDREPRESENTANTE from ITENSPEDIDO IT
         join PEDIDO P
           on P.IDPEDIDO = IT.IDPEDIDO
          and P.IDFOLHA  = IT.IDFOLHA
          and P.IDFILIAL = :IDFILIAL
      where IT.IDFILIAL  = :IDFILIAL
        and P.DATAPEDIDO between :DTINI and :DTFIM
        and(IT.PRECOTABELA-IT.PRECOVENDA) <> 0.00
       into :IDPEDIDO, :IDFOLHA, :IDPRODUTO, :FATOR, :IDCARTEIRA, :IDUNIDADEMEDIDA,
            :vIDREPRESENTANTE
  do
    begin
      update ITENSPEDIDO I
         set I.IDREPRESENTANTE = :vIDREPRESENTANTE
             where I.IDFILIAL  = :IDFILIAL
               and I.IDPEDIDO  = :IDPEDIDO
               and I.IDFOLHA   = :IDFOLHA
               and I.IDUNIDADEMEDIDA = :IDUNIDADEMEDIDA
               and I.IDPRODUTO = :IDPRODUTO;
        suspend;
    end
    
   for select IT.IDPEDIDO,IT.IDFOLHA, IT.IDPRODUTO,IT.FATORCONVERSAO, IT.IDCARTEIRA, IT.IDUNIDADEMEDIDA from ITENSDEVOLUCAO IT
         join DEVOLUCAO D
           on D.IDPEDIDO = IT.IDPEDIDO
          and D.IDFOLHA = IT.IDFOLHA
          and D.IDFILIAL = :IDFILIAL
      where IT.IDFILIAL = :IDFILIAL
        and D.DATAPEDIDO between :DTINI and :DTFIM
        and (IT.PRECOTABELA-IT.PRECOVENDA) <> 0.00
       into :IDPEDIDO, :IDFOLHA, :IDPRODUTO,:FATOR, :IDCARTEIRA, :IDUNIDADEMEDIDA
  do
    begin
      update ITENSDEVOLUCAO I
         set I.FATORCONVERSAO = :FATOR
             where I.IDFILIAL = :IDFILIAL
               and I.IDPEDIDO = :IDPEDIDO
               and I.IDUNIDADEMEDIDA = :IDUNIDADEMEDIDA
               and I.IDPRODUTO = :IDPRODUTO
               and I.IDFOLHA = :IDFOLHA;
        suspend;
    end
end^


ALTER PROCEDURE ATUALIZA_CFOP_NOTA (
    IDFILIAL INTEGER,
    DTINI DATE,
    DTFIM DATE)
AS
declare variable IDNOTA integer;
declare variable SERIE smallint;
declare variable IDCFOP smallint;
declare variable CFOP_PRODUTO varchar(1);
declare variable CFOP varchar(5);
declare variable TIPONOTA varchar(5);
declare variable IDPRODUTO integer;
declare variable CONTADOR integer;
begin
  for select N.IDNOTA, N.SERIE, N.TIPONOTA, N.IDCFOP from NOTA N


     where N.IDFILIAL = :IDFILIAL
       and N.DATANOTA between :DTINI and :DTFIM

     into :IDNOTA, :SERIE, :TIPONOTA, :IDCFOP
  do
  begin
     select C.CFOP_PRODUTO, C.CFOP from CFOP C
        where C.IDFILIAL = :IDFILIAL
          and C.IDCFOP = :IDCFOP
         into :CFOP_PRODUTO, :CFOP;

     if (CFOP_PRODUTO = 'N') then
     begin
       for select I.IDPRODUTO, I.CONTADOR from ITENSNOTA I
        

         where I.IDFILIAL = :IDFILIAL
           and I.IDNOTA = :IDNOTA
           and I.SERIE = :SERIE
           and I.TIPONOTA = :TIPONOTA

           into :IDPRODUTO, :CONTADOR
       do
       begin
         update ITENSNOTA I
           set I.CFOP = :CFOP
          where I.IDFILIAL = :IDFILIAL
            and I.IDNOTA = :IDNOTA
            and I.TIPONOTA = :TIPONOTA
            and I.SERIE = :SERIE;
--            and
       end

     end

  end
end^


ALTER PROCEDURE ATUALIZA_CONSIGNACAO (
    IDCONSIGNACAO INTEGER,
    IDFILIAL INTEGER)
AS
declare variable SITUACAOPEDIDO char(1);
declare variable IDPRODUTO integer;
declare variable QTDEPEDIDO numeric(10,3);
begin
  update ITENS_CONSIGNACAO ICN
    set ICN.QTDE_ENTRADA = 0,
        ICN.QTDE_SAIDA = 0
   where ICN.IDFILIAL = :IDFILIAL
     and ICN.IDCONSIGNACAO = :IDCONSIGNACAO;

  for select I.IDPRODUTO, I.QTDEPEDIDO, P.SITUACAOPEDIDO from ITENSPEDIDO I

    left join PEDIDO P
      on P.IDFILIAL = I.IDFILIAL
     and P.IDPEDIDO = I.IDPEDIDO
     and P.IDFOLHA = I.IDFOLHA


     where I.IDFILIAL = :IDFILIAL
       and P.IDCONSIGNACAO = :IDCONSIGNACAO

      into :IDPRODUTO, :QTDEPEDIDO, :SITUACAOPEDIDO
   do
   begin

    if (:SITUACAOPEDIDO = 'C') then
    begin
        update ITENS_CONSIGNACAO IC
          set IC.QTDE_ENTRADA = ic.QTDE_ENTRADA+:QTDEPEDIDO
         where IC.IDFILIAL = :IDFILIAL
           and IC.IDCONSIGNACAO = :IDCONSIGNACAO
           and IC.IDPRODUTO = :IDPRODUTO;
    end

    if (:SITUACAOPEDIDO = 'V') then
    begin
        update ITENS_CONSIGNACAO IC
          set IC.QTDE_SAIDA = ic.QTDE_SAIDA+:QTDEPEDIDO
         where IC.IDFILIAL = :IDFILIAL
           and IC.IDCONSIGNACAO = :IDCONSIGNACAO
           and IC.IDPRODUTO = :IDPRODUTO;
    end

   end
end^


ALTER PROCEDURE ATUALIZA_ESTOQUE (
    IDFILIAL SMALLINT,
    IDPRODUTO INTEGER,
    QTDE NUMERIC(10,3),
    OPERACAO VARCHAR(1),
    HISTORICO VARCHAR(100))
AS
declare variable QTDEATUAL numeric(10,3);
begin
select P.QTDEATUAL from PRODUTO P
  where P.IDFILIAL =:IDFILIAL
  and   P.IDPRODUTO = :IDPRODUTO
  into :QTDEATUAL;


  if (:OPERACAO = '+') then begin
     update PRODUTO P
        set P.QTDEATUAL = P.QTDEATUAL+(:QTDE)
      where P.IDFILIAL = :IDFILIAL
        and P.IDPRODUTO = :IDPRODUTO;
        QTDEATUAL = :QTDEATUAL + QTDE;
        end
  else begin
     update PRODUTO P
        set P.QTDEATUAL = P.QTDEATUAL-(:QTDE)
      where P.IDFILIAL = :IDFILIAL
        and P.IDPRODUTO = :IDPRODUTO;
        QTDEATUAL = :QTDEATUAL - QTDE;
  end


  insert into ESTOQUE_FISICO (IDFILIAL,IDCONTROLE,IDPRODUTO,
                              DTMOVTO,HISTORICO,SITUACAO,QTDE, SALDO)
        values (:IDFILIAL,0,:IDPRODUTO,current_date,:HISTORICO,:OPERACAO,:QTDE, :QTDEATUAL);
  suspend;
end^


ALTER PROCEDURE ATUALIZA_ESTOQUE_DEPOSITO (
    IDFILIAL SMALLINT,
    IDDEPOSITO SMALLINT,
    IDPRODUTO INTEGER,
    QTDE NUMERIC(10,3),
    OPERACAO VARCHAR(1),
    HISTORICO VARCHAR(60))
AS
declare variable QTDEATUAL numeric(10,3);
begin
  if (not IDDEPOSITO is null) then begin
      select P.QTDE_ATUAL from ITENSDEPOSITO P
      where P.IDFILIAL =:IDFILIAL
      and   P.IDPRODUTO = :IDPRODUTO
      and   P.IDDEPOSITO = :IDDEPOSITO
      into :QTDEATUAL;
    
      if (QTDEATUAL is null) then QTDEATUAL = 0;
      if (QTDE is null) then QTDE = 0;
    
      if (:OPERACAO = '+') then begin
         update ITENSDEPOSITO IT
            set IT.QTDE_ATUAL=IT.QTDE_ATUAL+(:QTDE)
          where IT.IDPRODUTO  = :IDPRODUTO
            and IT.IDDEPOSITO = :IDDEPOSITO
            and IT.IDFILIAL   = :IDFILIAL;
            QTDEATUAL = :QTDEATUAL + QTDE;
            end
      else begin
         update ITENSDEPOSITO IT
            set IT.QTDE_ATUAL=IT.QTDE_ATUAL-(:QTDE)
          where IT.IDPRODUTO  = :IDPRODUTO
            and IT.IDDEPOSITO = :IDDEPOSITO
            and IT.IDFILIAL   = :IDFILIAL;
            QTDEATUAL = :QTDEATUAL - QTDE;
      end
    
    
    
      insert into ESTOQUE_FISICO_DEPOSITO (IDFILIAL,IDCONTROLE,IDPRODUTO,
                                  DTMOVTO,HISTORICO,SITUACAO,QTDE, SALDO, IDDEPOSITO)
            values (:IDFILIAL,0,:IDPRODUTO,current_date,:HISTORICO,:OPERACAO,:QTDE, :QTDEATUAL, :IDDEPOSITO);
      suspend;
  end
end^


ALTER PROCEDURE ATUALIZA_ESTOQUE_FISICO (
    VIDFILIAL INTEGER,
    VANO INTEGER)
RETURNS (
    VIDPRODUTO INTEGER,
    VVALORCUSTO NUMERIC(15,4),
    VVALORVENDA NUMERIC(15,4))
AS
begin
  for select distinct E.IDPRODUTO from ESTOQUE_FISICO E
      where E.IDFILIAL= :vIDFILIAL
        and extract(year from E.DTMOVTO) = :VANO
       into :vIDPRODUTO

  do begin
     select avg(IT.CUSTONOTA/IT.FATORCONVERSAO),
            avg(IT.PRECOVENDA/IT.FATORCONVERSAO) from ITENSPEDIDO IT
       join PEDIDO P
         on P.IDFILIAL = IT.IDFILIAL
        and P.IDPEDIDO = IT.IDPEDIDO
        and P.IDFOLHA = IT.IDFOLHA

      where IT.IDPRODUTO = :vIDPRODUTO
        and IT.IDFILIAL = :vIDFILIAL
        and extract(year from P.DATAPEDIDO) = :VANO
       into :VVALORCUSTO, :VVALORVENDA;

     update ESTOQUE_FISICO EF
        set EF.CUSTO_PRODUTO = :vVALORCUSTO,
            EF.PRECO_VENDA   = :vVALORVENDA
         where EF.IDPRODUTO = :vIDPRODUTO
           and EF.IDFILIAL = :vIDFILIAL
           and extract(year from EF.DTMOVTO) = :vANO;

  end
end^


ALTER PROCEDURE ATUALIZA_NOTA_TIPO_OPER (
    IDFILIAL INTEGER)
AS
declare variable TIPOOPERACAO varchar(1);
declare variable IDNOTA integer;
begin
  for select N.IDNOTA, C.TIPOOPERACAO from NOTA N

      join CFOP C
        on C.IDCFOP = N.IDCFOP

     where N.IDFILIAL = :IDFILIAL
       and N.TIPO_OPERACAO is null
       and N.TIPONOTA = 'NF'
     into :IDNOTA, :TIPOOPERACAO
   do begin
      if (:TIPOOPERACAO = 'E') then
      begin
          update NOTA N
             set N.TIPO_OPERACAO = 0
           where N.IDFILIAL = :IDFILIAL
             and N.IDNOTA = :IDNOTA
             and N.TIPONOTA = 'NF';
      end
      else begin
          update NOTA N
             set N.TIPO_OPERACAO = 1
           where N.IDFILIAL = :IDFILIAL
             and N.IDNOTA = :IDNOTA
             and N.TIPONOTA = 'NF';
      end
  end
end^


ALTER PROCEDURE ATUALIZA_PRECO_CUSTO (
    IDFILIAL SMALLINT)
RETURNS (
    IDPEDIDO INTEGER,
    IDFOLHA SMALLINT,
    TOTALCUSTO NUMERIC(16,2))
AS
declare variable VTOTALCUSTO numeric(16,2);
begin
  for select P.IDPEDIDO, P.IDFOLHA, P.TOTALCUSTO from DEVOLUCAO P

  where P.IDFILIAL = :IDFILIAL
  into :IDPEDIDO,:IDFOLHA, :TOTALCUSTO
  do
  begin
    if ((:TOTALCUSTO is null) or (:TOTALCUSTO = 0)) then
    begin
        select sum(I.CUSTONOTA*I.QTDEPEDIDO) from ITENSDEVOLUCAO I
          where I.IDFILIAL = :IDFILIAL
            and I.IDPEDIDO = :IDPEDIDO
            and I.IDFOLHA = :IDFOLHA
           into :VTOTALCUSTO;
    
          update DEVOLUCAO PE
            set PE.TOTALCUSTO = :VTOTALCUSTO
           where PE.IDFILIAL = :IDFILIAL
             and PE.IDPEDIDO = :IDPEDIDO
             and PE.IDFOLHA = :IDFOLHA;
    end
    suspend;
   end
/*
  for select P.IDPEDIDO, P.IDFOLHA, P.TOTALCUSTO from PEDIDO P

  where P.IDFILIAL = :IDFILIAL
  into :IDPEDIDO,:IDFOLHA, :TOTALCUSTO
  do
  begin
    if ((:TOTALCUSTO is null) or (:TOTALCUSTO = 0)) then
    begin
        select sum(I.CUSTONOTA*I.QTDEPEDIDO) from ITENSPEDIDO I
          where I.IDFILIAL = :IDFILIAL
            and I.IDPEDIDO = :IDPEDIDO
            and I.IDFOLHA = :IDFOLHA
           into :VTOTALCUSTO;
    
          update PEDIDO PE
            set PE.TOTALCUSTO = :VTOTALCUSTO
           where PE.IDFILIAL = :IDFILIAL
             and PE.IDPEDIDO = :IDPEDIDO
             and PE.IDFOLHA = :IDFOLHA;
    end
   end
  suspend; */
end^


ALTER PROCEDURE ATUALIZA_PRECO_CUSTO_PEDIDO (
    IDFILIAL SMALLINT,
    VIDFOLHA SMALLINT)
RETURNS (
    IDPEDIDO INTEGER,
    IDFOLHA SMALLINT,
    TOTALCUSTO NUMERIC(16,2))
AS
declare variable VTOTALCUSTO numeric(16,2);
begin
  for select P.IDPEDIDO, P.IDFOLHA, P.TOTALCUSTO from PEDIDO P

  where P.IDFILIAL = :IDFILIAL
    and P.idfolha = :vidfolha
  into :IDPEDIDO,:IDFOLHA, :TOTALCUSTO
  do
  begin
    if ((:TOTALCUSTO is null) or (:TOTALCUSTO = 0)) then
    begin
        select sum(I.CUSTONOTA*I.QTDEPEDIDO) from ITENSPEDIDO I
          where I.IDFILIAL = :IDFILIAL
            and I.IDPEDIDO = :IDPEDIDO
            and I.IDFOLHA = :IDFOLHA
           into :VTOTALCUSTO;
    
          update PEDIDO PE
            set PE.TOTALCUSTO = :VTOTALCUSTO
           where PE.IDFILIAL = :IDFILIAL
             and PE.IDPEDIDO = :IDPEDIDO
             and PE.IDFOLHA = :IDFOLHA;
    end
   end
  suspend;
end^


ALTER PROCEDURE ATUALIZACAO_INVENTARIO (
    IDFILIAL INTEGER,
    SITUACAO CHAR(1))
RETURNS (
    IDPRODUTO INTEGER,
    ESTOQUE NUMERIC(10,3),
    QTDEESTOQUE NUMERIC(10,3))
AS
declare variable QTDEATUAL numeric(10,3);
declare variable QTDE numeric(10,3);
declare variable OPERACAO varchar(1);
begin
  update FILIAL F
     set F.DTINVENTARIO = current_date
  where F.IDFILIAL = :IDFILIAL;

  if (SITUACAO = 'N') then begin

    for select P.IDPRODUTO, P.QTDEATUAL from PRODUTO P
      where P.IDFILIAL = :IDFILIAL
       into :IDPRODUTO, :QTDEESTOQUE
     do begin
       QTDE = QTDEESTOQUE;
       if (QTDEESTOQUE < 0) then begin
          QTDE = QTDEESTOQUE*-1;
          OPERACAO = '+';
       end
       else
          OPERACAO = '-';

       execute procedure ATULIZA_HISTORICO_PRODUTO(:IDFILIAL,:IDPRODUTO,null,null,null,null,:QTDEESTOQUE);

       if (:QTDEESTOQUE <> 0) then begin
           insert into ESTOQUE_FISICO (IDFILIAL,IDCONTROLE,IDPRODUTO,
                                       DTMOVTO,HISTORICO,SITUACAO,QTDE, SALDO)
                              values (:IDFILIAL,0,:IDPRODUTO,current_date,'ACERTO INVENTARIO',:OPERACAO,:QTDE, 0);
       end
     end
     update PRODUTO P
       set P.QTDEATUAL = 0,
           P.QTDEANTERIOR = 0,
           P.DTINVENTARIO = current_date
     where P.IDFILIAL = :IDFILIAL;
  end


  for select I.IDPRODUTO, I.ESTOQUE from INVENTARIO I
     where I.IDFILIAL = :IDFILIAL
       into :IDPRODUTO, :ESTOQUE
  do
    begin
      select P.QTDEATUAL from PRODUTO P
       where P.IDFILIAL = :IDFILIAL
         and P.IDPRODUTO = :IDPRODUTO
        into :QTDEATUAL;
        QTDE = QTDEATUAL;

      if (QTDEATUAL < 0)
      then begin
           QTDE = QTDEATUAL*-1;
           OPERACAO = '+';
           end
      else OPERACAO = '-';

      execute procedure ATULIZA_HISTORICO_PRODUTO(:IDFILIAL,:IDPRODUTO,:ESTOQUE,null,null,null,null);

      update PRODUTO P
         set P.QTDEATUAL = :ESTOQUE,
             P.QTDEANTERIOR = :ESTOQUE,
             P.DTINVENTARIO = current_date
       where P.IDFILIAL = :IDFILIAL
         and P.IDPRODUTO = :IDPRODUTO;

      if (QTDEATUAL <> 0) then begin
         insert into ESTOQUE_FISICO (IDFILIAL,IDCONTROLE,IDPRODUTO,
                                     DTMOVTO,HISTORICO,SITUACAO,QTDE, SALDO)
                             values (:IDFILIAL,0,:IDPRODUTO,current_date,'ACERTO INVENTARIO',:OPERACAO,:QTDE, 0);
      end

      insert into ESTOQUE_FISICO (IDFILIAL,IDCONTROLE,IDPRODUTO,
                                  DTMOVTO,HISTORICO,SITUACAO,QTDE, SALDO)
                          values (:IDFILIAL,0,:IDPRODUTO,current_date,'INICIO DE INVENTARIO','+',:ESTOQUE, :ESTOQUE);

       suspend;
    end
    delete from INVENTARIO  I
      where I.IDFILIAL = :IDFILIAL;
end^


ALTER PROCEDURE ATUALIZACAO_INVENTARIO_DEPOSITO (
    IDFILIAL INTEGER,
    SITUACAO CHAR(1) CHARACTER SET NONE,
    IDDEPOSITO INTEGER)
RETURNS (
    IDPRODUTO INTEGER,
    ESTOQUE NUMERIC(10,3),
    QTDEESTOQUE NUMERIC(10,3))
AS
declare variable QTDEATUAL numeric(10,3);
declare variable QTDE numeric(10,3);
declare variable OPERACAO varchar(1);
declare variable VIDDEPOSITO integer;
begin
  if (SITUACAO = 'N') then begin
    for select IT.IDPRODUTO, IT.QTDE_ATUAL, IT.IDDEPOSITO from ITENSDEPOSITO IT
      where IT.IDFILIAL = :IDFILIAL
       and  IT.IDDEPOSITO = :IDDEPOSITO
       into :IDPRODUTO, :QTDEESTOQUE, :VIDDEPOSITO
     do begin
       QTDE = QTDEESTOQUE;
       if (QTDEESTOQUE < 0) then begin
          QTDE = QTDEESTOQUE*-1;
          OPERACAO = '+';
       end
       else
          OPERACAO = '-';
     end
     update ITENSDEPOSITO IT
       set IT.QTDE_ATUAL = 0,
           IT.DTINVENTARIO = current_date
     where IT.IDFILIAL = :IDFILIAL
       and IT.IDDEPOSITO = :IDDEPOSITO;
  end


  for select I.IDPRODUTO, I.ESTOQUE, I.IDDEPOSITO from INVENTARIO_DEPOSITO I
     where I.IDFILIAL = :IDFILIAL
       and  I.IDDEPOSITO = :IDDEPOSITO
       into :IDPRODUTO, :ESTOQUE, :VIDDEPOSITO
  do
    begin
      select IT.QTDE_ATUAL from ITENSDEPOSITO IT
       where IT.IDFILIAL = :IDFILIAL
         and IT.IDPRODUTO = :IDPRODUTO
         and IT.IDDEPOSITO = :IDDEPOSITO
        into :QTDEATUAL;
        QTDE = QTDEATUAL;

      if (QTDEATUAL < 0)
      then begin
           QTDE = QTDEATUAL*-1;
           OPERACAO = '+';
           end
      else OPERACAO = '-';

      update ITENSDEPOSITO IT
         set IT.QTDE_ATUAL = :ESTOQUE,
             IT.DTINVENTARIO = current_date
       where IT.IDFILIAL = :IDFILIAL
         and IT.IDDEPOSITO = :IDDEPOSITO
         and IT.IDPRODUTO = :IDPRODUTO;
       suspend;
    end
    delete from INVENTARIO_DEPOSITO  I
      where I.IDFILIAL = :IDFILIAL
        and I.IDDEPOSITO = :IDDEPOSITO;
end^


ALTER PROCEDURE ATUALIZANDO_QTD_ERRADA_ENTRADA (
    IDFILIAL INTEGER,
    IDNOTA INTEGER)
AS
declare variable VQTD numeric(15,3);
declare variable VIDPRODUTO integer;
declare variable VQTDE_ATUAL_PRO numeric(10,3);
begin
   for select I.IDPRODUTO, I.QTD from C170_ITENS_NF I

   where I.IDFILIAL = :IDFILIAL
     and I.IDNOTA = :IDNOTA
     and I.NOTA_PROPRIA_TERCEIROS = 'T'
   into :VIDPRODUTO, :VQTD
   do
   begin
     select P.QTDEATUAL from PRODUTO P
       where P.IDFILIAL = :IDFILIAL
         and P.IDPRODUTO = :VIDPRODUTO
         into :VQTDE_ATUAL_PRO;

      if(:VQTDE_ATUAL_PRO = 0) then
      begin
        update PRODUTO P
          set P.QTDEATUAL = :VQTD
         where P.IDFILIAL = :IDFILIAL
           and P.IDPRODUTO = :VIDPRODUTO;
      end
   end
end^


ALTER PROCEDURE ATUALIZAR_CEST (
    IDFILIAL INTEGER,
    TIPO_MVA INTEGER)
RETURNS (
    CEST VARCHAR(7),
    MVA NUMERIC(15,4),
    NCM VARCHAR(15))
AS
declare variable MVA17 numeric(15,4);
declare variable MVA4 numeric(15,4);
declare variable MVA7 numeric(15,4);
declare variable MVA12 numeric(15,4);
begin
  for select distinct P.CEST, P.CLASSIFICACAO_FISCAL from PRODUTO P
    where P.IDFILIAL = :IDFILIAL
      and STRLEN(P.CEST) > 0
   into :CEST, :NCM
  do
  begin
     select T.MVA_17, T.MVA_4, T.MVA_7, T.MVA_12  from TAB_CEST T
       where T.CEST = :CEST
         and T.NCM = :NCM
       into :MVA17, :MVA4, :MVA7, :MVA12;

     if (:TIPO_MVA = 17) then MVA = :MVA17;
     if (:TIPO_MVA = 4)  then MVA = :MVA4;
     if (:TIPO_MVA = 7)  then MVA = :MVA7;
     if (:TIPO_MVA = 12) then MVA = :MVA12;

     update PRODUTO P
        set P.MVA = :MVA
      where P.IDFILIAL = :IDFILIAL
        and P.CLASSIFICACAO_FISCAL = :NCM;
     suspend;
  end 
end^


ALTER PROCEDURE ATUALIZAR_DADOS (
    IDFOLHA SMALLINT,
    SERIE SMALLINT)
AS
declare variable P_IDFILIAL smallint;
declare variable P_IDCLIENTE integer;
declare variable P_IDCLIENTE_TMP integer;
declare variable P_CLIENTE_NOVO varchar(1);
declare variable P_IDCIDADE integer;
declare variable P_IDCIDADE_TMP integer;
declare variable P_CIDADE_NOVA varchar(1);
begin
  for select C.IDFILIAL, C.IDCLIENTE, C.IDCLIENTE_TMP,C.CLIENTE_NOVO from CLIENTE C
  where C.CLIENTE_NOVO = 'I'
  into :P_IDFILIAL, :P_IDCLIENTE, :P_IDCLIENTE_TMP, :P_CLIENTE_NOVO
  do begin
     -- PEDIDO
     update PEDIDO P
     set P.IDCLIENTE = :P_IDCLIENTE
     where P.IDFILIAL = :P_IDFILIAL
     and   P.idcliente = :P_IDCLIENTE_TMP
     and   P.IDFOLHA = :IDFOLHA;

     --NOTA
     update NOTA P
     set P.IDCLIENTE = :P_IDCLIENTE
     where P.IDFILIAL = :P_IDFILIAL
     and   P.idcliente = :P_IDCLIENTE_TMP
     and   P.SERIE = SERIE;


/*     -- CONDICAO_CLIENTE
     update CONDPGTCLIENTE P
     set P.IDCLIENTE = :P_IDCLIENTE
     where P.IDFILIAL = :P_IDFILIAL
     and   P.idcliente = :P_IDCLIENTE_TMP
     and   P.COND_NOVO = 'I';

     --FORMAPAGTO_CLIENTE
     update PAGTOCLIENTE P
     set P.IDCLIENTE = :P_IDCLIENTE
     where P.IDFILIAL = :P_IDFILIAL
     and   P.idcliente = :P_IDCLIENTE_TMP
     and   P.PAGTO_NOVO = 'I';


     --REPRESENTANTE_CLIENTE
     update REPCLIENTE P
     set P.IDCLIENTE = :P_IDCLIENTE
     where P.IDFILIAL = :P_IDFILIAL
     and   P.idcliente = :P_IDCLIENTE_TMP
     and   P.REP_NOVO = 'I'; */


     -- RECEBER
     update RECEBER P
     set P.IDCLIENTE = :P_IDCLIENTE
     where P.IDFILIAL = :P_IDFILIAL
     and   P.idcliente = :P_IDCLIENTE_TMP
     and   P.IDFOLHA = :IDFOLHA;

     -- C100_NF
     update C100_NF P
     set P.IDCLIENTE = :P_IDCLIENTE
     where P.IDFILIAL = :P_IDFILIAL
     and   P.idcliente = :P_IDCLIENTE_TMP
     and   P.SER =  cast(:SERIE as varchar(3));

  end
  for select CI.IDCIDADE, CI.IDCIDADE_TMP, CI.CIDADE_NOVA from CIDADE CI

  where CI.CIDADE_NOVA = 'I'

  into :P_IDCIDADE, :P_IDCIDADE_TMP, :P_CIDADE_NOVA
  do
  begin
    update CLIENTE CL
      set CL.IDCIDADE = :P_IDCIDADE
     where CL.IDCIDADE = :P_IDCIDADE_TMP
       and CL.CLIENTE_NOVO = 'I';
  end

/*  update CIDADE C
   set C.CIDADE_NOVA = NULL,
       C.IDCIDADE_TMP = null; */

  update CIDADE C
   set C.CIDADE_NOVA = 'A',
       C.IDCIDADE_TMP = null
  where C.CIDADE_NOVA = 'I';


/*  update CLIENTE C
   set C.CLIENTE_NOVO = NULL,
       C.IDCLIENTE_TMP = null; */

  update CLIENTE C
   set C.CLIENTE_NOVO = 'A',
       C.IDCLIENTE_TMP = null
  where C.CLIENTE_NOVO = 'I';


  update CONDPGTCLIENTE C
   set C.COND_NOVO = NULL;


  update PAGTOCLIENTE C
   set C.PAGTO_NOVO = NULL;


  update REPCLIENTE C
   set C.REP_NOVO = NULL;

end^


ALTER PROCEDURE ATULIZA_HISTORICO_PRODUTO (
    IDFILIAL INTEGER,
    IDPRODUTO INTEGER,
    QTDEINVENTARIO NUMERIC(10,3),
    QTDECOMPRA NUMERIC(10,3),
    CUSTONOTA NUMERIC(16,2),
    PRECOVENDA NUMERIC(16,2),
    ESTOQUE NUMERIC(10,3))
AS
begin
  if (not :ESTOQUE is null) then begin
     update PRODUTO P
        set P.DTESTOQUE5 = P.DTESTOQUE4,
            P.DTESTOQUE4 = P.DTESTOQUE3,
            P.DTESTOQUE3 = P.DTESTOQUE2,
            P.DTESTOQUE2 = P.DTESTOQUE1,
            P.DTESTOQUE1 = current_date,
            P.ESTOQUE5 = P.ESTOQUE4,
            P.ESTOQUE4 = P.ESTOQUE3,
            P.ESTOQUE3 = P.ESTOQUE2,
            P.ESTOQUE2 = P.ESTOQUE1,
            P.ESTOQUE1 = :ESTOQUE
      where P.IDFILIAL = :IDFILIAL
        and P.IDPRODUTO = :IDPRODUTO;
  end

  if (not :QTDEINVENTARIO is null) then begin
      update PRODUTO P
         set P.DTINVENTARIO5 = P.DTINVENTARIO4,
             P.DTINVENTARIO4 = P.DTINVENTARIO3,
             P.DTINVENTARIO3 = P.DTINVENTARIO2,
             P.DTINVENTARIO2 = P.DTINVENTARIO1,
             P.DTINVENTARIO1 = current_date,
             P.QTDEINVENTARIO5 = P.QTDEINVENTARIO4,
             P.QTDEINVENTARIO4 = P.QTDEINVENTARIO3,
             P.QTDEINVENTARIO3 = P.QTDEINVENTARIO2,
             P.QTDEINVENTARIO2 = P.QTDEINVENTARIO1,
             P.QTDEINVENTARIO1 = :QTDEINVENTARIO
       where P.IDFILIAL = :IDFILIAL
         and P.IDPRODUTO = :IDPRODUTO;
  end

  if (not :QTDECOMPRA is null) then begin
      update PRODUTO P
         set P.DTCOMPRA5 = P.DTCOMPRA4,
             P.DTCOMPRA4 = P.DTCOMPRA3,
             P.DTCOMPRA3 = P.DTCOMPRA2,
             P.DTCOMPRA2 = P.DTCOMPRA1,
             P.DTCOMPRA1 = current_date,
             P.QTDECOMPRA5 = P.QTDECOMPRA4,
             P.QTDECOMPRA4 = P.QTDECOMPRA3,
             P.QTDECOMPRA3 = P.QTDECOMPRA2,
             P.QTDECOMPRA2 = P.QTDECOMPRA1,
             P.QTDECOMPRA1 = :QTDECOMPRA
       where P.IDFILIAL = :IDFILIAL
         and P.IDPRODUTO = :IDPRODUTO;
  end

  if (not :CUSTONOTA is null) then begin
      update PRODUTO P
         set P.CUSTONOTA5 = P.CUSTONOTA4,
             P.CUSTONOTA4 = P.CUSTONOTA3,
             P.CUSTONOTA3 = P.CUSTONOTA2,
             P.CUSTONOTA2 = P.CUSTONOTA1,
             P.CUSTONOTA1 = :CUSTONOTA
       where P.IDFILIAL = :IDFILIAL
         and P.IDPRODUTO = :IDPRODUTO;
  end

  if (not :PRECOVENDA is null) then begin
      update PRODUTO P
         set P.PRECOVENDA5 = P.PRECOVENDA4,
             P.PRECOVENDA4 = P.PRECOVENDA3,
             P.PRECOVENDA3 = P.PRECOVENDA2,
             P.PRECOVENDA2 = P.PRECOVENDA1,
             P.PRECOVENDA1 = :PRECOVENDA
       where P.IDFILIAL = :IDFILIAL
         and P.IDPRODUTO = :IDPRODUTO;
  end
end^


ALTER PROCEDURE BLOQUEAR_SISTEMA (
    SISTEMA_BLOQUEADO VARCHAR(1))
AS
begin
  if (:SISTEMA_BLOQUEADO = 'S') then
  begin
      UPDATE FILIAL F
         SET F.SISTEMA_BLOQUEADO = 'S';
  end
  else begin
      UPDATE FILIAL F
         SET F.SISTEMA_BLOQUEADO = null;
  end
end^


ALTER PROCEDURE CALCULA_MVA_COMPRA (
    IDFILIAL INTEGER,
    IDPRODUTO INTEGER,
    C_PRECOCUSTO NUMERIC(15,2))
RETURNS (
    VALOR_BASE DOUBLE PRECISION,
    VALORICMSCALCULO NUMERIC(15,2),
    TAXATRIBUTO NUMERIC(15,2),
    CLFISCAL VARCHAR(3),
    INSENTIVO NUMERIC(15,4),
    TOTAL_BASE NUMERIC(15,2),
    TOTAL_ICMS NUMERIC(15,2),
    VALORBASE_ST NUMERIC(15,2),
    MARGEM NUMERIC(15,2),
    ALIQUOTA_ST NUMERIC(15,2),
    VALORICMS_ST NUMERIC(15,2),
    VALORICMS NUMERIC(15,2),
    PRECOVENDA_COM_IMPOSTO NUMERIC(15,2))
AS
begin

  TOTAL_BASE = 0;
  TOTAL_ICMS = 0;

  for select P.IDPRODUTO,
             P.C_TAXA_ICMS,
             P.C_CLFISCAL,
             P.C_ISENTIVO,
             P.C_MARGEM_AGREGADA,
             P.C_ALIQUOTA_ST              from PRODUTO P

    where P.IDFILIAL = :IDFILIAL
      and P.IDPRODUTO = :IDPRODUTO

    group by P.IDPRODUTO,
             P.C_TAXA_ICMS,
             P.C_CLFISCAL,
             P.C_ISENTIVO,
             P.C_MARGEM_AGREGADA,
             P.C_ALIQUOTA_ST
    into :IDPRODUTO, :TAXATRIBUTO, :CLFISCAL, :INSENTIVO, :MARGEM, :ALIQUOTA_ST
  do
    begin

     if (:C_PRECOCUSTO > 0) then   -- SE FOR <> ZERO ELE JOGA O VALOR NA BASE
     begin
        VALOR_BASE = :C_PRECOCUSTO;
     end


      VALORBASE_ST = 0;
      VALORICMS_ST = 0;
      VALORICMSCALCULO = 0;
      VALORICMS = 0;

      VALORICMSCALCULO = (:VALOR_BASE*:TAXATRIBUTO)/100;

      if (:TAXATRIBUTO = 0) then
      begin
        VALOR_BASE = 0;
      end

      -- CALCULA O VALOR DO ICMS E VALOR DO BASE
      if (:INSENTIVO > 0) then
      begin
          TOTAL_BASE = TOTAL_BASE+(:VALOR_BASE-(:VALOR_BASE*:INSENTIVO/100));
          TOTAL_ICMS = TOTAL_ICMS+(:VALORICMSCALCULO-(:VALORICMSCALCULO*:INSENTIVO/100));
          VALORICMS  = (:VALORICMSCALCULO-(:VALORICMSCALCULO*:INSENTIVO/100));
      end
      else begin
          TOTAL_BASE = TOTAL_BASE+(:VALOR_BASE);
          TOTAL_ICMS = TOTAL_ICMS+(:VALORICMSCALCULO);
          VALORICMS  = :VALORICMSCALCULO;
      end


      -- CALCULA OS QUE TEM ST
      if ((:CLFISCAL = '010') or (:CLFISCAL = '203') or (:CLFISCAL = '201') or (:CLFISCAL = '202') or (:CLFISCAL = '060'))  then
      begin
         VALORBASE_ST = :VALOR_BASE;
         VALORBASE_ST = VALORBASE_ST+((VALORBASE_ST*:MARGEM)/100);
         VALORICMS_ST = ((VALORBASE_ST*:ALIQUOTA_ST)/100)-:VALORICMS;
         if (:CLFISCAL = '060') then
         begin
             TOTAL_BASE = 0;
             TOTAL_ICMS = 0;
             VALORICMS = 0;
         end
      end


      if (:CLFISCAL = '070') then
      begin
         VALORBASE_ST = :VALOR_BASE;

         VALORBASE_ST = VALORBASE_ST+((VALORBASE_ST*:MARGEM)/100);
         VALORICMS_ST = ((VALORBASE_ST*:ALIQUOTA_ST)/100);

         if (:INSENTIVO > 0) then
         begin
            VALORBASE_ST = :VALORBASE_ST-(VALORBASE_ST*:INSENTIVO/100);
            VALORICMS_ST = :VALORICMS_ST-(VALORICMS_ST*:INSENTIVO/100);
         end
         VALORICMS_ST = :VALORICMS_ST-VALORICMS;

      end

      if (:VALORICMS_ST is null) then VALORICMS_ST = 0;
      if (VALORBASE_ST is null) then VALORBASE_ST = 0;

      PRECOVENDA_COM_IMPOSTO = :VALOR_BASE+VALORICMS_ST;
      suspend;
    end
end^


ALTER PROCEDURE CALCULA_TOTAIS_DE_PRODUTO (
    IDFILIAL INTEGER,
    IDPRODUTO INTEGER,
    IDTRIBUTO INTEGER,
    QTDE NUMERIC(10,3),
    PRECO_VENDA NUMERIC(15,2),
    IDCFOP INTEGER,
    UF VARCHAR(2),
    IDCLIENTE INTEGER = 0)
RETURNS (
    VALOR_BASE DOUBLE PRECISION,
    VALORICMSCALCULO NUMERIC(15,2),
    TAXATRIBUTO NUMERIC(15,2),
    CLFISCAL VARCHAR(3),
    INSENTIVO NUMERIC(15,4),
    TOTAL_BASE NUMERIC(15,2),
    TOTAL_ICMS NUMERIC(15,2),
    VALORBASE_ST NUMERIC(15,2),
    MARGEM NUMERIC(15,2),
    ALIQUOTA_ST NUMERIC(15,2),
    VALORICMS_ST NUMERIC(15,2),
    VALORICMS NUMERIC(15,2),
    PRECOVENDA_COM_IMPOSTO NUMERIC(15,2),
    CFOP_PRINCIPAL VARCHAR(1),
    CL_FISCAL_CFOP VARCHAR(3),
    INSENTIVO_CFOP NUMERIC(15,4),
    MARGEM_CFOP NUMERIC(15,2),
    TAXATRIBUTO_CFOP NUMERIC(15,2),
    ALIQUOTAST_CFOP NUMERIC(15,2),
    TAXA_ICMS_ESTADO NUMERIC(15,2),
    ALIQUOTA_ST_ESTADO NUMERIC(15,2),
    ISENTIVO_ESTADO NUMERIC(15,4))
AS
declare variable VCLFISCAL_ESTADO varchar(3);
declare variable VMARGEM_AGREGADA_ESTADO numeric(15,2);
declare variable VMARGEM_PRODUTO numeric(15,4);
declare variable VTIPOEMPRESA varchar(20);
declare variable VTIPOCLIENTE varchar(1);
declare variable VIE varchar(20);
declare variable VNOVO_TRIBUTO integer;
declare variable VNAO_PASSAR_CFOP_PRINCIPAL varchar(3);
begin
   VNAO_PASSAR_CFOP_PRINCIPAL = 'NAO';

   select F.TIPOEMPRESA from FILIAL F
    where F.IDFILIAL = :IDFILIAL
   into :VTIPOEMPRESA;

   if (:IDCLIENTE > 0) then
   begin
       if (:VTIPOEMPRESA = 'ARTPAN') then
       begin

          select CL.TIPOCLIENTE, CL.INSESTADUAL from CLIENTE CL
           where CL.IDCLIENTE = :IDCLIENTE
          into :VTIPOCLIENTE, :VIE;

          -- VERIFICA SE A TABELA CFOP TRIBUTO TA PREENCHIDA
          if (exists(select first 1 C.IDCFOP from CFOP_TRIBUTO C
                        where C.IDFILIAL = :IDFILIAL
                         and C.IDCFOP   = :IDCFOP
                         and C.IDTRIBUTO_ORIGEM = :IDTRIBUTO)) then
           begin
        
             if (:VTIPOCLIENTE = 'J') then
             begin
--                 if (:VIE <> '') then
--                 begin
                     if (:VIE <> 'ISENTO') then
                     begin
        
                         select first 1 C.IDTRIBUTO_DESTINO from CFOP_TRIBUTO C
                           where C.IDFILIAL = :IDFILIAL
                             and C.IDCFOP   = :IDCFOP
                             and C.IDTRIBUTO_ORIGEM = :IDTRIBUTO
                           into :VNOVO_TRIBUTO;
        
                         IDTRIBUTO = :VNOVO_TRIBUTO;

                     end
--                 end
              end
           end
       end
   end




   if (:VTIPOEMPRESA = 'BREAD') then
   begin

      select CL.TIPOCLIENTE, CL.INSESTADUAL from CLIENTE CL
       where CL.IDCLIENTE = :IDCLIENTE
      into :VTIPOCLIENTE, :VIE;

      -- VERIFICA SE A TABELA CFOP TRIBUTO TA PREENCHIDA
      if (exists(select first 1 C.IDCFOP from CFOP_TRIBUTO C
                    where C.IDFILIAL = :IDFILIAL
                     and C.IDCFOP   = :IDCFOP
                     and C.IDTRIBUTO_ORIGEM = :IDTRIBUTO)) then
       begin
    

                     select first 1 C.IDTRIBUTO_DESTINO from CFOP_TRIBUTO C
                       where C.IDFILIAL = :IDFILIAL
                         and C.IDCFOP   = :IDCFOP
                         and C.IDTRIBUTO_ORIGEM = :IDTRIBUTO
                       into :VNOVO_TRIBUTO;
    
                     IDTRIBUTO = :VNOVO_TRIBUTO;
                     VNAO_PASSAR_CFOP_PRINCIPAL = 'SIM';

        end
   end


  if (QTDE is null) then QTDE = 1;

  TOTAL_BASE = 0;
  TOTAL_ICMS = 0;

  for select P.IDPRODUTO,
             sum(P.PRECOVENDA*:QTDE),
             T.TAXAICMS,
             T.CLFISCAL,
             T.INSENTIVOFISCAL,
             T.MARGEM_AGREGADO,
             T.ALIQUOTA_ST,
             P.MVA              from PRODUTO P


     left join TRIBUTO T
       on T.IDFILIAL  = P.IDFILIAL
      and T.IDTRIBUTO = :IDTRIBUTO


    where P.IDFILIAL = :IDFILIAL
      and P.IDPRODUTO = :IDPRODUTO

    group by P.IDPRODUTO,
             T.TAXAICMS,
             T.CLFISCAL,
             T.INSENTIVOFISCAL,
             T.MARGEM_AGREGADO,
             T.ALIQUOTA_ST,
             P.MVA
    into :IDPRODUTO, :VALOR_BASE, :TAXATRIBUTO, :CLFISCAL, :INSENTIVO, :MARGEM, :ALIQUOTA_ST, :VMARGEM_PRODUTO
  do
    begin

     if (:PRECO_VENDA > 0) then   -- SE FOR <> ZERO ELE JOGA O VALOR NA BASE
     begin
        VALOR_BASE = :PRECO_VENDA*:QTDE;
     end

     -- SE CFOP FOR SIM
     if (:VNAO_PASSAR_CFOP_PRINCIPAL = 'NAO') then
     begin
         if (exists(select first 1 C.IDFILIAL from CFOP C
                    where C.IDFILIAL = :IDFILIAL
                      and C.IDCFOP = :IDCFOP
                      and C.CFOP_PRINCIPAL = 'S')) then
         begin
             select C.CFOP_PRINCIPAL, C.CLFISCAL, T1.TAXAICMS, T1.INSENTIVOFISCAL, T1.MARGEM_AGREGADO, T1.ALIQUOTA_ST  from CFOP C
    
                 left join TRIBUTO T1
                    on T1.IDFILIAL = :IDFILIAL
                   and T1.IDTRIBUTO = C.IDTRIBUTO
    
                where C.IDFILIAL = :IDFILIAL
                  and C.IDCFOP = :IDCFOP
                  and C.CFOP_PRINCIPAL = 'S'
                into :CFOP_PRINCIPAL, :CL_FISCAL_CFOP, :TAXATRIBUTO_CFOP, :INSENTIVO_CFOP, :MARGEM_CFOP, :ALIQUOTAST_CFOP ;
    
    
            if (:CL_FISCAL_CFOP <> '') then
               CLFISCAL = :CL_FISCAL_CFOP;
    
               TAXATRIBUTO = :TAXATRIBUTO_CFOP;
               INSENTIVO = :INSENTIVO_CFOP;
               if (:MARGEM_CFOP > 0) then
                   MARGEM = :MARGEM_CFOP;
               ALIQUOTA_ST = :ALIQUOTAST_CFOP;
         end

     end 

     if (:VMARGEM_PRODUTO > 0) then
        MARGEM = :VMARGEM_PRODUTO;

     if (exists(select first 1 TE.CLFISCAL from TRIBUTO_ESTADO TE
                where TE.IDFILIAL = :IDFILIAL
                  and TE.IDPRODUTO = :IDPRODUTO
                 and TE.UF = :UF)) then
     begin
        select  TE.CLFISCAL, TE.MARGEM_AGREGADA, TE.TAXA_ICMS, TE.ALIQUOTA_ST, TE.ISENTIVO from TRIBUTO_ESTADO TE
                 where TE.IDFILIAL = :IDFILIAL
                   and TE.IDPRODUTO = :IDPRODUTO
                   and TE.UF = :UF
         into :VCLFISCAL_ESTADO, :VMARGEM_AGREGADA_ESTADO, :TAXA_ICMS_ESTADO, :ALIQUOTA_ST_ESTADO, :ISENTIVO_ESTADO;

        if (:VCLFISCAL_ESTADO <> '') then
           CLFISCAL = :VCLFISCAL_ESTADO;

        MARGEM = :VMARGEM_AGREGADA_ESTADO;
        TAXATRIBUTO = :TAXA_ICMS_ESTADO;
        ALIQUOTA_ST = :ALIQUOTA_ST_ESTADO;
        INSENTIVO = :ISENTIVO_ESTADO;
     end



      VALORBASE_ST = 0;
      VALORICMS_ST = 0;
      VALORICMSCALCULO = 0;
      VALORICMS = 0;

      VALORICMSCALCULO = (:VALOR_BASE*:TAXATRIBUTO)/100;

      if (:TAXATRIBUTO = 0) then
      begin
        VALOR_BASE = 0;
      end

      -- CALCULA O VALOR DO ICMS E VALOR DO BASE
      if (:INSENTIVO > 0) then
      begin
          TOTAL_BASE = TOTAL_BASE+(:VALOR_BASE-(:VALOR_BASE*:INSENTIVO/100));
          TOTAL_ICMS = TOTAL_ICMS+(:VALORICMSCALCULO-(:VALORICMSCALCULO*:INSENTIVO/100));
          VALORICMS  = (:VALORICMSCALCULO-(:VALORICMSCALCULO*:INSENTIVO/100));
      end
      else begin
          TOTAL_BASE = TOTAL_BASE+(:VALOR_BASE);
          TOTAL_ICMS = TOTAL_ICMS+(:VALORICMSCALCULO);
          VALORICMS  = :VALORICMSCALCULO;
      end


      -- CALCULA OS QUE TEM ST
      if ((:CLFISCAL = '010') or (:CLFISCAL = '203') or (:CLFISCAL = '201') or (:CLFISCAL = '202') or (:CLFISCAL = '060'))  then
      begin
         VALORBASE_ST = :VALOR_BASE;
         VALORBASE_ST = VALORBASE_ST+((VALORBASE_ST*:MARGEM)/100);
         VALORICMS_ST = ((VALORBASE_ST*:ALIQUOTA_ST)/100)-:VALORICMS;
         if (:CLFISCAL = '060') then
         begin
             TOTAL_BASE = 0;
             TOTAL_ICMS = 0;
             VALORICMS = 0;

             VALORBASE_ST = 0;
             VALORICMS_ST = 0;
         end
      end


      if (:CLFISCAL = '070') then
      begin
         VALORBASE_ST = :VALOR_BASE;

         VALORBASE_ST = VALORBASE_ST+((VALORBASE_ST*:MARGEM)/100);
         VALORICMS_ST = ((VALORBASE_ST*:ALIQUOTA_ST)/100);

         if (:INSENTIVO > 0) then
         begin
            VALORBASE_ST = :VALORBASE_ST-(VALORBASE_ST*:INSENTIVO/100);
            VALORICMS_ST = :VALORICMS_ST-(VALORICMS_ST*:INSENTIVO/100);
         end
         VALORICMS_ST = :VALORICMS_ST-VALORICMS;

      end

      if (VALORBASE_ST is null) then VALORBASE_ST = 0;
      PRECOVENDA_COM_IMPOSTO = :VALOR_BASE+VALORICMS_ST;
      suspend;
    end
end^


ALTER PROCEDURE CALCULA_TOTAL_C100 (
    IDFILIAL INTEGER,
    IDNOTA INTEGER,
    IDFORNECEDOR INTEGER)
RETURNS (
    VVL_TOTAL_ITEM NUMERIC(15,4),
    VCPF_CNPJ VARCHAR(18),
    VVL_IPI NUMERIC(15,4),
    VVL_DESC NUMERIC(15,2),
    VVL_BC_ICMS NUMERIC(15,2),
    VVL_BC_ICMS_ST NUMERIC(15,2),
    VVL_ICMS NUMERIC(15,2),
    VVL_ICMS_ST NUMERIC(15,2))
AS
begin
    select C.CPF_CNPJ from C100_NF C
       where C.IDFILIAL = :IDFILIAL
         and C.IDNOTA   = :IDNOTA
         and C.IDFORNECEDOR = :IDFORNECEDOR
         and C.CADASTRADO_PELA_ENTRADA = 'S'
    into :VCPF_CNPJ;

    select sum(IT.VL_ITEM*IT.QTD), sum(IT.VL_IPI), sum(IT.VL_DESC),
           sum(IT.VL_BC_ICMS), sum(IT.VL_BC_ICMS_ST),
           sum(IT.VL_ICMS), sum(IT.VL_ICMS_ST) from C170_ITENS_NF IT
      where IT.IDFILIAL = :IDFILIAL
        and IT.IDNOTA   = :IDNOTA
        and IT.CPF_CNPJ = :VCPF_CNPJ
     into :VVL_TOTAL_ITEM, :VVL_IPI, :VVL_DESC,
          :VVL_BC_ICMS, :VVL_BC_ICMS_ST,
          :VVL_ICMS, :VVL_ICMS_ST;

     update C100_NF C1
         set C1.VL_MERC = :VVL_TOTAL_ITEM,
             C1.VL_BC_ICMS = :VVL_BC_ICMS,
             C1.VL_BC_ICMS_ST = :VVL_BC_ICMS_ST,
             C1.VL_ICMS = :VVL_ICMS,
             C1.VL_ICMS_ST = :VVL_ICMS_ST,
             C1.VL_DOC  = (:VVL_TOTAL_ITEM+
                          coalesce(C1.VL_FRT,0)+
                          coalesce(C1.VL_SEG,0)+
                          coalesce(C1.VL_OUT_DA,0)+
                          coalesce(:VVL_ICMS_ST,0)+
                          coalesce(:VVL_IPI,0))-

                          coalesce(:VVL_DESC,0)
       where C1.IDFILIAL = :IDFILIAL
         and C1.IDNOTA   = :IDNOTA
         and C1.IDFORNECEDOR = :IDFORNECEDOR
         and C1.CADASTRADO_PELA_ENTRADA = 'S';
end^


ALTER PROCEDURE CLIENTE_ATRASO (
    IDFILIAL INTEGER,
    IDCLIENTE INTEGER)
RETURNS (
    ATRASO INTEGER)
AS
declare variable VVERIFICAR_CLI_ATRASO varchar(1);
declare variable VDIAS_EM_ATRASO_MOB smallint;
begin

    select coalesce(C.VERIFICAR_CLI_ATRASO_MOB,'N'), C.DIAS_EM_ATRASO_MOB from CONFIGURACAO C
       where C.IDFILIAL = :IDFILIAL
       into :VVERIFICAR_CLI_ATRASO, :VDIAS_EM_ATRASO_MOB;



    if (VVERIFICAR_CLI_ATRASO = 'S') then
    begin
        select cast(count(*) as varchar(10)) from RECEBER R
        

    
        where R.IDFILIAL = :IDFILIAL
          and R.IDCLIENTE = :IDCLIENTE
          and R.DATAPAGAMENTO is null
          and current_date-R.DATAVENCIMENTO >= :VDIAS_EM_ATRASO_MOB
    
          into :ATRASO;
    end
    else
    begin
      ATRASO = 0;
    end

  suspend;
end^


ALTER PROCEDURE DESCONTO_NOTA (
    IDFILIAL INTEGER,
    IDNOTA INTEGER,
    TIPONOTA VARCHAR(8))
RETURNS (
    TOTALPRECOVENDA NUMERIC(16,2),
    TOTALDESCONTO NUMERIC(16,2))
AS
declare variable VDESCONTO varchar(1);
begin
  select F.ENVIAR_DESCONTO_NFE from FILIAL F
    where F.IDFILIAL = :IDFILIAL
   into :VDESCONTO;

  if (:VDESCONTO = 'S') then Exit;

  select cast( sum(IT.PRECOVENDA*IT.QTDEPEDIDO) as numeric(16,2) ) from ITENSNOTA IT
    where IT.IDFILIAL = :IDFILIAL
      and IT.IDNOTA = :IDNOTA
      and IT.TIPONOTA = :TIPONOTA
   into :TOTALPRECOVENDA;

   update NOTA N
      set N.TOTALPRODUTO = :TOTALPRECOVENDA,
--          N.TOTALDESCONTO= :TOTALDESCONTO,
          N.TOTALPEDIDO = (:TOTALPRECOVENDA-N.totaldesconto)+coalesce(n.VALOR_ICMS_ST,0)+coalesce(n.OUTRAS_DESPESA_ACESSORIO,0)
    where N.IDFILIAL = :IDFILIAL
      and N.IDNOTA = :IDNOTA
      and N.TIPONOTA = :TIPONOTA;
end^


ALTER PROCEDURE ENTRADA_TO_SPED (
    IDFILIAL INTEGER,
    DTINI DATE,
    DTFIM DATE)
AS
declare variable VIDNOTA integer;
declare variable VIDFORNECEDOR integer;
declare variable VCOD_MOD varchar(2);
declare variable VTIPONOTA varchar(1);
declare variable VDATANOTAFISCAL date;
declare variable VDATAENTRADA date;
declare variable VTOTALLIQUIDO numeric(16,2);
declare variable VTOTALDESCONTO numeric(16,2);
declare variable VTOTALPRODUTO numeric(16,2);
declare variable VTOTALFRETE numeric(16,2);
declare variable VTOTALOUTROS numeric(16,2);
declare variable VTOTALVARIAVEL numeric(16,2);
declare variable VCPF varchar(14);
declare variable VCNPJ varchar(19);
declare variable VCPF_CNPJ varchar(19);
declare variable VCONTADOR integer;
declare variable VIDPRODUTO integer;
declare variable VQTDE numeric(10,3);
declare variable VFATOCONVERSAO integer;
declare variable VCUSTOPRODUTO numeric(16,4);
declare variable VCFOP varchar(5);
declare variable VUNI varchar(6);
declare variable VIDUNIDADEMEDIDA smallint;
declare variable VITENS_VALORICMS numeric(14,2);
declare variable VITENS_VALORBASE numeric(14,2);
declare variable VITENS_TAXAICMS numeric(14,2);
declare variable VCLFISCAL_ITENS varchar(3);
declare variable VICMS numeric(16,2);
declare variable VBASEICMS numeric(16,2);
declare variable VVALORIPI numeric(16,2);
begin
    for select E.IDNOTA, E.IDFORNECEDOR, E.TIPO_NOTA,
           E.DATAENTRADA, E.DATANOTAFISCAL, E.TOTALLIQUIDO,E.TOTALDESCONTO,
           E.TOTALPRODUTO, E.TOTALFRETE, E.TOTALOUTROS, E.TOTALDESPESA_VARIAVEL,
           F.CPF,F.CNPJ, C.CFOP, E.TOTALIPI   from ENTRADA E

       join FORNECEDOR F
         on F.IDFORNECEDOR = E.IDFORNECEDOR

       join CFOP C
         on C.IDCFOP   = E.IDCFOP
        and C.IDFILIAL = E.IDFILIAL

    where E.IDFILIAL = :IDFILIAL
      and E.DATANOTAFISCAL between :DTINI and :DTFIM
      and E.TIPO_ENTRADA = 'N'
     into :VIDNOTA, :VIDFORNECEDOR, :VTIPONOTA,
          :VDATAENTRADA, :VDATANOTAFISCAL,:VTOTALLIQUIDO,:VTOTALDESCONTO,
          :VTOTALPRODUTO, :VTOTALFRETE, :VTOTALOUTROS, :VTOTALVARIAVEL,
          :VCPF, :VCNPJ, :VCFOP, :VVALORIPI
    do
    begin
      VVALORIPI = coalesce(:VVALORIPI,0);
      vCONTADOR = 0;
      if (CLR_DIG(:VCNPJ) <> '') then
         VCPF_CNPJ = :VCNPJ;
      else
         VCPF_CNPJ = :VCPF;

      VCPF_CNPJ = CLR_DIG(:VCPF_CNPJ);
      -- MODELO DE NOTA FISCAL
      if (:VTIPONOTA = 'I') then
         VCOD_MOD = 'A1';
      else
         VCOD_MOD = '55';

      VTOTALVARIAVEL = coalesce(:VTOTALVARIAVEL,0);
      VTOTALOUTROS   = coalesce(:VTOTALOUTROS,0);
      VTOTALFRETE    = coalesce(:VTOTALFRETE,0);
      VTOTALLIQUIDO  = :VTOTALPRODUTO;
      if (not (exists(select first 1 C1.IDFILIAL from C100_NF C1
                   where C1.IDFILIAL = :IDFILIAL
                     and C1.IDNOTA   = :VIDNOTA
                     and C1.IDFORNECEDOR = :VIDFORNECEDOR
                     and C1.NOTA_PROPRIA_TERCEIROS = 'T'))) then
      begin
          INSERT INTO C100_NF (IDFILIAL, NOTA_PROPRIA_TERCEIROS, IDNOTA, IND_OPER,
                               IND_EMIT, IDCLIENTE, COD_MOD, SER, NUM_DOC, CHAVE_NFE,
                               DT_DOC, DT_E_S, VL_DOC, VL_DESC, VL_ABAT_NT, VL_MERC,
                               IND_FRT, VL_FRT, VL_SEG, VL_OUT_DA, VL_BC_ICMS,
                               VL_ICMS, VL_BC_ICMS_ST, VL_ICMS_ST, VL_IPI, VL_PIS,
                               VL_CONFINS, VL_PIS_ST, VL_COFINS_ST, IND_PGTO,
                               DESCRICAO_COMPLEMENTAR, CRT, SITUACAONOTA, INUTILIZADA,
                               CPF_CNPJ, IDPARTICIPANTE, ATUALIZACAO, IDFORNECEDOR)
                       VALUES (:IDFILIAL,'T',:VIDNOTA,'0','0',null,:VCOD_MOD,'1',
                               :VIDNOTA,'',:VDATAENTRADA,:VDATANOTAFISCAL,:VTOTALLIQUIDO,0,
                               0,:VTOTALPRODUTO,'1',:VTOTALFRETE,0,(:VTOTALVARIAVEL+:VTOTALOUTROS),0,0,0,
                               0,0,0,0,0,0,0,'',3,null,null,:VCPF_CNPJ,null,null,:VIDFORNECEDOR);
      end
      -- SE EXISTIR
      else begin

         update C100_NF
           set IND_OPER = '0',
               IND_EMIT = '0',
               IDCLIENTE = null,
               COD_MOD = :VCOD_MOD,
               SER = '1',
               NUM_DOC = :VIDNOTA,
               CHAVE_NFE = '',
               DT_DOC = :VDATAENTRADA,
               DT_E_S = :VDATANOTAFISCAL,
               VL_DOC = :VTOTALLIQUIDO,
               VL_DESC = 0,--:VTOTALDESCONTO,
               VL_ABAT_NT = 0,
               VL_MERC = :VTOTALPRODUTO,
               IND_FRT = '1',
               VL_FRT = :VTOTALFRETE,
               VL_SEG = 0,
               VL_OUT_DA = (:VTOTALVARIAVEL+:VTOTALOUTROS),
               VL_BC_ICMS = 0,
               VL_ICMS = 0,
               VL_BC_ICMS_ST = 0,
               VL_ICMS_ST = 0,
               VL_IPI = 0,
               VL_PIS = 0,
               VL_CONFINS = 0,
               VL_PIS_ST = 0,
               VL_COFINS_ST = 0,
               IND_PGTO = 0,
               DESCRICAO_COMPLEMENTAR = '',
               CRT = 3,
               SITUACAONOTA = null,
               INUTILIZADA = null,
               CPF_CNPJ = :VCPF_CNPJ,
               IDPARTICIPANTE = null,
               ATUALIZACAO = null,
               IDFORNECEDOR = :vIDFORNECEDOR
             where IDFILIAL = :IDFILIAL
               and IDNOTA   = :VIDNOTA
               and IDFORNECEDOR = :VIDFORNECEDOR
               and NOTA_PROPRIA_TERCEIROS = 'T';

      end


      for select IT.QTDECOMPRA, IT.FATORCONVERSAO,
                 IT.CUSTOPRODUTO,  IT.IDPRODUTO, U.ABREVIATURA, IT.IDUNIDADEMEDIDA,
                 IT.VALOR_ICMS, IT.VALOR_BASE, IT.TAXAICMS, IT.CLFISCAL from ITENSENTRADA IT

           left join UNIDADEMEDIDA U
              on U.IDUNIDADEMEDIDA = IT.IDUNIDADEMEDIDA
             and U.IDFILIAL        = IT.IDFILIAL

--           left join TRIBUTO T
--             on T.IDFILIAL = IT.IDFILIAL
--            and T.IDTRIBUTO = IT.IDTRIBUTO


         where IT.IDFILIAL     = :IDFILIAL
           and IT.IDFORNECEDOR = :VIDFORNECEDOR
           and IT.IDNOTA       = :VIDNOTA
         order by IT.IDPRODUTO, IT.PRECOVENDA, IT.QTDECOMPRA
         into :VQTDE, :VFATOCONVERSAO, :VCUSTOPRODUTO, :VIDPRODUTO, :VUNI,
              :VIDUNIDADEMEDIDA, :vITENS_VALORICMS, :vITENS_VALORBASE, :VITENS_TAXAICMS, :VCLFISCAL_ITENS
      do
      begin
         vCONTADOR = :VCONTADOR+1;

         VCLFISCAL_ITENS = coalesce(:VCLFISCAL_ITENS,'040');

         if (not(exists(select first 1 CF.IDNOTA  from C170_ITENS_NF CF
                         where CF.IDFILIAL     = :IDFILIAL
                           and CF.IDNOTA       = :VIDNOTA
                           and CF.NOTA_PROPRIA_TERCEIROS = 'T'
                           and CF.CPF_CNPJ     = :VCPF_CNPJ
                           and CF.CONTADOR     = :VCONTADOR))) then
         begin
             INSERT INTO C170_ITENS_NF (IDFILIAL, NOTA_PROPRIA_TERCEIROS, IDNOTA, CONTADOR,
                                       IDPRODUTO, QTD, UNID, VL_ITEM, VL_DESC, IND_MOV, CST_ICMS,
                                       CFOP, COD_NAT, VL_BC_ICMS,ALIQ_ICMS, VL_ICMS, VL_BC_ICMS_ST,
                                       ALIQ_ST, VL_ICMS_ST, IND_APUR, CST_IPI, COD_ENQ, VL_BC_IPI,
                                       ALIQ_IPI, VL_IPI, CST_PIS, VL_BC_PIS, ALIQ_PIS_PERCENTUAL,
                                       QUANT_BC_PIS, ALIQ_PIS_REAIS, VL_PIS, CST_CONFINS,
                                       VL_BC_CONFINS, ALIQ_COFINS, QUANT_BC_CONFINS, VL_COFINS,
                                       P_RED_BC, VCREDICMSSN, PCREDSN, IDUNIDADEMEDIDA, CPF_CNPJ)
                           VALUES      (:IDFILIAL,'T',:VIDNOTA,:VCONTADOR,:VIDPRODUTO,(:VQTDE),
--                           VALUES      (:IDFILIAL,'T',:VIDNOTA,:VCONTADOR,:VIDPRODUTO,(:VQTDE*:VFATOCONVERSAO),
                                        :VUNI,:VCUSTOPRODUTO ,0,0,:VCLFISCAL_ITENS,:VCFOP,:VCFOP,:VITENS_VALORBASE,:VITENS_TAXAICMS,:VITENS_VALORICMS,0,0,0,0,'00','',0,0,0,'01',0,0,0,
                                        0,0,'01',0,0,0,0,0,0,0, :VIDUNIDADEMEDIDA, :VCPF_CNPJ);
         end
         -- SE EXISTIR
         else begin
             update C170_ITENS_NF
                set IDPRODUTO = :VIDPRODUTO,
--                    QTD = (:VQTDE*:VFATOCONVERSAO),
                    QTD = :VQTDE,
                    CONTADOR = :vCONTADOR,
                    UNID = :VUNI,
                    VL_ITEM = :VCUSTOPRODUTO,
                    VL_DESC = 0,
                    IND_MOV = 0,
                    CST_ICMS = '040',
                    CFOP = :VCFOP,
                    COD_NAT = :VCFOP,
                    VL_BC_ICMS = :VITENS_VALORBASE,
                    ALIQ_ICMS = :VITENS_TAXAICMS,
                    VL_ICMS = :VITENS_VALORICMS,
                    VL_BC_ICMS_ST = 0,
                    ALIQ_ST = 0,
                    VL_ICMS_ST = 0,
                    IND_APUR = 0,
                    CST_IPI = '00',
                    COD_ENQ = '',
                    VL_BC_IPI = 0,
                    ALIQ_IPI = 0,
                    VL_IPI = 0,
                    CST_PIS = '01',
                    VL_BC_PIS = 0,
                    ALIQ_PIS_PERCENTUAL = 0,
                    QUANT_BC_PIS = 0,
                    ALIQ_PIS_REAIS = 0,
                    VL_PIS = 0,
                    CST_CONFINS = '01',
                    VL_BC_CONFINS = 0,
                    ALIQ_COFINS = 0,
                    QUANT_BC_CONFINS = 0,
                    VL_COFINS = 0,
                    P_RED_BC = 0,
                    VCREDICMSSN = 0,
                    PCREDSN = 0,
                    IDUNIDADEMEDIDA = :VIDUNIDADEMEDIDA,
                    CPF_CNPJ = :VCPF_CNPJ
               where  IDFILIAL    = :IDFILIAL
                 and IDNOTA       = :VIDNOTA
                 and NOTA_PROPRIA_TERCEIROS = 'T'
                 and CPF_CNPJ     = :VCPF_CNPJ
                 and CONTADOR     = :VCONTADOR;

         end
         select sum(C.VL_ICMS), sum(C.VL_BC_ICMS) from C170_ITENS_NF C
          where C.IDFILIAL = :IDFILIAL
            and C.IDNOTA   = :VIDNOTA
            and C.NOTA_PROPRIA_TERCEIROS = 'T'
            and C.CPF_CNPJ = :VCPF_CNPJ
           into :VICMS, :VBASEICMS;

          update C100_NF C1
           set C1.VL_ICMS = :vICMS,
               C1.VL_BC_ICMS = :vBASEICMS
         where C1.IDFILIAL = :IDFILIAL
           and C1.IDNOTA   = :VIDNOTA
           and C1.NOTA_PROPRIA_TERCEIROS = 'T'
           and C1.CPF_CNPJ = :VCPF_CNPJ;
      end


  end
end^


ALTER PROCEDURE EST_SUGESTAO_COMPRA (
    IDFILIAL INTEGER,
    IDPRODUTO INTEGER,
    IDFORNECEDOR INTEGER,
    DTINI DATE,
    DTFIM DATE)
RETURNS (
    QTDE_COMPRA NUMERIC(15,3))
AS
begin
select coalesce(sum(IT.QTDECOMPRA),0)  from ITENSENTRADA IT

JOIN ENTRADA E
   ON E.IDFILIAL = IT.IDFILIAL
 AND E.IDFORNECEDOR = IT.IDFORNECEDOR
 AND E.IDNOTA = IT.IDNOTA

WHERE IT.IDFILIAL = :IDFILIAL
  AND IT.IDPRODUTO = :IDPRODUTO
  AND IT.IDFORNECEDOR = :IDFORNECEDOR
  AND E.DATAENTRADA between :DTINI and :DTFIM
into :QTDE_COMPRA;
  suspend;


select coalesce( sum(coalesce(C7.QTDE_FORNECEDOR,C7.QTD)), 0)  from C170_ITENS_NF C7

JOIN C100_NF C1
   ON C1.IDFILIAL = C7.IDFILIAL
 AND C1.CPF_CNPJ = C7.CPF_CNPJ
 AND C1.IDNOTA = C7.IDNOTA

WHERE C7.IDFILIAL = :IDFILIAL
     AND C7.IDPRODUTO = :IDPRODUTO
     AND C1.IDFORNECEDOR = :IDFORNECEDOR
     AND C1.NOTA_PROPRIA_TERCEIROS = 'T'
     AND C1.CADASTRADO_PELA_ENTRADA = 'S'
     AND C1.DT_E_S between :DTINI and :DTFIM
  into :QTDE_COMPRA;
  suspend;
end^


ALTER PROCEDURE EXPORTA_ESCRITA_ENTRADA (
    IDFILIAL INTEGER,
    DATINI DATE,
    DATFIM DATE)
RETURNS (
    IDFORNECEDOR INTEGER,
    IDNOTA INTEGER,
    DATAENTRADA DATE,
    CNPJ_FORNECEDOR VARCHAR(20) CHARACTER SET NONE,
    UF CHAR(2) CHARACTER SET NONE,
    CFOP CHAR(8) CHARACTER SET NONE,
    DATAEMISSAO DATE,
    VALORCONTABIL NUMERIC(16,2),
    VALORBASE NUMERIC(16,2),
    ALIQUOTAICMS NUMERIC(10,2),
    VALORICMS NUMERIC(16,2),
    VALOROUTROS NUMERIC(16,2),
    CODIGOICMS INTEGER)
AS
begin
   for select IT.IDFORNECEDOR, IT.IDNOTA, E.DATAENTRADA, CLR_DIG(F.CNPJ), C.UF, CF.CFOP,
       E.DATANOTAFISCAL,sum(IT.QTDECOMPRA*IT.CUSTOPRODUTO),
                        sum((IT.QTDECOMPRA*IT.CUSTOPRODUTO)*if_nn(T.TAXAICMS,'<>',0,1,0)),
                        sum((IT.QTDECOMPRA*IT.CUSTOPRODUTO)*(if_nn(T.TAXAICMS,'<>',0,T.TAXAICMS,0)/100)), T.TAXAICMS from ITENSENTRADA IT

       join ENTRADA E
         on E.IDFILIAL = :IDFILIAL
        and E.IDNOTA = IT.IDNOTA
        and E.IDFORNECEDOR = IT.IDFORNECEDOR

       join CFOP CF
         on CF.IDCFOP = E.IDCFOP
        and CF.IDFILIAL = :IDFILIAL

       join TRIBUTO T
         on T.IDFILIAL = :IDFILIAL
        and T.IDTRIBUTO = IT.IDTRIBUTO

       join FORNECEDOR F
         on F.IDFORNECEDOR = IT.IDFORNECEDOR

       join CIDADE C
         on C.IDCIDADE = F.IDCIDADE

     where IT.IDFILIAL = :IDFILIAL
       and E.DATAENTRADA between :DATINI and :DATFIM
       group by T.IDTRIBUTO, IT.IDFORNECEDOR, IT.IDNOTA, E.DATAENTRADA ,CLR_DIG(F.CNPJ), C.UF, CF.CFOP,E.DATANOTAFISCAL, T.TAXAICMS
       order by IT.IDFORNECEDOR, IT.IDNOTA
       into :IDFORNECEDOR, :IDNOTA, :DATAENTRADA, :CNPJ_FORNECEDOR, :UF, :CFOP,:DATAEMISSAO,
            :VALORCONTABIL, :VALORBASE , :VALORICMS, :ALIQUOTAICMS
   do
     begin
         if (ALIQUOTAICMS IS NULL) then ALIQUOTAICMS=0;
         if (VALORCONTABIL IS NULL) then VALORCONTABIL=0;
         if (VALORBASE IS NULL) then VALORBASE=0;
         if (VALORICMS IS NULL) then VALORICMS=0;
         if (VALOROUTROS IS NULL) then VALOROUTROS=0;
         VALOROUTROS=VALORCONTABIL-VALORBASE;
         CODIGOICMS = if_nn(VALORICMS,'=',0,3,1);
         if (ALIQUOTAICMS=14.5) then
             ALIQUOTAICMS=17;
             
         suspend;
     end
end^


ALTER PROCEDURE EXPORTA_ESCRITA_SAIDA (
    IDFILIAL INTEGER,
    DTINI DATE,
    DTFIM DATE)
RETURNS (
    IDNOTA INTEGER,
    DATAENTRADA DATE,
    CNPJ_CLIENTE VARCHAR(20),
    UF CHAR(2),
    CFOP CHAR(8),
    VALORCONTABIL NUMERIC(16,2),
    VALORBASE NUMERIC(16,2),
    VALORICMS NUMERIC(16,2),
    ALIQUOTAICMS NUMERIC(10,2),
    VALOROUTROS NUMERIC(16,2),
    CODIGOICMS INTEGER,
    SITUACAONOTA CHAR(1))
AS
DECLARE VARIABLE VSITUACAONOTA CHAR(1);
begin
   for select IT.IDNOTA, N.DATANOTA, C.CNPJ, CI.UF, CF.CFOP,N.SITUACAONOTA,sum(IT.PRECOVENDA*IT.QTDEPEDIDO),
             sum((((IT.PRECOVENDA*IT.QTDEPEDIDO)*if_nn(T.TAXAICMS,'<>',0,1,0))*if_nn(T.INSENTIVOFISCAL,'<>',0,T.INSENTIVOFISCAL,1))),
             sum(((IT.PRECOVENDA*IT.QTDEPEDIDO)*if_nn(T.TAXAICMS,'<>',0,1,0))*(if_nn(T.TAXAICMS,'<>',0,T.TAXAICMS,0)/100)),T.TAXAICMS
             from ITENSNOTA IT
             
       join NOTA N
         on N.IDFILIAL = :IDFILIAL
        and N.IDNOTA = IT.IDNOTA
        
       join CFOP CF
         on CF.IDCFOP = N.IDCFOP
        and CF.IDFILIAL = :IDFILIAL

       join CLIENTE C
         on C.IDCLIENTE = N.IDCLIENTE
         and C.TIPOCLIENTE = 'J'
         
       join CIDADE CI
         on CI.IDCIDADE = C.IDCIDADE

       left join PRODUTO P
         on P.IDPRODUTO = IT.IDPRODUTO
        and P.IDFILIAL = :IDFILIAL
        
       join TRIBUTO T
         on T.IDFILIAL = :IDFILIAL
        and T.IDTRIBUTO= P.IDTRIBUTO
        
     where IT.IDFILIAL = :IDFILIAL
       and N.DATANOTA between :DTINI and :DTFIM
       group by T.IDTRIBUTO, IT.IDNOTA, N.DATANOTA,C.CNPJ, CI.UF, CF.CFOP,N.SITUACAONOTA,T.TAXAICMS
       order by IT.IDNOTA
       into :IDNOTA, :DATAENTRADA, :CNPJ_CLIENTE, :UF, :CFOP,
            :vSITUACAONOTA,:VALORCONTABIL,:VALORBASE,:VALORICMS, :ALIQUOTAICMS
   do
     begin
        SITUACAONOTA = IF_SS(vSITUACAONOTA,'=','C','S','N');
        if (ALIQUOTAICMS IS NULL) then ALIQUOTAICMS=0;
        if (VALORCONTABIL IS NULL) then VALORCONTABIL=0;
        if (VALORBASE IS NULL) then VALORBASE=0;
        if (VALORICMS IS NULL) then VALORICMS=0;
        if (VALOROUTROS IS NULL) then VALOROUTROS=0;
        VALOROUTROS=VALORCONTABIL-VALORBASE;
        
        if (ALIQUOTAICMS=14.5) then
           ALIQUOTAICMS = 17;
           
        CODIGOICMS = if_nn(VALORICMS,'=',0,3,1);
        suspend;
     end
end^


ALTER PROCEDURE FU_ALLTRIM (
    WVAR VARCHAR(8192))
RETURNS (
    R_ALLTRIM VARCHAR(8192))
AS
DECLARE VARIABLE T SMALLINT;
    begin
    /*
    Devolve um string sem espaços
    */
    
    select cast(STRLEN(:wvar) as integer) from RDB$DATABASE
      into :t;
 

 
    r_alltrim = '';
 
  while ((wvar is not null) and (t > 0)) do begin
    if (substring(wvar from 1 for 1) <> ' ') then
    r_alltrim = r_alltrim || substring(wvar from 1 for 1);
   wvar = substring(:wvar from 2 for 8191);
    t = t - 1;
    end -- while

 suspend;
    end^


ALTER PROCEDURE GERA_FINANCEIRO_VENDA (
    IDFILIAL INTEGER,
    IDPEDIDO INTEGER,
    IDFOLHA INTEGER)
AS
declare variable VGERARFINANCEIRO varchar(1);
declare variable VSITUACAOPEDIDO varchar(1);
declare variable VDATAPEDIDO date;
declare variable VPRAZO integer;
declare variable IDCLIENTE integer;
declare variable IDREPRESENTANTE integer;
declare variable IDFORMAPAGTO integer;
declare variable TOTALPEDIDO numeric(15,2);
declare variable IDCENTROCUSTO integer;
declare variable VTAXACOMISSAO numeric(15,2);
declare variable XTOTALPRODUTO numeric(15,2);
declare variable XPRECOVENDA numeric(15,2);
declare variable XTOTALCOMISSAO numeric(15,2);
declare variable NPARCELA integer;
declare variable VPARCELA integer;
declare variable VTOTAL_PARCELA numeric(15,2);
declare variable VRATEIO numeric(15,2);
declare variable VPRAZO2 smallint;
declare variable VPRAZO3 smallint;
declare variable VPRAZO4 smallint;
declare variable VPRAZO5 smallint;
declare variable VPRAZO6 smallint;
begin
     for select p.SITUACAOPEDIDO, CF.GERAFINANCEIRO, P.DATAPEDIDO,
                P.IDCLIENTE, P.IDREPRESENTANTE, P.IDFORMAPAGTO, P.TOTALPEDIDO,
                P.IDCENTROCUSTO,P.PARCELA, PGT.prazo, pgt.prazo2, pgt.prazo3, pgt.prazo4, pgt.prazo5, pgt.prazo6 from PEDIDO P

        join CFOP CF
          on CF.IDCFOP = P.IDCFOP

       join CONDICAOPAGTO PGT
          on  PGT.IDCONDICAOPAGTO = P.IDCONDICAOPAGTO

       where P.IDFILIAL = :IDFILIAL
         and P.IDPEDIDO = :IDPEDIDO
         and P.IDFOLHA  = :IDFOLHA
        into :VSITUACAOPEDIDO, :VGERARFINANCEIRO, :VDATAPEDIDO, :IDCLIENTE,
             :IDREPRESENTANTE, :IDFORMAPAGTO, :TOTALPEDIDO, :IDCENTROCUSTO, :VPARCELA, :vprazo, :vprazo2, :vprazo3, :vprazo4, :vprazo5, :vprazo6
     do
        begin

          -- ATUALIZA PEDIDO PRECO
          select sum(IT.precovenda*IT.QTDEPEDIDO),
                 sum(IT.precovenda*IT.QTDEPEDIDO),
                 sum(((IT.PRECOVENDA*IT.QTDEPEDIDO)*
                 IF_SN(R.CATEGORIA,'=','E',R.TAXAESPECIAL,1)*
                 IF_SN(R.CATEGORIA,'=','B',P.COMISSAOBALCAO,1)*
                 IF_SN(R.CATEGORIA,'=','I',P.COMISSAOINTERIOR,1)*
                 IF_SN(R.CATEGORIA,'=','P',P.COMISSAOPRACA,1)/100))  from ITENSPEDIDO IT

               left join PRODUTO P
                 on P.IDFILIAL  = :IDFILIAL
                and P.IDPRODUTO = IT.IDPRODUTO
    
               join REPRESENTANTE R
                 on R.IDREPRESENTANTE = :IDREPRESENTANTE
    
               where IT.IDFILIAL = :IDFILIAL
                 and IT.IDPEDIDO = :IDPEDIDO
                 and IT.IDFOLHA =  :IDFOLHA
                 into :xTOTALPRODUTO, :xprecovenda, :xTOTALCOMISSAO;
    
                update PEDIDO PE
                 set   PE.TOTALCOMISSAO = :xTOTALCOMISSAO
                 where PE.IDFILIAL = :IDFILIAL
                   and PE.IDPEDIDO = :IDPEDIDO
                   and PE.IDFOLHA  = :IDFOLHA;

           select (pe.totalcomissao/Pe.totalpedido)*100 from PEDIDO PE
           where PE.IDFILIAL = :IDFILIAL
             and PE.IDPEDIDO = :IDPEDIDO
             and PE.IDFOLHA  = :IDFOLHA
           into :vtaxacomissao;
           if (:vtaxacomissao is null) then vtaxacomissao = 0;

           if (VGERARFINANCEIRO = 'S') then begin
              if (:VSITUACAOPEDIDO = 'V') then begin
                 nparcela = 1;
                 vRATEIO = (:TOTALPEDIDO/:VPARCELA);

                 VTOTAL_PARCELA = 0;
                 while (nParcela <= vParcela) do begin
                    if (:VPRAZO is null) then VPRAZO = 0;
                    if (:VPRAZO2 is null) then VPRAZO2 = 0;
                    if (:VPRAZO3 is null) then VPRAZO3 = 0;
                    if (:VPRAZO4 is null) then VPRAZO4 = 0;
                    if (:VPRAZO5 is null) then VPRAZO5 = 0;
                    if (:VPRAZO6 is null) then VPRAZO6 = 0;

                    if (not exists(select R.IDRECEBER from RECEBER R where R.IDFILIAL = :IDFILIAL
                                                                     and R.IDRECEBER = :IDPEDIDO
                                                                     and R.IDFOLHA = :IDFOLHA
                                                                     and R.IDORDEM = :NPARCELA)) then begin
                       insert into RECEBER (IDFILIAL, IDRECEBER, IDFOLHA, IDORDEM, DATAVENCIMENTO, DATAEMISSAO, IDCLIENTE,
                                            IDREPRESENTANTE, IDFORMAPAGTO, VALORDOCUMENTO,IDCENTROCUSTO, TAXACOMISSAO)
                                    values (:IDFILIAL, :IDPEDIDO,:IDFOLHA   ,:NPARCELA ,
                                          :VDATAPEDIDO+(if_nn(:nparcela,'=',1,:vPRAZO,0)+
                                          +if_nn(:nparcela,'=',2,:vPRAZO2,0)+
                                          +if_nn(:nparcela,'=',3,:vPRAZO3,0)+
                                          +if_nn(:nparcela,'=',4,:vPRAZO4,0)+
                                          +if_nn(:nparcela,'=',5,:vPRAZO5,0)+
                                          +if_nn(:nparcela,'=',6,:vPRAZO6,0)),

                                    :VDATAPEDIDO, :IDCLIENTE,
                                            :IDREPRESENTANTE, :IDFORMAPAGTO,:VRATEIO,:IDCENTROCUSTO, :vtaxacomissao );
                    end
                    VTOTAL_PARCELA = VTOTAL_PARCELA + :VRATEIO;


                    if (:NPARCELA = :VPARCELA) then begin
                    update RECEBER r
                       set r.VALORDOCUMENTO = r.VALORDOCUMENTO + (:TOTALPEDIDO - :VTOTAL_PARCELA)
                     where R.IDFILIAL = :IDFILIAL
                       and R.IDRECEBER = :IDPEDIDO
                       and R.IDFOLHA = :IDFOLHA
                       and R.IDORDEM = :VPARCELA ;
                     end
                     NPARCELA = NPARCELA + 1;
                 end

              end
          end
        end
--  suspend;
end^


ALTER PROCEDURE GERADOR_ID (
    IDFILIAL INTEGER,
    GERAR_ID VARCHAR(30))
RETURNS (
    RETORNO INTEGER)
AS
begin
  if (GERAR_ID = 'MDFE') then
  begin
     select coalesce(max(F.IDPEDIDO_MDFE)+1,1) from FILIAL F
        where F.IDFILIAL = :IDFILIAL
      into :RETORNO;

     update FILIAL F
        set F.IDPEDIDO_MDFE = :RETORNO
      where F.IDFILIAL = :IDFILIAL;
  end

  if (GERAR_ID = 'MDFE_ID') then
  begin
     select coalesce(max(F.SEQUENCIA_MDFE)+1,1) from FILIAL F
        where F.IDFILIAL = :IDFILIAL
      into :RETORNO;

     update FILIAL F
        set F.SEQUENCIA_MDFE = :RETORNO
      where F.IDFILIAL = :IDFILIAL;
  end

  if (GERAR_ID = 'NFCE') then
  begin
     select coalesce(max(F.GERAR_IDNFCE)+1,1) from CONFIGURACAO F
        where F.IDFILIAL = :IDFILIAL
      into :RETORNO;

     update CONFIGURACAO F
        set F.GERAR_IDNFCE = :RETORNO
      where F.IDFILIAL = :IDFILIAL;
  end

  suspend;
end^


ALTER PROCEDURE GERAR_PEDIDO_CFOP_ENTRADA (
    IDFILIAL SMALLINT,
    IDPEDIDO INTEGER,
    IDFOLHA INTEGER,
    IDCFOP INTEGER)
RETURNS (
    IDPEDIDO_RETORNO INTEGER,
    IDFOLHA_RETORNO INTEGER)
AS
declare variable IDCLIENTE integer;
declare variable IDCONDICAOPAGTO smallint;
declare variable IDFORMAPAGTO smallint;
declare variable IDREPRESENTANTE smallint;
declare variable IDCENTROCUSTO smallint;
declare variable TOTALCUSTO numeric(16,2);
declare variable TOTALPRODUTO numeric(16,2);
declare variable TOTALDESCONTO numeric(16,2);
declare variable TOTALPEDIDO numeric(16,2);
declare variable PARCELA smallint;
declare variable TOTALCOMISSAO numeric(16,4);
declare variable ENTREGARPEDIDO char(1);
declare variable IDTABELAPRECO smallint;
declare variable TAXADESCONTO NUMERIC(10,2);
declare variable IDCOBRANCA smallint;
declare variable SITUACAOROMANEIO char(1);
declare variable IDROMANEIO integer;
declare variable SUBSTITUICAO char(1);
declare variable IDPEDIDO_SAOBENTO varchar(10);
declare variable TIPO_PEDIDO char(1);
declare variable CLIENTE_BALCAO char(1);
declare variable SIT_INVENTARIO varchar(1);
declare variable IDCONSIGNACAO integer;
declare variable ORCAMENTO_VENDA varchar(1);
declare variable TIPONOTA varchar(5);
declare variable TIPOPEDIDO_PALM varchar(1);
declare variable IDOBRAS smallint;
declare variable TOTALDIGITADO numeric(14,2);
declare variable LOTE_NFE varchar(1);
declare variable TAXA_FUNRURAL NUMERIC(10,2);
declare variable IDMOVTO_SUPERVISOR integer;
declare variable COBRANCA_CTS integer;
declare variable ENTREGA integer;
declare variable TRANSFORMA_VENDA varchar(1);
declare variable PODE_TRANSFORMA_VENDA varchar(1);
declare variable PRODUTO_EST_NEGATIVO varchar(1);
declare variable OUTRAS_DESPESA_ACESSORIO numeric(14,2);
declare variable VALOR_PIS numeric(15,2);
declare variable VALOR_CONFINS numeric(15,2);
declare variable VALOR_IPI numeric(15,2);
declare variable VINC_IDPEDIDO integer;
declare variable iCONTADOR               INTEGER;
declare variable iIDPRODUTO              INTEGER;
declare variable iCUSTONOTA              NUMERIC(16,4);
declare variable iCUSTOTRIBUTADO         NUMERIC(16,4);
declare variable iCUSTOENCARGOS          NUMERIC(16,4);
declare variable iPRECOTABELA            NUMERIC(16,4);
declare variable iPRECOTABELA_ORIGINAL   NUMERIC(16,4);
declare variable iTAXADESCONTO           NUMERIC(10,4);
declare variable iPRECOVENDA             NUMERIC(16,4);
declare variable iQTDEPEDIDO             NUMERIC(10,3);
declare variable iIDUNIDADEMEDIDA        SMALLINT;
declare variable iTAXACOMISSAO           NUMERIC(10,2);
declare variable iFATORCONVERSAO         SMALLINT;
declare variable iIDCARTEIRA             INTEGER;
declare variable iIDREPRESENTANTE        SMALLINT;
declare variable iTROCA                  CHAR(1);
declare variable iSIT_PEDIDO             CHAR(1);
declare variable iIDDEPOSITO             SMALLINT;
declare variable iDATA_VENCTO            DATE;
declare variable iESTOQUE_REPRESENTANTE  VARCHAR(1);
declare variable iSITUACAO_ESTOQUE       VARCHAR(1);
declare variable iSITUACAO_DESCONTO      VARCHAR(1);
declare variable iCODIGO_BARRA           VARCHAR(15);
declare variable iB_EXCLUIR_ITEM         VARCHAR(1);
declare variable iPODE_TRANSFORMA_VENDA  VARCHAR(1);
declare variable iHOUVE_CORTE            VARCHAR(1);
begin




     for select
            IDCLIENTE,IDCONDICAOPAGTO,IDFORMAPAGTO,IDREPRESENTANTE,IDCENTROCUSTO,TOTALCUSTO,
            TOTALPRODUTO,TOTALDESCONTO,TOTALPEDIDO,PARCELA,TOTALCOMISSAO,ENTREGARPEDIDO,
            IDTABELAPRECO,TAXADESCONTO,IDCOBRANCA,SITUACAOROMANEIO,IDROMANEIO,
            SUBSTITUICAO,IDPEDIDO_SAOBENTO,TIPO_PEDIDO,CLIENTE_BALCAO,
            SIT_INVENTARIO,IDCONSIGNACAO,ORCAMENTO_VENDA,TIPONOTA,TIPOPEDIDO_PALM,
            IDOBRAS,TOTALDIGITADO,LOTE_NFE,TAXA_FUNRURAL,IDMOVTO_SUPERVISOR,COBRANCA_CTS,
            ENTREGA,TRANSFORMA_VENDA,PODE_TRANSFORMA_VENDA,PRODUTO_EST_NEGATIVO,OUTRAS_DESPESA_ACESSORIO,
            VALOR_PIS,VALOR_CONFINS,VALOR_IPI
     from PEDIDO P
       where P.IDFILIAL = :IDFILIAL
         and P.IDFOLHA  = :IDFOLHA
         and P.IDPEDIDO = :IDPEDIDO
     into :IDCLIENTE,:IDCONDICAOPAGTO,:IDFORMAPAGTO,:IDREPRESENTANTE,:IDCENTROCUSTO,:TOTALCUSTO,
          :TOTALPRODUTO,:TOTALDESCONTO,:TOTALPEDIDO,:PARCELA,:TOTALCOMISSAO,:ENTREGARPEDIDO,
          :IDTABELAPRECO,:TAXADESCONTO,:IDCOBRANCA,:SITUACAOROMANEIO,:IDROMANEIO,
          :SUBSTITUICAO,:IDPEDIDO_SAOBENTO,:TIPO_PEDIDO,:CLIENTE_BALCAO,
          :SIT_INVENTARIO,:IDCONSIGNACAO,:ORCAMENTO_VENDA,:TIPONOTA,:TIPOPEDIDO_PALM,
          :IDOBRAS,:TOTALDIGITADO,:LOTE_NFE,TAXA_FUNRURAL,:IDMOVTO_SUPERVISOR,:COBRANCA_CTS,
          :ENTREGA,TRANSFORMA_VENDA,:PODE_TRANSFORMA_VENDA,:PRODUTO_EST_NEGATIVO,:OUTRAS_DESPESA_ACESSORIO,
          :VALOR_PIS,:VALOR_CONFINS,:VALOR_IPI
     do begin
       -- PEGA O IDPEDIDO DA FILIAL
       select cast(max(F.inc_idpedido) as integer)+1 from FILIAL F
        where F.IDFILIAL = :IDFILIAL
         into :vINC_IDPEDIDO;
       if (vINC_IDPEDIDO is null) then vINC_IDPEDIDO = 1;

       -- ATUALIZA A FILIAL COM O ULTIMO IDPEDIDO
       update FILIAL F
          set F.INC_IDPEDIDO = :VINC_IDPEDIDO
        where F.IDFILIAL = :IDFILIAL;


       INSERT INTO PEDIDO (IDCLIENTE,IDCONDICAOPAGTO,IDFORMAPAGTO,IDREPRESENTANTE,IDCENTROCUSTO,TOTALCUSTO,
                           TOTALPRODUTO,TOTALDESCONTO,TOTALPEDIDO,PARCELA,TOTALCOMISSAO,ENTREGARPEDIDO,
                           SITUACAOPEDIDO,IDTABELAPRECO,TAXADESCONTO,IDCOBRANCA,SITUACAOROMANEIO,IDROMANEIO,
                           SUBSTITUICAO,IDPEDIDO_SAOBENTO,TIPO_PEDIDO,CLIENTE_BALCAO,
                           SIT_INVENTARIO,IDCONSIGNACAO,ORCAMENTO_VENDA,TIPONOTA,TIPOPEDIDO_PALM,
                           IDOBRAS,TOTALDIGITADO,LOTE_NFE,TAXA_FUNRURAL,IDMOVTO_SUPERVISOR,COBRANCA_CTS,
                           ENTREGA,TRANSFORMA_VENDA,PODE_TRANSFORMA_VENDA,PRODUTO_EST_NEGATIVO,OUTRAS_DESPESA_ACESSORIO,
                           VALOR_PIS,VALOR_CONFINS,VALOR_IPI, IDCFOP, IDFOLHA, IDPEDIDO, DATAPEDIDO, IDFILIAL)
                VALUES (:IDCLIENTE,:IDCONDICAOPAGTO,:IDFORMAPAGTO,:IDREPRESENTANTE,:IDCENTROCUSTO,:TOTALCUSTO,
                        :TOTALPRODUTO,:TOTALDESCONTO,:TOTALPEDIDO,:PARCELA,:TOTALCOMISSAO,:ENTREGARPEDIDO,
                        'B',:IDTABELAPRECO,:TAXADESCONTO,:IDCOBRANCA,:SITUACAOROMANEIO,:IDROMANEIO,
                        :SUBSTITUICAO,:IDPEDIDO_SAOBENTO,:TIPO_PEDIDO,:CLIENTE_BALCAO,
                        :SIT_INVENTARIO,:IDCONSIGNACAO,:ORCAMENTO_VENDA,:TIPONOTA,:TIPOPEDIDO_PALM,
                        :IDOBRAS,:TOTALDIGITADO,:LOTE_NFE,:TAXA_FUNRURAL,:IDMOVTO_SUPERVISOR,:COBRANCA_CTS,
                        :ENTREGA,:TRANSFORMA_VENDA,:PODE_TRANSFORMA_VENDA,:PRODUTO_EST_NEGATIVO,:OUTRAS_DESPESA_ACESSORIO,
                        :VALOR_PIS,:VALOR_CONFINS,:VALOR_IPI, :IDCFOP, :IDFOLHA, :vinc_idpedido, current_date, :idfilial);

       for select
               CONTADOR,IDPRODUTO,CUSTONOTA,CUSTOTRIBUTADO,CUSTOENCARGOS,PRECOTABELA,
               PRECOTABELA_ORIGINAL,TAXADESCONTO,PRECOVENDA,QTDEPEDIDO,IDUNIDADEMEDIDA,
               TAXACOMISSAO,FATORCONVERSAO,IDCARTEIRA,IDREPRESENTANTE,:iTROCA,SIT_PEDIDO,
               IDDEPOSITO,DATA_VENCTO,ESTOQUE_REPRESENTANTE,SITUACAO_ESTOQUE,SITUACAO_DESCONTO,
               CODIGO_BARRA,B_EXCLUIR_ITEM,PODE_TRANSFORMA_VENDA,HOUVE_CORTE
           from ITENSPEDIDO IT
           where IT.IDFILIAL = :IDFILIAL
             and IT.IDPEDIDO = :IDPEDIDO
             and IT.IDFOLHA  = :IDFOLHA
           into :iCONTADOR,:iIDPRODUTO,:iCUSTONOTA,:iCUSTOTRIBUTADO,:iCUSTOENCARGOS,:iPRECOTABELA,
                :iPRECOTABELA_ORIGINAL,:iTAXADESCONTO,:iPRECOVENDA,:iQTDEPEDIDO,:iIDUNIDADEMEDIDA,
                :iTAXACOMISSAO,:iFATORCONVERSAO,:iIDCARTEIRA,:iIDREPRESENTANTE,:iTROCA,:iSIT_PEDIDO,
                :iIDDEPOSITO,:iDATA_VENCTO,:iESTOQUE_REPRESENTANTE,:iSITUACAO_ESTOQUE,:iSITUACAO_DESCONTO,
                :iCODIGO_BARRA,:iB_EXCLUIR_ITEM,:iPODE_TRANSFORMA_VENDA,:iHOUVE_CORTE
       do
       begin
           INSERT INTO ITENSPEDIDO (
               CONTADOR,IDPRODUTO,CUSTONOTA,CUSTOTRIBUTADO,CUSTOENCARGOS,PRECOTABELA,
               PRECOTABELA_ORIGINAL,TAXADESCONTO,PRECOVENDA,QTDEPEDIDO,IDUNIDADEMEDIDA,
               TAXACOMISSAO,FATORCONVERSAO,IDCARTEIRA,IDREPRESENTANTE,TROCA,SIT_PEDIDO,
               IDDEPOSITO,DATA_VENCTO,ESTOQUE_REPRESENTANTE,SITUACAO_ESTOQUE,SITUACAO_DESCONTO,
               CODIGO_BARRA,B_EXCLUIR_ITEM,PODE_TRANSFORMA_VENDA,HOUVE_CORTE, IDPEDIDO, IDFOLHA, IDFILIAL)
           VALUES (
                :iCONTADOR,:iIDPRODUTO,:iCUSTONOTA,:iCUSTOTRIBUTADO,:iCUSTOENCARGOS,:iPRECOTABELA,
                :iPRECOTABELA_ORIGINAL,:iTAXADESCONTO,:iPRECOVENDA,:iQTDEPEDIDO,:iIDUNIDADEMEDIDA,
                :iTAXACOMISSAO,:iFATORCONVERSAO,:iIDCARTEIRA,:iIDREPRESENTANTE,'N',:iSIT_PEDIDO,
                :iIDDEPOSITO,:iDATA_VENCTO,:iESTOQUE_REPRESENTANTE,:iSITUACAO_ESTOQUE,:iSITUACAO_DESCONTO,
                :iCODIGO_BARRA,:iB_EXCLUIR_ITEM,:iPODE_TRANSFORMA_VENDA,:iHOUVE_CORTE, :VINC_IDPEDIDO, :IDFOLHA, :IDFILIAL);
       end

       idpedido_retorno = :vinc_idpedido;
       idfolha_retorno  = :idfolha;
       suspend;
     end
end^


ALTER PROCEDURE INSERT_FORNECEDOR_PRODUTO (
    IDFILIAL SMALLINT)
RETURNS (
    VIDFORNECEDOR INTEGER,
    VIDPRODUTO INTEGER,
    VCUSTONOTA NUMERIC(14,2),
    VPRECOVENDA NUMERIC(14,2))
AS
begin
  for select P.IDPRODUTO, IDFORNECEDOR, P.PRECOVENDA, P.CUSTONOTA from PRODUTO P
       where P.IDFILIAL = :IDFILIAL
        into :vIDPRODUTO, :vIDFORNECEDOR, :vPRECOVENDA, :vCUSTONOTA
  do
    begin
       INSERT INTO FORNECEDOR_PRODUTO (IDFILIAL, IDFORNECEDOR, IDPRODUTO, IDPRODUTO_FAB, CUSTO, PRECOVENDA)
           VALUES (:IDFILIAL, :vIDFORNECEDOR, :VIDPRODUTO, :vIDPRODUTO, :vCUSTONOTA, :vPRECOVENDA);
       suspend;
    end
end^


ALTER PROCEDURE INSERT_GENERO_MERCADORIA
AS
begin
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (0,'Serviço');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (1,'Animais vivos');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (2,'Carnes e miudezas, comestíveis');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (3,'Peixes e crustáceos, moluscos e os outros invertebrados aquáticos');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (4,'Leite e laticínios; ovos de aves; mel natural; produtos comestíveis de origem animal, não especificados nem compreendidos em outros Capítulos da TIPI');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (5,'Outros produtos de origem animal, não especificados nem compreendidos em outros Capítulos da TIPI');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (6,'Plantas vivas e produtos de floricultura');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (7,'Produtos hortícolas, plantas, raízes e tubérculos, comestíveis');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (8,'Frutas; cascas de cítricos e de melões');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (9,'Café, chá, mate e especiarias');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (10,'Cereais');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (11,'Produtos da indústria de moagem; malte; amidos e féculas; inulina; glúten de trigo');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (12,'Sementes e frutos oleaginosos; grãos, sementes e frutos diversos; plantas industriais ou medicinais; palha e forragem');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (13,'Gomas, resinas e outros sucos e extratos vegetais');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (14,'Matérias para entrançar e outros produtos de origem vegetal, não especificadas nem compreendidas em outros Capítulos da NCM');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (15,'Gorduras e óleos animais ou vegetais; produtos da sua dissociação; gorduras alimentares elaboradas; ceras de origem animal ou vegetal');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (16,'Preparações de carne, de peixes ou de crustáceos, de moluscos ou de outros invertebrados aquáticos');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (17,'Açúcares e produtos de confeitaria');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (18,'Cacau e suas preparações');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (19,'Preparações à base de cereais, farinhas, amidos, féculas ou de leite; produtos de pastelaria');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (20,'Preparações de produtos hortícolas, de frutas ou de outras partes de plantas');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (21,'Preparações alimentícias diversas');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (22,'Bebidas, líquidos alcoólicos e vinagres');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (23,'Resíduos e desperdícios das indústrias alimentares; alimentos preparados para animais');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (24,'Fumo (tabaco) e seus sucedâneos, manufaturados');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (25,'Sal; enxofre; terras e pedras; gesso, cal e cimento');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (26,'Minérios, escórias e cinzas');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (27,'Combustíveis minerais, óleos minerais e produtos de sua destilação; matérias betuminosas; ceras minerais');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (28,'Produtos químicos inorgânicos; compostos inorgânicos ou orgânicos de metais preciosos, de elementos radioativos, de metais das terras raras ou de isótopos');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (29,'Produtos químicos orgânicos');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (30,'Produtos farmacêuticos');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (31,'Adubos ou fertilizantes');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (32,'Extratos tanantes e tintoriais; taninos e seus derivados; pigmentos e outras matérias corantes, tintas e vernizes, mástiques; tintas de escrever');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (33,'Óleos essenciais e resinóides; produtos de perfumaria ou de toucador preparados e preparações cosméticas');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (34,'Sabões, agentes orgânicos de superfície, preparações para lavagem, preparações lubrificantes, ceras artificiais, ceras preparadas, produtos de conservação e limpeza, velas e artigos semelhantes.');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (35,'Matérias albuminóides; produtos à base de amidos ou de féculas modificados; colas; enzimas');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (36,'Pólvoras e explosivos; artigos de pirotecnia; fósforos; ligas pirofóricas; matérias inflamáveis');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (37,'Produtos para fotografia e cinematografia');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (38,'Produtos diversos das indústrias químicas');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (39,'Plásticos e suas obras');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (40,'Borracha e suas obras');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (41,'Peles, exceto a peleteria (peles com pêlo*), e couros');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (42,'Obras de couro; artigos de correeiro ou de seleiro; artigos de viagem, bolsas e artefatos semelhantes; obras de tripa');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (43,'Peleteria (peles com pelo*) e suas obras; peleteria (peles com pelo*) artificial');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (44,'Madeira, carvão vegetal e obras de madeira');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (45,'Cortiça e suas obras');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (46,'Obras de espartaria ou de cestaria');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (47,'Pastas de madeira ou de outras matérias fibrosas celulósicas; papel ou cartão de reciclar (desperdícios e aparas)');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (48,'Papel e cartão; obras de pasta de celulose, de papel ou de cartão');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (49,'Livros, jornais, gravuras e outros produtos das indústrias gráficas; textos manuscritos ou datilografados,planos e plantas');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (50,'Seda');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (51,'Lã e pelos finos ou grosseiros; fios e tecidos de crina');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (52,'Algodão');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (53,'Outras fibras têxteis vegetais; fios de papel e tecido de fios de papel');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (54,'Filamentos sintéticos ou artificiais');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (55,'Fibras sintéticas ou artificiais, descontínuas');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (56,'Pastas ("ouates"), feltros e falsos tecidos; fios especiais; cordéis, cordas e cabos; artigos de cordoaria');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (57,'Tapetes e outros revestimentos para pavimentos, de matérias têxteis');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (58,'Tecidos especiais; tecidos tufados; rendas; tapeçarias; passamanarias; bordados');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (59,'Tecidos impregnados, revestidos, recobertos ou estratificados; artigos para usos técnicos de matérias têxteis');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (60,'Tecidos de malha');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (61,'Vestuário e seus acessórios, de malha');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (62,'Vestuário e seus acessórios, exceto de malha');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (63,'Outros artefatos têxteis confeccionados; sortidos; artefatos de matérias têxteis, calçados, chapéus e artefatos de uso semelhante, usados; trapos');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (64,'Calçados, polainas e artefatos semelhantes, e suas partes');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (65,'Chapéus e artefatos de uso semelhante, e suas partes');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (66,'Guarda-chuvas, sombrinhas, guarda-sóis, bengalas, bengalas-assentos, chicotes, e suas partes');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (67,'Penas e penugem preparadas, e suas obras; flores artificiais; obras de cabelo');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (68,'Obras de pedra, gesso, cimento, amianto, mica ou de matérias semelhantes');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (69,'Produtos cerâmicos');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (70,'Vidro e suas obras');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (71,'Pérolas naturais ou cultivadas, pedras preciosas ou semipreciosas e semelhantes, metais preciosos, metais folheados ou chapeados de metais preciosos, e suas obras; bijuterias; moedas');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (72,'Ferro fundido, ferro e aço');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (73,'Obras de ferro fundido, ferro ou aço');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (74,'Cobre e suas obras');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (75,'Níquel e suas obras');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (76,'Alumínio e suas obras');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (77,'(Reservado para uma eventual utilização futura no SH)');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (78,'Chumbo e suas obras');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (79,'Zinco e suas obras');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (80,'Estanho e suas obras');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (81,'Outros metais comuns; ceramais ("cermets"); obras dessas matérias');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (82,'Ferramentas, artefatos de cutelaria e talheres, e suas partes, de metais comuns');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (83,'Obras diversas de metais comuns');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (84,'Reatores nucleares, caldeiras, máquinas, aparelhos e instrumentos mecânicos, e suas partes');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (85,'Máquinas,aparelhos e materiais elétricos,e suas partes;aparelhos de gravação ou de reprodução de som,aparelhos de gravação ou de reprodução de imagens e de som em televisão,e suas partes e acessórios');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (86,'Veículos e material para vias férreas ou semelhantes, e suas partes; aparelhos mecânicos (incluídos os eletromecânicos) de sinalização para vias de comunicação');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (87,'Veículos automóveis, tratores, ciclos e outros veículos terrestres, suas partes e acessórios');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (88,'Aeronaves e aparelhos espaciais, e suas partes');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (89,'Embarcações e estruturas flutuantes');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (90,'Instrumentos e aparelhos de óptica, fotografia ou cinematografia, medida, controle ou de precisão; instrumentos e aparelhos médico-cirúrgicos; suas partes e acessórios');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (91,'Aparelhos de relojoaria e suas partes');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (92,'Instrumentos musicais, suas partes e acessórios');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (93,'Armas e munições; suas partes e acessórios');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (94,'Móveis, mobiliário médico-cirúrgico; colchões; iluminação e construção pré-fabricadas');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (95,'Brinquedos, jogos, artigos para divertimento ou para esporte; suas partes e acessórios');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (96,'Obras diversas');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (97,'Objetos de arte, de coleção e antiguidades');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (98,'(Reservado para usos especiais pelas Partes Contratantes)');
INSERT INTO GENERO_MERCADORIA (IDGENERO, DESCRICAO) VALUES (99,'Operações especiais (utilizado exclusivamente pelo Brasil para classificar operações especiais na exportação)');
end^


ALTER PROCEDURE INSERT_PRODUTO_TBAUXILIAR (
    IDFILIAL INTEGER)
RETURNS (
    IDPRODUTO INTEGER)
AS
begin
  for select P.IDPRODUTO from PRODUTO P
    where P.IDFILIAL = :IDFILIAL
   into :IDPRODUTO
  do begin
     insert into TABELA_AUXILIAR (ID) values (:IDPRODUTO);
     suspend;
  end
end^


ALTER PROCEDURE INSERT_REGIAO_ROMANEIO (
    IDFILIAL INTEGER,
    IDREGIAO INTEGER,
    DTINI DATE,
    DTFIM DATE,
    IDCONTROLE INTEGER)
RETURNS (
    IDPEDIDO INTEGER)
AS
declare variable VIDFOLHA integer;
declare variable VNOMECLIENTE varchar(60);
begin
   for select P.IDPEDIDO, P.IDFOLHA, C.NOME from PEDIDO P

       join CLIENTE C
         on C.IDCLIENTE = P.IDCLIENTE

     where C.IDREGIAO = :IDREGIAO
       and P.IDFILIAL = :IDFILIAL
       and P.DATAPEDIDO between :DTINI and :DTFIM
       AND coalesce(P.SITUACAOPEDIDO,'V') <> 'P'
     into :IDPEDIDO, :VIDFOLHA, :VNOMECLIENTE
   do
     begin
       if (not exists(select IT.IDFILIAL from ITENSROMANEIO IT
                       where IT.IDFILIAL = :IDFILIAL
                         and IT.IDCONTROLE = :IDCONTROLE
                         and IT.IDPEDIDO = :IDPEDIDO)) then begin
          insert into ITENSROMANEIO (IDFILIAL, IDPEDIDO, IDCONTROLE, IDFOLHA, NOMECLIENTE)
                values(:IDFILIAL,:IDPEDIDO,:IDCONTROLE, :vIDFOLHA, :VNOMECLIENTE);
       end
     end
end^


ALTER PROCEDURE INSERT_REPRESENTANTE_ROMANEIO (
    IDFILIAL INTEGER,
    IDREPRESENTANTE INTEGER,
    DTINI DATE,
    DTFIM DATE,
    IDCONTROLE INTEGER)
RETURNS (
    IDPEDIDO INTEGER)
AS
declare variable VIDFOLHA integer;
declare variable VNOMECLIENTE varchar(60);
begin
   for select P.IDPEDIDO, P.IDFOLHA, C.NOME from PEDIDO P

       join CLIENTE C
         on C.IDCLIENTE = P.IDCLIENTE

     where P.IDREPRESENTANTE = :IDREPRESENTANTE
       and P.IDFILIAL = :IDFILIAL
       and P.DATAPEDIDO between :DTINI and :DTFIM
       AND coalesce(P.SITUACAOPEDIDO,'V') <> 'P'
     into :IDPEDIDO, :VIDFOLHA, :VNOMECLIENTE
   do
     begin
       if (not exists(select IT.IDFILIAL from ITENSROMANEIO IT
                       where IT.IDFILIAL = :IDFILIAL
                         and IT.IDCONTROLE = :IDCONTROLE
                         and IT.IDPEDIDO = :IDPEDIDO)) then begin
          insert into ITENSROMANEIO (IDFILIAL, IDPEDIDO, IDCONTROLE, IDFOLHA, NOMECLIENTE)
                values(:IDFILIAL,:IDPEDIDO,:IDCONTROLE, :vIDFOLHA, :VNOMECLIENTE);
       end
     end
end^


ALTER PROCEDURE INSERT_REPRESENTANTE_TBAUX (
    IDFILIAL INTEGER)
RETURNS (
    IDREPRESENTANTE INTEGER)
AS
begin
 for select R.IDREPRESENTANTE from REPRESENTANTE R
   into :IDREPRESENTANTE
  do begin
     insert into TABELA_AUXILIAR (ID) values (:IDREPRESENTANTE);
     suspend;
  end
end^


ALTER PROCEDURE INSERT_SUBGRUPO_TBAUX (
    IDFILIAL INTEGER,
    IDGRUPO INTEGER)
RETURNS (
    IDSUB_GRUPO INTEGER)
AS
begin
 if (:IDGRUPO > 0 ) then begin
     for select S.IDSUB_GRUPO from SUB_GRUPO S
        where S.IDFILIAL = :IDFILIAL
          and S.IDGRUPO = :IDGRUPO
       into :IDSUB_GRUPO
      do begin
         insert into TABELA_AUXILIAR (ID, IDGRUPO) values (:IDSUB_GRUPO, :IDGRUPO);
         suspend;
      end
 end

  if (:IDGRUPO < 0) then  begin
      for select S.IDSUB_GRUPO from SUB_GRUPO S
         where S.IDFILIAL = :IDFILIAL
        into :IDSUB_GRUPO
       do begin
          insert into TABELA_AUXILIAR (ID, IDGRUPO) values (:IDSUB_GRUPO, :IDGRUPO);
          suspend;
       end
  end
end^


ALTER PROCEDURE INSERT_TIPO_MERCADORIA
AS
begin
INSERT INTO TIPO_MERCADORIA (IDTIPOMERCADORIA, DESCRICAO) VALUES (0,'Mercadoria para Revenda;');
INSERT INTO TIPO_MERCADORIA (IDTIPOMERCADORIA, DESCRICAO) VALUES (1,'Matéria-Prima;');
INSERT INTO TIPO_MERCADORIA (IDTIPOMERCADORIA, DESCRICAO) VALUES (2,'Embalagem;');
INSERT INTO TIPO_MERCADORIA (IDTIPOMERCADORIA, DESCRICAO) VALUES (3,'Produto em Processo;');
INSERT INTO TIPO_MERCADORIA (IDTIPOMERCADORIA, DESCRICAO) VALUES (4,'Produto Acabado;');
INSERT INTO TIPO_MERCADORIA (IDTIPOMERCADORIA, DESCRICAO) VALUES (5,'Subproduto;');
INSERT INTO TIPO_MERCADORIA (IDTIPOMERCADORIA, DESCRICAO) VALUES (6,'Produto Intermediário;');
INSERT INTO TIPO_MERCADORIA (IDTIPOMERCADORIA, DESCRICAO) VALUES (7,'Material de Uso e Consumo;');
INSERT INTO TIPO_MERCADORIA (IDTIPOMERCADORIA, DESCRICAO) VALUES (8,'Ativo Imobilizado;');
INSERT INTO TIPO_MERCADORIA (IDTIPOMERCADORIA, DESCRICAO) VALUES (9,'Serviços;');
INSERT INTO TIPO_MERCADORIA (IDTIPOMERCADORIA, DESCRICAO) VALUES (10,'Outros insumos;');
INSERT INTO TIPO_MERCADORIA (IDTIPOMERCADORIA, DESCRICAO) VALUES (99,'Outras');
end^


ALTER PROCEDURE LIMPAR_ST (
    IDFILIAL INTEGER,
    IDPEDIDO INTEGER,
    IDFOLHA INTEGER)
AS
begin
  update ITENSPEDIDO IT
     set IT.CALCULO_VALOR_BASE_ST = 0,
         IT.CALCULO_VALOR_ICMS_ST = 0
   where IT.IDFILIAL = :IDFILIAL
     and IT.IDPEDIDO = :IDPEDIDO
     and IT.IDFOLHA  = :IDFOLHA;
  suspend;
end^


ALTER PROCEDURE MARCA_SITUACAO_SPEDC100 (
    IDFILIAL INTEGER,
    DTINI DATE,
    DTFIM DATE)
RETURNS (
    IDNOTA INTEGER)
AS
begin
  for select N.IDNOTA from NOTA N
    where N.IDFILIAL = :IDFILIAL
      and N.DATANOTA between :DTINI and :DTFIM
      and N.SITUACAONOTA = 'C'
    into :IDNOTA
  do
  begin
      update C100_NF C
         set C.SITUACAONOTA = 'C'
       where C.IDFILIAL = :IDFILIAL
         and C.SITUACAONOTA is null
         and C.IDNOTA   = :IDNOTA;
  end
end^


ALTER PROCEDURE MUDA_ROTA_CLIENTE (
    IDFILIAL INTEGER,
    ROTA INTEGER,
    IDCONTROLE INTEGER)
RETURNS (
    IDCLIENTE INTEGER)
AS
begin
  for select P.IDCLIENTE from ITENSROMANEIO R

       left join PEDIDO P
         on P.IDFILIAL = R.IDFILIAL
        and P.IDPEDIDO = R.IDPEDIDO
        and P.IDFOLHA = R.IDFOLHA

      WHERE R.IDFILIAL = :IDFILIAL
        and R.IDCONTROLE = :IDCONTROLE
        and not p.IDCLIENTE is null
     into :IDCLIENTE
  do begin
    UPDATE CLIENTE C
        SET C.PERIODO_VISITA = :ROTA
     where C.IDCLIENTE = :IDCLIENTE;
    suspend;
  end
end^


ALTER PROCEDURE NEW_PROCEDURE (
    MARCARA VARCHAR(8))
RETURNS (
    RESULTADO VARCHAR(15))
AS
begin
   if (STRLEN(trim(MARCARA)) = 3) then
   begin
      RESULTADO = substring(TRIM(MARCARA) from 1 for 1) || '.' ||
                  substring(TRIM(MARCARA) from 2 for 2);
   end


   if (STRLEN(trim(MARCARA)) = 4) then
   begin
      RESULTADO = substring(TRIM(MARCARA) from 1 for 1) || '.' ||
                  substring(TRIM(MARCARA) from 2 for 2) || '.' ||
                  substring(TRIM(MARCARA) from 4 for 1);
   end


   if (STRLEN(trim(MARCARA)) = 5) then
   begin
      RESULTADO = substring(TRIM(MARCARA) from 1 for 1) || '.' ||
                  substring(TRIM(MARCARA) from 2 for 2) || '.' ||
                  substring(TRIM(MARCARA) from 4 for 2);
   end

   if (STRLEN(trim(MARCARA)) = 6) then
   begin
      RESULTADO = substring(TRIM(MARCARA) from 1 for 1) || '.' ||
                  substring(TRIM(MARCARA) from 2 for 2) || '.' ||
                  substring(TRIM(MARCARA) from 4 for 2) || '.' ||
                  substring(TRIM(MARCARA) from 6 for 1);
   end

   if (STRLEN(trim(MARCARA)) = 7) then
   begin
      RESULTADO = substring(TRIM(MARCARA) from 1 for 1) || '.' ||
                  substring(TRIM(MARCARA) from 2 for 2) || '.' ||
                  substring(TRIM(MARCARA) from 4 for 2) || '.' ||
                  substring(TRIM(MARCARA) from 6 for 2);
   end


   if (STRLEN(trim(MARCARA)) = 8) then
   begin
      RESULTADO = substring(TRIM(MARCARA) from 1 for 1) || '.' ||
                  substring(TRIM(MARCARA) from 2 for 2) || '.' ||
                  substring(TRIM(MARCARA) from 4 for 2) || '.' ||
                  substring(TRIM(MARCARA) from 6 for 3);
   end

--5.55.55.555
--5.55.55.555
  suspend;
end^


ALTER PROCEDURE PEDIDOPALM_D (
    IDFILIAL SMALLINT,
    IDREPRESENTANTE SMALLINT,
    IDPEDIDOPALM INTEGER)
AS
begin
  delete from pedidopalm
  where (idfilial = :idfilial) and (idrepresentante = :idrepresentante) and (idpedidopalm = :idpedidopalm);
end^


ALTER PROCEDURE PEDIDOPALM_I (
    IDFILIAL SMALLINT,
    IDREPRESENTANTE SMALLINT,
    IDPEDIDOPALM INTEGER,
    IDPEDIDO INTEGER,
    CNPJ CHAR(14),
    IDPEDIDOCLIENTE VARCHAR(20),
    DTEMISSAO DATE,
    HREMISSAO TIME,
    DESCONTO1 NUMERIC(10,2),
    DESCONTO2 NUMERIC(10,2),
    DESCONTO3 NUMERIC(10,2),
    DESCONTO4 NUMERIC(10,2),
    IDFORMAPAGTO SMALLINT,
    NATOPERACAO CHAR(5),
    SITPEDIDO CHAR(1),
    IDPORTADOR SMALLINT,
    IDCONDICAOPAGTO SMALLINT,
    IDTRANSPORTADORA SMALLINT,
    DTENTREGA DATE,
    IDTABELAPRECO INTEGER,
    OBSERVACAO VARCHAR(255),
    IDCLIENTE INTEGER,
    DATAPEDIDO DATE,
    OBS1 VARCHAR(60),
    OBS2 VARCHAR(60),
    TOTAL_PEDIDO NUMERIC(16,2),
    TOTAL_DESCONTO NUMERIC(14,2),
    TOTAL_COM_DECONTO NUMERIC(16,2),
    NRSERIE VARCHAR(15))
AS
begin
  insert into pedidopalm (
    idfilial,
    idrepresentante,
    idpedidopalm,
    idpedido,
    cnpj,
    idpedidocliente,
    dtemissao,
    hremissao,
    desconto1,
    desconto2,
    desconto3,
    desconto4,
    idformapagto,
    natoperacao,
    sitpedido,
    idportador,
    idcondicaopagto,
    idtransportadora,
    dtentrega,
    idtabelapreco,
    observacao,
    idcliente,
    datapedido,
    obs1,
    obs2,
    total_pedido,
    total_desconto,
    total_com_deconto,
    nrserie)
  values (
    :idfilial,
    :idrepresentante,
    :idpedidopalm,
    :idpedido,
    :cnpj,
    :idpedidocliente,
    :dtemissao,
    :hremissao,
    :desconto1,
    :desconto2,
    :desconto3,
    :desconto4,
    :idformapagto,
    :natoperacao,
    :sitpedido,
    :idportador,
    :idcondicaopagto,
    :idtransportadora,
    :dtentrega,
    :idtabelapreco,
    :observacao,
    :idcliente,
    :datapedido,
    :obs1,
    :obs2,
    :total_pedido,
    :total_desconto,
    :total_com_deconto,
    :nrserie);
end^


ALTER PROCEDURE PEDIDOPALM_IU (
    IDFILIAL SMALLINT,
    IDREPRESENTANTE SMALLINT,
    IDPEDIDOPALM INTEGER,
    IDPEDIDO INTEGER,
    CNPJ CHAR(14),
    IDPEDIDOCLIENTE VARCHAR(20),
    DTEMISSAO DATE,
    HREMISSAO TIME,
    DESCONTO1 NUMERIC(10,2),
    DESCONTO2 NUMERIC(10,2),
    DESCONTO3 NUMERIC(10,2),
    DESCONTO4 NUMERIC(10,2),
    IDFORMAPAGTO SMALLINT,
    NATOPERACAO CHAR(5),
    SITPEDIDO CHAR(1),
    IDPORTADOR SMALLINT,
    IDCONDICAOPAGTO SMALLINT,
    IDTRANSPORTADORA SMALLINT,
    DTENTREGA DATE,
    IDTABELAPRECO INTEGER,
    OBSERVACAO VARCHAR(255),
    IDCLIENTE INTEGER,
    DATAPEDIDO DATE,
    OBS1 VARCHAR(60),
    OBS2 VARCHAR(60),
    TOTAL_PEDIDO NUMERIC(16,2),
    TOTAL_DESCONTO NUMERIC(14,2),
    TOTAL_COM_DECONTO NUMERIC(16,2),
    NRSERIE VARCHAR(15))
AS
begin
  if (exists(select idfilial from pedidopalm where (idfilial = :idfilial) and  (idrepresentante = :idrepresentante) and  (idpedidopalm = :idpedidopalm))) then
    update pedidopalm
    set idpedido = :idpedido,
        cnpj = :cnpj,
        idpedidocliente = :idpedidocliente,
        dtemissao = :dtemissao,
        hremissao = :hremissao,
        desconto1 = :desconto1,
        desconto2 = :desconto2,
        desconto3 = :desconto3,
        desconto4 = :desconto4,
        idformapagto = :idformapagto,
        natoperacao = :natoperacao,
        sitpedido = :sitpedido,
        idportador = :idportador,
        idcondicaopagto = :idcondicaopagto,
        idtransportadora = :idtransportadora,
        dtentrega = :dtentrega,
        idtabelapreco = :idtabelapreco,
        observacao = :observacao,
        idcliente = :idcliente,
        datapedido = :datapedido,
        obs1 = :obs1,
        obs2 = :obs2,
        total_pedido = :total_pedido,
        total_desconto = :total_desconto,
        total_com_deconto = :total_com_deconto,
        nrserie = :nrserie
    where (idfilial = :idfilial) and (idrepresentante = :idrepresentante) and (idpedidopalm = :idpedidopalm);
  else
    insert into pedidopalm (
        idfilial,
        idrepresentante,
        idpedidopalm,
        idpedido,
        cnpj,
        idpedidocliente,
        dtemissao,
        hremissao,
        desconto1,
        desconto2,
        desconto3,
        desconto4,
        idformapagto,
        natoperacao,
        sitpedido,
        idportador,
        idcondicaopagto,
        idtransportadora,
        dtentrega,
        idtabelapreco,
        observacao,
        idcliente,
        datapedido,
        obs1,
        obs2,
        total_pedido,
        total_desconto,
        total_com_deconto,
        nrserie)
    values (
        :idfilial,
        :idrepresentante,
        :idpedidopalm,
        :idpedido,
        :cnpj,
        :idpedidocliente,
        :dtemissao,
        :hremissao,
        :desconto1,
        :desconto2,
        :desconto3,
        :desconto4,
        :idformapagto,
        :natoperacao,
        :sitpedido,
        :idportador,
        :idcondicaopagto,
        :idtransportadora,
        :dtentrega,
        :idtabelapreco,
        :observacao,
        :idcliente,
        :datapedido,
        :obs1,
        :obs2,
        :total_pedido,
        :total_desconto,
        :total_com_deconto,
        :nrserie);
end^


ALTER PROCEDURE PEDIDOPALM_S
RETURNS (
    IDFILIAL SMALLINT,
    IDREPRESENTANTE SMALLINT,
    IDPEDIDOPALM INTEGER,
    IDPEDIDO INTEGER,
    CNPJ CHAR(14),
    IDPEDIDOCLIENTE VARCHAR(20),
    DTEMISSAO DATE,
    HREMISSAO TIME,
    DESCONTO1 NUMERIC(10,2),
    DESCONTO2 NUMERIC(10,2),
    DESCONTO3 NUMERIC(10,2),
    DESCONTO4 NUMERIC(10,2),
    IDFORMAPAGTO SMALLINT,
    NATOPERACAO CHAR(5),
    SITPEDIDO CHAR(1),
    IDPORTADOR SMALLINT,
    IDCONDICAOPAGTO SMALLINT,
    IDTRANSPORTADORA SMALLINT,
    DTENTREGA DATE,
    IDTABELAPRECO INTEGER,
    OBSERVACAO VARCHAR(255),
    IDCLIENTE INTEGER,
    DATAPEDIDO DATE,
    OBS1 VARCHAR(60),
    OBS2 VARCHAR(60),
    TOTAL_PEDIDO NUMERIC(16,2),
    TOTAL_DESCONTO NUMERIC(14,2),
    TOTAL_COM_DECONTO NUMERIC(16,2),
    NRSERIE VARCHAR(15))
AS
begin
  for select idfilial,
             idrepresentante,
             idpedidopalm,
             idpedido,
             cnpj,
             idpedidocliente,
             dtemissao,
             hremissao,
             desconto1,
             desconto2,
             desconto3,
             desconto4,
             idformapagto,
             natoperacao,
             sitpedido,
             idportador,
             idcondicaopagto,
             idtransportadora,
             dtentrega,
             idtabelapreco,
             observacao,
             idcliente,
             datapedido,
             obs1,
             obs2,
             total_pedido,
             total_desconto,
             total_com_deconto,
             nrserie
      from pedidopalm
      into :idfilial,
           :idrepresentante,
           :idpedidopalm,
           :idpedido,
           :cnpj,
           :idpedidocliente,
           :dtemissao,
           :hremissao,
           :desconto1,
           :desconto2,
           :desconto3,
           :desconto4,
           :idformapagto,
           :natoperacao,
           :sitpedido,
           :idportador,
           :idcondicaopagto,
           :idtransportadora,
           :dtentrega,
           :idtabelapreco,
           :observacao,
           :idcliente,
           :datapedido,
           :obs1,
           :obs2,
           :total_pedido,
           :total_desconto,
           :total_com_deconto,
           :nrserie
  do
  begin
    suspend;
  end
end^


ALTER PROCEDURE PEDIDOPALM_U (
    IDFILIAL SMALLINT,
    IDREPRESENTANTE SMALLINT,
    IDPEDIDOPALM INTEGER,
    IDPEDIDO INTEGER,
    CNPJ CHAR(14),
    IDPEDIDOCLIENTE VARCHAR(20),
    DTEMISSAO DATE,
    HREMISSAO TIME,
    DESCONTO1 NUMERIC(10,2),
    DESCONTO2 NUMERIC(10,2),
    DESCONTO3 NUMERIC(10,2),
    DESCONTO4 NUMERIC(10,2),
    IDFORMAPAGTO SMALLINT,
    NATOPERACAO CHAR(5),
    SITPEDIDO CHAR(1),
    IDPORTADOR SMALLINT,
    IDCONDICAOPAGTO SMALLINT,
    IDTRANSPORTADORA SMALLINT,
    DTENTREGA DATE,
    IDTABELAPRECO INTEGER,
    OBSERVACAO VARCHAR(255),
    IDCLIENTE INTEGER,
    DATAPEDIDO DATE,
    OBS1 VARCHAR(60),
    OBS2 VARCHAR(60),
    TOTAL_PEDIDO NUMERIC(16,2),
    TOTAL_DESCONTO NUMERIC(14,2),
    TOTAL_COM_DECONTO NUMERIC(16,2),
    NRSERIE VARCHAR(15))
AS
begin
  update pedidopalm
  set idpedido = :idpedido,
      cnpj = :cnpj,
      idpedidocliente = :idpedidocliente,
      dtemissao = :dtemissao,
      hremissao = :hremissao,
      desconto1 = :desconto1,
      desconto2 = :desconto2,
      desconto3 = :desconto3,
      desconto4 = :desconto4,
      idformapagto = :idformapagto,
      natoperacao = :natoperacao,
      sitpedido = :sitpedido,
      idportador = :idportador,
      idcondicaopagto = :idcondicaopagto,
      idtransportadora = :idtransportadora,
      dtentrega = :dtentrega,
      idtabelapreco = :idtabelapreco,
      observacao = :observacao,
      idcliente = :idcliente,
      datapedido = :datapedido,
      obs1 = :obs1,
      obs2 = :obs2,
      total_pedido = :total_pedido,
      total_desconto = :total_desconto,
      total_com_deconto = :total_com_deconto,
      nrserie = :nrserie
  where (idfilial = :idfilial) and (idrepresentante = :idrepresentante) and (idpedidopalm = :idpedidopalm);
end^


ALTER PROCEDURE QUITA_CONTAS_RECEBER (
    IDFILIAL INTEGER,
    IDPEDIDO INTEGER,
    IDFOLHA INTEGER)
AS
declare variable vQUITAR_CONTAS_RECEBER varchar(1);
declare variable vDEF_IDCAIXA smallint;
begin
  select F.QUITAR_AUTO_RECEBER from PEDIDO P

    left join FORMAPAGTO F
      on F.IDFORMAPAGTO = P.IDFORMAPAGTO

    where P.IDFILIAL = :IDFILIAL
      and P.IDPEDIDO = :IDPEDIDO
      and P.IDFOLHA  = :IDFOLHA
   into :VQUITAR_CONTAS_RECEBER;

  if (:VQUITAR_CONTAS_RECEBER = 'S') then
  begin

     select F.DEF_CAIXA from FILIAL F
       where F.IDFILIAL = :IDFILIAL
         into :VDEF_IDCAIXA;

     update RECEBER R
        set R.DATAPAGAMENTO  = R.DATAEMISSAO,
            R.VALORPAGAMENTO = R.VALORDOCUMENTO,
            R.IDCAIXA        = :VDEF_IDCAIXA,
            R.DOCUMENTO      = R.IDRECEBER
      where R.IDFILIAL  = :IDFILIAL
        and R.IDRECEBER = :IDPEDIDO
        and R.IDFOLHA   = :IDFOLHA;
  end
end^


ALTER PROCEDURE RECALCULA_COMISSAO_PALM (
    IDFILIAL INTEGER,
    DTINI DATE,
    DTFIM DATE)
RETURNS (
    TOTALCOMISSAO NUMERIC(10,2),
    IDPEDIDO INTEGER,
    TAXAESPECIAL NUMERIC(10,2))
AS
declare variable VIDPEDIDO integer;
declare variable VTOTALCOMISSAO numeric(10,2);
declare variable VIDPRODUTO integer;
declare variable VCATEGORIA char(1);
declare variable VCOMISSAOBALCAO numeric(16,2);
declare variable VCOMISSAOINTERIOR numeric(16,2);
declare variable VCOMISSAOPRACA numeric(16,2);
declare variable VIDFOLHA integer;
begin
   /* ATUALIZA TAXA DE COMISSAO DO PRODUTO */
   for select PE.IDPEDIDO, IT.IDPRODUTO,R.CATEGORIA, P.COMISSAOBALCAO, P.COMISSAOINTERIOR, P.COMISSAOPRACA, PE.IDFOLHA, R.TAXAESPECIAL from PEDIDO PE

     left join ITENSPEDIDO IT
       on IT.IDFILIAL = :IDFILIAL
      and IT.IDPEDIDO = PE.IDPEDIDO
      and IT.IDFOLHA = PE.IDFOLHA

     join REPRESENTANTE R
       on R.IDREPRESENTANTE = PE.IDREPRESENTANTE

     join PRODUTO P
       on P.IDPRODUTO = IT.IDPRODUTO
      and P.IDFILIAL = :IDFILIAL

      where PE.IDFILIAL = :IDFILIAL
        and PE.DATAPEDIDO between :DTINI and :DTFIM
            into :vIDPEDIDO, :vIDPRODUTO, :vCATEGORIA, :vCOMISSAOBALCAO, :vCOMISSAOINTERIOR, :vCOMISSAOPRACA, :vIDFOLHA, :TAXAESPECIAL
   do
     begin
        update ITENSPEDIDO IT
           set IT.TAXACOMISSAO = IF_SN(:vCATEGORIA,'=','B',:vCOMISSAOBALCAO,1)*
                                 IF_SN(:vCATEGORIA,'=','I',:vCOMISSAOINTERIOR,1)*
                                 IF_SN(:vCATEGORIA,'=','P',:vCOMISSAOPRACA,1)*
                                 IF_SN(:vCATEGORIA,'=','E',:TAXAESPECIAL,1)
           where IT.IDFILIAL = :IDFILIAL
             and IT.IDPEDIDO = :vIDPEDIDO
             and IT.IDFOLHA = :vIDFOLHA
             and IT.IDPRODUTO = :vIDPRODUTO
             and IT.TAXACOMISSAO is null;
    end

   /* ATUALIZA TAXA DE COMISSAO DO PRODUTO */
   for select D.IDPEDIDO, IT.IDPRODUTO,R.CATEGORIA, P.COMISSAOBALCAO, P.COMISSAOINTERIOR, P.COMISSAOPRACA, D.IDFOLHA, R.TAXAESPECIAL from DEVOLUCAO D

     left join ITENSPEDIDO IT
       on IT.IDFILIAL = :IDFILIAL
      and IT.IDPEDIDO = D.IDPEDIDO
      and IT.IDFOLHA = D.IDFOLHA

     join REPRESENTANTE R
       on R.IDREPRESENTANTE = D.IDREPRESENTANTE

     join PRODUTO P
       on P.IDPRODUTO = IT.IDPRODUTO
      and P.IDFILIAL = :IDFILIAL

      where D.IDFILIAL = :IDFILIAL
        and D.DATAPEDIDO between :DTINI and :DTFIM
            into :vIDPEDIDO, :vIDPRODUTO, :vCATEGORIA, :vCOMISSAOBALCAO, :vCOMISSAOINTERIOR, :vCOMISSAOPRACA, :vIDFOLHA, :TAXAESPECIAL
   do
     begin
        update ITENSPEDIDO IT
           set IT.TAXACOMISSAO = IF_SN(:vCATEGORIA,'=','B',:vCOMISSAOBALCAO,1)*
                                 IF_SN(:vCATEGORIA,'=','I',:vCOMISSAOINTERIOR,1)*
                                 IF_SN(:vCATEGORIA,'=','P',:vCOMISSAOPRACA,1)*
                                 IF_SN(:vCATEGORIA,'=','E',:TAXAESPECIAL,1)
           where IT.IDFILIAL = :IDFILIAL
             and IT.IDPEDIDO = :vIDPEDIDO
             and IT.IDFOLHA = :vIDFOLHA
             and IT.IDPRODUTO = :vIDPRODUTO
             and IT.TAXACOMISSAO is null;
    end

    /* ATUALIZA TAXA DE COMISSAO DO REPRESENTANTE NO PEDIDO */
    for select IT.IDPEDIDO, IT.IDFOLHA, sum(((IT.PRECOVENDA*IT.QTDEPEDIDO)*IF_SN(R.CATEGORIA,'=','B',P.COMISSAOBALCAO,1)*
                                                               IF_SN(R.CATEGORIA,'=','I',P.COMISSAOINTERIOR,1)*
                                                               IF_SN(R.CATEGORIA,'=','P',P.COMISSAOPRACA,1)*
                                                               IF_SN(R.CATEGORIA,'=','E',R.TAXAESPECIAL,1)
                                                                              /100)   )  from PEDIDO PE
          left join ITENSPEDIDO IT
             on IT.IDPEDIDO = PE.IDPEDIDO
            and IT.IDFILIAL = :IDFILIAL
            and IT.IDFOLHA = PE.IDFOLHA

           join PRODUTO P
             on P.IDFILIAL  = :IDFILIAL
            and P.IDPRODUTO = IT.IDPRODUTO

           join REPRESENTANTE R
             on R.IDREPRESENTANTE = PE.IDREPRESENTANTE

           where PE.IDFILIAL = :IDFILIAL
             and PE.DATAPEDIDO between :DTINI and :DTFIM
             group by IT.IDPEDIDO, IT.IDFOLHA
             into :vIDPEDIDO, :VIDFOLHA, :vTOTALCOMISSAO
    do
      begin
           update PEDIDO PE
              set PE.TOTALCOMISSAO = :vTOTALCOMISSAO
              where PE.IDFILIAL = :IDFILIAL
                and PE.IDPEDIDO = :vIDPEDIDO
                and PE.IDFOLHA = :vIDFOLHA;
                TOTALCOMISSAO = :vTOTALCOMISSAO;
                IDPEDIDO = :vIDPEDIDO;
        suspend;
      end

    /* ATUALIZA TAXA DE COMISSAO DO REPRESENTANTE NO DEVOLUCAO */
    for select IT.IDPEDIDO, IT.IDFOLHA, sum(((IT.PRECOVENDA*IT.QTDEPEDIDO)*IF_SN(R.CATEGORIA,'=','B',P.COMISSAOBALCAO,1)*
                                                               IF_SN(R.CATEGORIA,'=','I',P.COMISSAOINTERIOR,1)*
                                                               IF_SN(R.CATEGORIA,'=','P',P.COMISSAOPRACA,1)*
                                                               IF_SN(R.CATEGORIA,'=','E',R.TAXAESPECIAL,1)                                                               /100)
                                                                 )  from DEVOLUCAO D
          left join ITENSPEDIDO IT
             on IT.IDPEDIDO = D.IDPEDIDO
            and IT.IDFILIAL = :IDFILIAL
            and IT.IDFOLHA = D.IDFOLHA

           join PRODUTO P
             on P.IDFILIAL  = :IDFILIAL
            and P.IDPRODUTO = IT.IDPRODUTO

           join REPRESENTANTE R
             on R.IDREPRESENTANTE = D.IDREPRESENTANTE

           where D.IDFILIAL = :IDFILIAL
             and D.DATAPEDIDO between :DTINI and :DTFIM
             group by IT.IDPEDIDO, IT.IDFOLHA
             into :vIDPEDIDO, :VIDFOLHA, :vTOTALCOMISSAO
    do
      begin
           update DEVOLUCAO D
              set D.TOTALCOMISSAO = :vTOTALCOMISSAO
              where D.IDFILIAL = :IDFILIAL
                and D.IDPEDIDO = :vIDPEDIDO
                and D.IDFOLHA = :vIDFOLHA;
                TOTALCOMISSAO = :vTOTALCOMISSAO;
                IDPEDIDO = :vIDPEDIDO;
        suspend;
      end
end^


ALTER PROCEDURE RECALCULA_PEDIDO (
    IDFILIAL INTEGER,
    IDPEDIDO INTEGER,
    IDFOLHA INTEGER)
AS
declare variable VTOTALPRODUTO numeric(15,2);
declare variable VPRECOVENDA numeric(15,2);
declare variable VTOTALCOMISSAO numeric(15,4);
declare variable VIDCONTADOR integer;
declare variable VNUMPARCELA smallint;
declare variable VVALORDOCUMENTO numeric(14,2);
declare variable VVALORPARCELA numeric(14,2);
declare variable VTAXACOMISSAO numeric(15,4);
declare variable vVALORIPI numeric(15,2);
begin
  -- ATUALIZA PEDIDO PRECO
  select sum(IT.precotabela*IT.QTDEPEDIDO),
         sum(IT.precovenda*IT.QTDEPEDIDO),
         sum(((IT.PRECOVENDA*IT.QTDEPEDIDO)*IF_SN(R.CATEGORIA,'=','B',P.COMISSAOBALCAO,1)*
                 IF_SN(R.CATEGORIA,'=','I',P.COMISSAOINTERIOR,1)*
                 IF_SN(R.CATEGORIA,'=','P',P.COMISSAOPRACA,1)/100)),
         sum(coalesce(IT.VALOR_IPI,0))  from ITENSPEDIDO IT

       left join PRODUTO P
         on P.IDFILIAL  = :IDFILIAL
        and P.IDPRODUTO = IT.IDPRODUTO

       left join PEDIDO PE
          on PE.IDFILIAL = :IDFILIAL
         and PE.IDPEDIDO = :IDPEDIDO
         and PE.IDFOLHA = :IDFOLHA

       join REPRESENTANTE R
         on R.IDREPRESENTANTE = PE.IDREPRESENTANTE

       where IT.IDFILIAL = :IDFILIAL
         and IT.IDPEDIDO = :IDPEDIDO
         and IT.IDFOLHA =  :IDFOLHA
         into :vTOTALPRODUTO, :vPRECOVENDA, :vTOTALCOMISSAO,:vVALORIPI;
    

       update PEDIDO PE
            set PE.TOTALDESCONTO = 0
          where PE.IDFILIAL = :IDFILIAL
            and PE.TOTALDESCONTO is null
            and PE.IDPEDIDO = :IDPEDIDO
            and PE.IDFOLHA = :IDFOLHA;
    
    
       update PEDIDO PE
          set PE.TOTALPRODUTO  = :VPRECOVENDA,
              PE.TOTALPEDIDO   = (:vPRECOVENDA-(PE.TOTALDESCONTO))+coalesce(:VVALORIPI,0),
              PE.TOTALCOMISSAO = :vTOTALCOMISSAO,
              PE.VALOR_IPI     = coalesce(:VVALORIPI,0)
        where PE.IDFILIAL = :IDFILIAL
          and PE.IDPEDIDO = :IDPEDIDO
          and PE.IDFOLHA = :IDFOLHA;

/*
    select (pe.TOTALCOMISSAO/Pe.TOTALPEDIDO)*100, PE.PARCELA from PEDIDO PE
      where PE.IDFILIAL = :IDFILIAL
        and PE.IDPEDIDO = :IDPEDIDO
        and PE.IDFOLHA = :IDFOLHA
      into :VTAXACOMISSAO, :VNUMPARCELA;

    if (:VTAXACOMISSAO is null) then VTAXACOMISSAO = 0;


    vIDCONTADOR = 1;
    vVALORPARCELA = :VPRECOVENDA/:VNUMPARCELA;
    VVALORDOCUMENTO = 0;

    while (:VIDCONTADOR <= :VNUMPARCELA)
    do begin
           update RECEBER R
              set R.VALORDOCUMENTO = :vVALORPARCELA,
                  R.TAXACOMISSAO = :VTAXACOMISSAO
            where R.IDFILIAL = :IDFILIAL
               and R.IDRECEBER = :IDPEDIDO
               and R.IDFOLHA = :IDFOLHA
               and R.IDORDEM = :VIDCONTADOR;

           vVALORDOCUMENTO = vVALORDOCUMENTO+VVALORPARCELA;

           if (VIDCONTADOR = :VNUMPARCELA)
           then begin
                update RECEBER R
                  set R.VALORDOCUMENTO = :VVALORPARCELA+(:VPRECOVENDA-:VVALORDOCUMENTO),
                      R.TAXACOMISSAO = :VTAXACOMISSAO
                where R.IDFILIAL = :IDFILIAL
                   and R.IDRECEBER = :IDPEDIDO
                   and R.IDFOLHA = :IDFOLHA
                   and R.IDORDEM = :VIDCONTADOR;
           end

           VIDCONTADOR = VIDCONTADOR+1;
    end

*/



/*
          --  CONTAS A RECEBER
          if (vGERAFINANCEIRO = 'S') then begin
             if (:VSITUACAOPEDIDO = 'V') then begin
                 if (not exists(select R.IDRECEBER from RECEBER R where R.IDFILIAL = :vIDFILIAL
                                                                    and R.IDRECEBER = :vINC_IDPEDIDO
                                                                    and R.IDFOLHA = 9
                                                                    and R.IDORDEM = 1)) then begin
                      insert into RECEBER (IDFILIAL, IDRECEBER, IDFOLHA, IDORDEM, DOCUMENTO, DATAVENCIMENTO, DATAEMISSAO, IDCLIENTE,
                                           IDREPRESENTANTE, IDFORMAPAGTO, VALORDOCUMENTO,IDCENTROCUSTO, TAXACOMISSAO)
                                   values (:vIDFILIAL, :vINC_IDPEDIDO,'9'   ,'1'     ,'PALM'    , :vdtemissao+:vPRAZOPAGTO, :vDTEMISSAO, :vIDCLIENTE,
                                           :vIDREPRESENTANTE, :vIDFORMAPAGTO,:vTOTALPRODUTO,:vIDCENTROCUSTO, :vtaxacomissao );
                 end
             end
          end


  suspend;
*/
end^


ALTER PROCEDURE RECEBENDO_PALM (
    IDFILIAL INTEGER,
    DATAIMPORT DATE,
    ARQUIVO_PALM VARCHAR(40))
RETURNS (
    IDPEDIDO INTEGER)
AS
declare variable VIDFILIAL smallint;
declare variable VIDREPRESENTANTE integer;
declare variable VIDPEDIDOPALM integer;
declare variable VIDPEDIDO integer;
declare variable VCNPJ char(14);
declare variable VIDPEDIDOCLIENTE varchar(20);
declare variable VDTEMISSAO date;
declare variable VIDCLIENTE integer;
declare variable VIDFORMAPAGTO smallint;
declare variable VIDCONDICAOPAGTO smallint;
declare variable VIDCFOP smallint;
declare variable VIDTABELAPRECO smallint;
declare variable VINC_IDPEDIDO integer;
declare variable VIDPRODUTO integer;
declare variable VIDUNIDADEMEDIDA integer;
declare variable VQTDEPEDIDO numeric(10,4);
declare variable VFATORCONVERSAO integer;
declare variable VPRECOTABELA numeric(16,2);
declare variable VPRECOVENDA numeric(16,2);
declare variable VTAXADESCONTO numeric(10,2);
declare variable VCUSTONOTAUNIT numeric(16,2);
declare variable VCUSTOTRIBUTOUNIT numeric(16,2);
declare variable VCUSTOSENCARGOS numeric(16,2);
declare variable VTOTALPRODUTO numeric(16,2);
declare variable VTOTALCOMISSAO numeric(16,2);
declare variable VPRAZOPAGTO integer;
declare variable VIDCENTROCUSTO integer;
declare variable VCFOP varchar(5);
declare variable VSITUACAOPEDIDO char(1);
declare variable VITEMTROCA char(1);
declare variable VGERAFINANCEIRO char(1);
declare variable VCATEGORIA char(1);
declare variable VCOMISSAOBALCAO numeric(10,2);
declare variable VCOMISSAOINTERIOR numeric(10,2);
declare variable VCOMISSAOPRACA numeric(10,2);
declare variable VSALDO_RECEBER numeric(16,2);
declare variable VLIMITE_CREDITO numeric(16,2);
declare variable VOBS1 varchar(60);
declare variable VTOTAL_PEDIDO numeric(16,2);
declare variable VFATORCONVERSAO1 integer;
declare variable VOBSERVACAO_NFE blob sub_type 1 segment size 80;
begin
  select F.IDCENTROCUSTOPEDIDO from FILIAL F
     where F.IDFILIAL = :IDFILIAL
      into :vIDCENTROCUSTO;

  select C.OBSERVACAO_NFE from CONFIGURACAO C
     where C.IDFILIAL = :IDFILIAL
      into :VOBSERVACAO_NFE;

  for select PM.IDFILIAL, PM.IDREPRESENTANTE, PM.IDPEDIDOPALM, PM.IDPEDIDO, PM.CNPJ,
          PM.IDPEDIDOCLIENTE, PM.DTEMISSAO, C.IDCLIENTE, PM.IDFORMAPAGTO,PM.IDCONDICAOPAGTO,
          CF.IDCFOP, PM.IDTABELAPRECO, PGT.PRAZO, CF.CFOP, CF.GERAFINANCEIRO, R.CATEGORIA,
          C.LIMITECREDITO, PM.OBS1, PM.TOTAL_PEDIDO from PEDIDOPALM  PM
          left join CONDICAOPAGTO PGT
           on  PGT.IDCONDICAOPAGTO = PM.IDCONDICAOPAGTO

          join REPRESENTANTE R
            on R.IDREPRESENTANTE = PM.IDREPRESENTANTE

          join CLIENTE C
            on if_NS(strlen(C.CNPJ),'>=',18,clr_dig(C.CNPJ),clr_dig(C.CPF)) = PM.CNPJ

          left join CFOP CF
            on CF.CFOP = PM.NATOPERACAO
           and CF.IDFILIAL = :IDFILIAL

          into :vIDFILIAL, :vIDREPRESENTANTE, :vIDPEDIDOPALM, :vIDPEDIDO, :vCNPJ,
               :vIDPEDIDOCLIENTE, :vDTEMISSAO, :vIDCLIENTE, :vIDFORMAPAGTO, :vIDCONDICAOPAGTO,
               :vIDCFOP, :vIDTABELAPRECO, :vPRAZOPAGTO, :vCFOP, :vGERAFINANCEIRO, :vCATEGORIA,
               :vLIMITE_CREDITO, :VOBS1, :VTOTAL_PEDIDO
  do
