
CREATE OR ALTER trigger ttbnfe_item_b2i for tbnfe_item
active before insert position 2
AS
DECLARE VARIABLE Fam_Operacao VARCHAR(100);
DECLARE VARIABLE Fam_Produto  VARCHAR(4);
DECLARE VARIABLE UF  VARCHAR(4);
Begin

    if (New.Controle > 0) then
        Begin

        UF = coalesce((select first 1 e.empresa_uf from tbnfe e where e.controle = new.nfe_controle),'XX');

        Fam_Operacao = Coalesce((Select First 1 O.Familia From TbOperacao_Vinculo_Cfop O
                                  Where O.estabelecimento_codigo = New.Estabelecimento_Codigo
                                    and O.Operacao_Codigo = New.Operacao_Codigo
                                    and O.Cfop_Codigo = New.Cfop_Codigo
                                    and (o.uf = :UF or o.uf = 'XX' )
                                    order by o.uf),'');

          if (:FAM_OPERACAO <> '') Then
              Begin
    
              Fam_Produto = Coalesce((Select First 1 P.Familia_Codigo From TbProduto P Where P.Codigo = New.Produto_Codigo),0);
    
              if (Position(lPad(:Fam_Produto,4,'0'),:FAM_OPERACAO) = 0) then
                  BEGIN
                      Exception "..." '1 - OPERACAO/CFOP NAO PODE SER USADA COM A FAMILIA DE PRODUTOS INFORMADA.'||
                      'OPERACAO: '||NEW.OPERACAO_CODIGO||'- FAMILIA: '||:Fam_Produto||
                      ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
                  END
              End
        End

End;

CREATE OR ALTER trigger ttbnfe_item_b2u for tbnfe_item
active before update position 2
AS
DECLARE VARIABLE Fam_Operacao VARCHAR(100);
DECLARE VARIABLE Fam_Produto  VARCHAR(4);
declare variable UF varchar(4);
Begin

    if (New.Controle > 0) then
        Begin

        if (Old.estabelecimento_Codigo <> New.Estabelecimento_Codigo or
            Old.Operacao_Codigo <> New.Operacao_Codigo or
            Old.Cfop_Codigo <> New.Cfop_Codigo or
            Old.Produto_Codigo <> New.Produto_Codigo) Then
            Begin

            UF = coalesce((select first 1 e.empresa_uf from tbnfe e where e.controle = new.nfe_controle),'XX');

            Fam_Operacao = Coalesce((Select First 1 O.Familia From TbOperacao_Vinculo_Cfop O
                                  Where O.estabelecimento_codigo = New.Estabelecimento_Codigo
                                    and O.Operacao_Codigo = New.Operacao_Codigo
                                    and O.Cfop_Codigo = New.Cfop_Codigo
                                    and (o.uf = :UF or o.uf = 'XX' )
                                    order by o.uf),'');

              if (:FAM_OPERACAO <> '') Then
                  Begin
        
                  Fam_Produto = Coalesce((Select First 1 P.Familia_Codigo From TbProduto P Where P.Codigo = New.Produto_Codigo),0);
        
                  if (Position(lPad(:Fam_Produto,4,'0'),:FAM_OPERACAO) = 0) then
                      BEGIN
                          Exception "..." '2 - OPERACAO/CFOP NAO PODE SER USADA COM A FAMILIA DE PRODUTOS INFORMADA.'||
                          'OPERACAO: '||NEW.OPERACAO_CODIGO||'- FAMILIA: '||:Fam_Produto||
                          ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
                      END

                  End

            End

        End

End;

CREATE OR ALTER trigger ttbnfs_item_b2i for tbnfs_item
active before insert position 2
AS
DECLARE VARIABLE Fam_Operacao VARCHAR(100);
DECLARE VARIABLE Fam_Produto  VARCHAR(4);
declare variable UF varchar(4);
Begin

    if (New.Controle > 0) then
        Begin

        UF = coalesce((select first 1 e.empresa_uf from tbnfs e where e.controle = new.nfs_controle),'XX');

        Fam_Operacao = Coalesce((Select First 1 O.Familia From TbOperacao_Vinculo_Cfop O
                                  Where O.estabelecimento_codigo = New.Estabelecimento_Codigo
                                    and O.Operacao_Codigo = New.Operacao_Codigo
                                    and O.Cfop_Codigo = New.Cfop_Codigo
                                    and (o.uf = :UF or o.uf = 'XX' )
                                    order by o.uf),'');

          if (:FAM_OPERACAO <> '') Then
              Begin
    
              Fam_Produto = Coalesce((Select First 1 P.Familia_Codigo From TbProduto P Where P.Codigo = New.Produto_Codigo),0);
    
              if (Position(lPad(:Fam_Produto,4,'0'),:FAM_OPERACAO) = 0) then
                  BEGIN
                      Exception "..." '3 - OPERACAO/CFOP NAO PODE SER USADA COM A FAMILIA DE PRODUTOS INFORMADA.'||
                      'OPERACAO: '||NEW.OPERACAO_CODIGO||'- FAMILIA: '||:Fam_Produto||
                      ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
                  END
              End
        End

End;

CREATE OR ALTER trigger ttbnfs_item_b2u for tbnfs_item
active before update position 2
AS
DECLARE VARIABLE Fam_Operacao VARCHAR(100);
DECLARE VARIABLE Fam_Produto  VARCHAR(4);
declare variable uf varchar(4);
Begin

    if (New.Controle > 0) then
        Begin

        if (Old.estabelecimento_Codigo <> New.Estabelecimento_Codigo or
            Old.Operacao_Codigo <> New.Operacao_Codigo or
            Old.Cfop_Codigo <> New.Cfop_Codigo or
            Old.Produto_Codigo <> New.Produto_Codigo) Then
            Begin

            UF = coalesce((select first 1 e.empresa_uf from tbnfs e where e.controle = new.nfs_controle),'XX');

            Fam_Operacao = Coalesce((Select First 1 O.Familia From TbOperacao_Vinculo_Cfop O
                                  Where O.estabelecimento_codigo = New.Estabelecimento_Codigo
                                    and O.Operacao_Codigo = New.Operacao_Codigo
                                    and O.Cfop_Codigo = New.Cfop_Codigo
                                    and (o.uf = :UF or o.uf = 'XX' )
                                    order by o.uf),'');


              if (:FAM_OPERACAO <> '') Then
                  Begin
        
                  Fam_Produto = Coalesce((Select First 1 P.Familia_Codigo From TbProduto P Where P.Codigo = New.Produto_Codigo),0);
        
                  if (Position(lPad(:Fam_Produto,4,'0'),:FAM_OPERACAO) = 0) then
                      BEGIN
                          Exception "..." '4 - OPERACAO/CFOP NAO PODE SER USADA COM A FAMILIA DE PRODUTOS INFORMADA.'||
                          'OPERACAO: '||NEW.OPERACAO_CODIGO||'- FAMILIA: '||:Fam_Produto||
                          ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
                      END

                  End

            End

        End

End;

