Advertisement
widana

Function Report Rekap Piutang

Jul 25th, 2018
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. CREATE OR REPLACE FUNCTION rpt.r_rekap_piutang(CHARACTER VARYING, BIGINT, CHARACTER VARYING, CHARACTER VARYING, CHARACTER VARYING)
  2.   RETURNS SETOF refcursor AS
  3. $BODY$
  4. DECLARE
  5.     pRefHeader              REFCURSOR := 'refHeader';
  6.     pRefDetail              REFCURSOR := 'refDetail';
  7.    
  8.     pSessionId              ALIAS FOR $1;
  9.     pRecordOwnerId          ALIAS FOR $2;
  10.     pCustomer               ALIAS FOR $3;
  11.     pDateFrom               ALIAS FOR $4;
  12.     pDateTo                 ALIAS FOR $5;
  13.    
  14.     vEmptyId                BIGINT := -99;
  15.     vEmpty                  TEXT := '';
  16.     vNone                   CHARACTER VARYING := '-';
  17.     vNo                     CHARACTER VARYING := 'N';
  18.     vYes                    CHARACTER VARYING := 'Y';
  19.     vDateNow                CHARACTER VARYING := '';
  20.     vFilterCustomer         CHARACTER VARYING := '';
  21.  
  22. BEGIN
  23.  
  24.     DELETE FROM tt_summary_hutang_piutang WHERE session_id = pSessionId;
  25.  
  26.     -- hari sekarang
  27.     SELECT TO_CHAR(NOW(),'YYYYMMDD') INTO vDateNow;
  28.    
  29.     IF pCustomer <> vEmpty THEN
  30.         vFilterCustomer := ' AND ( UPPER(f_get_customer_code(partner_id)) LIKE UPPER(''%'|| pCustomer ||'%'') OR UPPER(f_get_customer_name(partner_id)) LIKE UPPER(''%'|| pCustomer ||'%'') )';
  31.     END IF;
  32.  
  33.     Open pRefHeader FOR
  34.         SELECT f_get_record_owner_name(pRecordOwnerId) AS record_owner_name, pDateFrom AS date_from, pDateTo AS date_to;
  35.     RETURN NEXT pRefHeader;
  36.  
  37.     /*
  38.      * Ambil hutang lancar dimana due date lebih besar sama dengan hari ini
  39.      */
  40.     INSERT INTO tt_summary_hutang_piutang (
  41.         session_id, partner_id, record_owner_id, before_due_amount, over_due_amount, payment_amount
  42.     )
  43.     SELECT pSessionId, A.customer_id, A.record_owner_id, COALESCE(SUM(B.invoice_amount), 0), 0, 0
  44.     FROM fi_invoice_ar A
  45.     INNER JOIN fi_invoice_ar_balance B ON A.invoice_ar_id = B.invoice_ar_id
  46.     WHERE A.record_owner_id = pRecordOwnerId
  47.         AND A.doc_date BETWEEN pDateFrom AND pDateTo
  48.         AND A.due_date >= vDateNow
  49.     GROUP BY A.customer_id, A.record_owner_id;
  50.        
  51.     /**
  52.      * Ambil Hutang sudah jatuh tempo dimana due date lebih kecil dari hari ini
  53.      */
  54.     INSERT INTO tt_summary_hutang_piutang (
  55.         session_id, partner_id, record_owner_id, before_due_amount, over_due_amount, payment_amount
  56.     )
  57.     SELECT pSessionId, A.customer_id, A.record_owner_id, 0, COALESCE(SUM(B.invoice_amount), 0), 0
  58.     FROM fi_invoice_ar A
  59.     INNER JOIN fi_invoice_ar_balance B ON A.invoice_ar_id = B.invoice_ar_id
  60.     WHERE A.record_owner_id = pRecordOwnerId
  61.         AND A.doc_date BETWEEN pDateFrom AND pDateTo
  62.         AND A.due_date < vDateNow
  63.     GROUP BY A.customer_id, A.record_owner_id;
  64.        
  65.     /**
  66.      * Ambil semua hutang yang sudah dibayar
  67.      */
  68.     INSERT INTO tt_summary_hutang_piutang (
  69.         session_id, partner_id, record_owner_id, before_due_amount, over_due_amount, payment_amount
  70.     )
  71.     SELECT pSessionId, A.customer_id, A.record_owner_id, 0, 0, COALESCE(SUM(B.payment_amount), 0)
  72.     FROM fi_invoice_ar A
  73.     INNER JOIN fi_invoice_ar_balance B ON A.invoice_ar_id = B.invoice_ar_id
  74.     WHERE A.record_owner_id = pRecordOwnerId
  75.         AND A.doc_date BETWEEN pDateFrom AND pDateTo
  76.     GROUP BY A.customer_id, A.record_owner_id;
  77.  
  78.     OPEN pRefDetail FOR
  79.         EXECUTE '
  80.             SELECT f_get_customer_code(partner_id) AS customer_code, f_get_customer_name(partner_id) AS customer_name,
  81.                     COALESCE(SUM(before_due_amount), 0) AS before_due_amount, COALESCE(SUM(over_due_amount), 0) AS over_due_amount,
  82.                     COALESCE(SUM(payment_amount), 0) AS payment_amount
  83.             FROM tt_summary_hutang_piutang
  84.             WHERE session_id = $1
  85.                 ' || vFilterCustomer || '
  86.             GROUP BY partner_id
  87.             ORDER BY customer_name'
  88.         USING pSessionId;
  89.     RETURN NEXT pRefDetail;
  90.  
  91.     DELETE FROM tt_summary_hutang_piutang WHERE session_id = pSessionId;
  92.    
  93. END;
  94. $BODY$
  95.   LANGUAGE plpgsql VOLATILE
  96.   SET search_path = public, mstr, ptg, htg, pb, pj, batch
  97.   COST 100;
  98.   /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement