Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * Adrian, Sep 25, 2017
- * Report New Purchasing Relation dibuat berdasarkan Report Purchasing Relation,
- * namun dengan perbedaan
- * 1. Dimunculkan sampai detail produk
- * 2. Tampilkan semua PO dengan status apapun
- */
- CREATE OR REPLACE FUNCTION r_new_purchasing_relation(character varying, bigint, bigint, bigint, character varying, bigint, character varying, character varying, bigint, bigint, character varying, character varying, double precision)
- RETURNS SETOF refcursor AS
- $BODY$
- DECLARE
- pRefHeader REFCURSOR := 'refHeader';
- pRefDetail REFCURSOR := 'refDetail';
- pSessionId ALIAS FOR $1;
- pTenantId ALIAS FOR $2;
- pUserId ALIAS FOR $3;
- pRoleId ALIAS FOR $4;
- pDatetime ALIAS FOR $5;
- pOuId ALIAS FOR $6;
- pPoNo ALIAS FOR $7;
- pSoNo ALIAS FOR $8;
- pSupplierId ALIAS FOR $9;
- pCustomerId ALIAS FOR $10;
- pDateFrom ALIAS FOR $11;
- pDateTo ALIAS FOR $12;
- pKursValue ALIAS FOR $13;
- vEmptyId bigint := -99;
- vEmptyString character varying := '';
- vComboTop character varying := 'TERMOFPAYMENT';
- vFilterPoNo text := '';
- vFilterSoNo text := '';
- vFilterSupplier text := '';
- vFilterCustomer text := '';
- vDateFormat character varying :='yyyymmdd';
- vDate character varying :='dd Mon yyyy';
- vStatusRelease character varying := 'R';
- vStatusFinal character varying := 'F';
- BEGIN
- IF (pPoNo <> vEmptyString) THEN
- vFilterPoNo := ' AND A.doc_no = ''' || pPoNo || '''';
- END IF;
- IF (pSoNo <> vEmptyString) THEN
- vFilterSoNo := ' AND B.doc_no = ''' || pSoNo || '''';
- END IF;
- IF (pSupplierId <> vEmptyId) THEN
- vFilterSupplier := ' AND A.partner_id = ' || pSupplierId;
- END IF;
- IF (pCustomerId <> vEmptyId) THEN
- vFilterCustomer := ' AND B.partner_id = ' || pCustomerId;
- END IF;
- DELETE FROM tr_pu_purchasing_relation_po_so WHERE session_id = pSessionId;
- DELETE FROM tr_pu_purchasing_relation_detail WHERE session_id = pSessionId;
- /* insert into table tr_pu_purchasing_relation_po_so*/
- EXECUTE '
- INSERT INTO tr_pu_purchasing_relation_po_so(session_id, tenant_id, po_id, so_id)
- SELECT $1, $2, A.po_id, B.so_id
- FROM pu_po A
- INNER JOIN sl_so B ON A.tenant_id = B.tenant_id AND A.ref_id = B.so_id AND B.status_doc IN ($6, $7)
- WHERE A.tenant_id = $2
- AND A.ou_id = $5
- AND B.doc_date BETWEEN $3 AND $4
- AND A.status_doc IN ($6, $7) ' ||
- vFilterPoNo ||
- vFilterSoNo ||
- vFilterSupplier ||
- vFilterCustomer || '
- ' USING pSessionId, pTenantId, pDateFrom, pDateTo, pOuId, vStatusRelease, vStatusFinal;
- /* insert into table tr_pu_purchasing_relation_detail*/
- EXECUTE '
- INSERT INTO tr_pu_new_purchasing_relation_detail(
- session_id, tenant_id, po_id, po_no, po_date, supp_id, supp_name,
- top_po, valuta_po, po_amount, paid_po,
- po_item_id, po_product_id, po_product_code, po_product_name,
- po_qty, po_uom_id, po_uom_name,
- so_id, so_no, so_date,
- cust_id, cust_name, valuta_so, so_amount, top_so, alloc_amount,
- so_item_id, so_product_id, so_product_code, so_product_name,
- so_qty, so_uom_id, so_uom_name)
- SELECT $1, $2, A.po_id, A.doc_no AS po_no, A.doc_date AS po_date, A.partner_id AS supp_id, C.partner_name AS supp_name, f_get_top_days(A.top_code) AS top_po,
- A.curr_code AS valuta_po, G.nett_item_amount AS po_amount, fi_get_paid_invoice_po(A.po_id) AS paid_po,
- G.po_item_id, G.product_id, f_get_product_code(G.product_id), f_get_product_name(G.product_id),
- G.qty_po, G.base_uom_id, f_get_uom_name(G.base_uom_id),
- B.so_id, B.doc_no AS so_no, B.doc_date AS so_date, B.partner_id AS cust_id, E.partner_name AS cust_name, B.curr_code AS valuta_so,
- H.nett_item_amount AS so_amount, F.due_payment_days AS top_so, fi_get_allocation_so_amount(B.so_id) AS alloc_amount,
- H.so_item_id, H.product_id, f_get_product_code(H.product_id), f_get_product_name(H.product_id),
- H.qty_so, H.base_uom_id, f_get_uom_name(H.base_uom_id)
- FROM pu_po A
- INNER JOIN sl_so B ON A.tenant_id = B.tenant_id AND A.ref_id = B.so_id AND B.status_doc IN ($7, $8)
- INNER JOIN m_partner C ON A.tenant_id = C.tenant_id AND A.partner_id = C.partner_id
- INNER JOIN t_combo_value D ON D.combo_id = $3 AND A.top_code = D.code
- INNER JOIN m_partner E ON A.tenant_id = E.tenant_id AND B.partner_id = E.partner_id
- INNER JOIN m_cust_payment F ON A.tenant_id = F.tenant_id AND B.partner_id = F.partner_id
- INNER JOIN pu_po_item G ON G.po_id = A.po_id
- INNER JOIN sl_so_item H ON H.so_id = B.so_id AND H.so_item_id = G.ref_id
- WHERE A.tenant_id = $2
- AND A.ou_id = $6
- AND B.doc_date BETWEEN $4 AND $5 ' ||
- vFilterPoNo ||
- vFilterSoNo ||
- vFilterSupplier ||
- vFilterCustomer || '
- ' USING pSessionId, pTenantId, vComboTop, pDateFrom, pDateTo, pOuId, vStatusRelease, vStatusFinal;
- /* get data for header*/
- Open pRefHeader FOR
- SELECT CASE WHEN pPoNo = vEmptyString THEN ' ' ELSE pPoNo END AS po_no,
- CASE WHEN pSoNo = vEmptyString THEN ' ' ELSE pSoNo END AS so_no,
- CASE WHEN pSupplierId = vEmptyId THEN '(All)' ELSE f_get_partner_name(pSupplierId) END AS supp_name,
- CASE WHEN pCustomerId = vEmptyId THEN '(All)' ELSE f_get_partner_name(pCustomerId) END AS cust_name,
- TO_CHAR(TO_DATE(pDateFrom,vDateFormat),vDate) AS date_from,
- TO_CHAR(TO_DATE(pDateTo,vDateFormat),vDate) AS date_to, pKursValue AS kurs_value, pOuId AS ou_id, f_get_ou_name(pOuId) AS ou_name;
- RETURN NEXT pRefHeader;
- /* get data for detail*/
- Open pRefDetail FOR
- SELECT A.po_no, TO_CHAR(TO_DATE(A.po_date,vDateFormat),vDate) AS po_date, A.supp_name, A.top_po, A.valuta_po, A.po_amount,
- (A.po_amount - A.paid_po) AS outstanding_po,
- A.po_product_id, A.po_product_code, A.po_product_name,
- A.po_qty, A.po_uom_id, A.po_uom_name,
- A.so_no, TO_CHAR(TO_DATE(A.so_date,vDateFormat),vDate) AS so_date,
- A.cust_name, A.valuta_so, A.so_amount, A.top_so, A.alloc_amount,
- A.so_item_id, A.so_product_id, A.so_product_code, A.so_product_name,
- A.so_qty, A.so_uom_id, A.so_uom_name,
- (A.valuta_so||','||A.so_no) AS grouping_detail,
- CASE WHEN A.valuta_so = 'USD' THEN A.so_amount * pKursValue ELSE A.so_amount END AS so_value,
- CASE WHEN A.valuta_po = 'USD' THEN A.po_amount * pKursValue ELSE A.po_amount END AS po_value
- FROM tr_pu_new_purchasing_relation_detail A
- WHERE A.session_id = pSessionId
- AND A.tenant_id = pTenantId
- ORDER BY A.valuta_so, A.so_no, A.so_product_code, A.valuta_po, A.po_no, A.po_product_code;
- RETURN NEXT pRefDetail ;
- DELETE FROM tr_pu_purchasing_relation_po_so WHERE session_id = pSessionId;
- DELETE FROM tr_pu_purchasing_relation_detail WHERE session_id = pSessionId;
- END;
- $BODY$
- LANGUAGE plpgsql VOLATILE
- COST 100
- ROWS 1000;
- /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement