Advertisement
aadddrr

gl_posting_service_sales_pos_costing_journal

Feb 22nd, 2018
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /**
  2.  * Adrian, Feb 22, 2018
  3.  * Untuk jurnal monthly dengan doc_type sales POS (431)
  4.  * dan tidak memiliki item RM, FG, ataupun WIP,
  5.  * maka update:
  6.  * - gl_curr_code sesuai valuta buku
  7.  * - status doc menjadi 'R'
  8.  * - gl_amount = 0
  9.  */
  10. CREATE OR REPLACE FUNCTION gl_posting_service_sales_pos_costing_journal(bigint, character varying, bigint, bigint, character varying, character varying)
  11.   RETURNS void AS
  12. $BODY$
  13. DECLARE
  14.  
  15.     pTenantId           ALIAS FOR $1;
  16.     pSessionId          ALIAS FOR $2;
  17.     pOuId               ALIAS FOR $3;
  18.     pUserId             ALIAS FOR $4;
  19.     pYearMonth          ALIAS FOR $5;
  20.     pDatetime           ALIAS FOR $6;
  21.  
  22.     vStatusRelease          character varying(1);
  23.     vEmptyValue             character varying(1);
  24.     vEmptyId                bigint;
  25.     vJournalProcessPeriode  character varying(10);
  26.     vLedgerCode             character varying(10);
  27.     vCurrGL                 character varying(5);
  28.     vRoundingAmount         integer;
  29.     vSignCredit             character varying(1);
  30.     vSignDebit              character varying(1);
  31.     vSystemCOA              character varying(10);
  32.     vDocTypeIdSalesPos      bigint;
  33.    
  34. BEGIN
  35.    
  36.     vStatusRelease := 'R';
  37.     vEmptyId := -99;
  38.     vEmptyValue := ' ';
  39.     vJournalProcessPeriode := 'MONTHLY';
  40.     vLedgerCode := 'COSTING.FG';
  41.     vSignCredit := 'C';
  42.     vSignDebit := 'D';
  43.     vSystemCOA := 'SYSTEM';
  44.     vDocTypeIdSalesPos := 431;
  45.  
  46.     DELETE FROM tt_gl_journal_costing WHERE session_id = pSessionId;
  47.     DELETE FROM tt_gl_journal_trx_mapping WHERE session_id = pSessionId;
  48.    
  49.     vCurrGL := f_get_value_system_config_by_param_code(pTenantId,'ValutaBuku');
  50.     vRoundingAmount := CAST(f_get_value_system_config_by_param_code(pTenantId,'rounding.gl.amount') AS integer);   
  51.    
  52.     /*
  53.      * 1.ambil data journal trx yang melakukan Debit / Credit Stok yang hanya memiliki produk
  54.      *   selain FG, RM, dan WIP
  55.      *      doc type : 431
  56.      *      doc_desc : sales POS
  57.      * 2.berikan nilai 0 untuk tiap journal trx item  
  58.      * 3.update nilai amount, untuk memastikan jumlah amount di in_summary_monthly_product = jumlah nilai product di tt_gl_journal_costing
  59.      */
  60.     WITH tt_journal_trx_non_service AS(
  61.         SELECT A.journal_trx_id
  62.         FROM gl_journal_trx A
  63.         INNER JOIN vw_gl_journal_trx_details B ON A.journal_trx_id = B.journal_trx_id
  64.         INNER JOIN dt_date C ON A.doc_date = C.string_date
  65.         INNER JOIN m_product D ON B.product_id = D.product_id
  66.         INNER JOIN m_ctgr_product E ON D.ctgr_product_id = E.ctgr_product_id
  67.         INNER JOIN m_group_product F ON E.group_product_id = F.group_product_id
  68.         WHERE A.tenant_id = pTenantId AND
  69.             A.ou_bu_id = pOuId AND
  70.             A.doc_type_id IN (vDocTypeIdSalesPos) AND
  71.             C.year_month_date = pYearMonth AND
  72.             B.product_id <> vEmptyId AND
  73.             F.group_product_code IN ('FG', 'RM', 'SP', 'CONSUMABLE')
  74.     )
  75.     INSERT INTO tt_gl_journal_costing
  76.     (session_id, tenant_id, ou_bu_id, ou_branch_id, ou_sub_bu_id,
  77.     journal_trx_id, doc_type_id, journal_trx_item_id, sign_journal, product_id,
  78.     qty, uom_id, amount, total_amount_product, total_qty_product)
  79.     SELECT pSessionId, A.tenant_id, A.ou_bu_id,
  80.         CASE WHEN B.ou_branch_id = vEmptyId AND B.ou_sub_bu_id = vEmptyId THEN A.ou_branch_id ELSE B.ou_branch_id END,
  81.         CASE WHEN B.ou_branch_id = vEmptyId AND B.ou_sub_bu_id = vEmptyId THEN A.ou_sub_bu_id ELSE B.ou_sub_bu_id END,
  82.         A.journal_trx_id, A.doc_type_id, B.journal_trx_item_id, B.sign_journal, B.product_id,
  83.         B.qty, B.uom_id, 0, 0, 0
  84.     FROM gl_journal_trx A, gl_journal_trx_item B, dt_date C
  85.     WHERE A.tenant_id = pTenantId AND
  86.         A.ou_bu_id = pOuId AND
  87.         A.doc_type_id IN (vDocTypeIdSalesPos) AND  
  88.         A.doc_date = C.string_date AND
  89.         C.year_month_date = pYearMonth AND
  90.         A.journal_trx_id = B.journal_trx_id AND
  91.         B.product_id <> vEmptyId AND
  92.         NOT EXISTS (
  93.             SELECT 1
  94.             FROM tt_journal_trx_non_service D
  95.             WHERE A.journal_trx_id = D.journal_trx_id
  96.         );
  97.        
  98.     /*
  99.      * update nilai buku untuk semua transaksi di gl_journal_trx_item
  100.      */
  101.     UPDATE gl_journal_trx_item SET numerator_rate = 1, denominator_rate = 1,
  102.                                 gl_amount = 0,
  103.                                 gl_curr_code = vCurrGL
  104.     FROM tt_gl_journal_costing A
  105.     WHERE A.session_id = pSessionId AND
  106.         gl_journal_trx_item.journal_trx_item_id = A.journal_trx_item_id;
  107.  
  108.     /*
  109.      * buat data journal trx mapping untuk doc type sales POS
  110.      */
  111.     INSERT INTO tt_gl_journal_trx_mapping
  112.     (session_id, doc_type_id, journal_trx_mapping_id, journal_trx_id, line_no,
  113.     sign_journal, curr_code, amount, gl_amount,
  114.     journal_date, type_rate)   
  115.     SELECT pSessionId, A.doc_type_id, D.journal_trx_mapping_id, D.journal_trx_id, D.line_no,
  116.         D.sign_journal, D.curr_code, D.amount, SUM(A.amount),
  117.         D.journal_date, D.type_rate
  118.     FROM tt_gl_journal_costing A, gl_journal_trx_mapping D
  119.     WHERE A.session_id = pSessionId AND
  120.         A.doc_type_id IN (vDocTypeIdSalesPos) AND
  121.         A.journal_trx_id = D.journal_trx_id
  122.     GROUP BY A.doc_type_id, D.journal_trx_mapping_id, D.journal_trx_id, D.line_no,
  123.         D.sign_journal, D.curr_code, D.journal_date, D.type_rate;
  124.            
  125.     /*
  126.      * update gl_journal_trx_mapping untuk nilai buku transaksi
  127.      */
  128.     UPDATE gl_journal_trx_mapping SET numerator_rate = 1, denominator_rate = 1,
  129.                                 gl_amount = 0,
  130.                                 gl_curr_code = vCurrGL,
  131.                                 sign_journal = A.sign_journal
  132.     FROM tt_gl_journal_trx_mapping A
  133.     WHERE A.session_id = pSessionId AND
  134.         A.doc_type_id = vDocTypeIdSalesPos AND
  135.         gl_journal_trx_mapping.journal_trx_mapping_id = A.journal_trx_mapping_id;
  136.                        
  137.     --Update status_doc di gl_journal_trx menjadi 'R'
  138.     UPDATE gl_journal_trx SET status_doc = vStatusRelease, version = version + 1, update_datetime = pDatetime, update_user_id = pUserId
  139.     FROM (SELECT journal_trx_id
  140.             FROM tt_gl_journal_costing A
  141.             WHERE A.session_id = pSessionId
  142.             GROUP BY journal_trx_id) A
  143.     WHERE gl_journal_trx.journal_trx_id = A.journal_trx_id;        
  144.    
  145.     DELETE FROM tt_gl_journal_costing WHERE session_id = pSessionId;
  146.     DELETE FROM tt_gl_journal_trx_mapping WHERE session_id = pSessionId;
  147.    
  148. END;
  149. $BODY$
  150.   LANGUAGE plpgsql VOLATILE
  151.   COST 100;
  152.   /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement