SET TERM ^ ;

CREATE OR ALTER procedure SPC_MODELOS_REMSSA (
    REMESSAS blob sub_type 1 segment size 80 = '',
    DATA1 date = null,
    DATA2 date = null,
    FAMILIAS blob sub_type 1 segment size 80 = '',
    STATUS_TALAO integer = 0,
    ESTABELECIMENTO integer = 0)
returns (
    MODELO_ID integer,
    MODELO_DESCRICAO varchar(200),
    COR_ID integer,
    COR_DESCRICAO varchar(80),
    TAM_DESCRICAO varchar(40),
    GRADE_CODIGO integer,
    TAMANHO integer,
    QUANTIDADE numeric(18,4),
    SALDO_FATURAR numeric(18,4),
    ALOC_EST numeric(18,4),
    ALOC_REM numeric(18,4),
    ALOC_AGR numeric(18,4),
    PEDIDO integer,
    CLIENTE_CODIGO integer,
    CLIENTE varchar(80),
    DATA date,
    PREV_FATURAMENTO date,
    DATA_CLIENTE date,
    PRODUTO_ID integer,
    FAMILIA_ID integer,
    UM varchar(12),
    FRACIONAR char(4),
    INFO blob sub_type 1 segment size 100)
as
declare variable OREMESSA integer;
declare variable TIPO_REMESSA integer;
begin

  for
    select
        r.numero
    from split(:REMESSAS,','), tbremessa r
    where r.remessa = osplit
  into OREMESSA
  do begin

      TIPO_REMESSA = coalesce((select first 1 0 from tbremessa_acumulado a where a.remessa = :OREMESSA),1);

      if(TIPO_REMESSA = 1)then
      begin
        for
            SELECT
                A.MODELO_CODIGO MODELO_ID,
                M.DESCRICAO MODELO_DESCRICAO,
                A.COR_ID,
                (SELECT FIRST 1 C.DESCRICAO FROM TBCOR C WHERE C.CODIGO = A.COR_ID) COR_DESCRICAO,
                (SELECT TAM_DESCRICAO FROM SP_TAMANHO_GRADE (M.GRADE_CODIGO,A.TAMANHO)) TAM_DESCRICAO,
                M.GRADE_CODIGO,
                A.TAMANHO,
                CAST(A.QUANTIDADE_PEDIDO AS NUMERIC(15,4)) QUANTIDADE,
                CAST(0.0000 AS NUMERIC(15,4)) SALDO_FATURAR,
                CAST(0.0000 AS NUMERIC(15,4)) ALOC_EST,
                CAST(0.0000 AS NUMERIC(15,4)) ALOC_REM,
                CAST(0.0000 AS NUMERIC(15,4)) ALOC_AGR,
                0 PEDIDO, 0 CLIENTE_CODIGO,
                CAST('' AS VARCHAR(20)) CLIENTE,
                CAST(NULL AS DATE) DATA,
                CAST(NULL AS DATE) PREV_FATURAMENTO,
                CAST(NULL AS DATE) DATA_CLIENTE,
                P.CODIGO AS PRODUTO_ID,
                P.FAMILIA_CODIGO AS FAMILIA_ID,
                U.SIGLA AS UM,
                U.PODE_FRACIONAR AS FRACIONAR,
        
                FN_TO_JSON_V2(
                    FN_TO_PAR_JSON_V2('REMESSA', R.REMESSA),
                    FN_TO_PAR_JSON_V2('NUMERO', R.NUMERO),
                    FN_TO_PAR_JSON_V2('TALAO', fn_lpad(A.REMESSA_ACUMULADO_CONTROLE,4,'0')),
                    FN_TO_PAR_JSON_V2('CONTROLE', A.CONTROLE),
                    FN_TO_PAR_JSON_V2('QUANTIDADE', A.QUANTIDADE_PEDIDO),
                    FN_TO_PAR_JSON_V2('ORIGEM', coalesce(R.ORIGEM,'0'))
                ) AS INFO
        
            FROM TBPEDIDO_ITEM_PROCESSADO A, TBREMESSA R, TBMODELO M, TBPRODUTO P, TbUnidadeMedida U
            WHERE A.ESTABELECIMENTO_CODIGO = :ESTABELECIMENTO
            AND A.MODELO_CODIGO = M.CODIGO
            AND A.ESTABELECIMENTO_CODIGO = R.ESTABELECIMENTO_CODIGO
            AND A.REMESSA = R.NUMERO
            
            AND P.MODELO_CODIGO = M.CODIGO
            AND P.COR_CODIGO    = A.COR_ID
            AND P.CODIGO        = A.PRODUTO_CODIGO
            AND U.SIGLA         = P.UNIDADEMEDIDA_SIGLA
            and R.NUMERO        = :OREMESSA

            and iif(:STATUS_TALAO > 0 , iif(:STATUS_TALAO = 2, A.SITUACAO < 3 and A.DATA_PRODUCAO is NULL, A.SITUACAO = 3 and A.DATA_PRODUCAO is NULL), true)
            and iif(:DATA1 is distinct from null and :DATA2 is distinct from null, R.DATA BETWEEN :DATA1 AND :DATA2, true)
            and iif(char_length(:FAMILIAS) > 1, M.FAMILIA_CODIGO in (select osplit from split(:FAMILIAS,',')),true)

         into
            MODELO_ID,
            MODELO_DESCRICAO,
            COR_ID,
            COR_DESCRICAO,
            TAM_DESCRICAO,
            GRADE_CODIGO,
            TAMANHO,
            QUANTIDADE,
            SALDO_FATURAR,
            ALOC_EST,
            ALOC_REM,
            ALOC_AGR,
            PEDIDO,
            CLIENTE_CODIGO,
            CLIENTE,
            DATA,
            PREV_FATURAMENTO,
            DATA_CLIENTE,
            PRODUTO_ID,
            FAMILIA_ID,
            UM,
            FRACIONAR,
            INFO
        do begin
            suspend;
        end
    
      end else
      begin
        for
            SELECT 
            
                A.MODELO_CODIGO MODELO_ID, M.DESCRICAO MODELO_DESCRICAO, A.cor_codigo as COR_ID,
                (SELECT FIRST 1 C.DESCRICAO FROM TBCOR C WHERE C.CODIGO = A.cor_codigo) COR_DESCRICAO,
                (SELECT TAM_DESCRICAO FROM SP_TAMANHO_GRADE (M.GRADE_CODIGO,A.TAMANHO)) TAM_DESCRICAO,
                M.GRADE_CODIGO, A.TAMANHO, CAST(A.quantidade AS NUMERIC(15,4)) QUANTIDADE,
                CAST(0.0000 AS NUMERIC(15,4)) SALDO_FATURAR,
                CAST(0.0000 AS NUMERIC(15,4)) ALOC_EST,
                CAST(0.0000 AS NUMERIC(15,4)) ALOC_REM,
                CAST(0.0000 AS NUMERIC(15,4)) ALOC_AGR,
                0 PEDIDO, 0 CLIENTE_CODIGO,
                CAST('' AS VARCHAR(20)) CLIENTE,
                CAST(NULL AS DATE) DATA,
                CAST(NULL AS DATE) PREV_FATURAMENTO,
                CAST(NULL AS DATE) DATA_CLIENTE,
                P.CODIGO AS PRODUTO_ID,
                P.FAMILIA_CODIGO AS FAMILIA_ID,
                U.SIGLA AS UM,
                U.PODE_FRACIONAR AS FRACIONAR,
            
                FN_TO_JSON_V2(
                    FN_TO_PAR_JSON_V2('REMESSA', R.REMESSA),
                    FN_TO_PAR_JSON_V2('NUMERO', R.NUMERO),
                    FN_TO_PAR_JSON_V2('TALAO', fn_lpad(0,4,'0')),
                    FN_TO_PAR_JSON_V2('CONTROLE', A.CONTROLE),
                    FN_TO_PAR_JSON_V2('QUANTIDADE', A.quantidade),
                    FN_TO_PAR_JSON_V2('ORIGEM', coalesce(R.ORIGEM,'0'))
                ) INFO

            FROM TBREMESSA_ACUMULADO A, TBREMESSA R, TBMODELO M, TBPRODUTO P, TbUnidadeMedida U
            WHERE A.MODELO_CODIGO = M.CODIGO
            AND A.ESTABELECIMENTO_CODIGO = R.ESTABELECIMENTO_CODIGO
            AND A.REMESSA = R.NUMERO
            
            AND P.MODELO_CODIGO     = M.CODIGO
            AND P.COR_CODIGO        = A.cor_codigo
            AND P.CODIGO            = A.PRODUTO_CODIGO
            AND U.SIGLA             = P.UNIDADEMEDIDA_SIGLA
            AND R.NUMERO            = :OREMESSA

            and iif(:DATA1 is distinct from null and :DATA2 is distinct from null, R.DATA BETWEEN :DATA1 AND :DATA2, true)
            and iif(char_length(:FAMILIAS) > 1, M.FAMILIA_CODIGO in (select osplit from split(:FAMILIAS,',')),true)

         into
            MODELO_ID,
            MODELO_DESCRICAO,
            COR_ID,
            COR_DESCRICAO,
            TAM_DESCRICAO,
            GRADE_CODIGO,
            TAMANHO,
            QUANTIDADE,
            SALDO_FATURAR,
            ALOC_EST,
            ALOC_REM,
            ALOC_AGR,
            PEDIDO,
            CLIENTE_CODIGO,
            CLIENTE,
            DATA,
            PREV_FATURAMENTO,
            DATA_CLIENTE,
            PRODUTO_ID,
            FAMILIA_ID,
            UM,
            FRACIONAR,
            INFO
        do begin
            suspend;
        end
      end
  end

end
^

SET TERM ; ^

