DROP INDEX ITBPEDIDO_ITEM_PROCESSADO_25;

CREATE OR ALTER trigger ttbpedido_item_proc_b1i_02 for tbpedido_item_processado
active before insert position 1
AS
Begin

end;

CREATE OR ALTER VIEW VWREGISTRO_PRODUCAO_DIA(
    DATA_REGISTRO,
    MODELO,
    PRODUTO,
    COR,
    GP,
    LINHA,
    PERFIL,
    QUANTIDADE,
    QTD_TURNO1,
    QTD_TURNO2,
    TALOES,
    MODELO_ID,
    PRODUTO_ID,
    COR_ID,
    GP_ID,
    LINHA_ID,
    PERFIL_ID,
    FAMILIA_ID,
    ESTABELECIMENTO_ID,
    TAMANHO,
    DENSIDADE,
    ESPESSURA)
AS
select

    DATA_REGISTRO,
    MODELO,
    PRODUTO,
    COR,
    GP,
    LINHA,
    PERFIL,
    sum(QUANTIDADE_PEDIDO) as QUANTIDADE,
    sum(QTD_TURNO1) as QTD_TURNO1,
    sum(QTD_TURNO2) as QTD_TURNO2,
    sum(TALOES) as TALOES,
    MODELO_ID,
    PRODUTO_ID,
    COR_ID,
    GP_ID,
    LINHA_ID,
    PERFIL_ID,
    familia_id,
    estabelecimento_id,
    tamanho,
    cast(substring(Densidade from 1  for 10) as numeric(5,2)) DENSIDADE,
    cast(substring(Densidade from 11 for 20) as numeric(5,2)) espessura

from(

    select
    
        A.Data_Producao as DATA_REGISTRO,
        A.pedido_item_controle as ID,
        
        m.descricao as MODELO,
        p.descricao as PRODUTO,
        c.descricao as COR,
        e.descricao as GP,
        r.descricao as LINHA,
        s.descricao as PERFIL,
        
        A.QUANTIDADE_PEDIDO,
        IIF(A.TURNO=1,A.QUANTIDADE_PEDIDO,0) QTD_TURNO1,
        IIF(A.TURNO=2,A.QUANTIDADE_PEDIDO,0) QTD_TURNO2,
        1 as TALOES,
        
        m.codigo as modelo_id,
        p.codigo as produto_id,
        c.codigo cor_id,
        e.codigo gp_id,
        r.codigo linha_id,
        s.id perfil_id,
        a.familia_codigo as familia_id,
        a.estabelecimento_codigo as estabelecimento_id,
        FN_TAMANHO_GRADE(p.grade_codigo, a.tamanho) tamanho,

        (Select First 1
      Coalesce((Select First 1 lpad(M.Densidade,10,0)||lpad(m.espessura,10,0)
         From TbModelo M Where M.Codigo = P2.Modelo_Codigo),'0000000000')
      From TbModelo_Consumo_Cor MC, TbFamilia F, TbProduto P2
     Where MC.Modelo_Id = p.modelo_codigo
       and MC.Cor_Id = c.codigo
       and MC.Produto_Id = P2.Codigo
       and P2.Familia_Codigo = F.Codigo
       and F.Densidade_Espessura = '1'

       and((a.tamanho = 1 and MC.T01 > 0) or
           (a.Tamanho = 2 and MC.T02 > 0) or
           (a.Tamanho = 3 and MC.T03 > 0) or
           (a.Tamanho = 4 and MC.T04 > 0) or
           (a.Tamanho = 5 and MC.T05 > 0) or
           (a.Tamanho = 6 and MC.T06 > 0) or
           (a.Tamanho = 7 and MC.T07 > 0) or
           (a.Tamanho = 8 and MC.T08 > 0) or
           (a.Tamanho = 9 and MC.T09 > 0) or
           (a.Tamanho =10 and MC.T10 > 0) or
           (a.Tamanho =11 and MC.T11 > 0) or
           (a.Tamanho =12 and MC.T12 > 0) or
           (a.Tamanho =13 and MC.T13 > 0) or
           (a.Tamanho =14 and MC.T14 > 0) or
           (a.Tamanho =15 and MC.T15 > 0) or
           (a.Tamanho =16 and MC.T16 > 0) or
           (a.Tamanho =17 and MC.T17 > 0) or
           (a.Tamanho =18 and MC.T18 > 0) or
           (a.Tamanho =19 and MC.T19 > 0) or
           (a.Tamanho =20 and MC.T20 > 0))) as Densidade
    
    From TbPedido_Item_Processado A, TbEsteira E, TbProduto P, tbmodelo M, tbcor c,tbmodelo_linha r,tbperfil s
    
        where
        --and A.Estabelecimento_Codigo = :ESTABELECIMENTO
        --and A.Data_Producao between :DATA1 and :DATA2
        --and A.familia_codigo = :FAMILIA
        
            e.codigo = a.Esteira_Producao
        and p.codigo = a.produto_codigo
        and m.codigo = p.modelo_codigo
        and c.codigo = p.cor_codigo
        and r.codigo = m.linha_codigo
        and s.id = c.perfil
        and s.tabela = 'SKU'

)

        group by
        DATA_REGISTRO,
        MODELO,
        PRODUTO,
        COR,
        GP,
        LINHA,
        PERFIL,
        MODELO_ID,
        PRODUTO_ID,
        COR_ID,
        GP_ID,
        LINHA_ID,
        PERFIL_ID,
        familia_id,
        estabelecimento_id,
        tamanho,
        Densidade,
        espessura
;

CREATE OR ALTER VIEW VWREMESSA_TALAO_DETALHE(
    ID,
    ESTABELECIMENTO_ID,
    REMESSA_ID,
    REMESSA_TALAO_ID,
    PECA_CONJUNTO,
    LOCALIZACAO_ID,
    PRODUTO_ID,
    MODELO_ID,
    COR_ID,
    TAMANHO,
    PERFIL,
    QUANTIDADE,
    QUANTIDADE_PRODUCAO,
    QUANTIDADE_PRODUCAO_TMP,
    QUANTIDADE_SALDO,
    QUANTIDADE_ALTERN,
    QUANTIDADE_ALTERN_PRODUCAO,
    QUANTIDADE_ALTERN_PRODUCAO_TMP,
    QUANTIDADE_ALTERN_SALDO,
    STATUS,
    DATA_PRODUCAO,
    DATAHORA_PRODUCAO,
    OPERADOR_ID_PRODUCAO,
    GP_ID,
    ESTOQUE_ID,
    QUANTIDADE_SOBRA,
    QUANTIDADE_SOBRA_TMP,
    LIB,
    ESTOQUE_ID_S_TRANSF,
    ESTOQUE_ID_E_TRANSF,
    VIA_ETIQUETA,
    OBSERVACAO,
    ENDERECAMENTO_ID)
AS
Select
    P.CONTROLE,
    P.ESTABELECIMENTO_CODIGO,
    P.REMESSA,
    P.REMESSA_ACUMULADO_CONTROLE,
    P.PECA_CONJUNTO,
    P.LOCALIZACAO_CODIGO,
    P.PRODUTO_CODIGO,
    P.MODELO_CODIGO,
    P.COR_ID,
    P.TAMANHO,
    '' as PERFIL,
    P.QUANTIDADE_PEDIDO,
    P.QUANTIDADE_PRODUCAO,
    P.QUANTIDADE_PRODUCAO_TMP,
    P.QUANTIDADE_SALDO,
    P.QUANTIDADE_ALTERN,
    P.QUANTIDADE_ALTERN_PRODUCAO,
    P.QUANTIDADE_ALTERN_PRODUCAO_TMP,
    P.QUANTIDADE_ALTERN_SALDO,
    P.SITUACAO,
    P.DATA_PRODUCAO, 
    P.HORA_PRODUCAO,
    P.OPERADOR_ID_PRODUCAO,
    P.PROGRAMACAO_ESTEIRA,
    P.ESTOQUE_ID,
    P.QUANTIDADE_SOBRA,
    P.QUANTIDADE_SOBRA_TMP ,
    P.LIB,
    P.ESTOQUE_ID_S_TRANSF,
    P.ESTOQUE_ID_E_TRANSF,
    P.VIA_ETIQUETA,
    P.OBSERVACAO,
    P.ENDERECAMENTO_ID

from TBPEDIDO_ITEM_PROCESSADO P
;

CREATE OR ALTER procedure spu_indicador3 (
    pestabelecimento_1 integer,
    pdata1 date,
    pdata2 date,
    flag_1 integer,
    tipo_1 integer,
    gp_id_1 varchar(3000))
returns (
    vquant integer,
    vefic_a numeric(10,4),
    vefic_b numeric(10,4),
    vperda_a numeric(10,4),
    vperda_b numeric(10,4))
as
declare variable vgp_id integer;
BEGIN

end;

CREATE OR ALTER procedure sp_indicador7 (
    estabelecimento_1 integer,
    data_1 date,
    data_2 date,
    gp_1 varchar(600),
    flag_1 integer,
    tipo_1 integer)
returns (
    meta numeric(15,4),
    total numeric(15,4))
as
declare variable peso numeric(15,4);
declare variable skus integer;
declare variable vgp_id integer;
BEGIN

end;

CREATE OR ALTER procedure sp_indicador7_2 (
    estabelecimento_1 integer,
    data_1 date,
    data_2 date,
    gp_1 varchar(2000),
    flag_1 integer,
    tipo_1 integer)
returns (
    meta numeric(15,4),
    total numeric(15,4))
as
declare variable peso numeric(15,4);
declare variable skus integer;
declare variable vgp_id integer;
BEGIN

end;


CREATE OR ALTER procedure sp_indicador_sku (
    estabelecimento_1 integer,
    data_1 date,
    data_2 date,
    gp_1 integer)
returns (
    meta numeric(15,4),
    total numeric(15,4))
as
declare variable peso numeric(15,4);
declare variable skus integer;
BEGIN

end;

ALTER TABLE TBPEDIDO_ITEM_PROCESSADO ADD OLD_PERFIL VARCHAR(10) DEFAULT '';
update TBPEDIDO_ITEM_PROCESSADO set OLD_PERFIL = PERFIL;
ALTER TABLE TBPEDIDO_ITEM_PROCESSADO DROP PERFIL;
ALTER TABLE TBPEDIDO_ITEM_PROCESSADO ADD PERFIL VARCHAR(10) DEFAULT '';
update TBPEDIDO_ITEM_PROCESSADO set PERFIL = OLD_PERFIL;
ALTER TABLE TBPEDIDO_ITEM_PROCESSADO DROP OLD_PERFIL;

CREATE INDEX ITBPEDIDO_ITEM_PROCESSADO_25 ON TBPEDIDO_ITEM_PROCESSADO (PERFIL);

CREATE OR ALTER procedure sp_indicador_sku (
    estabelecimento_1 integer,
    data_1 date,
    data_2 date,
    gp_1 integer)
returns (
    meta numeric(15,4),
    total numeric(15,4))
as
declare variable peso numeric(15,4);
declare variable skus integer;
BEGIN
    
    Total = 0;
    Delete from TMP10001;

    For
    Select Z.PESO, Count(Z.Produto_Codigo) SKUs
      From (

        Select S.Remessa, S.Data, S.Gp_Id, S.Produto_Codigo,
               S.Tamanho, S.SKUs, I.Peso
          From  (

            Select X.Remessa, X.Data, X.Gp_Id, X.Produto_Codigo, X.Tamanho, X.perfil,
                   Count(X.Produto_Codigo) SKUs, Sum(X.Quantidade) Quantidade
              From (

                Select P.Remessa, R.Data, P.Programacao_Esteira Gp_Id, P.Perfil,
                       P.Produto_Codigo, P.Tamanho, P.Quantidade_Pedido Quantidade
                From TbRemessa R, TbPedido_Item_Processado P
                Where R.Estabelecimento_Codigo = :Estabelecimento_1
                  and R.Data Between :Data_1 and :Data_2
                  and R.Numero = P.Remessa
                  and R.Tipo = '1' --Normais
                  and P.Programacao_Esteira = :gp_1
                  and P.Situacao <> 6
                Order By P.Remessa, R.Data, P.Programacao_Esteira, P.Produto_Codigo, P.Tamanho
                ) X Group by 1,2,3,4,5,6
                    Order BY 7
        ) S
        
        Left Join TmpIndicador4 I
          On I.Gp_Id = S.Gp_Id
         and S.Data Between I.Data_Inicial and I.Data_Final
         and S.Quantidade between I.Quant1 and I.Quant2
    
    ) Z Group By Z.Peso

    Into :Peso, :SKUs
    Do
    Begin

       Total = :Total + :Skus;
       Insert Into TMP10001 (Peso,SKUs) Values (:Peso,:Skus);

    End

    Meta = 0;

    For
    Select Peso, Skus
      From TMP10001
      Into :Peso, :SKUs
    Do
    Begin
      Meta = :Meta + (:Peso * ((:Skus/:Total) / 100));
    End

    SUSPEND;

END;

CREATE OR ALTER procedure sp_indicador7_2 (
    estabelecimento_1 integer,
    data_1 date,
    data_2 date,
    gp_1 varchar(2000),
    flag_1 integer,
    tipo_1 integer)
returns (
    meta numeric(15,4),
    total numeric(15,4))
as
declare variable peso numeric(15,4);
declare variable skus integer;
declare variable vgp_id integer;
BEGIN

  Total = 0;
  Delete from TMP10001;


    IF (flag_1 = 1) THEN
    BEGIN

       VGP_ID = 1;

       if ((select first 1 replace (R.gp_id,  '@', '') from tMPindicador7 R where R.data_processamento = :Data_2 AND R.gp_id = :GP_1 and r.tipo = :tipo_1) is null) then
       begin
         VGP_ID = 0;
       end

        IF (VGP_ID = 0) THEN
        BEGIN    

        For
        Select coalesce(Z.PESO,Z.PESO,0), Count(Z.Produto_Codigo) SKUs
          From (
    
            Select S.Remessa, S.Data, S.Gp_Id, S.Produto_Codigo,
                   S.Tamanho, S.SKUs, I.Peso
              From  (
    
                Select X.Remessa, X.Data, X.Gp_Id, X.Produto_Codigo, X.Tamanho, X.perfil,
                       Count(X.Produto_Codigo) SKUs, Sum(X.Quantidade) Quantidade
                  From (
    
                    Select P.Remessa, R.Data, P.Programacao_Esteira Gp_Id, P.Perfil,
                           P.Produto_Codigo, P.Tamanho, P.Quantidade_Pedido Quantidade
                    From TbRemessa R, TbPedido_Item_Processado P
                    Where R.Estabelecimento_Codigo = :Estabelecimento_1
                      and R.Data Between :Data_1 and :Data_2
                      and R.Numero = P.Remessa
                      and R.Tipo = '1' --Normais
                      and P.Programacao_Esteira in (select OSPLIT from split(:GP_1,'@'))
                      and P.Situacao <> 6
                    Order By P.Remessa, R.Data, P.Programacao_Esteira, P.Produto_Codigo, P.Tamanho
                    ) X Group by 1,2,3,4,5,6
                        Order BY 7
            ) S
            
            Left Join TmpIndicador4 I
              On I.Gp_Id = S.Gp_Id
             and S.Data Between I.Data_Inicial and I.Data_Final
             and S.Quantidade between I.Quant1 and I.Quant2
        
        ) Z Group By Z.Peso
    
        Into :Peso, :SKUs
        Do
        Begin
    
           Total = :Total + :Skus;
           Insert Into TMP10001 (Peso,SKUs) Values (:Peso,:Skus);

        End
    
        Meta = 0;
    
        For
        Select Peso, Skus
          From TMP10001
          Into :Peso, :SKUs
        Do
        Begin
          Meta = :Meta + (:Peso * ((:Skus/1) / 100));

          update or insert into tMPindicador7 (gp_id, valor, data_processamento,tipo)
                      values (:gp_1,:Meta,:DATA_2,:tipo_1) matching (gp_id,tipo,data_processamento);

        End
    end
    else
    begin
          FOR
          select r.valor,R.valor from tMPindicador7 R where R.data_processamento = :DATA_2 AND R.gp_id = :GP_1 and r.tipo = :tipo_1
            INTO    :META,
                    :TOTAL
             DO
             begin

          end

    end

    end
    else
    begin

       For
        Select Z.PESO, Count(Z.Produto_Codigo) SKUs
          From (
    
            Select S.Remessa, S.Data, S.Gp_Id, S.Produto_Codigo,
                   S.Tamanho, S.SKUs, I.Peso
              From  (
    
                Select X.Remessa, X.Data, X.Gp_Id, X.Produto_Codigo, X.Tamanho, X.perfil,
                       Count(X.Produto_Codigo) SKUs, Sum(X.Quantidade) Quantidade
                  From (
    
                    Select P.Remessa, R.Data, P.Programacao_Esteira Gp_Id, P.Perfil,
                           P.Produto_Codigo, P.Tamanho, P.Quantidade_Pedido Quantidade
                    From TbRemessa R, TbPedido_Item_Processado P
                    Where R.Estabelecimento_Codigo = :Estabelecimento_1
                      and R.Data Between :Data_1 and :Data_2
                      and R.Numero = P.Remessa
                      and R.Tipo = '1' --Normais
                      and P.Programacao_Esteira in (select OSPLIT from split(:GP_1,'@'))
                      and P.Situacao <> 6
                    Order By P.Remessa, R.Data, P.Programacao_Esteira, P.Produto_Codigo, P.Tamanho
                    ) X Group by 1,2,3,4,5,6
                        Order BY 7
            ) S
            
            Left Join TmpIndicador4 I
              On I.Gp_Id = S.Gp_Id
             and S.Data Between I.Data_Inicial and I.Data_Final
             and S.Quantidade between I.Quant1 and I.Quant2
        
        ) Z Group By Z.Peso
    
        Into :Peso, :SKUs
        Do
        Begin
    
           Total = :Total + :Skus;
           Insert Into TMP10001 (Peso,SKUs) Values (:Peso,:Skus);

        End
    
        Meta = 0;
    
        For
        Select Peso, Skus
          From TMP10001
          Into :Peso, :SKUs
        Do
        Begin
          Meta = :Meta + (:Peso * ((:Skus/1) / 100));

        End

    end

    Meta= Meta*100;
    SUSPEND;

END;

CREATE OR ALTER procedure sp_indicador7 (
    estabelecimento_1 integer,
    data_1 date,
    data_2 date,
    gp_1 varchar(600),
    flag_1 integer,
    tipo_1 integer)
returns (
    meta numeric(15,4),
    total numeric(15,4))
as
declare variable peso numeric(15,4);
declare variable skus integer;
declare variable vgp_id integer;
BEGIN

  Total = 0;
  Delete from TMP10001;


    IF (flag_1 = 1) THEN
    BEGIN

       VGP_ID = 1;

       if ((select first 1 replace (R.gp_id,  '@', '') from tMPindicador7 R where R.data_processamento = :Data_2 AND R.gp_id = :GP_1 and r.tipo = :tipo_1) is null) then
       begin
         VGP_ID = 0;
       end


        IF (VGP_ID = 0) THEN
        BEGIN    

        For
        Select Z.PESO, Count(Z.Produto_Codigo) SKUs
          From (
    
            Select S.Remessa, S.Data, S.Gp_Id, S.Produto_Codigo,
                   S.Tamanho, S.SKUs, I.Peso
              From  (
    
                Select X.Remessa, X.Data, X.Gp_Id, X.Produto_Codigo, X.Tamanho, X.perfil,
                       Count(X.Produto_Codigo) SKUs, Sum(X.Quantidade) Quantidade
                  From (
    
                    Select P.Remessa, R.Data, P.Programacao_Esteira Gp_Id, P.Perfil,
                           P.Produto_Codigo, P.Tamanho, P.Quantidade_Pedido Quantidade
                    From TbRemessa R, TbPedido_Item_Processado P
                    Where R.Estabelecimento_Codigo = :Estabelecimento_1
                      and R.Data Between :Data_1 and :Data_2
                      and R.Numero = P.Remessa
                      and R.Tipo = '1' --Normais
                      and P.Programacao_Esteira in (select OSPLIT from split(:GP_1,'@'))
                      and P.Situacao <> 6
                    Order By P.Remessa, R.Data, P.Programacao_Esteira, P.Produto_Codigo, P.Tamanho
                    ) X Group by 1,2,3,4,5,6
                        Order BY 7
            ) S
            
            Left Join TmpIndicador4 I
              On I.Gp_Id = S.Gp_Id
             and S.Data Between I.Data_Inicial and I.Data_Final
             and S.Quantidade between I.Quant1 and I.Quant2
        
        ) Z Group By Z.Peso
    
        Into :Peso, :SKUs
        Do
        Begin
    
           Total = :Total + :Skus;
           Insert Into TMP10001 (Peso,SKUs) Values (:Peso,:Skus);

        End
    
        Meta = 0;
    
        For
        Select Peso, Skus
          From TMP10001
          Into :Peso, :SKUs
        Do
        Begin
          Meta = :Meta + (:Peso * ((:Skus/:Total) / 100));

          update or insert into tMPindicador7 (gp_id, valor, data_processamento,tipo)
                      values (:gp_1,:Meta,:DATA_2,:tipo_1) matching (gp_id,tipo,data_processamento);

        End
    end
    else
    begin
       FOR
          select r.valor,R.valor from tMPindicador7 R where R.data_processamento = :DATA_2 AND R.gp_id = :GP_1 and r.tipo = :tipo_1
            INTO    :META,
                    :TOTAL
             DO
             begin

             end

    end

    end
    else
    begin

       For
        Select Z.PESO, Count(Z.Produto_Codigo) SKUs
          From (
    
            Select S.Remessa, S.Data, S.Gp_Id, S.Produto_Codigo,
                   S.Tamanho, S.SKUs, I.Peso
              From  (
    
                Select X.Remessa, X.Data, X.Gp_Id, X.Produto_Codigo, X.Tamanho, X.perfil,
                       Count(X.Produto_Codigo) SKUs, Sum(X.Quantidade) Quantidade
                  From (
    
                    Select P.Remessa, R.Data, P.Programacao_Esteira Gp_Id, P.Perfil,
                           P.Produto_Codigo, P.Tamanho, P.Quantidade_Pedido Quantidade
                    From TbRemessa R, TbPedido_Item_Processado P
                    Where R.Estabelecimento_Codigo = :Estabelecimento_1
                      and R.Data Between :Data_1 and :Data_2
                      and R.Numero = P.Remessa
                      and R.Tipo = '1' --Normais
                      and P.Programacao_Esteira in (select OSPLIT from split(:GP_1,'@'))
                      and P.Situacao <> 6
                    Order By P.Remessa, R.Data, P.Programacao_Esteira, P.Produto_Codigo, P.Tamanho
                    ) X Group by 1,2,3,4,5,6
                        Order BY 7
            ) S
            
            Left Join TmpIndicador4 I
              On I.Gp_Id = S.Gp_Id
             and S.Data Between I.Data_Inicial and I.Data_Final
             and S.Quantidade between I.Quant1 and I.Quant2
        
        ) Z Group By Z.Peso
    
        Into :Peso, :SKUs
        Do
        Begin
    
           Total = :Total + :Skus;
           Insert Into TMP10001 (Peso,SKUs) Values (:Peso,:Skus);

        End
    
        Meta = 0;
    
        For
        Select Peso, Skus
          From TMP10001
          Into :Peso, :SKUs
        Do
        Begin
          Meta = :Meta + (:Peso * ((:Skus/:Total) / 100));

        End

    end

    Meta= Meta*100;
    SUSPEND;

END;


CREATE OR ALTER procedure spu_indicador3 (
    pestabelecimento_1 integer,
    pdata1 date,
    pdata2 date,
    flag_1 integer,
    tipo_1 integer,
    gp_id_1 varchar(3000))
returns (
    vquant integer,
    vefic_a numeric(10,4),
    vefic_b numeric(10,4),
    vperda_a numeric(10,4),
    vperda_b numeric(10,4))
as
declare variable vgp_id integer;
BEGIN

    IF (flag_1 = 4) THEN
    BEGIN

      VGP_ID = 0;
      VGP_ID = COALESCE((select first 1 replace (R.gp_id,  '@', '') from tmpindicador3 R where R.data_processamento = :pdata2 AND R.gp_id = :GP_ID_1 and r.tipo = :tipo_1),0);

        IF (VGP_ID = 0) THEN
        BEGIN
            --------------------------
            FOR
            
                Select COALESCE(y.Quant,0) AS Quant,
                COALESCE(cast((y.efic_a/y.Quant) as numeric(10,4)),0) as efic_a,
                COALESCE(cast((y.efic_b/y.Quant) as numeric(10,4)),0) as efic_b,
                COALESCE(cast((y.perda_a/y.Quant) as numeric(10,4)),0) as perda_a,
                COALESCE(cast((y.perda_b/y.Quant) as numeric(10,4)),0) as perda_b
                from ( Select
                sum(z.Quant) as Quant,sum((z.efic_a*z.Quant)) as efic_a,sum((z.efic_b*z.Quant)) as efic_b,
                sum((z.perda_a*z.Quant)) as perda_a,(sum(z.perda_b*z.Quant)) as perda_b from (
                Select sum(A.QUANTIDADE_PEDIDO) as Quant,a.perfil,p.efic_a,p.efic_b,p.perda_a,p.perda_b
                From TbPedido_Item_Processado A,tbperfil p
                Where A.Estabelecimento_Codigo = :pEstabelecimento_1
                and A.Data_Producao  Between :pData1 and :pData2
                and A.Esteira_Producao in (select * from split(:gp_id_1,'@'))

                and p.id = a.perfil
                and p.tabela = 'SKU'
                group by perfil,efic_a,efic_b,perda_a,perda_b
                ) z
                ) y
            --
            
            
            INTO :vQUANT,
                 :vEFIC_A,
                 :vEFIC_B,
                 :vPERDA_A,
                 :vPERDA_B
            DO
                      update or insert into tMPindicador3 (gp_id, QUANT,EFIC_A,EFIC_B,PERDA_A,PERDA_B,data_processamento,tipo)
                      values (:GP_ID_1,:vQUANT,:vEFIC_A,:vEFIC_B,:vPERDA_A,:vPERDA_B,:pDATA2,:tipo_1) matching (gp_id,tipo,data_processamento);
            --------------------------
            SUSPEND;
        END
        ELSE
        begin
          FOR
          select replace (R.gp_id,  '@', ''),R.QUANT,R.EFIC_A,R.EFIC_B,R.PERDA_A,R.PERDA_B from tMPindicador3 R where R.data_processamento = :pdata2 AND R.gp_id = :GP_ID_1 and r.tipo = :tipo_1
            INTO :vGP_ID,
                 :vQUANT,
                 :vEFIC_A,
                 :vEFIC_B,
                 :vPERDA_A,
                 :vPERDA_B
             DO
             SUSPEND;
        END
    
    END
    ELSE
    BEGIN
        IF (flag_1 = 5) THEN
        BEGIN
             FOR
            
                Select COALESCE(y.Quant,0) AS Quant,
                COALESCE(cast((y.efic_a/y.Quant) as numeric(10,4)),0) as efic_a,
                COALESCE(cast((y.efic_b/y.Quant) as numeric(10,4)),0) as efic_b,
                COALESCE(cast((y.perda_a/y.Quant) as numeric(10,4)),0) as perda_a,
                COALESCE(cast((y.perda_b/y.Quant) as numeric(10,4)),0) as perda_b
                from ( Select
                sum(z.Quant) as Quant,sum((z.efic_a*z.Quant)) as efic_a,sum((z.efic_b*z.Quant)) as efic_b,
                sum((z.perda_a*z.Quant)) as perda_a,(sum(z.perda_b*z.Quant)) as perda_b from (
                Select sum(A.QUANTIDADE_PEDIDO) as Quant,a.perfil,p.efic_a,p.efic_b,p.perda_a,p.perda_b
                From TbPedido_Item_Processado A,tbperfil p
                Where A.Estabelecimento_Codigo = :pEstabelecimento_1
                and A.Data_Producao  Between :pData1 and :pData2
                and A.Esteira_Producao in (select * from split(:gp_id_1,'@'))
                and p.id = a.perfil
                and p.tabela = 'SKU'
                group by perfil,efic_a,efic_b,perda_a,perda_b
                ) z
                ) y

            INTO :vQUANT,
                 :vEFIC_A,
                 :vEFIC_B,
                 :vPERDA_A,
                 :vPERDA_B
              DO
                    update or insert into tMPindicador3 (gp_id, QUANT,EFIC_A,EFIC_B,PERDA_A,PERDA_B,data_processamento,tipo)
                    values (:GP_ID_1,:vQUANT,:vEFIC_A,:vEFIC_B,:vPERDA_A,:vPERDA_B,:pDATA2,:tipo_1) matching (gp_id,tipo,data_processamento);
        
              SUSPEND;
          END
          ELSE
          BEGIN
             IF (flag_1 < 4) THEN
             BEGIN

                FOR
                
                    Select COALESCE(y.Quant,0) AS Quant,
                    COALESCE(cast((y.efic_a/y.Quant) as numeric(10,4)),0) as efic_a,
                    COALESCE(cast((y.efic_b/y.Quant) as numeric(10,4)),0) as efic_b,
                    COALESCE(cast((y.perda_a/y.Quant) as numeric(10,4)),0) as perda_a,
                    COALESCE(cast((y.perda_b/y.Quant) as numeric(10,4)),0) as perda_b
                    from ( Select
                    sum(z.Quant) as Quant,sum((z.efic_a*z.Quant)) as efic_a,sum((z.efic_b*z.Quant)) as efic_b,
                    sum((z.perda_a*z.Quant)) as perda_a,(sum(z.perda_b*z.Quant)) as perda_b from (
                    Select sum(A.QUANTIDADE_PEDIDO) as Quant,a.perfil,p.efic_a,p.efic_b,p.perda_a,p.perda_b
                    From TbPedido_Item_Processado A,tbperfil p
                    Where A.Estabelecimento_Codigo = :pEstabelecimento_1
                    and A.Data_Producao  Between :pData1 and :pData2
                    and A.Esteira_Producao in (select * from split(:gp_id_1,'@'))

                    and p.id = a.perfil
                    and p.tabela = 'SKU'
                    group by perfil,efic_a,efic_b,perda_a,perda_b
                    ) z
                    ) y
                --
                
                
                INTO :vQUANT,
                     :vEFIC_A,
                     :vEFIC_B,
                     :vPERDA_A,
                     :vPERDA_B

                DO SUSPEND;

              END
              ELSE
              BEGIN
                 Exception "..." 'FLAG INVALIDA!';
              END

        END
    END
END;

CREATE OR ALTER VIEW VWREMESSA_TALAO_DETALHE(
    ID,
    ESTABELECIMENTO_ID,
    REMESSA_ID,
    REMESSA_TALAO_ID,
    PECA_CONJUNTO,
    LOCALIZACAO_ID,
    PRODUTO_ID,
    MODELO_ID,
    COR_ID,
    TAMANHO,
    PERFIL,
    QUANTIDADE,
    QUANTIDADE_PRODUCAO,
    QUANTIDADE_PRODUCAO_TMP,
    QUANTIDADE_SALDO,
    QUANTIDADE_ALTERN,
    QUANTIDADE_ALTERN_PRODUCAO,
    QUANTIDADE_ALTERN_PRODUCAO_TMP,
    QUANTIDADE_ALTERN_SALDO,
    STATUS,
    DATA_PRODUCAO,
    DATAHORA_PRODUCAO,
    OPERADOR_ID_PRODUCAO,
    GP_ID,
    ESTOQUE_ID,
    QUANTIDADE_SOBRA,
    QUANTIDADE_SOBRA_TMP,
    LIB,
    ESTOQUE_ID_S_TRANSF,
    ESTOQUE_ID_E_TRANSF,
    VIA_ETIQUETA,
    OBSERVACAO,
    ENDERECAMENTO_ID)
AS
Select
    P.CONTROLE,
    P.ESTABELECIMENTO_CODIGO,
    P.REMESSA,
    P.REMESSA_ACUMULADO_CONTROLE,
    P.PECA_CONJUNTO,
    P.LOCALIZACAO_CODIGO,
    P.PRODUTO_CODIGO,
    P.MODELO_CODIGO,
    P.COR_ID,
    P.TAMANHO,
    P.PERFIL,
    P.QUANTIDADE_PEDIDO,
    P.QUANTIDADE_PRODUCAO,
    P.QUANTIDADE_PRODUCAO_TMP,
    P.QUANTIDADE_SALDO,
    P.QUANTIDADE_ALTERN,
    P.QUANTIDADE_ALTERN_PRODUCAO,
    P.QUANTIDADE_ALTERN_PRODUCAO_TMP,
    P.QUANTIDADE_ALTERN_SALDO,
    P.SITUACAO,
    P.DATA_PRODUCAO, 
    P.HORA_PRODUCAO,
    P.OPERADOR_ID_PRODUCAO,
    P.PROGRAMACAO_ESTEIRA,
    P.ESTOQUE_ID,
    P.QUANTIDADE_SOBRA,
    P.QUANTIDADE_SOBRA_TMP ,
    P.LIB,
    P.ESTOQUE_ID_S_TRANSF,
    P.ESTOQUE_ID_E_TRANSF,
    P.VIA_ETIQUETA,
    P.OBSERVACAO,
    P.ENDERECAMENTO_ID

from TBPEDIDO_ITEM_PROCESSADO P
;


CREATE OR ALTER VIEW VWREGISTRO_PRODUCAO_DIA(
    DATA_REGISTRO,
    MODELO,
    PRODUTO,
    COR,
    GP,
    LINHA,
    PERFIL,
    QUANTIDADE,
    QTD_TURNO1,
    QTD_TURNO2,
    TALOES,
    MODELO_ID,
    PRODUTO_ID,
    COR_ID,
    GP_ID,
    LINHA_ID,
    PERFIL_ID,
    FAMILIA_ID,
    ESTABELECIMENTO_ID,
    TAMANHO,
    DENSIDADE,
    ESPESSURA)
AS
select

    DATA_REGISTRO,
    MODELO,
    PRODUTO,
    COR,
    GP,
    LINHA,
    PERFIL,
    sum(QUANTIDADE_PEDIDO) as QUANTIDADE,
    sum(QTD_TURNO1) as QTD_TURNO1,
    sum(QTD_TURNO2) as QTD_TURNO2,
    sum(TALOES) as TALOES,
    MODELO_ID,
    PRODUTO_ID,
    COR_ID,
    GP_ID,
    LINHA_ID,
    PERFIL_ID,
    familia_id,
    estabelecimento_id,
    tamanho,
    cast(substring(Densidade from 1  for 10) as numeric(5,2)) DENSIDADE,
    cast(substring(Densidade from 11 for 20) as numeric(5,2)) espessura

from(

    select
    
        A.Data_Producao as DATA_REGISTRO,
        A.pedido_item_controle as ID,
        
        m.descricao as MODELO,
        p.descricao as PRODUTO,
        c.descricao as COR,
        e.descricao as GP,
        r.descricao as LINHA,
        s.descricao as PERFIL,
        
        A.QUANTIDADE_PEDIDO,
        IIF(A.TURNO=1,A.QUANTIDADE_PEDIDO,0) QTD_TURNO1,
        IIF(A.TURNO=2,A.QUANTIDADE_PEDIDO,0) QTD_TURNO2,
        1 as TALOES,
        
        m.codigo as modelo_id,
        p.codigo as produto_id,
        c.codigo cor_id,
        e.codigo gp_id,
        r.codigo linha_id,
        s.id perfil_id,
        a.familia_codigo as familia_id,
        a.estabelecimento_codigo as estabelecimento_id,
        FN_TAMANHO_GRADE(p.grade_codigo, a.tamanho) tamanho,

        (Select First 1
      Coalesce((Select First 1 lpad(M.Densidade,10,0)||lpad(m.espessura,10,0)
         From TbModelo M Where M.Codigo = P2.Modelo_Codigo),'0000000000')
      From TbModelo_Consumo_Cor MC, TbFamilia F, TbProduto P2
     Where MC.Modelo_Id = p.modelo_codigo
       and MC.Cor_Id = c.codigo
       and MC.Produto_Id = P2.Codigo
       and P2.Familia_Codigo = F.Codigo
       and F.Densidade_Espessura = '1'

       and((a.tamanho = 1 and MC.T01 > 0) or
           (a.Tamanho = 2 and MC.T02 > 0) or
           (a.Tamanho = 3 and MC.T03 > 0) or
           (a.Tamanho = 4 and MC.T04 > 0) or
           (a.Tamanho = 5 and MC.T05 > 0) or
           (a.Tamanho = 6 and MC.T06 > 0) or
           (a.Tamanho = 7 and MC.T07 > 0) or
           (a.Tamanho = 8 and MC.T08 > 0) or
           (a.Tamanho = 9 and MC.T09 > 0) or
           (a.Tamanho =10 and MC.T10 > 0) or
           (a.Tamanho =11 and MC.T11 > 0) or
           (a.Tamanho =12 and MC.T12 > 0) or
           (a.Tamanho =13 and MC.T13 > 0) or
           (a.Tamanho =14 and MC.T14 > 0) or
           (a.Tamanho =15 and MC.T15 > 0) or
           (a.Tamanho =16 and MC.T16 > 0) or
           (a.Tamanho =17 and MC.T17 > 0) or
           (a.Tamanho =18 and MC.T18 > 0) or
           (a.Tamanho =19 and MC.T19 > 0) or
           (a.Tamanho =20 and MC.T20 > 0))) as Densidade
    
    From TbPedido_Item_Processado A, TbEsteira E, TbProduto P, tbmodelo M, tbcor c,tbmodelo_linha r,tbperfil s
    
        where
        --and A.Estabelecimento_Codigo = :ESTABELECIMENTO
        --and A.Data_Producao between :DATA1 and :DATA2
        --and A.familia_codigo = :FAMILIA
        
            e.codigo = a.Esteira_Producao
        and p.codigo = a.produto_codigo
        and m.codigo = p.modelo_codigo
        and c.codigo = p.cor_codigo
        and r.codigo = m.linha_codigo
        and s.id = a.perfil
        and s.tabela = 'SKU'

)

        group by
        DATA_REGISTRO,
        MODELO,
        PRODUTO,
        COR,
        GP,
        LINHA,
        PERFIL,
        MODELO_ID,
        PRODUTO_ID,
        COR_ID,
        GP_ID,
        LINHA_ID,
        PERFIL_ID,
        familia_id,
        estabelecimento_id,
        tamanho,
        Densidade,
        espessura
;

CREATE OR ALTER trigger ttbpedido_item_proc_b1i_02 for tbpedido_item_processado
active before insert position 1
AS
Begin

  if ((Trim(NEW.PERFIL) = '') or (NEW.PERFIL IS NULL)) Then
      Begin
      NEW.PERFIL = Coalesce((Select First 1 M.Perfil From TbModelo_Bloqueio M
                              Where M.Modelo_Id = New.Modelo_Codigo
                                and M.Cor_Id    = New.Cor_Id
                                and M.Tamanho   = New.Tamanho),'');
      END

End;