SET TERM ^ ;

ALTER TABLE TBMODELO_SERVICO ADD PERCENTUAL_CUSTO_DIRETO NUMERIC(15,2)
^

SET TERM ; ^

SET TERM ^ ;

ALTER TABLE TBMODELO_BLOQUEIO_PERFIL ALTER COLUMN PERFIL DROP DEFAULT;
^

SET TERM ; ^

SET TERM ^ ;
CREATE OR ALTER TRIGGER TTBMODELO_BLOQUEIO_PERFIL_B01I FOR TBMODELO_BLOQUEIO_PERFIL
ACTIVE BEFORE INSERT POSITION 0
AS
declare variable ENCONTRADO INTEGER;
declare variable PERFIL  VARCHAR(100);
declare variable COR     VARCHAR(100);
declare variable TAMANHO VARCHAR(100);
BEGIN
    ENCONTRADO = 0;
    ENCONTRADO = IIF((SELECT FIRST 1 A.ID FROM TBMODELO_BLOQUEIO_PERFIL A
                 WHERE IIF(NEW.PERFIL IS NOT NULL ,A.PERFIL = NEW.PERFIL,A.PERFIL IS NULL AND NEW.PERFIL IS NULL)
                      AND A.MODELO_ID = NEW.MODELO_ID AND A.COR_ID = NEW.COR_ID AND A.ID <> NEW.ID) > 0,1,0);

    IF(:ENCONTRADO = 1)THEN
    BEGIN
      PERFIL  = IIF(NEW.PERFIL IS NOT NULL,' NO PERFIL '||COALESCE((SELECT FIRST 1 A.DESCRICAO FROM TBPERFIL A WHERE A.ID = NEW.PERFIL AND A.TABELA = 'PED'),''),' EM TODOS OS PERFIS');
      COR     = IIF(NEW.COR_ID > 0 ,'COR '||COALESCE((SELECT FIRST 1 B.DESCRICAO FROM TBCOR B WHERE B.CODIGO = NEW.COR_ID),''),' DE TODAS AS CORES');
      TAMANHO = IIF(NEW.TAMANHO > 0,'TAM '||COALESCE((SELECT FIRST 1 C.TAMANHO_DESCRICAO FROM SPC_MODELO_GRADE_TAMANHO(NEW.MODELO_ID) C WHERE C.TAMANHO = NEW.TAMANHO),''),' EM TODOS OS TAMANHOS');

      EXCEPTION "..." 'BLOQUEIO '||:COR||''||:TAMANHO||:PERFIL||' JA EXISTENTE';
    END

    IF(NEW.ID IS NULL OR NEW.ID = 0) THEN
    BEGIN
        NEW.ID = GEN_ID(GTBMODELO_BLOQUEIO_PERFIL,1);
    END
END
^

SET TERM ; ^

SET TERM ^ ;
CREATE OR ALTER TRIGGER TTBMODELO_BLOQUEIO_PERFIL_B02I FOR TBMODELO_BLOQUEIO_PERFIL
ACTIVE BEFORE INSERT POSITION 1
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN
    HISTORICO = '';
    IF(NEW.MODELO_ID > 0) THEN
    BEGIN
        HISTORICO = HISTORICO||' BLOQUEIO ID '||FN_LPAD(NEW.ID,4,0);
        IF(NEW.PERFIL IS NOT NULL) THEN
        BEGIN
           HISTORICO = HISTORICO||', PERFIL '||COALESCE((SELECT FIRST 1 B.DESCRICAO FROM TBPERFIL B WHERE B.ID = NEW.PERFIL AND B.TABELA = 'PED'),'');
        END
        ELSE
        BEGIN
          HISTORICO = HISTORICO||', PERFIL TODOS';
        END
        HISTORICO = HISTORICO||', COR '||IIF(NEW.COR_ID > 0 ,COALESCE((SELECT FIRST 1 FN_LPAD(A.CODIGO,5,0)||' - '||A.DESCRICAO FROM TBCOR A WHERE A.CODIGO = NEW.COR_ID),''),'TODAS');
        HISTORICO = HISTORICO||', TAM '||IIF(NEW.TAMANHO > 0,COALESCE((SELECT FIRST 1 A.TAMANHO_DESCRICAO FROM SPC_MODELO_GRADE_TAMANHO(NEW.MODELO_ID) A WHERE A.TAMANHO = NEW.TAMANHO),''),'TODOS');
    END
    
    IF(HISTORICO <> '') THEN
    BEGIN
        HISTORICO = HISTORICO||' INCLUIDO'; 
        EXECUTE PROCEDURE SPI_HISTORICO('TBMODELO',NEW.MODELO_ID,HISTORICO);
    END
END
^

SET TERM ; ^

SET TERM ^ ;
CREATE OR ALTER TRIGGER TTBMODELO_BLOQUEIO_PERFIL_B01U FOR TBMODELO_BLOQUEIO_PERFIL
ACTIVE BEFORE UPDATE POSITION 5
AS
declare variable historico varchar(8000);
BEGIN
 HISTORICO = '';
    IF(NEW.MODELO_ID > 0) THEN
    BEGIN
        HISTORICO = HISTORICO||' BLOQUEIO ID '||FN_LPAD(NEW.ID,4,0)||', PERFIL '||COALESCE((SELECT FIRST 1 B.DESCRICAO FROM TBPERFIL B WHERE B.ID = OLD.PERFIL AND B.TABELA = 'PED'),'');
        IF(NEW.COR_ID <> old.COR_ID) THEN
        BEGIN
           HISTORICO = HISTORICO||' COR '||IIF(OLD.COR_ID > 0,COALESCE((SELECT FIRST 1 FN_LPAD(A.CODIGO,5,0)||' - '||A.DESCRICAO FROM TBCOR A WHERE A.CODIGO = OLD.COR_ID),''),'TODAS')
           ||' -> '||IIF(NEW.COR_ID > 0,COALESCE((SELECT FIRST 1 FN_LPAD(A.CODIGO,5,0)||' - '||A.DESCRICAO FROM TBCOR A WHERE A.CODIGO = NEW.COR_ID),''),'TODAS');
        END

        IF(NEW.TAMANHO <> OLD.TAMANHO) THEN
        BEGIN
           HISTORICO = HISTORICO||', TAM '||IIF(OLD.TAMANHO > 0,COALESCE((SELECT FIRST 1 A.TAMANHO_DESCRICAO FROM SPC_MODELO_GRADE_TAMANHO(OLD.MODELO_ID) A WHERE A.TAMANHO = OLD.TAMANHO),''),'TODOS')
           ||' -> '||IIF(NEW.TAMANHO > 0,COALESCE((SELECT FIRST 1 A.TAMANHO_DESCRICAO FROM SPC_MODELO_GRADE_TAMANHO(NEW.MODELO_ID) A WHERE A.TAMANHO = NEW.TAMANHO),''),'TODOS');
        END

        IF(NEW.PERFIL IS DISTINCT FROM OLD.PERFIL) THEN
        BEGIN
           HISTORICO = HISTORICO||', PERFIL '||COALESCE((SELECT FIRST 1 B.DESCRICAO FROM TBPERFIL B WHERE B.ID = OLD.PERFIL AND B.TABELA = 'PED'),'TODOS')
           ||' -> '||COALESCE((SELECT FIRST 1 B.DESCRICAO FROM TBPERFIL B WHERE B.ID = NEW.PERFIL AND B.TABELA = 'PED'),'TODOS');
        END
    END
    
    IF(HISTORICO <> '') THEN
    BEGIN
        EXECUTE PROCEDURE SPI_HISTORICO('TBMODELO',NEW.MODELO_ID,FN_ELIPSES(HISTORICO,500));
    END
END
^

SET TERM ; ^

SET TERM ^ ;
CREATE OR ALTER TRIGGER TTBMODELO_BLOQUEIO_PERFIL_B01D FOR TBMODELO_BLOQUEIO_PERFIL
ACTIVE BEFORE DELETE POSITION 1
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
BEGIN
    HISTORICO = '';
    IF(OLD.MODELO_ID > 0) THEN
    BEGIN
        HISTORICO = HISTORICO||' BLOQUEIO ID '||FN_LPAD(OLD.ID,4,0);

        IF(OLD.PERFIL IS NOT NULL) THEN
        BEGIN
           HISTORICO = HISTORICO||', PERFIL '||COALESCE((SELECT FIRST 1 B.DESCRICAO FROM TBPERFIL B WHERE B.ID = OLD.PERFIL AND B.TABELA = 'PED'),'');
        END
        ELSE
        BEGIN
          HISTORICO = HISTORICO||', PERFIL TODOS';
        END
        HISTORICO = HISTORICO||', COR '||IIF(OLD.COR_ID > 0,COALESCE((SELECT FIRST 1 FN_LPAD(A.CODIGO,5,0)||' - '||A.DESCRICAO FROM TBCOR A WHERE A.CODIGO = OLD.COR_ID),''),'TODAS');
        HISTORICO = HISTORICO||', TAM '||IIF(OLD.TAMANHO > 0,COALESCE((SELECT FIRST 1 A.TAMANHO_DESCRICAO FROM SPC_MODELO_GRADE_TAMANHO(OLD.MODELO_ID) A WHERE A.TAMANHO = OLD.TAMANHO),''),'TODOS');
    END
    
    IF(HISTORICO <> '') THEN
    BEGIN
        HISTORICO = HISTORICO||' EXCLUIDO'; 
        EXECUTE PROCEDURE SPI_HISTORICO('TBMODELO',OLD.MODELO_ID,HISTORICO);
    END
END
^

SET TERM ; ^

SET TERM ^ ;
CREATE OR ALTER TRIGGER TTBPEDIDO_ITEM_B0U_02 FOR TBPEDIDO_ITEM
ACTIVE BEFORE UPDATE POSITION 0
AS
DECLARE VARIABLE Tipo_Pedido  Char(1);
DECLARE VARIABLE Mod_Qtd_Min  Integer;
DECLARE VARIABLE Mod_Qtd_Mult Integer;
DECLARE VARIABLE Blq_Ped      Char(1);
DECLARE VARIABLE Blq_Qtd_Min  Integer;
DECLARE VARIABLE Blq_Qtd_Mult Integer;
DECLARE VARIABLE Cli_Qtd_Min  Char(1);
DECLARE VARIABLE Cli_Qtd_Mult Char(1);
DECLARE VARIABLE Cor_Id       Integer;
DECLARE VARIABLE Produto VarChar(100);
DECLARE VARIABLE ecomerce     Integer;
begin

  ecomerce = Coalesce((Select c.ecommerce From TbPedido c Where Pedido = New.Pedido and Estabelecimento_Codigo = New.Estabelecimento_Codigo),0);

  if ((New.Tamanho <> Old.Tamanho or
      New.Quantidade <> Old.Quantidade or
      New.Produto_Codigo <> Old.Produto_Codigo or
     (New.Situacao <> Old.Situacao and New.Situacao = 1)) and  ecomerce = 0) Then
       Begin

          Tipo_Pedido = Coalesce((Select Tipo_Pedido From TbPedido Where Pedido = New.Pedido and Estabelecimento_Codigo = New.Estabelecimento_Codigo),'1');
          Cli_Qtd_Min = '1';
          Cli_Qtd_Mult= '1';
        
          if (:Tipo_Pedido = '1' and New.Tamanho > 0 and New.Situacao = 1) Then --Pedido Normal
              Begin
        
                For
                Select First 1 C.Quantidade_Minima, C.Quantidade_Multipla
                  From TbCliente_Modelo_Preco C
                 Where C.Cliente_Codigo = New.Cliente_Codigo
                   and C.Modelo_Codigo = New.Modelo_Codigo
                  Into :Cli_Qtd_Min, :Cli_Qtd_Mult
                    Do
                 Begin
                   End
        
                For
                Select First 1 P.Cor_Codigo, P.Descricao
                  From TbProduto P
                 Where P.Codigo = New.Produto_Codigo
                  Into :Cor_Id, :Produto
                    Do
                 Begin
        
                    if (:Cor_Id > 0) Then
                        Begin
        
                        Blq_Qtd_Min  = 0;
                        Blq_Qtd_Mult = 0;
        
                        For
                        Select First 1 B.Blq_Ped, Coalesce(P.Qtd_Min,0), Coalesce(P.Qtd_Mult,0)
                          From TbModelo_Bloqueio B
                     Left Join TbPerfil P On B.Perfil = P.Id and P.Tabela = 'SKU' and P.Qtd_Tipo = 'T' --'T' Por Tamanho
                         Where B.Modelo_ID = New.Modelo_Codigo
                           and B.Tamanho = New.Tamanho
                           and B.Cor_Id = :Cor_Id
                          Into :Blq_Ped, :Blq_Qtd_Min, :Blq_Qtd_Mult
                            do
                         Begin
                             /*if (:Blq_Ped = '1') then
                                 Begin
                                    Exception "..." 'PRODUTO BLOQUEADO PARA PEDIDO. PRODUTO: '||NEW.PRODUTO_CODIGO||'-'||:PRODUTO||
                                    ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
                                 End */
                             if (:Blq_Qtd_Min > 0 and New.Quantidade < :Blq_Qtd_Min and :Cli_Qtd_Min = '1') then
                                 Begin
                                    Exception "..." 'QUANTIDADE MÍNIMA DO PRODUTO ANTINGIDO, ALTERAÇÃO DO ITEM CANCELADA. PRODUTO: '||NEW.PRODUTO_CODIGO||'-'||:PRODUTO
                                    ||' QUANT.MÍNIMA: '||:BLQ_QTD_MIN||' QUANT. NO PEDIDO: '||NEW.QUANTIDADE
                                    ||' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
                                 End
                             if (:Blq_Qtd_Mult > 0 and :Cli_Qtd_Mult = '1') Then
                                 Begin
                                 if (TRUNC(NEW.QUANTIDADE) - (TRUNC(NEW.QUANTIDADE)/:Blq_Qtd_Mult) * :Blq_Qtd_Mult > 0) then
                                     Begin
                                        Exception "..." 'QUANTIDADE MÚLTIMA DO PRODUTO VIOLADO, ALTERAÇÃO DO ITEM CANCELADA. PRODUTO: '||NEW.PRODUTO_CODIGO||'-'||:PRODUTO
                                        ||' QUANT.MÚLTIPLA: '||:BLQ_QTD_MULT||' QUANT.NO PEDIDO: '||NEW.QUANTIDADE
                                        ||' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
                                     End
                                 End
                           End


                           if(New.Tamanho        <> Old.Tamanho       or
                              new.MODELO_CODIGO  <> old.Modelo_Codigo or
                              new.COR_ID         <> old.cor_id        or
                              New.Produto_Codigo <> Old.Produto_Codigo) then
                              begin
                                        
                                    For
                                    Select First 1 1 as Blq_Ped
                                      From TbModelo_Bloqueio_perfil B
                                     Where B.Modelo_ID = New.Modelo_Codigo
                                        and (b.perfil = (select first 1 classificacao from tbpedido xyz where xyz.PEDIDO = new.PEDIDO) or b.perfil is null)
                                         AND ((B.COR_ID  = :COR_ID     AND B.TAMANHO = new.TAMANHO)
                                           OR (B.TAMANHO = 0           AND B.COR_ID = 0)
                                           OR (B.TAMANHO = new.TAMANHO AND B.COR_ID = 0)
                                           OR (B.TAMANHO = 0           AND B.COR_ID = :COR_ID))
                                      Into :Blq_Ped
                                        do
                                     Begin
                                        Exception "..." 'PRODUTO BLOQUEADO PARA PEDIDO. PRODUTO: '||NEW.PRODUTO_CODIGO||'-'||:PRODUTO||
                                        ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
                    
                                     end
                               end
        
        -------------
        
                        Mod_Qtd_Min  = 0;
                        Mod_Qtd_Mult = 0;
        
                        For
                Select First 1  Case When NEW.Tamanho = 1 Then MI01 When NEW.Tamanho = 2 Then MI02
                                     When NEW.Tamanho = 3 Then MI03 When NEW.Tamanho = 4 Then MI04
                                     When NEW.Tamanho = 5 Then MI05 When NEW.Tamanho = 6 Then MI06
                                     When NEW.Tamanho = 7 Then MI07 When NEW.Tamanho = 8 Then MI08
                                     When NEW.Tamanho = 9 Then MI09 When NEW.Tamanho =10 Then MI10
                                     When NEW.Tamanho =11 Then MI11 When NEW.Tamanho =12 Then MI12
                                     When NEW.Tamanho =13 Then MI13 When NEW.Tamanho =14 Then MI14
                                     When NEW.Tamanho =15 Then MI15 When NEW.Tamanho =16 Then MI16
                                     When NEW.Tamanho =17 Then MI17 When NEW.Tamanho =18 Then MI18
                                     When NEW.Tamanho =19 Then MI19 When NEW.Tamanho =20 Then MI20 End,

                                Case When NEW.Tamanho = 1 Then MU01 When NEW.Tamanho = 2 Then MU02
                                     When NEW.Tamanho = 3 Then MU03 When NEW.Tamanho = 4 Then MU04
                                     When NEW.Tamanho = 5 Then MU05 When NEW.Tamanho = 6 Then MU06
                                     When NEW.Tamanho = 7 Then MU07 When NEW.Tamanho = 8 Then MU08
                                     When NEW.Tamanho = 9 Then MU09 When NEW.Tamanho =10 Then MU10
                                     When NEW.Tamanho =11 Then MU11 When NEW.Tamanho =12 Then MU12
                                     When NEW.Tamanho =13 Then MU13 When NEW.Tamanho =14 Then MU14
                                     When NEW.Tamanho =15 Then MU15 When NEW.Tamanho =16 Then MU16
                                     When NEW.Tamanho =17 Then MU17 When NEW.Tamanho =18 Then MU18
                                     When NEW.Tamanho =19 Then MU19 When NEW.Tamanho =20 Then MU20 End

                          From TbModelo_Pedido_Cota M
                         Where M.Modelo_Id = New.Modelo_Codigo
                          Into :Mod_Qtd_Min, :Mod_Qtd_Mult
                            do
                         Begin
                             if (:Mod_Qtd_Min > 0 and New.Quantidade < :Mod_Qtd_Min and :Cli_Qtd_Min = '1') then
                                 Begin
                                    Exception "..." 'QUANTIDADE MÍNIMA DO MODELO ANTINGIDO, ALTERAÇÃO DO ITEM CANCELADA. PRODUTO: '||NEW.PRODUTO_CODIGO||'-'||:PRODUTO
                                    ||' QUANT.MÍNIMA: '||:Mod_QTD_MIN||' QUANT. NO PEDIDO: '||NEW.QUANTIDADE
                                    ||' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
                                 End
                             if (:Mod_Qtd_Mult > 0 and :Cli_Qtd_Mult = '1') Then
                                 Begin
                                 if (TRUNC(NEW.QUANTIDADE) - (TRUNC(NEW.QUANTIDADE)/:Mod_Qtd_Mult) * :Mod_Qtd_Mult > 0) then
                                     Begin
                                        Exception "..." 'QUANTIDADE MÚLTIMA DO MODELO VIOLADO, ALTERAÇÃO DO ITEM CANCELADA. PRODUTO: '||NEW.PRODUTO_CODIGO||'-'||:PRODUTO
                                        ||' QUANT.MÚLTIPLA: '||:MOD_QTD_MULT||' QUANT.NO PEDIDO: '||NEW.QUANTIDADE
                                        ||' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
                                     End
                                 End
                           End
        
                        End
                   End
              End
       End
End

^

SET TERM ; ^

SET TERM ^ ;
CREATE OR ALTER TRIGGER TTBPEDIDO_ITEM_B0I_02 FOR TBPEDIDO_ITEM
ACTIVE BEFORE INSERT POSITION 0
AS
DECLARE VARIABLE Tipo_Pedido  Char(1);
DECLARE VARIABLE Mod_Qtd_Min  Integer;
DECLARE VARIABLE Mod_Qtd_Mult Integer;
DECLARE VARIABLE Blq_Ped      Char(1);
DECLARE VARIABLE Blq_Qtd_Min  Integer;
DECLARE VARIABLE Blq_Qtd_Mult Integer;
DECLARE VARIABLE Cli_Qtd_Min  Char(1);
DECLARE VARIABLE Cli_Qtd_Mult Char(1);
DECLARE VARIABLE Cor_Id       Integer;
DECLARE VARIABLE Produto VarChar(100);
DECLARE VARIABLE ecomerce     Integer;
begin

  ecomerce = Coalesce((Select c.ecommerce From TbPedido c Where Pedido = New.Pedido and Estabelecimento_Codigo = New.Estabelecimento_Codigo),0);

  Tipo_Pedido = Coalesce((Select Tipo_Pedido From TbPedido Where Pedido = New.Pedido and Estabelecimento_Codigo = New.Estabelecimento_Codigo),'1');
  Cli_Qtd_Min = '1';
  Cli_Qtd_Mult= '1';

  if (:Tipo_Pedido = '1' and New.Tamanho > 0 and New.Situacao = 1 and ecomerce = 0) Then --Pedido Normal
      Begin

        For
        Select First 1 C.Quantidade_Minima, C.Quantidade_Multipla
          From TbCliente_Modelo_Preco C
         Where C.Cliente_Codigo = New.Cliente_Codigo
           and C.Modelo_Codigo = New.Modelo_Codigo
          Into :Cli_Qtd_Min, :Cli_Qtd_Mult
            Do
         Begin
           End

        For
        Select First 1 P.Cor_Codigo, P.Descricao
          From TbProduto P
         Where P.Codigo = New.Produto_Codigo
          Into :Cor_Id, :Produto
            Do
         Begin

            if (:Cor_Id > 0) Then
                Begin

                Blq_Qtd_Min  = 0;
                Blq_Qtd_Mult = 0;

                For
                Select First 1 B.Blq_Ped, Coalesce(P.Qtd_Min,0), Coalesce(P.Qtd_Mult,0)
                  From TbModelo_Bloqueio B
             Left Join TbPerfil P On B.Perfil = P.Id and P.Tabela = 'SKU' and P.Qtd_Tipo = 'T' --'T' Por Tamanho
                 Where B.Modelo_ID = New.Modelo_Codigo
                   and B.Tamanho = New.Tamanho
                   and B.Cor_Id = :Cor_Id
                  Into :Blq_Ped, :Blq_Qtd_Min, :Blq_Qtd_Mult
                    do
                 Begin

                     /*if (:Blq_Ped = '1' or :Blq_Ped = '3') then
                         Begin
                            Exception "..." 'PRODUTO BLOQUEADO PARA PEDIDO. PRODUTO: '||NEW.PRODUTO_CODIGO||'-'||:PRODUTO||
                            ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
                         End*/

                     if (:Blq_Qtd_Min > 0 and New.Quantidade < :Blq_Qtd_Min and :Cli_Qtd_Min = '1') then
                         Begin
                            Exception "..." 'QUANTIDADE MINIMA DO PRODUTO ATINGIDO, INCLUSAO DO ITEM CANCELADA. PRODUTO: '||NEW.PRODUTO_CODIGO||'-'||:PRODUTO
                            ||' QUANT.MINIMA: '||:BLQ_QTD_MIN||' QUANT. NO PEDIDO: '||NEW.QUANTIDADE
                            ||' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
                         End

                     if (:Blq_Qtd_Mult > 0 and :Cli_Qtd_Mult = '1') Then
                         Begin
                         if (TRUNC(NEW.QUANTIDADE) - (TRUNC(NEW.QUANTIDADE)/:Blq_Qtd_Mult) * :Blq_Qtd_Mult > 0) then
                             Begin
                                Exception "..." 'QUANTIDADE MULTIMA DO PRODUTO VIOLADO, INCLUSAO DO ITEM CANCELADA. PRODUTO: '||NEW.PRODUTO_CODIGO||'-'||:PRODUTO
                                ||' QUANT.MULTIPLA: '||:BLQ_QTD_MULT||' QUANT.NO PEDIDO: '||NEW.QUANTIDADE
                                ||' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
                             End
                         End
                   End

                For
                Select First 1 1 as Blq_Ped
                  From TbModelo_Bloqueio_perfil B
                 Where B.Modelo_ID = New.Modelo_Codigo
                    and (b.perfil = (select first 1 classificacao from tbpedido xyz where xyz.PEDIDO = new.PEDIDO) or b.perfil is null)
                     AND ((B.COR_ID  = :COR_ID     AND B.TAMANHO = new.TAMANHO)
                       OR (B.TAMANHO = 0           AND B.COR_ID = 0)
                       OR (B.TAMANHO = new.TAMANHO AND B.COR_ID = 0)
                       OR (B.TAMANHO = 0           AND B.COR_ID = :COR_ID))
                  Into :Blq_Ped
                    do
                 Begin
                    Exception "..." 'PRODUTO BLOQUEADO PARA PEDIDO. PRODUTO: '||NEW.PRODUTO_CODIGO||'-'||:PRODUTO||
                    ' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';

                 end



-------------

                Mod_Qtd_Min  = 0;
                Mod_Qtd_Mult = 0;

                For
                Select First 1  Case When NEW.Tamanho = 1 Then MI01 When NEW.Tamanho = 2 Then MI02
                                     When NEW.Tamanho = 3 Then MI03 When NEW.Tamanho = 4 Then MI04
                                     When NEW.Tamanho = 5 Then MI05 When NEW.Tamanho = 6 Then MI06
                                     When NEW.Tamanho = 7 Then MI07 When NEW.Tamanho = 8 Then MI08
                                     When NEW.Tamanho = 9 Then MI09 When NEW.Tamanho =10 Then MI10
                                     When NEW.Tamanho =11 Then MI11 When NEW.Tamanho =12 Then MI12
                                     When NEW.Tamanho =13 Then MI13 When NEW.Tamanho =14 Then MI14
                                     When NEW.Tamanho =15 Then MI15 When NEW.Tamanho =16 Then MI16
                                     When NEW.Tamanho =17 Then MI17 When NEW.Tamanho =18 Then MI18
                                     When NEW.Tamanho =19 Then MI19 When NEW.Tamanho =20 Then MI20 End,

                                Case When NEW.Tamanho = 1 Then MU01 When NEW.Tamanho = 2 Then MU02
                                     When NEW.Tamanho = 3 Then MU03 When NEW.Tamanho = 4 Then MU04
                                     When NEW.Tamanho = 5 Then MU05 When NEW.Tamanho = 6 Then MU06
                                     When NEW.Tamanho = 7 Then MU07 When NEW.Tamanho = 8 Then MU08
                                     When NEW.Tamanho = 9 Then MU09 When NEW.Tamanho =10 Then MU10
                                     When NEW.Tamanho =11 Then MU11 When NEW.Tamanho =12 Then MU12
                                     When NEW.Tamanho =13 Then MU13 When NEW.Tamanho =14 Then MU14
                                     When NEW.Tamanho =15 Then MU15 When NEW.Tamanho =16 Then MU16
                                     When NEW.Tamanho =17 Then MU17 When NEW.Tamanho =18 Then MU18
                                     When NEW.Tamanho =19 Then MU19 When NEW.Tamanho =20 Then MU20 End

                  From TbModelo_Pedido_Cota M
                 Where M.Modelo_Id = New.Modelo_Codigo
                  Into :Mod_Qtd_Min, :Mod_Qtd_Mult
                    do
                 Begin
                     if (:Mod_Qtd_Min > 0 and New.Quantidade < :Mod_Qtd_Min and :Cli_Qtd_Min = '1') then
                         Begin
                            Exception "..." 'QUANTIDADE MÍNIMA DO MODELO ANTINGIDO, INCLUSÃO DO ITEM CANCELADA. PRODUTO: '||NEW.PRODUTO_CODIGO||'-'||:PRODUTO
                            ||' QUANT.MÍNIMA: '||:Mod_QTD_MIN||' QUANT. NO PEDIDO: '||NEW.QUANTIDADE
                            ||' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
                         End
                     if (:Mod_Qtd_Mult > 0 and :Cli_Qtd_Mult = '1') Then
                         Begin
                         if (TRUNC(NEW.QUANTIDADE) - (TRUNC(NEW.QUANTIDADE)/:Mod_Qtd_Mult) * :Mod_Qtd_Mult > 0) then
                             Begin
                                Exception "..." 'QUANTIDADE MÚLTIMA DO MODELO VIOLADO, INCLUSÃO DO ITEM CANCELADA. PRODUTO: '||NEW.PRODUTO_CODIGO||'-'||:PRODUTO
                                ||' QUANT.MÚLTIPLA: '||:MOD_QTD_MULT||' QUANT.NO PEDIDO: '||NEW.QUANTIDADE
                                ||' . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ';
                             End
                         End
                   End

                End
           End
      End

End

^

SET TERM ; ^

SET TERM ^ ;
CREATE OR ALTER TRIGGER TTBMODELO_BLOQUEIO_PERFIL_B01I FOR TBMODELO_BLOQUEIO_PERFIL
ACTIVE BEFORE INSERT POSITION 0
AS
declare variable ENCONTRADO INTEGER;
declare variable PERFIL  VARCHAR(100);
declare variable COR     VARCHAR(100);
declare variable TAMANHO VARCHAR(100);
BEGIN
    ENCONTRADO = 0;
    ENCONTRADO = IIF((SELECT FIRST 1 A.ID FROM TBMODELO_BLOQUEIO_PERFIL A
                 WHERE IIF(NEW.PERFIL IS NOT NULL ,A.PERFIL = NEW.PERFIL,A.PERFIL IS NULL AND NEW.PERFIL IS NULL)
                      AND A.MODELO_ID = NEW.MODELO_ID AND A.COR_ID = NEW.COR_ID AND A.ID <> NEW.ID) > 0,1,0);

    IF(:ENCONTRADO = 1)THEN
    BEGIN
      PERFIL  = IIF(NEW.PERFIL IS NOT NULL,' NO PERFIL '||COALESCE((SELECT FIRST 1 A.DESCRICAO FROM TBPERFIL A WHERE A.ID = NEW.PERFIL AND A.TABELA = 'PED'),''),' EM TODOS OS PERFIS');
      COR     = IIF(NEW.COR_ID > 0 ,'COR '||COALESCE((SELECT FIRST 1 B.DESCRICAO FROM TBCOR B WHERE B.CODIGO = NEW.COR_ID),''),' DE TODAS AS CORES');
      TAMANHO = IIF(NEW.TAMANHO > 0,'TAM '||COALESCE((SELECT FIRST 1 C.TAMANHO_DESCRICAO FROM SPC_MODELO_GRADE_TAMANHO(NEW.MODELO_ID) C WHERE C.TAMANHO = NEW.TAMANHO),''),' EM TODOS OS TAMANHOS');

      EXCEPTION "..." 'BLOQUEIO '||:COR||''||:TAMANHO||:PERFIL||' JA EXISTENTE';
    END

    IF(NEW.ID IS NULL OR NEW.ID = 0) THEN
    BEGIN
        NEW.ID = GEN_ID(GTBMODELO_BLOQUEIO_PERFIL,1);
    END
END
^

SET TERM ; ^
