Advertisement
aadddrr

BACKUP SUMMARY MONTHLY FIN AP

Mar 15th, 2017
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.  
  2. CREATE OR REPLACE FUNCTION r_summary_monthly_finance_ap(character varying, bigint, bigint, character varying, bigint, character varying, character varying)
  3.   RETURNS SETOF refcursor AS
  4. $BODY$
  5. DECLARE
  6.         pRefHeader                      REFCURSOR := 'refHeader';
  7.         pRefDetail                      REFCURSOR := 'refDetail';
  8.         pSessionId                      ALIAS FOR $1;
  9.         pTenantId                       ALIAS FOR $2;
  10.         pUserId                         ALIAS FOR $3;
  11.         pDatetime                       ALIAS FOR $4;
  12.        
  13.         pOuId                           ALIAS FOR $5;
  14.         pYearMonth                      ALIAS FOR $6;
  15.         pOutstandingInvoice             ALIAS FOR $7;
  16.        
  17.         vYEs                            character varying := 'Y';
  18.         vOutstanding                    text := ' ';
  19.         vStatusOutstanding              character varying := 'Outstanding';
  20.         vStatusPaid                     character varying := 'Paid';
  21.         vTypeEom                        character varying := 'EOM';
  22.         vGrandTotal                     numeric;
  23.         vExchangeKurs                   character varying;
  24.         vChangeExchangeKurs             character varying;
  25.        
  26. BEGIN
  27.     -- ini untuk mengambil akhir bulan dari period yang mau di print, digunakan untuuk mengambil kurs akhir bulan di exchange rate
  28.     SELECT (date_trunc('MONTH', to_date(pYearMonth,'YYYYMM')) + INTERVAL '1 MONTH - 1 day')::date INTO vExchangeKurs;
  29.  
  30.     vChangeExchangeKurs = (to_char(to_date(vExchangeKurs, 'YYYY-MM-DD'), 'YYYYMMDD'));
  31.  
  32.     IF pOutstandingInvoice <> vYEs THEN -- kalau bukan Y, maka
  33.         vOutstanding = '  '; -- flg nya N
  34.         ELSE
  35.         vOutstanding = ' AND (a.balance_amount - a.payment_amount) > 0 '; -- flg nya Y
  36.     END IF;
  37.  
  38.     -- ini untuk mendapatkan total dari semua GL nya
  39.     SELECT ROUND(SUM((COALESCE(c.amount_to, 1) * (a.balance_amount - a.payment_amount) / COALESCE(c.amount_from, 1))), 2) INTO vGrandTotal
  40.     FROM fi_summary_monthly_ap a
  41.     INNER JOIN vw_fi_all_invoice_ap b ON a.doc_type_id = b.doc_type_id AND a.invoice_id = b.id
  42.     LEFT JOIN m_exchange_rate c ON (vChangeExchangeKurs BETWEEN c.date_from AND c.date_to)
  43.         AND a.curr_code = c.curr_code_from
  44.         AND c.type_exchange_rate = vTypeEom
  45.     WHERE a.ou_id = pOuId AND a.date_year_month = pYearMonth;
  46.  
  47.      
  48.     Open pRefHeader FOR
  49.         SELECT pOuId AS ou_id, f_get_ou_name(pOuId) as ou_name, pYearMonth AS year_month, pDatetime as datetime,
  50.             f_get_username(pUserId) AS username, vGrandTotal AS grand_total,
  51.             CASE WHEN pOutstandingInvoice = vYEs THEN 'Outstanding Invoice Only' ELSE 'All Invoice' END AS invoice;
  52.     RETURN NEXT pRefHeader;
  53.      
  54.     Open pRefDetail FOR
  55.     EXECUTE '
  56.         SELECT f_get_doc_desc(a.doc_type_id) AS doc_desc, b.doc_no, b.doc_date, a.curr_code, COALESCE(c.amount_to, 1) AS amount_to,
  57.             COALESCE(a.balance_amount, 0) AS balance_amount, COALESCE(a.payment_amount, 0) AS payment_amount,
  58.             (a.balance_amount - a.payment_amount) AS outstanding_balance,
  59.             CASE WHEN (a.balance_amount - a.payment_amount) > 0  THEN $1 ELSE $2 END AS status,
  60.             (COALESCE(c.amount_to, 1) * (a.balance_amount - a.payment_amount) / COALESCE(c.amount_from, 1)) AS gl_amount
  61.         FROM fi_summary_monthly_ap a
  62.         INNER JOIN vw_fi_all_invoice_ap b ON a.doc_type_id = b.doc_type_id AND a.invoice_id = b.id
  63.         LEFT JOIN m_exchange_rate c ON ( '''|| vChangeExchangeKurs ||''' BETWEEN c.date_from AND c.date_to)
  64.             AND a.curr_code = c.curr_code_from
  65.             AND c.type_exchange_rate = ''' || vTypeEom || '''
  66.         WHERE a.ou_id = $3 AND a.date_year_month = $4 ' || vOutstanding
  67.         USING vStatusOutstanding, vStatusPaid, pOuId, pYearMonth;
  68.     RETURN NEXT pRefDetail;
  69. END;  
  70. $BODY$
  71.   LANGUAGE plpgsql VOLATILE
  72.   COST 100
  73.   ROWS 1000;
  74.   /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement