SET TERM ^ ;

CREATE OR ALTER function FN_ESTOQUE_MINIMO_MAXIMO (
    ESTABELECIMENTO_CODIGO integer,
    LOCALIZACAO_CODIGO integer,
    PRODUTO_CODIGO integer,
    TAMNHO integer)
returns varchar(1000)
AS
declare variable estmin varchar(1000);
begin

    ESTMIN = COALESCE((SELECT
                    iif(:TAMNHO = 01, em.t01||'|'||em.m01||'|'||IIF(EM.TIPO_REPOSICAO = 0, CAST((EM.T01 * (CAST(EM.PONTO_REPOSICAO AS DOUBLE PRECISION)/100.00)) AS INTEGER),CAST((EM.M01 * (CAST(EM.PONTO_REPOSICAO AS DOUBLE PRECISION)/100.00)) AS INTEGER)),
                    iif(:TAMNHO = 02, em.t02||'|'||em.m02||'|'||IIF(EM.TIPO_REPOSICAO = 0, CAST((EM.T02 * (CAST(EM.PONTO_REPOSICAO AS DOUBLE PRECISION)/100.00)) AS INTEGER),CAST((EM.M02 * (CAST(EM.PONTO_REPOSICAO AS DOUBLE PRECISION)/100.00)) AS INTEGER)),
                    iif(:TAMNHO = 03, em.t03||'|'||em.m03||'|'||IIF(EM.TIPO_REPOSICAO = 0, CAST((EM.T03 * (CAST(EM.PONTO_REPOSICAO AS DOUBLE PRECISION)/100.00)) AS INTEGER),CAST((EM.M03 * (CAST(EM.PONTO_REPOSICAO AS DOUBLE PRECISION)/100.00)) AS INTEGER)),
                    iif(:TAMNHO = 04, em.t04||'|'||em.m04||'|'||IIF(EM.TIPO_REPOSICAO = 0, CAST((EM.T04 * (CAST(EM.PONTO_REPOSICAO AS DOUBLE PRECISION)/100.00)) AS INTEGER),CAST((EM.M04 * (CAST(EM.PONTO_REPOSICAO AS DOUBLE PRECISION)/100.00)) AS INTEGER)),
                    iif(:TAMNHO = 05, em.t05||'|'||em.m05||'|'||IIF(EM.TIPO_REPOSICAO = 0, CAST((EM.T05 * (CAST(EM.PONTO_REPOSICAO AS DOUBLE PRECISION)/100.00)) AS INTEGER),CAST((EM.M05 * (CAST(EM.PONTO_REPOSICAO AS DOUBLE PRECISION)/100.00)) AS INTEGER)),
                    iif(:TAMNHO = 06, em.t06||'|'||em.m06||'|'||IIF(EM.TIPO_REPOSICAO = 0, CAST((EM.T06 * (CAST(EM.PONTO_REPOSICAO AS DOUBLE PRECISION)/100.00)) AS INTEGER),CAST((EM.M06 * (CAST(EM.PONTO_REPOSICAO AS DOUBLE PRECISION)/100.00)) AS INTEGER)),
                    iif(:TAMNHO = 07, em.t07||'|'||em.m07||'|'||IIF(EM.TIPO_REPOSICAO = 0, CAST((EM.T07 * (CAST(EM.PONTO_REPOSICAO AS DOUBLE PRECISION)/100.00)) AS INTEGER),CAST((EM.M07 * (CAST(EM.PONTO_REPOSICAO AS DOUBLE PRECISION)/100.00)) AS INTEGER)),
                    iif(:TAMNHO = 08, em.t08||'|'||em.m08||'|'||IIF(EM.TIPO_REPOSICAO = 0, CAST((EM.T08 * (CAST(EM.PONTO_REPOSICAO AS DOUBLE PRECISION)/100.00)) AS INTEGER),CAST((EM.M08 * (CAST(EM.PONTO_REPOSICAO AS DOUBLE PRECISION)/100.00)) AS INTEGER)),
                    iif(:TAMNHO = 09, em.t09||'|'||em.m09||'|'||IIF(EM.TIPO_REPOSICAO = 0, CAST((EM.T09 * (CAST(EM.PONTO_REPOSICAO AS DOUBLE PRECISION)/100.00)) AS INTEGER),CAST((EM.M09 * (CAST(EM.PONTO_REPOSICAO AS DOUBLE PRECISION)/100.00)) AS INTEGER)),
                    iif(:TAMNHO = 10, em.t10||'|'||em.m10||'|'||IIF(EM.TIPO_REPOSICAO = 0, CAST((EM.T10 * (CAST(EM.PONTO_REPOSICAO AS DOUBLE PRECISION)/100.00)) AS INTEGER),CAST((EM.M10 * (CAST(EM.PONTO_REPOSICAO AS DOUBLE PRECISION)/100.00)) AS INTEGER)),
                    iif(:TAMNHO = 11, em.t11||'|'||em.m11||'|'||IIF(EM.TIPO_REPOSICAO = 0, CAST((EM.T11 * (CAST(EM.PONTO_REPOSICAO AS DOUBLE PRECISION)/100.00)) AS INTEGER),CAST((EM.M11 * (CAST(EM.PONTO_REPOSICAO AS DOUBLE PRECISION)/100.00)) AS INTEGER)),
                    iif(:TAMNHO = 12, em.t12||'|'||em.m12||'|'||IIF(EM.TIPO_REPOSICAO = 0, CAST((EM.T12 * (CAST(EM.PONTO_REPOSICAO AS DOUBLE PRECISION)/100.00)) AS INTEGER),CAST((EM.M12 * (CAST(EM.PONTO_REPOSICAO AS DOUBLE PRECISION)/100.00)) AS INTEGER)),
                    iif(:TAMNHO = 13, em.t13||'|'||em.m13||'|'||IIF(EM.TIPO_REPOSICAO = 0, CAST((EM.T13 * (CAST(EM.PONTO_REPOSICAO AS DOUBLE PRECISION)/100.00)) AS INTEGER),CAST((EM.M13 * (CAST(EM.PONTO_REPOSICAO AS DOUBLE PRECISION)/100.00)) AS INTEGER)),
                    iif(:TAMNHO = 14, em.t14||'|'||em.m14||'|'||IIF(EM.TIPO_REPOSICAO = 0, CAST((EM.T14 * (CAST(EM.PONTO_REPOSICAO AS DOUBLE PRECISION)/100.00)) AS INTEGER),CAST((EM.M14 * (CAST(EM.PONTO_REPOSICAO AS DOUBLE PRECISION)/100.00)) AS INTEGER)),
                    iif(:TAMNHO = 15, em.t15||'|'||em.m15||'|'||IIF(EM.TIPO_REPOSICAO = 0, CAST((EM.T15 * (CAST(EM.PONTO_REPOSICAO AS DOUBLE PRECISION)/100.00)) AS INTEGER),CAST((EM.M15 * (CAST(EM.PONTO_REPOSICAO AS DOUBLE PRECISION)/100.00)) AS INTEGER)),
                    iif(:TAMNHO = 16, em.t16||'|'||em.m16||'|'||IIF(EM.TIPO_REPOSICAO = 0, CAST((EM.T16 * (CAST(EM.PONTO_REPOSICAO AS DOUBLE PRECISION)/100.00)) AS INTEGER),CAST((EM.M16 * (CAST(EM.PONTO_REPOSICAO AS DOUBLE PRECISION)/100.00)) AS INTEGER)),
                    iif(:TAMNHO = 17, em.t17||'|'||em.m17||'|'||IIF(EM.TIPO_REPOSICAO = 0, CAST((EM.T17 * (CAST(EM.PONTO_REPOSICAO AS DOUBLE PRECISION)/100.00)) AS INTEGER),CAST((EM.M17 * (CAST(EM.PONTO_REPOSICAO AS DOUBLE PRECISION)/100.00)) AS INTEGER)),
                    iif(:TAMNHO = 18, em.t18||'|'||em.m18||'|'||IIF(EM.TIPO_REPOSICAO = 0, CAST((EM.T18 * (CAST(EM.PONTO_REPOSICAO AS DOUBLE PRECISION)/100.00)) AS INTEGER),CAST((EM.M18 * (CAST(EM.PONTO_REPOSICAO AS DOUBLE PRECISION)/100.00)) AS INTEGER)),
                    iif(:TAMNHO = 19, em.t19||'|'||em.m19||'|'||IIF(EM.TIPO_REPOSICAO = 0, CAST((EM.T19 * (CAST(EM.PONTO_REPOSICAO AS DOUBLE PRECISION)/100.00)) AS INTEGER),CAST((EM.M19 * (CAST(EM.PONTO_REPOSICAO AS DOUBLE PRECISION)/100.00)) AS INTEGER)),
                    iif(:TAMNHO = 20, em.t20||'|'||em.m20||'|'||IIF(EM.TIPO_REPOSICAO = 0, CAST((EM.T20 * (CAST(EM.PONTO_REPOSICAO AS DOUBLE PRECISION)/100.00)) AS INTEGER),CAST((EM.M20 * (CAST(EM.PONTO_REPOSICAO AS DOUBLE PRECISION)/100.00)) AS INTEGER)),'0|0|0'))))))))))))))))))))
                    
                 FROM(
                        SELECT
                            COALESCE(EM.PONTO_REPOSICAO,100) AS PONTO_REPOSICAO,
                            EM.T01, EM.M01,
                            EM.T02, EM.M02,
                            EM.T03, EM.M03,
                            EM.T04, EM.M04,
                            EM.T05, EM.M05,
                            EM.T06, EM.M06,
                            EM.T07, EM.M07,
                            EM.T08, EM.M08,
                            EM.T09, EM.M09,
                            EM.T10, EM.M10,
                            EM.T11, EM.M11,
                            EM.T12, EM.M12,
                            EM.T13, EM.M13,
                            EM.T14, EM.M14,
                            EM.T15, EM.M15,
                            EM.T16, EM.M16,
                            EM.T17, EM.M17,
                            EM.T18, EM.M18,
                            EM.T19, EM.M19,
                            EM.T20, EM.M20,
                            COALESCE(EM.TIPO_REPOSICAO,0) AS TIPO_REPOSICAO
                
                            FROM TBESTOQUE_MINIMO EM
                            WHERE EM.ESTABELECIMENTO_CODIGO = :ESTABELECIMENTO_CODIGO
                            AND EM.LOCALIZACAO_CODIGO = :LOCALIZACAO_CODIGO
                            AND EM.PRODUTO_CODIGO = :PRODUTO_CODIGO
                 ) EM),'0|0|0');

  return ESTMIN;
end
^

SET TERM ; ^

