SET TERM ^ ;

CREATE OR ALTER procedure SPC_MAPEIA_ROMANEIO_TINTURARIA (
    IN_TIPO integer,
    IN_TALAO integer,
    IN_CAIXA integer = 0,
    IN_GP integer = 0)
returns (
    OUT_ROMANEIO integer,
    OUT_TALAO integer,
    OUT_PARAM integer,
    OUT_CAIXA integer,
    OUT_QUANTIDADE integer)
as
declare variable TALAO integer;
declare variable REMESSA integer = 0;
declare variable ROMANEIO integer = 0;
declare variable NEXT_TALAO integer;
declare variable R_CAIXA integer;
declare variable R_ROMANEIO integer;
declare variable R_TINT_ITEM integer;
declare variable R_TALAO integer;
declare variable R_REMESSA integer;
declare variable R_QUANTIDADE integer;
declare variable V_QUANTIDADE integer;
begin
    if(:in_tipo = 0) then
    begin
        for
            select
                v.remessa_talao_detalhe_id,
                v.quantidade
            from
                tbremessa_consumo_vinculo v,
                tbremessa_consumo c
                where c.id = v.consumo_id
                and c.talao_detalhe_id = :in_talao
        into
            :talao,
            :v_quantidade
        do begin
            for
                select first 1
                    ri.romaneio_id,
                    rli.caixa,
                    :v_quantidade quantidade
                from tbromaneio_tinturaria_itens ri
                left join (
                     select
                        caixa,
                        li.romaneio_id,
                        item_id,
                        talao_detalhe_id,
                        li.quantidade
                    from (
                        select
                            row_number() over (partition by i.n_lote) caixa,
                            i.*
                        from tbromaneio_tinturaria_lotes i
                        where i.romaneio_id = (select first 1 rom.romaneio_id from tbromaneio_tinturaria_itens rom where rom.talao_detalhe_id = :talao)
                    ) lotes, tbromaneio_tint_lote_item li
                    where lotes.romaneio_id = li.romaneio_id
                    and li.lote_id = lotes.id
                     ) rli on rli.romaneio_id = ri.romaneio_id and rli.item_id = ri.id and rli.talao_detalhe_id = ri.talao_detalhe_id
                where ri.talao_detalhe_id = :talao
            into
                r_romaneio,
                r_caixa,
                r_quantidade
            do begin end
    
            :out_talao      = coalesce(:talao       , 0);
            :out_romaneio   = coalesce(:r_romaneio  , 0);
            :out_caixa      = coalesce(:r_caixa     , 0);
            :out_quantidade = coalesce(:r_quantidade, 0);
            :out_param      = 0;
    
            if(:out_romaneio > 0) then
            begin
                suspend;
            end
    
            if(coalesce(:talao, 0) > 0) then
            begin
                for
                    select
                        out_talao, out_romaneio, out_caixa, out_quantidade
                    from spc_mapeia_romaneio_tinturaria(0, :talao)
                into
                    :out_talao,
                    :out_romaneio,
                    :out_caixa,
                    :out_quantidade
                do
                begin
                    :out_param = 1;
                    if(:out_romaneio > 0) then
                    begin
                        suspend;
                    end
                end
            end
        end
    end
    
    if(:in_tipo = 1) then
    begin
        for
            select
                ri.talao_detalhe_id
            from (
                select
                        caixa,
                        li.romaneio_id,
                        item_id,
                        talao_detalhe_id,
                        li.quantidade
                    from (
                        select
                            row_number() over (partition by i.n_lote) caixa,
                            i.*
                        from tbromaneio_tinturaria_lotes i
                        where i.romaneio_id = :in_talao
                    ) lotes, tbromaneio_tint_lote_item li
                    where lotes.romaneio_id = li.romaneio_id
                    and li.lote_id = lotes.id
                     
                 ) rli, tbromaneio_tinturaria_itens ri
            where rli.romaneio_id = ri.romaneio_id
            and rli.item_id = ri.id
            and iif(coalesce(:in_caixa, 0) = 0, true, rli.caixa = :in_caixa)
        into
            :out_talao
        do begin
            suspend;
           for
                select
                    c.talao_detalhe_id
                from
                    tbremessa_consumo_vinculo v,
                    tbremessa_consumo c
                    where c.id = v.consumo_id
                    and v.remessa_talao_detalhe_id = :out_talao
                    and iif(coalesce(:in_gp, 0) = 0, true, c.esteira_id = :in_gp)
           into
                :out_talao
           do begin
                suspend;
           end
        end
        
    end
end
^

SET TERM ; ^

COMMENT ON PARAMETER SPC_MAPEIA_ROMANEIO_TINTURARIA.IN_TIPO IS
'se 0 por talao, se 1 por romaneio';

