Advertisement
widana

Laporan Rekap Piutang

Jul 23rd, 2018
87
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.     pSessionId              ALIAS FOR $1;
  8.     pRecordOwnerId          ALIAS FOR $2;
  9.     pFilterSupplier         ALIAS FOR $3;
  10.     pStartDate              ALIAS FOR $4;
  11.     pEndDate                ALIAS FOR $5;
  12.  
  13.    
  14.     vEmptyId                BIGINT := -99;
  15.     vEmpty                  TEXT := '';
  16.     vNone                   CHARACTER VARYING := '-';
  17.     vNo                     CHARACTER VARYING := 'N';
  18.     vYes                    CHARACTER VARYING := 'Y';
  19.     vCreditDocTypeId        BIGINT :=201;
  20.     vDateNow                CHARACTER VARYING := '';
  21.     vStartDate              CHARACTER VARYING := '';
  22.     vEndDate                CHARACTER VARYING := '';
  23.     vSql                    CHARACTER VARYING := '';
  24.  
  25. BEGIN
  26.  
  27.     SELECT pEndDate INTO vEndDate;
  28.  
  29.     Open pRefHeader FOR
  30.         SELECT record_owner_code, ou_company, pStartDate, pEndDate  
  31.         FROM m_record_owner WHERE record_owner_id=pRecordOwnerId;
  32.     RETURN NEXT pRefHeader;
  33.    
  34.     -- hari sekarang
  35.     SELECT TO_CHAR(NOW(),'YYYYMM') INTO vDateNow;
  36.  
  37.     -- periode mulai
  38.     IF pStartDate='' THEN
  39.         SELECT '0' INTO vStartDate;
  40.     ELSE
  41.         SELECT pStartDate INTO vStartDate;
  42.     END IF;
  43.  
  44.     -- periode selesai
  45.     IF pEndDate='' THEN
  46.         SELECT vDateNow INTO vEndDate;
  47.     ELSE
  48.         SELECT pEndDate INTO vEndDate;
  49.     END IF;
  50.  
  51.     -- ambil nominal hutang lancar dari fi_invoice_ar_balance
  52.     vSql := 'INSERT INTO tt_rekap_hutang(session_uuid, supplier_id, before_due_amount,
  53.        over_due_amount, payment_amount)
  54.    SELECT ''' || pSessionId || ''', B.supplier_id,
  55.        COALESCE(SUM(A.invoice_amount), 0), 0, 0
  56.    FROM fi_invoice_ar_balance A
  57.    INNER JOIN fi_invoice_ar B ON A.invoice_ar_id=B.invoice_ar_id
  58.    WHERE A.flg_paid='''|| vNo ||''' AND A.record_owner_id=' || pRecordOwnerId || '
  59.        AND A.doc_type_id=' || vCreditDocTypeId || ' AND B.doc_date <= ''' || vEndDate || '''';
  60.  
  61.     -- tambahkan filter jika periode mulai dipilih
  62.     IF pStartDate <> '' THEN
  63.         vSql := vSql || ' AND B.doc_date >= ''' || pStartDate || '''';
  64.     END IF;
  65.  
  66.      -- tambahkan filter jika supplier dipilih
  67.     IF pFilterSupplier <> '' THEN
  68.         vSql := vSql || ' AND A.supplier_id=' || pFilterSupplier;
  69.     END IF;
  70.  
  71.     vSql := vSql || ' AND B.due_date <= ''' || vDateNow || ''' GROUP BY B.supplier_id';
  72.  
  73.     EXECUTE vSql;
  74.  
  75.     -- ambil nominal hutang lewat jauth tempo dari fi_invoice_ar_balance
  76.     vSql := 'INSERT INTO tt_rekap_hutang(session_uuid, supplier_id, before_due_amount,
  77.        over_due_amount, payment_amount)
  78.    SELECT ''' || pSessionId || ''', B.supplier_id,
  79.        0, COALESCE(SUM(A.invoice_amount), 0), 0
  80.    FROM fi_invoice_ar_balance A
  81.    INNER JOIN fi_invoice_ar B ON A.invoice_ar_id=B.invoice_ar_id
  82.    WHERE A.flg_paid='''|| vNo ||''' AND A.record_owner_id=' || pRecordOwnerId || '
  83.        AND A.doc_type_id=' || vCreditDocTypeId || ' AND B.doc_date <= ''' || vEndDate || '''';
  84.  
  85.     -- tambahkan filter jika periode mulai dipilih
  86.     IF pStartDate <> '' THEN
  87.         vSql := vSql || ' AND B.doc_date >= ''' || pStartDate || '''';
  88.     END IF;
  89.  
  90.      -- tambahkan filter jika supplier dipilih
  91.     IF pFilterSupplier <> '' THEN
  92.         vSql := vSql || ' AND A.supplier_id=' || pFilterSupplier;
  93.     END IF;
  94.  
  95.     vSql := vSql || ' AND B.due_date > ''' || vDateNow || ''' GROUP BY B.supplier_id';
  96.  
  97.     EXECUTE vSql;
  98.  
  99.     -- ambil nominal nominal bayar dari fi_invoice_ar_balance
  100.     vSql := 'INSERT INTO tt_rekap_hutang(session_uuid, supplier_id, before_due_amount,
  101.        over_due_amount, payment_amount)
  102.    SELECT ''' || pSessionId || ''', B.supplier_id,
  103.        0, 0, COALESCE(SUM(A.payment_amount), 0)
  104.    FROM fi_invoice_ar_balance A
  105.    INNER JOIN fi_invoice_ar B ON A.invoice_ar_id=B.invoice_ar_id
  106.    WHERE A.flg_paid='''|| vNo ||''' AND A.record_owner_id=' || pRecordOwnerId || '
  107.        AND A.doc_type_id=' || vCreditDocTypeId || ' AND B.doc_date <= ''' || vEndDate || '''';
  108.  
  109.     -- tambahkan filter jika periode mulai dipilih
  110.     IF pStartDate <> '' THEN
  111.         vSql := vSql || ' AND B.doc_date >= ''' || pStartDate || '''';
  112.     END IF;
  113.  
  114.     -- tambahkan filter jika supplier dipilih
  115.     IF pFilterSupplier <> '' THEN
  116.         vSql := vSql || ' AND A.supplier_id=' || pFilterSupplier;
  117.     END IF;
  118.  
  119.     vSql := vSql || ' GROUP BY B.supplier_id';
  120.  
  121.     EXECUTE vSql;
  122.  
  123.     Open pRefDetail FOR
  124.         SELECT A.supplier_id, B.supplier_name,
  125.             COALESCE(SUM(A.before_due_amount),0) AS before_due_amount,
  126.             COALESCE(SUM(A.over_due_amount),0) AS over_due_amount,
  127.             COALESCE(SUM(A.payment_amount),0) AS payment_amount
  128.             -- (before_due_amount+over_due_amount-payment_amount) AS balance_amount
  129.         FROM tt_rekap_hutang A
  130.         INNER JOIN m_supplier B ON A.supplier_id=B.supplier_id
  131.         GROUP BY A.supplier_id, B.supplier_name;
  132.     RETURN NEXT pRefDetail ;
  133.     DELETE FROM tt_rekap_hutang WHERE session_uuid=pSessionId;
  134.  
  135. END;
  136. $BODY$
  137.   LANGUAGE plpgsql VOLATILE
  138.   SET search_path = public, mstr, ptg, htg, pb, pj, batch
  139.   COST 100;
  140.   /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement