SET TERM ^ ;

CREATE OR ALTER trigger ttbpedido_b10i for tbpedido
active before insert position 0
AS
DECLARE VARIABLE STATUS_REP VARCHAR(1);
BEGIN

  IF(NEW.ECOMMERCE = 1)THEN
  BEGIN
    NEW.REPRESENTANTE_CODIGO = COALESCE((SELECT FIRST 1 P.VALOR_EXT  FROM TBCONTROLE_N P WHERE P.ID = 272),0);
    NEW.FAMILIA_CODIGO = NULL;
    NEW.STATUS_ECOMMERCE = 2;
    NEW.STATUS_PAGAMENTO = 1;
    NEW.CODIGO_RASTREIO = '';
    NEW.CTE = '';

    UPDATE OR INSERT INTO TBUPDATE_ECOMMERCE (TABELA, TABELA_ID, SUB_ID) VALUES ('TBPEDIDO', NEW.PEDIDO, 0) MATCHING (TABELA, TABELA_ID, SUB_ID);
  END

  IF(NEW.ECOMMERCE = 2 AND coalesce(NEW.REPRESENTANTE_CODIGO,0) = 0)THEN
  BEGIN
    NEW.REPRESENTANTE_CODIGO = COALESCE( FN_PARAMETRO('SISTEMA.REPRESENTANTE_LACLOFIT'),0);
    NEW.FAMILIA_CODIGO = NULL;
    NEW.STATUS_ECOMMERCE = 2;
    NEW.STATUS_PAGAMENTO = 1;
    NEW.CODIGO_RASTREIO = '';
    NEW.CTE = '';
  END

  IF(NEW.REPRESENTANTE_CODIGO = 0 OR NEW.REPRESENTANTE_CODIGO IS NULL)THEN
  BEGIN
    EXCEPTION "..." 'REPRESENTANTE DO PEDIDO INVÁLIDO OU NÃO CADASTRADO, OPERAÇÃO CANCELADA!';
  END

  STATUS_REP = COALESCE((SELECT FIRST 1 A.STATUS FROM TBREPRESENTANTE A WHERE A.CODIGO = NEW.REPRESENTANTE_CODIGO),0);
  IF(STATUS_REP = 0)THEN
  BEGIN
     EXCEPTION "..." 'REPRESENTANTE DO PEDIDO INATIVO OU NÃO CADASTRADO, OPERAÇÃO CANCELADA!';
  END
END
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER procedure SPI_REMESSA_PLACA (
    I_REMESSA_ID integer)
as
declare variable ESTABELECIMENTO_ID integer;
declare variable REMESSA_TALAO_ID integer;
declare variable PRODUTO_ID integer;
declare variable TAMANHO integer;
declare variable QUANTIDADE_TALAO numeric(15,5);
declare variable QUANTIDADE_SOBRA numeric(15,5);
declare variable SOBRA_QUANTIDADE_ALOCAR numeric(15,5);
declare variable SOBRA_ID integer;
declare variable SOBRA_SALDO numeric(15,5);
declare variable REMESSA_ID integer;
declare variable ORDEM integer;
declare variable I_MATRIZ_CODIGO integer;
declare variable I_TAMANHO integer;
declare variable I_PRODUTO_CODIGO integer;
declare variable I_MODELO_CODIGO integer;
declare variable I_COR_ID integer;
declare variable I_LARGURA numeric(18,4);
declare variable I_COMPRIMENTO numeric(18,4);
declare variable I_PACA_QTD_PARES integer;
declare variable I_DENSIDADE smallint;
declare variable I_ESPESSURA numeric(18,2);
declare variable I_MODELO_ORIGEM integer;
declare variable I_PERFIL varchar(40);
declare variable QUANTIDADE_REQUISITAR numeric(15,2);
declare variable TMP integer;
declare variable UP_ID integer;
declare variable QUANTIDADE_SOBRA2 integer;
declare variable DATA date;
declare variable DATAHORA timestamp;
declare variable MINIMO integer;
declare variable VINCULO_ID integer;
begin

    delete from tbrequisicao_placa r where r.remessa = :I_REMESSA_ID and r.tipo = 1;

    FOR
        select
            ESTABELECIMENTO_ID,
            REMESSA_ID,
            REMESSA_TALAO_ID,
            PRODUTO_ID,
            TAMANHO,
            QUANTIDADE,
            ORDEM,
            UP_ID,
            QUANTIDADE_SOBRA,
            DATA,
            DATAHORA
        from(
            SELECT
                ESTABELECIMENTO_ID,
                REMESSA_ID,
                REMESSA_TALAO_ID,
                PRODUTO_ID,
                TAMANHO,
                QUANTIDADE,
                ORDEM,
                UP_ID,
                QUANTIDADE_SOBRA,
                DATA,
                DATAHORA
            FROM(
                SELECT
                    T.estabelecimento_codigo as ESTABELECIMENTO_ID,
                    T.remessa as REMESSA_ID,
                    T.controle as REMESSA_TALAO_ID,
                    T.produto_codigo PRODUTO_ID,
                    T.TAMANHO,
                    T.QUANTIDADE,
                    iif(t.controle > 5499 and t.controle < 6000 , 0, 1) as ordem,
                    t.up_id ,
                    COALESCE((SELECT SUM(S.QUANTIDADE)
                                    FROM TBREQUISICAO_SOBRA S
                                   WHERE S.REMESSA       = t.remessa
                                     AND S.TALAO         = t.controle
                                     AND S.REQUISICAO_ID = 0),0.0000) QUANTIDADE_SOBRA,
    
                   g.data as DATA,
                   g.datahora_disponibilidade as DATAHORA
                FROM
                    tbremessa_item_processado T, tbremessa g
                WHERE
                    T.remessa = :I_REMESSA_ID
                AND T.controle < 8000
                and g.numero = t.remessa
            )
    
            union all
    
            SELECT
                ESTABELECIMENTO_ID,
                REMESSA_ID,
                REMESSA_TALAO_ID,
                PRODUTO_ID,
                TAMANHO,
                QUANTIDADE,
                ORDEM,
                UP_ID,
                QUANTIDADE_SOBRA,
                DATA,
                DATAHORA
            FROM(
                SELECT
                    T.estabelecimento_codigo as ESTABELECIMENTO_ID,
                    T.remessa as REMESSA_ID,
                    T.controle as REMESSA_TALAO_ID,
                    T.produto_codigo PRODUTO_ID,
                    T.TAMANHO,
                    T.QUANTIDADE,
                    iif(t.controle > 5499 and t.controle < 6000 , 0, 1) as ordem,
                    t.up_id ,
                    COALESCE((SELECT SUM(S.QUANTIDADE)
                                    FROM TBREQUISICAO_SOBRA S
                                   WHERE S.REMESSA       = t.remessa
                                     AND S.TALAO         = t.controle
                                     AND S.REQUISICAO_ID = 0),0.0000) QUANTIDADE_SOBRA,
    
                   g.data as DATA,
                   g.datahora_disponibilidade as DATAHORA
                FROM
                    tbremessa_item_processado T, tbremessa g
                WHERE
                    T.remessa = :I_REMESSA_ID
                AND T.controle between 9000 and 9999
                and g.numero = t.remessa
            )
         ) order by ordem ascending
    INTO
        ESTABELECIMENTO_ID,
        REMESSA_ID,
        REMESSA_TALAO_ID,
        PRODUTO_ID,
        TAMANHO,
        QUANTIDADE_TALAO,
        ORDEM,
        UP_ID,
        QUANTIDADE_SOBRA2,
        DATA,
        DATAHORA
    DO
    BEGIN

        DATAHORA = DATA;

        QUANTIDADE_TALAO = QUANTIDADE_TALAO - QUANTIDADE_SOBRA2;

        --placas
        if(ORDEM = 0)then
        begin
            for
                SELECT
                    MATRIZ_CODIGO,
                    TAMANHO,
                    PRODUTO_CODIGO,
                    p.modelo_codigo,
                    g.COR_CODIGO as COR_ID,
                    LARGURA,
                    COMPRIMENTO,
                    1 PACA_QTD_PARES,
                    DENSIDADE,
                    ESPESSURA,
                    coalesce((select first 1 j.modelo_origem from tbproduto j where j.codigo = g.codigo),0) as MODELO_ORIGEM,
                    coalesce((select first 1 s.perfil from vwsku s where s.modelo_id = p.modelo_codigo and s.cor_id = g.COR_CODIGO),'') as PERFIL,
                    p.placa_por_chapa
                from tbremessa_item_processado p, tbproduto g
                where p.remessa = :REMESSA_ID
                and p.controle  = :REMESSA_TALAO_ID
                and g.codigo    = p.produto_codigo
            into
                I_MATRIZ_CODIGO,
                I_TAMANHO,
                I_PRODUTO_CODIGO,
                I_MODELO_CODIGO,
                I_COR_ID,
                I_LARGURA,
                I_COMPRIMENTO,
                I_PACA_QTD_PARES,
                I_DENSIDADE,
                I_ESPESSURA,
                I_MODELO_ORIGEM,
                I_PERFIL,
                MINIMO
            do begin
                :MINIMO = 0;
                QUANTIDADE_REQUISITAR = QUANTIDADE_TALAO;
                execute procedure SPI_REQUISITAR_PLACA(:I_COR_ID, :I_MODELO_ORIGEM, :I_DENSIDADE, :I_ESPESSURA, :I_LARGURA, :I_COMPRIMENTO, :QUANTIDADE_REQUISITAR, 1, :UP_ID, :REMESSA_ID, :REMESSA_TALAO_ID,1, :DATA, :DATAHORA, :MINIMO);
            end
        end

        --bojo
        if(ORDEM > 0)then
        begin
            for
                SELECT
                    MATRIZ_CODIGO,
                    TAMANHO,
                    PRODUTO_CODIGO,
                    modelo_codigo,
                    COR_CODIGO as COR_ID,
                    LARGURA,
                    COMPRIMENTO,
                    PACA_QTD_PARES,
                    cast( fn_array(DEN_ESP, 1, '|') as numeric(15,2)) as DENSIDADE,
                    cast( fn_array(DEN_ESP, 2, '|') as numeric(15,2)) as ESPESSURA,
    
                    coalesce((select first 1
                           p.modelo_codigo
                        from tbmodelo_consumo_cor c, tbproduto p
                        where c.modelo_id = x.modelo_codigo
                        and c.cor_id = x.COR_CODIGO
                        and p.codigo = c.produto_id
                        and c.nivel = 0),0) as MODELO_ORIGEM,
    
                    coalesce((select first 1 s.perfil from vwsku s where s.modelo_id = x.modelo_codigo and s.cor_id = x.COR_CODIGO),'') as PERFIL
    
                from(
                    select
                        p.matriz_codigo,
                        p.tamanho,
                        p.produto_codigo,
                        f.cor_codigo,
                        f.modelo_codigo,
                        c.descricao as COR_DESCRICAO,
                        fn_densidade_espessura(f.modelo_codigo, f.cor_codigo) as DEN_ESP,
                        iif(p.tamanho =  0, t.largura,
                        iif(p.tamanho =  1, t.largura_t01,
                        iif(p.tamanho =  2, t.largura_t02,
                        iif(p.tamanho =  3, t.largura_t03,
                        iif(p.tamanho =  4, t.largura_t04,
                        iif(p.tamanho =  5, t.largura_t05,
                        iif(p.tamanho =  6, t.largura_t06,
                        iif(p.tamanho =  7, t.largura_t07,
                        iif(p.tamanho =  8, t.largura_t08,
                        iif(p.tamanho =  9, t.largura_t09,
                        iif(p.tamanho = 10, t.largura_t10,
                        iif(p.tamanho = 11, t.largura_t11,
                        iif(p.tamanho = 12, t.largura_t12,
                        iif(p.tamanho = 13, t.largura_t13,
                        iif(p.tamanho = 14, t.largura_t14,
                        iif(p.tamanho = 15, t.largura_t15,
                        iif(p.tamanho = 16, t.largura_t16,
                        iif(p.tamanho = 17, t.largura_t17,
                        iif(p.tamanho = 18, t.largura_t18,
                        iif(p.tamanho = 19, t.largura_t19,
                        iif(p.tamanho = 20, t.largura_t20,
                        0))))))))))))))))))))) as LARGURA,
                    
                        iif(p.tamanho =  1, t.comprimento_t01,
                        iif(p.tamanho =  2, t.comprimento_t02,
                        iif(p.tamanho =  3, t.comprimento_t03,
                        iif(p.tamanho =  4, t.comprimento_t04,
                        iif(p.tamanho =  5, t.comprimento_t05,
                        iif(p.tamanho =  6, t.comprimento_t06,
                        iif(p.tamanho =  7, t.comprimento_t07,
                        iif(p.tamanho =  8, t.comprimento_t08,
                        iif(p.tamanho =  9, t.comprimento_t09,
                        iif(p.tamanho = 10, t.comprimento_t10,
                        iif(p.tamanho = 11, t.comprimento_t11,
                        iif(p.tamanho = 12, t.comprimento_t12,
                        iif(p.tamanho = 13, t.comprimento_t13,
                        iif(p.tamanho = 14, t.comprimento_t14,
                        iif(p.tamanho = 15, t.comprimento_t15,
                        iif(p.tamanho = 16, t.comprimento_t16,
                        iif(p.tamanho = 17, t.comprimento_t17,
                        iif(p.tamanho = 18, t.comprimento_t18,
                        iif(p.tamanho = 19, t.comprimento_t19,
                        iif(p.tamanho = 20, t.comprimento_t20,
                        0)))))))))))))))))))) as COMPRIMENTO,
    
                        iif(p.tamanho =  1, t.quantidade_t01,
                        iif(p.tamanho =  2, t.quantidade_t02,
                        iif(p.tamanho =  3, t.quantidade_t03,
                        iif(p.tamanho =  4, t.quantidade_t04,
                        iif(p.tamanho =  5, t.quantidade_t05,
                        iif(p.tamanho =  6, t.quantidade_t06,
                        iif(p.tamanho =  7, t.quantidade_t07,
                        iif(p.tamanho =  8, t.quantidade_t08,
                        iif(p.tamanho =  9, t.quantidade_t09,
                        iif(p.tamanho = 10, t.quantidade_t10,
                        iif(p.tamanho = 11, t.quantidade_t11,
                        iif(p.tamanho = 12, t.quantidade_t12,
                        iif(p.tamanho = 13, t.quantidade_t13,
                        iif(p.tamanho = 14, t.quantidade_t14,
                        iif(p.tamanho = 15, t.quantidade_t15,
                        iif(p.tamanho = 16, t.quantidade_t16,
                        iif(p.tamanho = 17, t.quantidade_t17,
                        iif(p.tamanho = 18, t.quantidade_t18,
                        iif(p.tamanho = 19, t.quantidade_t19,
                        iif(p.tamanho = 20, t.quantidade_t20,
                        0)))))))))))))))))))) as PACA_QTD_PARES
                    
                    from tbremessa_item_processado p, tbmatriz t, tbproduto f, tbcor c
                    where p.remessa = :REMESSA_ID
                    and p.controle = :REMESSA_TALAO_ID
                    and t.codigo = p.matriz_codigo
                    and f.codigo = p.produto_codigo
                    and c.codigo = f.cor_codigo
                ) x
            into
                I_MATRIZ_CODIGO,
                I_TAMANHO,
                I_PRODUTO_CODIGO,
                I_MODELO_CODIGO,
                I_COR_ID,
                I_LARGURA,
                I_COMPRIMENTO,
                I_PACA_QTD_PARES,
                I_DENSIDADE,
                I_ESPESSURA,
                I_MODELO_ORIGEM,
                I_PERFIL
            do begin

                QUANTIDADE_REQUISITAR = QUANTIDADE_TALAO / I_PACA_QTD_PARES;
                IF( (QUANTIDADE_REQUISITAR - CAST(fn_format_number2(QUANTIDADE_REQUISITAR,0) AS INTEGER)) > 0)THEN
                BEGIN
                    QUANTIDADE_REQUISITAR = CAST(fn_format_number2(QUANTIDADE_REQUISITAR,0) AS INTEGER) + 1;
                END

                MINIMO = I_PACA_QTD_PARES;

                execute procedure SPI_REQUISITAR_PLACA(:I_COR_ID, :I_MODELO_ORIGEM, :I_DENSIDADE, :I_ESPESSURA, :I_LARGURA, :I_COMPRIMENTO, :QUANTIDADE_REQUISITAR, :I_PACA_QTD_PARES, :UP_ID, :REMESSA_ID, :REMESSA_TALAO_ID,0, :DATA, :DATAHORA, :MINIMO);
            end
        end
    END

    for
        SELECT
            f.id
        from(
            select
                h.*
            from(
                select
                    vinculo,
                    coalesce(cast(fn_array(DENESP,1,'|') as numeric(15,4)),0) as DEN,
                    coalesce(cast(fn_array(DENESP,2,'|') as numeric(15,4)),0) as ESP,
                    h.*
                from(
                    select
                        f.id as vinculo,
                        fn_densidade_espessura_v3(p.modelo_origem,p.cor_codigo) as DENESP,
                        f.requisicao_placa_id
                    from TBREQUISICAO_PLACA_ALOCACAO f, tbproduto p
                    where f.saldo > 0
                    and p.codigo = f.produto_id
                ) a, tbrequisicao_placa h
                
                where h.id = a.requisicao_placa_id
                and h.status < 2
                and h.remessa = :remessa_id
            ) h
             where DEN <> h.densidade or ESP <> h.espessura
        ) h, TBREQUISICAO_PLACA_ALOCACAO f
        where f.id = h.vinculo
    into :VINCULO_ID
    do begin
       exception "..." 'Erro ao gerar aproveitamento, entre em contato com o suporte técnico';
    end

    for
        SELECT
            h.id
        from(
            select
                h.id
            from(
                select
                    h.*,
                    a.QTD
                from(
                    select
                        f.requisicao_placa_id,
                        sum(f.qtd) as QTD
                    from TBREQUISICAO_PLACA_ALOCACAO f
        
                    group by 1
                ) a, tbrequisicao_placa h
                where h.id = a.requisicao_placa_id
                and h.status < 2
                and h.remessa = :remessa_id
            ) h
             where h.QTD <> h.quantidade
        ) h
    into :VINCULO_ID
    do begin
       exception "..." 'Erro ao gerar aproveitamento, entre em contato com o suporte técnico';
    end

    EXECUTE PROCEDURE SPI_HISTORICO('TBREMESSA',:I_REMESSA_ID,'APROVEITAMENTO DE PLACAS PROCESSADA');
    EXECUTE PROCEDURE SPI_REMESSA_CONSUMO_BOJO(:I_REMESSA_ID,0);
end
^

SET TERM ; ^

