SET TERM ^ ;

CREATE OR ALTER procedure SPC_CONJUNTO (
    MODELO_CODIGO integer,
    COR_CODIGO integer,
    TAMANHO_CODIGO integer,
    RET_ALL integer = 0)
returns (
    PECA_ID integer,
    MODELO_PAI_ID integer,
    MODELO_ID integer,
    PRODUTO_ID integer,
    FATOR_CONVERSAO numeric(15,4),
    TAMANHO integer,
    PERFIL_SKU varchar(10),
    ITEM_CONJUNTOS integer)
as
begin

  for
    select
        iif(j.CONJUNTO > 0, row_number() over(),0) PECA_ID,
        j.modelo_pai,
        j.MODELO_CODIGO,
        j.PRODUTO_ID,
        j.FATOR_CONVERSAO,
        j.TAMANHO,
        (select first 1 a.perfil from vwsku a where a.modelo_id = :MODELO_CODIGO and a.cor_id = :COR_CODIGO and a.tamanho = j.TAMANHO) as PERFIL_SKU,
        COM_CONJUNTOS
    from(
        select
            CONJUNTO,
            modelo_pai,
            MODELO_CODIGO,
            PRODUTO_ID,
            FATOR_CONVERSAO,
            TAMANHO,
            max(CONJUNTO) over() as COM_CONJUNTOS
        from(
            select
                1 as CONJUNTO,
                m.modelo_pai,
                m.codigo as MODELO_CODIGO,
                p.codigo as PRODUTO_ID,
                m.FATOR_CONVERSAO,
                coalesce((select first 1 g.tamanho_filho from tbmodelo_conjunto_grade g where g.modelo_pai_id = m.modelo_pai and g.modelo_filho_id = m.codigo and g.tamanho_pai = :TAMANHO_CODIGO),:TAMANHO_CODIGO) as TAMANHO
            
            from tbproduto p, tbmodelo m
            left join tbmodelo_conjunto_cor c on c.modelo_pai_id = m.modelo_pai and c.modelo_filho_id = m.codigo and c.cor_pai_id = :COR_CODIGO
            where m.modelo_pai = :MODELO_CODIGO
            and m.modelo_pai <> m.codigo
            and m.status = '1'
            and p.modelo_codigo = m.codigo
            and p.cor_codigo = iif(coalesce(c.cor_filho_id,0) > 0, c.cor_filho_id, :COR_CODIGO)
            
            union all
            
            select
                0 as CONJUNTO,
                0 as modelo_pai,
                m.codigo as MODELO_CODIGO,
                p.codigo as PRODUTO_ID,
                iif(:MODELO_CODIGO <> m.codigo, coalesce(m.FATOR_CONVERSAO,1),1) as FATOR_CONVERSAO,
                cast(:TAMANHO_CODIGO as integer) as TAMANHO
            
            from tbmodelo m, tbproduto p
            where m.codigo = :MODELO_CODIGO
            and m.status = '1'
            and p.modelo_codigo = m.codigo
            and p.cor_codigo = :COR_CODIGO
        ) order by FATOR_CONVERSAO desc, MODELO_CODIGO
    ) j where iif(:RET_ALL = 0, COM_CONJUNTOS = CONJUNTO, true)

  into
    PECA_ID,
    MODELO_PAI_ID,
    MODELO_ID,
    PRODUTO_ID,
    FATOR_CONVERSAO,
    TAMANHO,
    PERFIL_SKU,
    ITEM_CONJUNTOS
  do begin
    suspend;
  end

end
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER procedure SPC_TEMPO_GP_CONJUNTO (
    GP_ID numeric(15,4),
    MODELO_ID numeric(15,4),
    COR_ID numeric(15,4),
    TAMANHO numeric(15,4),
    QUANTIDADE numeric(15,4))
returns (
    TEMPOSETUP numeric(15,4),
    TEMPOSETCOR numeric(15,4),
    TEMPOREB numeric(15,4),
    TEMPOPROCESSO numeric(15,4),
    TOTALSETUP numeric(15,4),
    TOTALPROCESSO numeric(15,4),
    TOTAL numeric(15,4),
    QUANTIDADE_OPERADOR numeric(15,4),
    PECA_ID integer)
as
declare variable TTEMPOSETUP numeric(15,4);
declare variable TTEMPOSETCOR numeric(15,4);
declare variable TTEMPOREB numeric(15,4);
declare variable TTEMPOPROCESSO numeric(15,4);
declare variable TTOTALSETUP numeric(15,4);
declare variable TTOTALPROCESSO numeric(15,4);
declare variable TTOTAL numeric(15,4);
declare variable TQUANTIDADE_OPERADOR numeric(15,4);
declare variable FATOR_CONVERSAO numeric(15,4);
Begin

    TEMPOSETUP          = coalesce(TEMPOSETUP,0);
    TEMPOSETCOR         = coalesce(TEMPOSETCOR,0);
    TEMPOREB            = coalesce(TEMPOREB,0);
    TEMPOPROCESSO       = coalesce(TEMPOPROCESSO,0);
    TOTALSETUP          = coalesce(TOTALSETUP,0);
    TOTALPROCESSO       = coalesce(TOTALPROCESSO,0);
    TOTAL               = coalesce(TOTAL,0);
    QUANTIDADE_OPERADOR = coalesce(QUANTIDADE_OPERADOR,0);

    for
        select
            h.PECA_ID,
            h.modelo_id,
            :COR_ID as COR_ID,
            h.TAMANHO,
            h.fator_conversao
        from SPC_CONJUNTO(:MODELO_ID, :COR_ID, :TAMANHO,1) h
    into
        PECA_ID,
        MODELO_ID,
        COR_ID,
        TAMANHO,
        FATOR_CONVERSAO
    do begin

        SELECT
            PECA_ID,
            TEMPOSETUP,
            TEMPOSETCOR,
            TEMPOREB,
            TEMPOPROCESSO,
            TOTALSETUP,
            TOTALPROCESSO,
            TOTAL,
            QUANTIDADE_OPERADOR
        FROM SPC_TEMPO_GP(:GP_ID, :MODELO_ID, :COR_ID, :TAMANHO, :QUANTIDADE, :PECA_ID) S
        INTO
            PECA_ID,
            TTEMPOSETUP,
            TTEMPOSETCOR,
            TTEMPOREB,
            TTEMPOPROCESSO,
            TTOTALSETUP,
            TTOTALPROCESSO,
            TTOTAL,
            TQUANTIDADE_OPERADOR;

            TEMPOSETUP          = TEMPOSETUP            + (FATOR_CONVERSAO * coalesce(TTEMPOSETUP,0));
            TEMPOSETCOR         = TEMPOSETCOR           + (FATOR_CONVERSAO * coalesce(TTEMPOSETCOR,0));
            TEMPOREB            = TEMPOREB              + (FATOR_CONVERSAO * coalesce(TTEMPOREB,0));
            TEMPOPROCESSO       = TEMPOPROCESSO         + (FATOR_CONVERSAO * coalesce(TTEMPOPROCESSO,0));
            TOTALSETUP          = TOTALSETUP            + (FATOR_CONVERSAO * coalesce(TTOTALSETUP,0));
            TOTALPROCESSO       = TOTALPROCESSO         + (FATOR_CONVERSAO * coalesce(TTOTALPROCESSO,0));
            TOTAL               = TOTAL                 + (FATOR_CONVERSAO * coalesce(TTOTAL,0));
            QUANTIDADE_OPERADOR = QUANTIDADE_OPERADOR   + (FATOR_CONVERSAO * coalesce(TQUANTIDADE_OPERADOR,0));

    end

   suspend;
End
^

SET TERM ; ^

