
DROP INDEX ITBMODELO_09;

CREATE OR ALTER trigger ttmodelo_b9u for tbmodelo
active before update position 9
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
begin

end;

CREATE OR ALTER procedure spu_copia_modelo_geral (
    id1 integer,
    id2 integer,
    descricao_1 varchar(50),
    usuario_id integer)
returns (
    codigo integer,
    descricao varchar(50),
    familia_codigo integer,
    grade_codigo integer,
    matriz_codigo integer,
    status char(1),
    linha_codigo integer,
    tipoproduto_codigo integer,
    classificacao char(1),
    unidademedida_sigla varchar(3),
    modelo_pai integer,
    densidade integer,
    espessura numeric(10,1),
    tipo_tag varchar(10),
    acrescimo numeric(15,2),
    prioridade integer,
    gerar_remessa char(1),
    horas_bloqueio integer,
    horas_tolerancia integer,
    cor_id integer,
    tamanho integer,
    t01 char(1),
    t02 char(1),
    t03 char(1),
    t04 char(1),
    t05 char(1),
    t06 char(1),
    t07 char(1),
    t08 char(1),
    t09 char(1),
    t10 char(1),
    t11 char(1),
    t12 char(1),
    t13 char(1),
    t14 char(1),
    t15 char(1),
    t16 char(1),
    t17 char(1),
    t18 char(1),
    t19 char(1),
    t20 char(1),
    observacao blob sub_type 0 segment size 80)
as
BEGIN

end;

CREATE OR ALTER procedure spu_pedido_margem_v2 (
    data_1 date,
    data_2 date,
    familia_id integer)
as
declare variable cliente_id integer;
declare variable modelo_id integer;
declare variable tamanho integer;
declare variable percentual_margem numeric(10,2);
declare variable data date;
Begin

end;

ALTER TABLE TBMODELO ADD OLD_PERFIL VARCHAR(10) DEFAULT '';
update TBMODELO set OLD_PERFIL = CLASSIFICACAO;
ALTER TABLE TBMODELO DROP CLASSIFICACAO;
ALTER TABLE TBMODELO ADD CLASSIFICACAO VARCHAR(10) DEFAULT '';
update TBMODELO set CLASSIFICACAO = OLD_PERFIL;
ALTER TABLE TBMODELO DROP OLD_PERFIL;

CREATE INDEX ITBMODELO_09 ON TBMODELO (CLASSIFICACAO);
SET STATISTICS INDEX ITBMODELO_09;

CREATE OR ALTER procedure spu_pedido_margem_v2 (
    data_1 date,
    data_2 date,
    familia_id integer)
as
declare variable cliente_id integer;
declare variable modelo_id integer;
declare variable tamanho integer;
declare variable percentual_margem numeric(10,2);
declare variable data date;
Begin

        FOR
        SELECT  CLIENTE_ID,
                MODELO_ID,
                TAMANHO,
                PERCENTUAL_MARGEM,
                DATA
        FROM (
        SELECT DISTINCT
               A.EMPRESA_CODIGO AS CLIENTE_ID,
               P.MODELO_CODIGO AS MODELO_ID,
               A.TAMANHO AS TAMANHO,
               ROUND(100 - (A.MARGEM / (A.MARGEM + A.VALOR_UNITARIO) * 100),0) AS PERCENTUAL_MARGEM,
               MAX(A.DATA_EMISSAO) DATA
        FROM TBNFS_ITEM A, TBPRODUTO P, TBMODELO M, TBNFS S
        WHERE A.DATA_EMISSAO BETWEEN :DATA_1 AND :DATA_2
          AND A.MARGEM > 0
          AND A.PEDIDO_ITEM_PE_CONTROLE > 0
          AND P.CODIGO = A.produto_codigo
          AND M.CODIGO = P.MODELO_CODIGO
          AND S.CONTROLE = A.NFS_CONTROLE
          AND M.FAMILIA_CODIGO = :FAMILIA_ID
          AND M.CLASSIFICACAO = 'B'
        GROUP BY 1,2,3,4
        )
        ORDER BY 1,2,3,5

        INTO :CLIENTE_ID, :MODELO_ID, :TAMANHO, :PERCENTUAL_MARGEM, :DATA
         do begin

            UPDATE OR INSERT INTO TBCLIENTE_MARGEM (CLIENTE_ID, MODELO_ID, TAMANHO, PERCENTUAL_MARGEM, DATAHORA)
            VALUES (:CLIENTE_ID, :MODELO_ID, :TAMANHO, :PERCENTUAL_MARGEM, :DATA)
            MATCHING (CLIENTE_ID, MODELO_ID, TAMANHO);

            UPDATE OR INSERT INTO TBCLIENTE_MARGEM (CLIENTE_ID, MODELO_ID, TAMANHO, PERCENTUAL_MARGEM, DATAHORA)
            VALUES (:CLIENTE_ID, :MODELO_ID, 0, :PERCENTUAL_MARGEM, :DATA)
            MATCHING (CLIENTE_ID, MODELO_ID, TAMANHO);

            end

  UPDATE TBPEDIDO_ITEM PI SET
  MARGEM = PI.VALOR /
  (COALESCE(((SELECT FIRST 1 CMP.PERCENTUAL_MARGEM
              FROM TBCLIENTE_MARGEM CMP
             WHERE CMP.CLIENTE_ID = PI.CLIENTE_CODIGO
               AND CMP.MODELO_ID  = PI.MODELO_CODIGO
               AND CMP.TAMANHO    = 0)/100.0),1)) - PI.VALOR
  WHERE PI.DATA_INCLUSAO BETWEEN :DATA_1 AND :DATA_2
    AND PI.MARGEM = 0
    AND PI.MODELO_CODIGO = (SELECT M.CODIGO FROM TBMODELO M WHERE M.CODIGO = PI.MODELO_CODIGO AND M.CLASSIFICACAO = 'B' AND M.FAMILIA_CODIGO = :FAMILIA_ID)
    AND PI.PEDIDO = (SELECT PEDIDO FROM TBPEDIDO P WHERE P.TIPO_PEDIDO = '1' AND P.PEDIDO = PI.PEDIDO AND P.FAMILIA_CODIGO = :FAMILIA_ID);

  UPDATE TBPEDIDO_ITEM PI SET
  MARGEM =   PI.VALOR /
  (COALESCE(((SELECT FIRST 1 CMP.PERCENTUAL_MARGEM
              FROM TBCLIENTE_MARGEM CMP
             WHERE CMP.CLIENTE_ID = PI.CLIENTE_CODIGO
               AND CMP.MODELO_ID  = PI.MODELO_CODIGO
               AND CMP.TAMANHO    = PI.TAMANHO)/100.0),1)) - PI.VALOR
  WHERE PI.DATA_INCLUSAO BETWEEN :DATA_1 AND :DATA_2
    AND PI.MARGEM = 0
    AND PI.MODELO_CODIGO = (SELECT M.CODIGO FROM TBMODELO M WHERE M.CODIGO = PI.MODELO_CODIGO AND M.CLASSIFICACAO = 'B' AND M.FAMILIA_CODIGO = :FAMILIA_ID)
    AND PI.PEDIDO = (SELECT PEDIDO FROM TBPEDIDO P WHERE P.TIPO_PEDIDO = '1' AND P.PEDIDO = PI.PEDIDO AND P.FAMILIA_CODIGO = :FAMILIA_ID);

End;

CREATE OR ALTER procedure spu_copia_modelo_geral (
    id1 integer,
    id2 integer,
    descricao_1 varchar(50),
    usuario_id integer)
returns (
    codigo integer,
    descricao varchar(50),
    familia_codigo integer,
    grade_codigo integer,
    matriz_codigo integer,
    status char(1),
    linha_codigo integer,
    tipoproduto_codigo integer,
    classificacao char(1),
    unidademedida_sigla varchar(3),
    modelo_pai integer,
    densidade integer,
    espessura numeric(10,1),
    tipo_tag varchar(10),
    acrescimo numeric(15,2),
    prioridade integer,
    gerar_remessa char(1),
    horas_bloqueio integer,
    horas_tolerancia integer,
    cor_id integer,
    tamanho integer,
    t01 char(1),
    t02 char(1),
    t03 char(1),
    t04 char(1),
    t05 char(1),
    t06 char(1),
    t07 char(1),
    t08 char(1),
    t09 char(1),
    t10 char(1),
    t11 char(1),
    t12 char(1),
    t13 char(1),
    t14 char(1),
    t15 char(1),
    t16 char(1),
    t17 char(1),
    t18 char(1),
    t19 char(1),
    t20 char(1),
    observacao blob sub_type 0 segment size 80)
as
BEGIN

FOR Select A.CODIGO, A.DESCRICAO, A.FAMILIA_CODIGO, A.GRADE_CODIGO, A.MATRIZ_CODIGO,
    A.STATUS, A.LINHA_CODIGO, A.TIPOPRODUTO_CODIGO,
    A.T01, A.T02, A.T03, A.T04, A.T05, A.T06, A.T07, A.T08, A.T09, A.T10,
    A.T11, A.T12, A.T13, A.T14, A.T15, A.T16, A.T17, A.T18, A.T19, A.T20,
    (Select B.Observacao from TbModelo_Observacao B Where B.Modelo_Codigo = A.Codigo),
    CLASSIFICACAO, UNIDADEMEDIDA_SIGLA, MODELO_PAI, DENSIDADE, ESPESSURA,
    TIPO_TAG, ACRESCIMO, PRIORIDADE, GERAR_REMESSA, HORAS_BLOQUEIO, HORAS_TOLERANCIA,
    COR_ID,TAMANHO
From TbModelo A
Left join TbModelo_Padrao P On P.Modelo_Id = A.Codigo
Where A.Codigo = :ID1

INTO :CODIGO, :DESCRICAO, :FAMILIA_CODIGO, :GRADE_CODIGO,
     :MATRIZ_CODIGO, :STATUS, :LINHA_CODIGO, :TIPOPRODUTO_CODIGO,
     :T01, :T02, :T03, :T04, :T05, :T06, :T07, :T08, :T09, :T10,
     :T11, :T12, :T13, :T14, :T15, :T16, :T17, :T18, :T19, :T20, :OBSERVACAO,
     :CLASSIFICACAO, :UNIDADEMEDIDA_SIGLA, :MODELO_PAI, :DENSIDADE, :ESPESSURA,
     :TIPO_TAG, :ACRESCIMO, :PRIORIDADE, :GERAR_REMESSA, :HORAS_BLOQUEIO,
     :HORAS_TOLERANCIA, :COR_ID, :TAMANHO

DO

    IF (:CODIGO > 0) then
         BEGIN

            UPDATE or INSERT INTO TBMODELO (
            CODIGO, DESCRICAO, FAMILIA_CODIGO, GRADE_CODIGO, MATRIZ_CODIGO,
            STATUS, LINHA_CODIGO, TIPOPRODUTO_CODIGO,
            T01, T02, T03, T04, T05, T06, T07, T08, T09, T10,
            T11, T12, T13, T14, T15, T16, T17, T18, T19, T20,
            CLASSIFICACAO, UNIDADEMEDIDA_SIGLA, MODELO_PAI, DENSIDADE,
            ESPESSURA, TIPO_TAG, ACRESCIMO, PRIORIDADE, GERAR_REMESSA,
            HORAS_BLOQUEIO, HORAS_TOLERANCIA, USUARIO_CODIGO) VALUES (
           :ID2, :DESCRICAO_1, :FAMILIA_CODIGO, :GRADE_CODIGO, :MATRIZ_CODIGO,
           :STATUS, :LINHA_CODIGO, :TIPOPRODUTO_CODIGO,
           :T01, :T02, :T03, :T04, :T05, :T06, :T07, :T08, :T09, :T10,
           :T11, :T12, :T13, :T14, :T15, :T16, :T17, :T18, :T19, :T20,
           :CLASSIFICACAO, :UNIDADEMEDIDA_SIGLA, :MODELO_PAI, :DENSIDADE,
           :ESPESSURA, :TIPO_TAG, :ACRESCIMO, :PRIORIDADE, :GERAR_REMESSA,
           :HORAS_BLOQUEIO, :HORAS_TOLERANCIA, :USUARIO_ID)
            MATCHING (CODIGO);
    
         UPDATE or INSERT
         INTO TBMODELO_OBSERVACAO (MODELO_CODIGO, OBSERVACAO)
         VALUES (:ID2, :OBSERVACAO) MATCHING (MODELO_CODIGO);

         if (:COR_ID > 0 and :TAMANHO > 0) then
            Begin
             UPDATE or INSERT
             INTO TBMODELO_PADRAO (MODELO_ID, COR_ID, TAMANHO)
             VALUES (:ID2, :COR_ID, :TAMANHO) MATCHING (MODELO_ID);
            End

         END

SUSPEND;
END;

CREATE OR ALTER trigger ttmodelo_b9u for tbmodelo
active before update position 9
AS
DECLARE VARIABLE HISTORICO VARCHAR(500);
begin

   HISTORICO = '';

   if (OLD.tipoproduto_codigo <> NEW.tipoproduto_codigo) then
       BEGIN
       HISTORICO = HISTORICO||' Tipo '||OLD.tipoproduto_codigo||'->'||NEW.tipoproduto_codigo;
       END
   if (OLD.familia_codigo <> NEW.familia_codigo) then
       BEGIN
       HISTORICO = HISTORICO||' Fam.'||OLD.familia_codigo||'->'||NEW.familia_codigo;
       END
   if (OLD.linha_codigo <> NEW.linha_codigo) then
       BEGIN
       HISTORICO = HISTORICO||' Lin.'||OLD.linha_codigo||'->'||NEW.linha_codigo;
       END
   if (OLD.unidademedida_sigla <> NEW.unidademedida_sigla) then
       BEGIN
       HISTORICO = HISTORICO||' UM.'||OLD.unidademedida_sigla||'->'||NEW.unidademedida_sigla;
       END
   if (OLD.descricao <> NEW.descricao) then
       BEGIN
       HISTORICO = HISTORICO||' Desc.'||OLD.descricao||'->'||NEW.descricao;
       END
   if (OLD.descricao_nf <> NEW.descricao_nf) then
       BEGIN
       HISTORICO = HISTORICO||' Desc.Cpl.'||OLD.descricao_nf||'->'||NEW.descricao_nf;
       END
   if (OLD.matriz_codigo <> NEW.matriz_codigo) then
       BEGIN
       HISTORICO = HISTORICO||' Mtz.'||OLD.matriz_codigo||'->'||NEW.matriz_codigo;
       END
   if (OLD.grade_codigo <> NEW.grade_codigo) then
       BEGIN
       HISTORICO = HISTORICO||' Grd.'||OLD.grade_codigo||'->'||NEW.grade_codigo;
       END
   if (OLD.classificacao <> NEW.classificacao) then
       BEGIN
       HISTORICO = HISTORICO||' Class.'||OLD.classificacao||'->'||NEW.classificacao;
       END
   if (OLD.compra_produz <> NEW.compra_produz) then
       BEGIN
       HISTORICO = HISTORICO||' Form.Entr.Est.'||OLD.compra_produz||'->'||NEW.compra_produz;
       END
   if (OLD.Densidade <> NEW.Densidade) then
       BEGIN
       HISTORICO = HISTORICO||' Dens.'||OLD.Densidade||'->'||NEW.Densidade;
       END
   if (OLD.Espessura<> NEW.Espessura) then
       BEGIN
       HISTORICO = HISTORICO||' Esp.'||OLD.Espessura||'->'||NEW.Espessura;
       END
   if (OLD.Tipo_Tag <> NEW.Tipo_Tag) then
       BEGIN
       HISTORICO = HISTORICO||' Tp.Tag '||OLD.Tipo_Tag||'->'||NEW.Tipo_Tag;
       END
   if (OLD.Acrescimo <> NEW.Acrescimo) then
       BEGIN
       HISTORICO = HISTORICO||' Acresc.'||OLD.Acrescimo||'->'||NEW.Acrescimo;
       END
   if (OLD.Prioridade <> NEW.Prioridade) then
       BEGIN
       HISTORICO = HISTORICO||' Prior.Prod.'||OLD.Prioridade||'->'||NEW.Prioridade;
       END
   if (OLD.Horas_Bloqueio <> NEW.Horas_Bloqueio) then
       BEGIN
       HISTORICO = HISTORICO||' Hr.Blq.'||OLD.Horas_Bloqueio||'->'||NEW.Horas_Bloqueio;
       END
   if (OLD.Gerar_Remessa <> NEW.Gerar_Remessa) then
       BEGIN
       HISTORICO = HISTORICO||' Hab.Ger.Rem.'||OLD.Gerar_Remessa||'->'||NEW.Gerar_Remessa;
       END
   if (OLD.Modelo_Pai <> NEW.Modelo_Pai) then
       BEGIN
       HISTORICO = HISTORICO||' Modelo Pai:'||OLD.Modelo_Pai||'->'||NEW.Modelo_Pai;
       END

   if (OLD.t01 <> NEW.t01) then BEGIN HISTORICO = HISTORICO||' T01 '||OLD.t01||'->'||NEW.t01; END
   if (OLD.t02 <> NEW.t02) then BEGIN HISTORICO = HISTORICO||' T02 '||OLD.t02||'->'||NEW.t02; END
   if (OLD.t03 <> NEW.t03) then BEGIN HISTORICO = HISTORICO||' T03 '||OLD.t03||'->'||NEW.t03; END
   if (OLD.t04 <> NEW.t04) then BEGIN HISTORICO = HISTORICO||' T04 '||OLD.t04||'->'||NEW.t04; END
   if (OLD.t05 <> NEW.t05) then BEGIN HISTORICO = HISTORICO||' T05 '||OLD.t05||'->'||NEW.t05; END
   if (OLD.t06 <> NEW.t06) then BEGIN HISTORICO = HISTORICO||' T06 '||OLD.t06||'->'||NEW.t06; END
   if (OLD.t07 <> NEW.t07) then BEGIN HISTORICO = HISTORICO||' T07 '||OLD.t07||'->'||NEW.t07; END
   if (OLD.t08 <> NEW.t08) then BEGIN HISTORICO = HISTORICO||' T08 '||OLD.t08||'->'||NEW.t08; END
   if (OLD.t09 <> NEW.t09) then BEGIN HISTORICO = HISTORICO||' T09 '||OLD.t09||'->'||NEW.t09; END
   if (OLD.t10 <> NEW.t10) then BEGIN HISTORICO = HISTORICO||' T10 '||OLD.t10||'->'||NEW.t10; END
   if (OLD.t11 <> NEW.t11) then BEGIN HISTORICO = HISTORICO||' T11 '||OLD.t11||'->'||NEW.t11; END
   if (OLD.t12 <> NEW.t12) then BEGIN HISTORICO = HISTORICO||' T12 '||OLD.t12||'->'||NEW.t12; END
   if (OLD.t13 <> NEW.t13) then BEGIN HISTORICO = HISTORICO||' T13 '||OLD.t13||'->'||NEW.t13; END
   if (OLD.t14 <> NEW.t14) then BEGIN HISTORICO = HISTORICO||' T14 '||OLD.t14||'->'||NEW.t14; END
   if (OLD.t15 <> NEW.t15) then BEGIN HISTORICO = HISTORICO||' T15 '||OLD.t15||'->'||NEW.t15; END
   if (OLD.t16 <> NEW.t16) then BEGIN HISTORICO = HISTORICO||' T16 '||OLD.t16||'->'||NEW.t16; END
   if (OLD.t17 <> NEW.t17) then BEGIN HISTORICO = HISTORICO||' T17 '||OLD.t17||'->'||NEW.t17; END
   if (OLD.t18 <> NEW.t18) then BEGIN HISTORICO = HISTORICO||' T18 '||OLD.t18||'->'||NEW.t18; END
   if (OLD.t19 <> NEW.t19) then BEGIN HISTORICO = HISTORICO||' T19 '||OLD.t19||'->'||NEW.t19; END
   if (OLD.t11 <> NEW.t20) then BEGIN HISTORICO = HISTORICO||' T20 '||OLD.t20||'->'||NEW.t20; END

   if (OLD.STATUS <> NEW.STATUS) then
       BEGIN
       if (NEW.STATUS = '0') then
           HISTORICO = HISTORICO||' Status Inativado';
       if (NEW.STATUS = '1') then
           HISTORICO = HISTORICO||' Status Ativado';
       END

   if (HISTORICO <> '') Then
       Begin
       INSERT INTO TBHISTORICO (
       TABELA, TABELA_ID, USUARIO, IP, HISTORICO) VALUES (
      'TBMODELO', OLD.CODIGO,
      (Select First 1 MON$USER from mon$attachments where mon$attachment_id = current_connection),
      (Select First 1 MON$REMOTE_ADDRESS from mon$attachments where mon$attachment_id = current_connection),
       :Historico);
       End
end;
