SET TERM ^ ;

CREATE OR ALTER procedure SPC_EMAIL_CASO (
    CASO_ID integer,
    PAINEL_ID integer,
    MSG varchar(7000))
returns (
    C1 varchar(8000),
    C2 varchar(8000),
    C3 varchar(8000))
as
declare variable CORPO1 varchar(8000);
declare variable CORPO2 varchar(8000);
declare variable CORPO3 varchar(8000);
declare variable HTML1 varchar(4000);
declare variable HTML2 varchar(4000);
declare variable TIPO integer;
declare variable DESCRICAO varchar(100);
declare variable VALOR varchar(7000);
declare variable PAINEL varchar(500);
begin

   html1 = COALESCE((SELECT first 1 p.html FROM tbcaso_html p where p.id = 3), '');
   html2 = COALESCE((SELECT first 1 p.html FROM tbcaso_html p where p.id = 2), '');

   PAINEL = coalesce((select first 1 FN_LPAD(C.ID, 4, '0')||' - '||C.TITULO from tbcaso_painel c where c.id = :painel_id), '');

   corpo1 = '';
   corpo2 = '';
   corpo3 = '';

   corpo1 = '<html><body>';
   corpo1 = corpo1 || :msg;
   corpo1 = corpo1 || '<p></p>';
--   corpo1 = corpo1 || '<p><a href="https://gc.delfa.com.br/_11150/'||:PAINEL_ID||'/'||:caso_id||'" target="_blank">[ABRIR NA WEB]</a></p>';
   corpo1 = corpo1 || '<p><a href="'||FN_PARAMETRO_V2('SISTEMA.URL_SERVER')||'/_11160/'||:PAINEL_ID||'?CASO_ID='||:caso_id||'" target="_blank">[ABRIR NA WEB]</a></p>';
   corpo1 = corpo1 || '<p></p>';
   corpo1 = corpo1 || html1;
   corpo1 = corpo1 || '<p><u>Painel:</u>: '||:PAINEL||'</p><br>';
   --corpo1 = corpo1 || '<p><u>Data</u>: '||formatdatetime(current_timestamp) || '</p>';

    for
       select
            TIPO,
            DESCRICAO,
            TRIM(SUBSTRING(coalesce(VALOR,'&nbsp;') FROM 1 FOR 3000)) || iif(char_length(VALOR) > 300,'...','') as VALOR
       from CASO_DETALHE(:painel_id, :caso_id)
    into
        :tipo,
        :descricao,
        :valor
    do
    begin
        corpo2 = corpo2||'<p><u>'||descricao||'</u>: '||:valor||'</p>';
    end

   corpo3 = corpo3 || html2 || '</body></html>';


  c1 = coalesce(corpo1, '');
  c2 = coalesce(corpo2, '');
  c3 = coalesce(corpo3, '');

  suspend;
end
^

SET TERM ; ^

SET TERM ^ ;

CREATE OR ALTER procedure SPC_ESTOQUE_MODELO_SALDO_DISP2 (
    IMODELO_ID integer not null,
    IESTABELECIMENTO_ID integer not null,
    ILOCALIZACAO_ID integer not null,
    ICOR_ID integer)
returns (
    MODELO_ID integer,
    CORES blob sub_type 1 segment size 80,
    TAMANHOS_1 blob sub_type 1 segment size 80,
    TAMANHOS_2 blob sub_type 1 segment size 80,
    TAMANHOS_3 blob sub_type 1 segment size 80,
    SALDO_TOTAL_1 numeric(15,8),
    SALDO_TOTAL_2 numeric(15,8),
    SALDO_TOTAL_3 numeric(15,8))
as
BEGIN
    FOR
        SELECT
            Y.MODELO_ID,
            Y.SPLIT_COR AS CORES,

            IIF(COALESCE(Y.SALDO_T01_1, 0) > 0, '01'||',', '')||
            IIF(COALESCE(Y.SALDO_T02_1, 0) > 0, '02'||',', '')||
            IIF(COALESCE(Y.SALDO_T03_1, 0) > 0, '03'||',', '')||
            IIF(COALESCE(Y.SALDO_T04_1, 0) > 0, '04'||',', '')||
            IIF(COALESCE(Y.SALDO_T05_1, 0) > 0, '05'||',', '')||
            IIF(COALESCE(Y.SALDO_T06_1, 0) > 0, '06'||',', '')||
            IIF(COALESCE(Y.SALDO_T07_1, 0) > 0, '07'||',', '')||
            IIF(COALESCE(Y.SALDO_T08_1, 0) > 0, '08'||',', '')||
            IIF(COALESCE(Y.SALDO_T09_1, 0) > 0, '09'||',', '')||
            IIF(COALESCE(Y.SALDO_T10_1, 0) > 0, '10'||',', '')||
            IIF(COALESCE(Y.SALDO_T11_1, 0) > 0, '11'||',', '')||
            IIF(COALESCE(Y.SALDO_T12_1, 0) > 0, '12'||',', '')||
            IIF(COALESCE(Y.SALDO_T13_1, 0) > 0, '13'||',', '')||
            IIF(COALESCE(Y.SALDO_T14_1, 0) > 0, '14'||',', '')||
            IIF(COALESCE(Y.SALDO_T15_1, 0) > 0, '15'||',', '')||
            IIF(COALESCE(Y.SALDO_T16_1, 0) > 0, '16'||',', '')||
            IIF(COALESCE(Y.SALDO_T17_1, 0) > 0, '17'||',', '')||
            IIF(COALESCE(Y.SALDO_T18_1, 0) > 0, '18'||',', '')||
            IIF(COALESCE(Y.SALDO_T19_1, 0) > 0, '19'||',', '')||
            IIF(COALESCE(Y.SALDO_T20_1, 0) > 0, '20'||',', '') AS TAMANHOS_1,

            IIF(COALESCE(Y.SALDO_T01_2, 0) > 0, '01'||',', '')||
            IIF(COALESCE(Y.SALDO_T02_2, 0) > 0, '02'||',', '')||
            IIF(COALESCE(Y.SALDO_T03_2, 0) > 0, '03'||',', '')||
            IIF(COALESCE(Y.SALDO_T04_2, 0) > 0, '04'||',', '')||
            IIF(COALESCE(Y.SALDO_T05_2, 0) > 0, '05'||',', '')||
            IIF(COALESCE(Y.SALDO_T06_2, 0) > 0, '06'||',', '')||
            IIF(COALESCE(Y.SALDO_T07_2, 0) > 0, '07'||',', '')||
            IIF(COALESCE(Y.SALDO_T08_2, 0) > 0, '08'||',', '')||
            IIF(COALESCE(Y.SALDO_T09_2, 0) > 0, '09'||',', '')||
            IIF(COALESCE(Y.SALDO_T10_2, 0) > 0, '10'||',', '')||
            IIF(COALESCE(Y.SALDO_T11_2, 0) > 0, '11'||',', '')||
            IIF(COALESCE(Y.SALDO_T12_2, 0) > 0, '12'||',', '')||
            IIF(COALESCE(Y.SALDO_T13_2, 0) > 0, '13'||',', '')||
            IIF(COALESCE(Y.SALDO_T14_2, 0) > 0, '14'||',', '')||
            IIF(COALESCE(Y.SALDO_T15_2, 0) > 0, '15'||',', '')||
            IIF(COALESCE(Y.SALDO_T16_2, 0) > 0, '16'||',', '')||
            IIF(COALESCE(Y.SALDO_T17_2, 0) > 0, '17'||',', '')||
            IIF(COALESCE(Y.SALDO_T18_2, 0) > 0, '18'||',', '')||
            IIF(COALESCE(Y.SALDO_T19_2, 0) > 0, '19'||',', '')||
            IIF(COALESCE(Y.SALDO_T20_2, 0) > 0, '20'||',', '') AS TAMANHOS_2,

            IIF(COALESCE(Y.SALDO_T01_3, 0) > 0, '01'||',', '')||
            IIF(COALESCE(Y.SALDO_T02_3, 0) > 0, '02'||',', '')||
            IIF(COALESCE(Y.SALDO_T03_3, 0) > 0, '03'||',', '')||
            IIF(COALESCE(Y.SALDO_T04_3, 0) > 0, '04'||',', '')||
            IIF(COALESCE(Y.SALDO_T05_3, 0) > 0, '05'||',', '')||
            IIF(COALESCE(Y.SALDO_T06_3, 0) > 0, '06'||',', '')||
            IIF(COALESCE(Y.SALDO_T07_3, 0) > 0, '07'||',', '')||
            IIF(COALESCE(Y.SALDO_T08_3, 0) > 0, '08'||',', '')||
            IIF(COALESCE(Y.SALDO_T09_3, 0) > 0, '09'||',', '')||
            IIF(COALESCE(Y.SALDO_T10_3, 0) > 0, '10'||',', '')||
            IIF(COALESCE(Y.SALDO_T11_3, 0) > 0, '11'||',', '')||
            IIF(COALESCE(Y.SALDO_T12_3, 0) > 0, '12'||',', '')||
            IIF(COALESCE(Y.SALDO_T13_3, 0) > 0, '13'||',', '')||
            IIF(COALESCE(Y.SALDO_T14_3, 0) > 0, '14'||',', '')||
            IIF(COALESCE(Y.SALDO_T15_3, 0) > 0, '15'||',', '')||
            IIF(COALESCE(Y.SALDO_T16_3, 0) > 0, '16'||',', '')||
            IIF(COALESCE(Y.SALDO_T17_3, 0) > 0, '17'||',', '')||
            IIF(COALESCE(Y.SALDO_T18_3, 0) > 0, '18'||',', '')||
            IIF(COALESCE(Y.SALDO_T19_3, 0) > 0, '19'||',', '')||
            IIF(COALESCE(Y.SALDO_T20_3, 0) > 0, '20'||',', '') AS TAMANHOS_3,

        
            FN_CALC_PRECISION_V2( FN_CALC_PRECISION_V2( FN_CALC_PRECISION_V2( FN_CALC_PRECISION_V2( FN_CALC_PRECISION_V2(
            FN_CALC_PRECISION_V2( FN_CALC_PRECISION_V2( FN_CALC_PRECISION_V2( FN_CALC_PRECISION_V2( FN_CALC_PRECISION_V2(
            FN_CALC_PRECISION_V2( FN_CALC_PRECISION_V2( FN_CALC_PRECISION_V2( FN_CALC_PRECISION_V2( FN_CALC_PRECISION_V2(
            FN_CALC_PRECISION_V2( FN_CALC_PRECISION_V2( FN_CALC_PRECISION_V2( FN_CALC_PRECISION_V2(
                COALESCE(Y.SALDO_T01_1, 0), 
                COALESCE(Y.SALDO_T02_1, 0), '+', 8), 
                COALESCE(Y.SALDO_T03_1, 0), '+', 8), 
                COALESCE(Y.SALDO_T04_1, 0), '+', 8), 
                COALESCE(Y.SALDO_T05_1, 0), '+', 8), 
                COALESCE(Y.SALDO_T06_1, 0), '+', 8), 
                COALESCE(Y.SALDO_T07_1, 0), '+', 8), 
                COALESCE(Y.SALDO_T08_1, 0), '+', 8), 
                COALESCE(Y.SALDO_T09_1, 0), '+', 8), 
                COALESCE(Y.SALDO_T10_1, 0), '+', 8), 
                COALESCE(Y.SALDO_T11_1, 0), '+', 8), 
                COALESCE(Y.SALDO_T12_1, 0), '+', 8),
                COALESCE(Y.SALDO_T13_1, 0), '+', 8), 
                COALESCE(Y.SALDO_T14_1, 0), '+', 8), 
                COALESCE(Y.SALDO_T15_1, 0), '+', 8), 
                COALESCE(Y.SALDO_T16_1, 0), '+', 8), 
                COALESCE(Y.SALDO_T17_1, 0), '+', 8), 
                COALESCE(Y.SALDO_T18_1, 0), '+', 8), 
                COALESCE(Y.SALDO_T19_1, 0), '+', 8), 
                COALESCE(Y.SALDO_T20_1, 0), '+', 8) AS SALDO_TOTAL_1,

            FN_CALC_PRECISION_V2( FN_CALC_PRECISION_V2( FN_CALC_PRECISION_V2( FN_CALC_PRECISION_V2( FN_CALC_PRECISION_V2(
            FN_CALC_PRECISION_V2( FN_CALC_PRECISION_V2( FN_CALC_PRECISION_V2( FN_CALC_PRECISION_V2( FN_CALC_PRECISION_V2(
            FN_CALC_PRECISION_V2( FN_CALC_PRECISION_V2( FN_CALC_PRECISION_V2( FN_CALC_PRECISION_V2( FN_CALC_PRECISION_V2(
            FN_CALC_PRECISION_V2( FN_CALC_PRECISION_V2( FN_CALC_PRECISION_V2( FN_CALC_PRECISION_V2(
                COALESCE(Y.SALDO_T01_2, 0),
                COALESCE(Y.SALDO_T02_2, 0), '+', 8), 
                COALESCE(Y.SALDO_T03_2, 0), '+', 8), 
                COALESCE(Y.SALDO_T04_2, 0), '+', 8), 
                COALESCE(Y.SALDO_T05_2, 0), '+', 8), 
                COALESCE(Y.SALDO_T06_2, 0), '+', 8), 
                COALESCE(Y.SALDO_T07_2, 0), '+', 8), 
                COALESCE(Y.SALDO_T08_2, 0), '+', 8), 
                COALESCE(Y.SALDO_T09_2, 0), '+', 8), 
                COALESCE(Y.SALDO_T10_2, 0), '+', 8), 
                COALESCE(Y.SALDO_T11_2, 0), '+', 8), 
                COALESCE(Y.SALDO_T12_2, 0), '+', 8), 
                COALESCE(Y.SALDO_T13_2, 0), '+', 8), 
                COALESCE(Y.SALDO_T14_2, 0), '+', 8), 
                COALESCE(Y.SALDO_T15_2, 0), '+', 8), 
                COALESCE(Y.SALDO_T16_2, 0), '+', 8), 
                COALESCE(Y.SALDO_T17_2, 0), '+', 8), 
                COALESCE(Y.SALDO_T18_2, 0), '+', 8), 
                COALESCE(Y.SALDO_T19_2, 0), '+', 8), 
                COALESCE(Y.SALDO_T20_2, 0), '+', 8) AS SALDO_TOTAL_2,

            FN_CALC_PRECISION_V2( FN_CALC_PRECISION_V2( FN_CALC_PRECISION_V2( FN_CALC_PRECISION_V2( FN_CALC_PRECISION_V2(
            FN_CALC_PRECISION_V2( FN_CALC_PRECISION_V2( FN_CALC_PRECISION_V2( FN_CALC_PRECISION_V2( FN_CALC_PRECISION_V2(
            FN_CALC_PRECISION_V2( FN_CALC_PRECISION_V2( FN_CALC_PRECISION_V2( FN_CALC_PRECISION_V2( FN_CALC_PRECISION_V2(
            FN_CALC_PRECISION_V2( FN_CALC_PRECISION_V2( FN_CALC_PRECISION_V2( FN_CALC_PRECISION_V2(
                COALESCE(Y.SALDO_T01_3, 0),
                COALESCE(Y.SALDO_T02_3, 0), '+', 8), 
                COALESCE(Y.SALDO_T03_3, 0), '+', 8), 
                COALESCE(Y.SALDO_T04_3, 0), '+', 8), 
                COALESCE(Y.SALDO_T05_3, 0), '+', 8), 
                COALESCE(Y.SALDO_T06_3, 0), '+', 8), 
                COALESCE(Y.SALDO_T07_3, 0), '+', 8), 
                COALESCE(Y.SALDO_T08_3, 0), '+', 8), 
                COALESCE(Y.SALDO_T09_3, 0), '+', 8), 
                COALESCE(Y.SALDO_T10_3, 0), '+', 8), 
                COALESCE(Y.SALDO_T11_3, 0), '+', 8), 
                COALESCE(Y.SALDO_T12_3, 0), '+', 8), 
                COALESCE(Y.SALDO_T13_3, 0), '+', 8), 
                COALESCE(Y.SALDO_T14_3, 0), '+', 8), 
                COALESCE(Y.SALDO_T15_3, 0), '+', 8), 
                COALESCE(Y.SALDO_T16_3, 0), '+', 8), 
                COALESCE(Y.SALDO_T17_3, 0), '+', 8), 
                COALESCE(Y.SALDO_T18_3, 0), '+', 8), 
                COALESCE(Y.SALDO_T19_3, 0), '+', 8), 
                COALESCE(Y.SALDO_T20_3, 0), '+', 8) AS SALDO_TOTAL_3
        
        FROM (
            SELECT
                X.MODELO_ID,
                LIST(X.COR_ID, ',') AS  SPLIT_COR,
            
                /* Saldo do Tipo 1 - Estoque == 1 */
                FN_CALC_PRECISION_V2(SUM(X.T01_SALDO), SUM(X.A01_SALDO), '-', 8) AS SALDO_T01_1,
                FN_CALC_PRECISION_V2(SUM(X.T02_SALDO), SUM(X.A02_SALDO), '-', 8) AS SALDO_T02_1,
                FN_CALC_PRECISION_V2(SUM(X.T03_SALDO), SUM(X.A03_SALDO), '-', 8) AS SALDO_T03_1,
                FN_CALC_PRECISION_V2(SUM(X.T04_SALDO), SUM(X.A04_SALDO), '-', 8) AS SALDO_T04_1,
                FN_CALC_PRECISION_V2(SUM(X.T05_SALDO), SUM(X.A05_SALDO), '-', 8) AS SALDO_T05_1,
                FN_CALC_PRECISION_V2(SUM(X.T06_SALDO), SUM(X.A06_SALDO), '-', 8) AS SALDO_T06_1,
                FN_CALC_PRECISION_V2(SUM(X.T07_SALDO), SUM(X.A07_SALDO), '-', 8) AS SALDO_T07_1,
                FN_CALC_PRECISION_V2(SUM(X.T08_SALDO), SUM(X.A08_SALDO), '-', 8) AS SALDO_T08_1,
                FN_CALC_PRECISION_V2(SUM(X.T09_SALDO), SUM(X.A09_SALDO), '-', 8) AS SALDO_T09_1,
                FN_CALC_PRECISION_V2(SUM(X.T10_SALDO), SUM(X.A10_SALDO), '-', 8) AS SALDO_T10_1,
                FN_CALC_PRECISION_V2(SUM(X.T11_SALDO), SUM(X.A11_SALDO), '-', 8) AS SALDO_T11_1,
                FN_CALC_PRECISION_V2(SUM(X.T12_SALDO), SUM(X.A12_SALDO), '-', 8) AS SALDO_T12_1,
                FN_CALC_PRECISION_V2(SUM(X.T13_SALDO), SUM(X.A13_SALDO), '-', 8) AS SALDO_T13_1,
                FN_CALC_PRECISION_V2(SUM(X.T14_SALDO), SUM(X.A14_SALDO), '-', 8) AS SALDO_T14_1,
                FN_CALC_PRECISION_V2(SUM(X.T15_SALDO), SUM(X.A15_SALDO), '-', 8) AS SALDO_T15_1,
                FN_CALC_PRECISION_V2(SUM(X.T16_SALDO), SUM(X.A16_SALDO), '-', 8) AS SALDO_T16_1,
                FN_CALC_PRECISION_V2(SUM(X.T17_SALDO), SUM(X.A17_SALDO), '-', 8) AS SALDO_T17_1,
                FN_CALC_PRECISION_V2(SUM(X.T18_SALDO), SUM(X.A18_SALDO), '-', 8) AS SALDO_T18_1,
                FN_CALC_PRECISION_V2(SUM(X.T19_SALDO), SUM(X.A19_SALDO), '-', 8) AS SALDO_T19_1,
                FN_CALC_PRECISION_V2(SUM(X.T20_SALDO), SUM(X.A20_SALDO), '-', 8) AS SALDO_T20_1,
                
                /* Saldo do Tipo 2 - Estoque == 2 */
                FN_CALC_PRECISION_V2(SUM(X.T01_SALDO), SUM(X.D01_SALDO), '-', 8) AS SALDO_T01_2,
                FN_CALC_PRECISION_V2(SUM(X.T02_SALDO), SUM(X.D02_SALDO), '-', 8) AS SALDO_T02_2,
                FN_CALC_PRECISION_V2(SUM(X.T03_SALDO), SUM(X.D03_SALDO), '-', 8) AS SALDO_T03_2,
                FN_CALC_PRECISION_V2(SUM(X.T04_SALDO), SUM(X.D04_SALDO), '-', 8) AS SALDO_T04_2,
                FN_CALC_PRECISION_V2(SUM(X.T05_SALDO), SUM(X.D05_SALDO), '-', 8) AS SALDO_T05_2,
                FN_CALC_PRECISION_V2(SUM(X.T06_SALDO), SUM(X.D06_SALDO), '-', 8) AS SALDO_T06_2,
                FN_CALC_PRECISION_V2(SUM(X.T07_SALDO), SUM(X.D07_SALDO), '-', 8) AS SALDO_T07_2,
                FN_CALC_PRECISION_V2(SUM(X.T08_SALDO), SUM(X.D08_SALDO), '-', 8) AS SALDO_T08_2,
                FN_CALC_PRECISION_V2(SUM(X.T09_SALDO), SUM(X.D09_SALDO), '-', 8) AS SALDO_T09_2,
                FN_CALC_PRECISION_V2(SUM(X.T10_SALDO), SUM(X.D10_SALDO), '-', 8) AS SALDO_T10_2,
                FN_CALC_PRECISION_V2(SUM(X.T11_SALDO), SUM(X.D11_SALDO), '-', 8) AS SALDO_T11_2,
                FN_CALC_PRECISION_V2(SUM(X.T12_SALDO), SUM(X.D12_SALDO), '-', 8) AS SALDO_T12_2,
                FN_CALC_PRECISION_V2(SUM(X.T13_SALDO), SUM(X.D13_SALDO), '-', 8) AS SALDO_T13_2,
                FN_CALC_PRECISION_V2(SUM(X.T14_SALDO), SUM(X.D14_SALDO), '-', 8) AS SALDO_T14_2,
                FN_CALC_PRECISION_V2(SUM(X.T15_SALDO), SUM(X.D15_SALDO), '-', 8) AS SALDO_T15_2,
                FN_CALC_PRECISION_V2(SUM(X.T16_SALDO), SUM(X.D16_SALDO), '-', 8) AS SALDO_T16_2,
                FN_CALC_PRECISION_V2(SUM(X.T17_SALDO), SUM(X.D17_SALDO), '-', 8) AS SALDO_T17_2,
                FN_CALC_PRECISION_V2(SUM(X.T18_SALDO), SUM(X.D18_SALDO), '-', 8) AS SALDO_T18_2,
                FN_CALC_PRECISION_V2(SUM(X.T19_SALDO), SUM(X.D19_SALDO), '-', 8) AS SALDO_T19_2,
                FN_CALC_PRECISION_V2(SUM(X.T20_SALDO), SUM(X.D20_SALDO), '-', 8) AS SALDO_T20_2,

                /* Saldo do Tipo 3 - Estoque == 3 */
                CAST( SUM(X.T01_SALDO) AS NUMERIC(15,8) ) AS SALDO_T01_3,
                CAST( SUM(X.T02_SALDO) AS NUMERIC(15,8) ) AS SALDO_T02_3,
                CAST( SUM(X.T03_SALDO) AS NUMERIC(15,8) ) AS SALDO_T03_3,
                CAST( SUM(X.T04_SALDO) AS NUMERIC(15,8) ) AS SALDO_T04_3,
                CAST( SUM(X.T05_SALDO) AS NUMERIC(15,8) ) AS SALDO_T05_3,
                CAST( SUM(X.T06_SALDO) AS NUMERIC(15,8) ) AS SALDO_T06_3,
                CAST( SUM(X.T07_SALDO) AS NUMERIC(15,8) ) AS SALDO_T07_3,
                CAST( SUM(X.T08_SALDO) AS NUMERIC(15,8) ) AS SALDO_T08_3,
                CAST( SUM(X.T09_SALDO) AS NUMERIC(15,8) ) AS SALDO_T09_3,
                CAST( SUM(X.T10_SALDO) AS NUMERIC(15,8) ) AS SALDO_T10_3,
                CAST( SUM(X.T11_SALDO) AS NUMERIC(15,8) ) AS SALDO_T11_3,
                CAST( SUM(X.T12_SALDO) AS NUMERIC(15,8) ) AS SALDO_T12_3,
                CAST( SUM(X.T13_SALDO) AS NUMERIC(15,8) ) AS SALDO_T13_3,
                CAST( SUM(X.T14_SALDO) AS NUMERIC(15,8) ) AS SALDO_T14_3,
                CAST( SUM(X.T15_SALDO) AS NUMERIC(15,8) ) AS SALDO_T15_3,
                CAST( SUM(X.T16_SALDO) AS NUMERIC(15,8) ) AS SALDO_T16_3,
                CAST( SUM(X.T17_SALDO) AS NUMERIC(15,8) ) AS SALDO_T17_3,
                CAST( SUM(X.T18_SALDO) AS NUMERIC(15,8) ) AS SALDO_T18_3,
                CAST( SUM(X.T19_SALDO) AS NUMERIC(15,8) ) AS SALDO_T19_3,
                CAST( SUM(X.T20_SALDO) AS NUMERIC(15,8) ) AS SALDO_T20_3
            
            FROM (
                SELECT
                    ROW_NUMBER() OVER(ORDER BY M.CODIGO, P.COR_CODIGO) AS ID,

                    E.CODIGO||' - '||E.RAZAOSOCIAL AS ESTABELECIMENTO,
                    L.CODIGO||' - '||L.DESCRICAO AS LOCALIZACAO,
                    M.CODIGO AS MODELO_ID,
                    P.COR_CODIGO AS COR_ID,

                    S.SALDO,
                    S.T01_SALDO,
                    S.T02_SALDO,
                    S.T03_SALDO,
                    S.T04_SALDO,
                    S.T05_SALDO,
                    S.T06_SALDO,
                    S.T07_SALDO,
                    S.T08_SALDO,
                    S.T09_SALDO,
                    S.T10_SALDO,
                    S.T11_SALDO,
                    S.T12_SALDO,
                    S.T13_SALDO,
                    S.T14_SALDO,
                    S.T15_SALDO,
                    S.T16_SALDO,
                    S.T17_SALDO,
                    S.T18_SALDO,
                    S.T19_SALDO,
                    S.T20_SALDO,

                    IIF( S.T01_SALDO > 0, FN_ESTOQUE_SALDO_ALOCADO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO, 1),0) AS A01_SALDO,
                    IIF( S.T02_SALDO > 0, FN_ESTOQUE_SALDO_ALOCADO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO, 2),0) AS A02_SALDO,
                    IIF( S.T03_SALDO > 0, FN_ESTOQUE_SALDO_ALOCADO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO, 3),0) AS A03_SALDO,
                    IIF( S.T04_SALDO > 0, FN_ESTOQUE_SALDO_ALOCADO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO, 4),0) AS A04_SALDO,
                    IIF( S.T05_SALDO > 0, FN_ESTOQUE_SALDO_ALOCADO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO, 5),0) AS A05_SALDO,
                    IIF( S.T06_SALDO > 0, FN_ESTOQUE_SALDO_ALOCADO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO, 6),0) AS A06_SALDO,
                    IIF( S.T07_SALDO > 0, FN_ESTOQUE_SALDO_ALOCADO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO, 7),0) AS A07_SALDO,
                    IIF( S.T08_SALDO > 0, FN_ESTOQUE_SALDO_ALOCADO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO, 8),0) AS A08_SALDO,
                    IIF( S.T09_SALDO > 0, FN_ESTOQUE_SALDO_ALOCADO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO, 9),0) AS A09_SALDO,
                    IIF( S.T10_SALDO > 0, FN_ESTOQUE_SALDO_ALOCADO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO,10),0) AS A10_SALDO,
                    IIF( S.T11_SALDO > 0, FN_ESTOQUE_SALDO_ALOCADO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO,11),0) AS A11_SALDO,
                    IIF( S.T12_SALDO > 0, FN_ESTOQUE_SALDO_ALOCADO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO,12),0) AS A12_SALDO,
                    IIF( S.T13_SALDO > 0, FN_ESTOQUE_SALDO_ALOCADO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO,13),0) AS A13_SALDO,
                    IIF( S.T14_SALDO > 0, FN_ESTOQUE_SALDO_ALOCADO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO,14),0) AS A14_SALDO,
                    IIF( S.T15_SALDO > 0, FN_ESTOQUE_SALDO_ALOCADO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO,15),0) AS A15_SALDO,
                    IIF( S.T16_SALDO > 0, FN_ESTOQUE_SALDO_ALOCADO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO,16),0) AS A16_SALDO,
                    IIF( S.T17_SALDO > 0, FN_ESTOQUE_SALDO_ALOCADO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO,17),0) AS A17_SALDO,
                    IIF( S.T18_SALDO > 0, FN_ESTOQUE_SALDO_ALOCADO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO,18),0) AS A18_SALDO,
                    IIF( S.T19_SALDO > 0, FN_ESTOQUE_SALDO_ALOCADO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO,19),0) AS A19_SALDO,
                    IIF( S.T20_SALDO > 0, FN_ESTOQUE_SALDO_ALOCADO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO,20),0) AS A20_SALDO,
            
                    IIF( S.T01_SALDO > 0, FN_EMPENHADO_PEDIDO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO, 1),0) AS D01_SALDO,
                    IIF( S.T02_SALDO > 0, FN_EMPENHADO_PEDIDO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO, 2),0) AS D02_SALDO,
                    IIF( S.T03_SALDO > 0, FN_EMPENHADO_PEDIDO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO, 3),0) AS D03_SALDO,
                    IIF( S.T04_SALDO > 0, FN_EMPENHADO_PEDIDO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO, 4),0) AS D04_SALDO,
                    IIF( S.T05_SALDO > 0, FN_EMPENHADO_PEDIDO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO, 5),0) AS D05_SALDO,
                    IIF( S.T06_SALDO > 0, FN_EMPENHADO_PEDIDO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO, 6),0) AS D06_SALDO,
                    IIF( S.T07_SALDO > 0, FN_EMPENHADO_PEDIDO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO, 7),0) AS D07_SALDO,
                    IIF( S.T08_SALDO > 0, FN_EMPENHADO_PEDIDO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO, 8),0) AS D08_SALDO,
                    IIF( S.T09_SALDO > 0, FN_EMPENHADO_PEDIDO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO, 9),0) AS D09_SALDO,
                    IIF( S.T10_SALDO > 0, FN_EMPENHADO_PEDIDO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO,10),0) AS D10_SALDO,
                    IIF( S.T11_SALDO > 0, FN_EMPENHADO_PEDIDO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO,11),0) AS D11_SALDO,
                    IIF( S.T12_SALDO > 0, FN_EMPENHADO_PEDIDO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO,12),0) AS D12_SALDO,
                    IIF( S.T13_SALDO > 0, FN_EMPENHADO_PEDIDO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO,13),0) AS D13_SALDO,
                    IIF( S.T14_SALDO > 0, FN_EMPENHADO_PEDIDO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO,14),0) AS D14_SALDO,
                    IIF( S.T15_SALDO > 0, FN_EMPENHADO_PEDIDO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO,15),0) AS D15_SALDO,
                    IIF( S.T16_SALDO > 0, FN_EMPENHADO_PEDIDO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO,16),0) AS D16_SALDO,
                    IIF( S.T17_SALDO > 0, FN_EMPENHADO_PEDIDO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO,17),0) AS D17_SALDO,
                    IIF( S.T18_SALDO > 0, FN_EMPENHADO_PEDIDO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO,18),0) AS D18_SALDO,
                    IIF( S.T19_SALDO > 0, FN_EMPENHADO_PEDIDO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO,19),0) AS D19_SALDO,
                    IIF( S.T20_SALDO > 0, FN_EMPENHADO_PEDIDO(S.ESTABELECIMENTO_CODIGO, S.LOCALIZACAO_CODIGO, P.CODIGO,20),0) AS D20_SALDO
            
                FROM TBMODELO M, TBESTOQUE_SALDO S, TBPRODUTO P, TBESTABELECIMENTO E, TBLOCALIZACAO L
                WHERE M.CODIGO = :IMODELO_ID
                AND S.ESTABELECIMENTO_CODIGO = :IESTABELECIMENTO_ID
                AND S.LOCALIZACAO_CODIGO = :ILOCALIZACAO_ID
                AND P.MODELO_CODIGO = M.CODIGO
                AND P.CODIGO = S.PRODUTO_CODIGO
                AND IIF(FN_IS_EMPTY(CAST(:ICOR_ID AS INTEGER)) <> '' AND FN_IS_EMPTY(CAST(:ICOR_ID AS INTEGER)) > 0, P.COR_CODIGO = :ICOR_ID, true = true)
                AND L.CODIGO = S.LOCALIZACAO_CODIGO
                AND E.CODIGO = S.ESTABELECIMENTO_CODIGO
            
                ORDER BY M.CODIGO, P.COR_CODIGO
            ) X
            WHERE true = true
        
            GROUP BY
                X.MODELO_ID
        ) Y
        WHERE true = true

    INTO
        :MODELO_ID,
        :CORES,

        :TAMANHOS_1,
        :TAMANHOS_2,
        :TAMANHOS_3,

        :SALDO_TOTAL_1,
        :SALDO_TOTAL_2,
        :SALDO_TOTAL_3

    DO
    BEGIN

        SUSPEND;

    END
END
^

SET TERM ; ^

