SET TERM ^ ;

CREATE OR ALTER procedure SPC_PARES_ORIGEM (
    REMESSA_ID integer,
    REMESSA_TALAO_ID integer,
    TALAO_ID integer,
    TIPO_RET integer = 0)
returns (
    PARES_POR_GP varchar(3000))
as
declare variable TIPO char(1);
declare variable REMESSA varchar(20);
declare variable NUMERO integer;
declare variable TOTAL integer;
declare variable SGP varchar(100);
declare variable SVALOR integer;
begin

    TIPO = '1';

    SELECT first 1 distinct
        r.numero,
        r.remessa,
        r.web
    from VWREMESSA_TALAO T,
    TBREMESSA_CONSUMO_VINCULO V,
    VWREMESSA_CONSUMO C,
    TBREMESSA R
    
    where T.ID  = :TALAO_ID
    AND V.REMESSA_ID             = T.REMESSA_ID
    AND V.REMESSA_TALAO_ID       = T.REMESSA_TALAO_ID
    AND C.ID                     = V.CONSUMO_ID
    and C.REMESSA_ID             = r.numero
    into :NUMERO, :REMESSA, :TIPO;

    if(TIPO <> '3')then
    begin
        SELECT
            LIST(GP,', ')
        FROM
        (
            SELECT
                (X.GP_DESCRICAO || ' / ' ||
                 TRUNC(SUM(QUANTIDADE_ORIGEM))  || ' / ' ||
                 fn_replace(X.JUSTIFICATIVA,'/','')
                ) GP

            FROM
            (
                SELECT
                    tt.quantidade QUANTIDADE_ORIGEM,
                    (select sum(p.quantidade_producao) from tbpedido_item_processado p where p.remessa = tt.remessa_id and p.remessa_acumulado_controle = tt.remessa_talao_id) QUANTIDADE_CONSUMO,
                    tt.QUANTIDADE QUANTIDADE_VINCULO,
                    G.DESCRICAO GP_DESCRICAO,
                    COALESCE((SELECT FIRST 1 R.JUSTIFICATIVA FROM TBREQUISICAO R WHERE R.REMESSA_GERADA = C.REMESSA_ID AND R.TALAO = C.REMESSA_TALAO_ID),'') JUSTIFICATIVA

                FROM                    
                    TBREMESSA_CONSUMO_VINCULO V,
                    VWREMESSA_CONSUMO C,
                    VWREMESSA_TALAO TT,
                    TBGP G
                WHERE
                    V.REMESSA_ID = :REMESSA_ID
                AND V.REMESSA_TALAO_ID = :REMESSA_TALAO_ID
                AND V.CONSUMO_ID = C.ID
                AND TT.REMESSA_ID = C.REMESSA_ID
                AND TT.REMESSA_TALAO_ID = C.REMESSA_TALAO_ID
                AND G.ID = TT.GP_ID

            )X
            GROUP BY GP_DESCRICAO,JUSTIFICATIVA
        )Y into :PARES_POR_GP;
    end else
    begin
        SELECT
            LIST(GP,', ')
        FROM
        (
            SELECT
                (X.GP_DESCRICAO || ' / ' ||
                 TRUNC(SUM(IIF(X.QUANTIDADE_CONSUMO = X.QUANTIDADE_VINCULO,X.QUANTIDADE_ORIGEM,
                    ((X.QUANTIDADE_ORIGEM * X.QUANTIDADE_VINCULO)/NULLIF(X.QUANTIDADE_CONSUMO, 0)))))  || ' / ' ||
                 fn_replace(X.JUSTIFICATIVA,'/','')
                ) GP

            FROM
            (
                
               SELECT distinct
                    iif(TT.placa_largura > 0, tt.quantidade, C.QUANTIDADE_ORIGINAL) QUANTIDADE_ORIGEM,
                    IIF(COALESCE(C.QUANTIDADE_NECES,0) > 0,C.QUANTIDADE_NECES, C.QUANTIDADE) QUANTIDADE_CONSUMO,
                    V.QUANTIDADE QUANTIDADE_VINCULO,
                    G.DESCRICAO GP_DESCRICAO,
                    COALESCE((SELECT FIRST 1 R.JUSTIFICATIVA FROM TBREQUISICAO R WHERE R.REMESSA_GERADA = C.REMESSA_ID AND R.TALAO = C.REMESSA_TALAO_ID),'') JUSTIFICATIVA,
            
                    tt.remessa_id,
                    tt.remessa_talao_id
                FROM                    
                    TBREMESSA_CONSUMO_VINCULO V,
                    VWREMESSA_CONSUMO C,
                    VWREMESSA_TALAO TT,
                    TBGP G,
            
                    VWREMESSA_TALAO T2,
                    TBREMESSA_CONSUMO_VINCULO V2,
                    VWREMESSA_CONSUMO C2
            
                WHERE
                    V.REMESSA_ID = t2.REMESSA_ID
                AND V.REMESSA_TALAO_ID = t2.REMESSA_TALAO_ID
                AND V.CONSUMO_ID = C.ID
                AND TT.REMESSA_ID = C.REMESSA_ID
                AND TT.REMESSA_TALAO_ID = C.REMESSA_TALAO_ID
                AND G.ID = TT.GP_ID
            
                AND V2.REMESSA_ID = :REMESSA_ID
                AND V2.REMESSA_TALAO_ID = :REMESSA_TALAO_ID
                AND V2.CONSUMO_ID = C2.ID
                AND T2.REMESSA_ID = C2.REMESSA_ID
                AND T2.REMESSA_TALAO_ID = C2.REMESSA_TALAO_ID

            )X
            GROUP BY GP_DESCRICAO,JUSTIFICATIVA
        )Y into :PARES_POR_GP;
    end

    if(TIPO_RET = '1')then
    begin
       TOTAL = 0;

       for
          select
            trim(fn_array(OSPLIT,1,'/')) as SGP,
            fn_array(OSPLIT,2,'/') as SVALOR
          from split_v2(:PARES_POR_GP,',')
       into
        :SGP,
        :SVALOR
       do begin
          if('PLACAS' <> :SGP)then
          begin
            TOTAL = TOTAL + SVALOR;
          end
       end

       PARES_POR_GP = TOTAL;
    end

    suspend;
end
^

SET TERM ; ^

