Advertisement
aadddrr

gl_posting_finish_goods_costing_journal

Feb 13th, 2018
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*
  2.  * 2016119, WTC, saat hitung total nilai alokasi costing ke jurnal, perlu ada special handling tuk adj stock qty dan exchange, yaitu harus perhatikan sign journal
  3.  */
  4. CREATE OR REPLACE FUNCTION gl_posting_finish_goods_costing_journal(bigint, character varying, bigint, bigint, character varying, character varying)
  5.   RETURNS void AS
  6. $BODY$
  7. DECLARE
  8.  
  9.     pTenantId           ALIAS FOR $1;
  10.     pSessionId          ALIAS FOR $2;
  11.     pOuId               ALIAS FOR $3;
  12.     pUserId             ALIAS FOR $4;
  13.     pYearMonth          ALIAS FOR $5;
  14.     pDatetime           ALIAS FOR $6;
  15.  
  16.     vStatusRelease          character varying(1);
  17.     vStatusDraft            character varying(1);
  18.     vEmptyValue             character varying(1);
  19.     vEmptyId                bigint;
  20.     vJournalProcessPeriode  character varying(10);
  21.     vLedgerCode             character varying(10);
  22.     vCurrGL                 character varying(5);
  23.     vRoundingAmount         integer;
  24.     vSignCredit             character varying(1);
  25.     vSignDebit              character varying(1);
  26.     vSystemCOA              character varying(10);
  27.    
  28. BEGIN
  29.    
  30.     vStatusRelease := 'R';
  31.     vStatusDraft := 'D';
  32.     vEmptyId := -99;
  33.     vEmptyValue := ' ';
  34.     vJournalProcessPeriode := 'MONTHLY';
  35.     vLedgerCode := 'COSTING.FG';
  36.     vSignCredit := 'C';
  37.     vSignDebit := 'D';
  38.     vSystemCOA := 'SYSTEM';
  39.  
  40.     DELETE FROM tt_gl_journal_costing WHERE session_id = pSessionId;
  41.     DELETE FROM tt_gl_summary_amount_product WHERE session_id = pSessionId;
  42.     DELETE FROM tt_gl_summary_journal WHERE session_id = pSessionId;
  43.     DELETE FROM tt_gl_journal_trx_mapping WHERE session_id = pSessionId;
  44.     DELETE FROM tt_gl_admin_journal_rate WHERE session_id = pSessionId;
  45.    
  46.     vCurrGL := f_get_value_system_config_by_param_code(pTenantId,'ValutaBuku');
  47.     vRoundingAmount := CAST(f_get_value_system_config_by_param_code(pTenantId,'rounding.gl.amount') AS integer);   
  48.    
  49.     /*
  50.      * WTC, 160212, menambahkan update jurnal untuk dokumen DO MLM, Return/Buyback, dan Exchange.
  51.      * 1.ambil data journal trx yang melakukan Debit / Credit Stok finish goods product
  52.      *   doc type : 522, 502, 521, 413, 511, 311, 154, 354, 431, 526, 537, 313, 562, 563, 560
  53.      *   doc_desc : adj stok amount, adj stok amount balance, return note, adj stok qty, adj stok outlet qty,
  54.      *              Nota klaim, DO, DO Internal, Sales Invoice Konsinyasi, POS Shop, Return POS Shop, Pos Shop In Shop, Return POS Shop In Shop,
  55.      *              DO Receipt, Goods Transfer In Receipt Lost, DO MLM, Return SO MLM, Buyback SO MLM, Exchange MLM
  56.      * 2.berikan nilai tiap journal trx item sesuai dengan product, doc_type_id, ou_bu_id, ou_branch_id, ou_sub_bu_id di in_summary_monthly_product
  57.      * 3.update nilai amount, untuk memastikan jumlah amount di in_summary_monthly_product = jumlah nilai product di tt_gl_journal_costing
  58.      */
  59.     INSERT INTO tt_gl_journal_costing
  60.     (session_id, tenant_id, ou_bu_id, ou_branch_id, ou_sub_bu_id,
  61.     journal_trx_id, doc_type_id, journal_trx_item_id, sign_journal, product_id,
  62.     qty, uom_id, amount, total_amount_product, total_qty_product)
  63.     SELECT pSessionId, A.tenant_id, A.ou_bu_id, A.ou_branch_id, A.ou_sub_bu_id,
  64.         A.journal_trx_id, A.doc_type_id, B.journal_trx_item_id, B.sign_journal, B.product_id,
  65.         B.qty, B.uom_id, 0, 0, 0
  66.     FROM gl_journal_trx A, gl_journal_trx_item B, dt_date C, vw_finish_goods_product D
  67.     WHERE A.tenant_id = pTenantId AND
  68.         A.ou_bu_id = pOuId AND
  69.         A.doc_type_id IN (522, 502, 521, 413, 511, 311, 154, 354, 431, 526, 537, 313, 562, 563, 560) AND   
  70.         A.doc_date = C.string_date AND
  71.         C.year_month_date = pYearMonth AND
  72.         A.journal_trx_id = B.journal_trx_id AND
  73.         B.product_id <> vEmptyId AND
  74.         B.product_id = D.product_id;
  75.        
  76.     INSERT INTO tt_gl_journal_costing
  77.     (session_id, tenant_id, ou_bu_id, ou_branch_id, ou_sub_bu_id,
  78.     journal_trx_id, doc_type_id, journal_trx_item_id, sign_journal, product_id,
  79.     qty, uom_id, amount, total_amount_product, total_qty_product)
  80.     SELECT pSessionId, A.tenant_id, A.ou_bu_id, A.ou_branch_id, A.ou_sub_bu_id,
  81.         A.journal_trx_id, A.doc_type_id, B.journal_trx_item_id, B.sign_journal, B.product_id,
  82.         B.qty, B.uom_id, 0, 0, 0
  83.     FROM gl_journal_trx A, gl_journal_trx_item B, dt_date C, vw_finish_goods_product_assembly D
  84.     WHERE A.tenant_id = pTenantId AND
  85.         A.ou_bu_id = pOuId AND
  86.         A.doc_type_id IN (522, 502, 521, 413, 511, 311, 154, 354, 431, 526, 537, 313, 562, 563, 560) AND   
  87.         A.doc_date = C.string_date AND
  88.         C.year_month_date = pYearMonth AND
  89.         A.journal_trx_id = B.journal_trx_id AND
  90.         B.product_id <> vEmptyId AND
  91.         B.product_id = D.product_id;
  92.        
  93.     /* WTC, 160212, Menambahkan tipe dokumen exchange, yg perilaku nya mirip dengan adj stock
  94.      * Update amount dipisahkan menjadi 5 bagian, yaitu:
  95.         1. Tuk doc selain adj qty dan exchange
  96.         2. Tuk doc adj qty dan exchange yg qty > 0
  97.         3. Tuk doc adj qty dan exchange yg qty < 0
  98.        Hal ini perlu dilakukan, karena pada in_summary_monthly_amount bisa ada 2 nilai berbeda tuk doc adj qty dgn product_id yg sama,
  99.        yaitu yg mengurangi stock dan yg menambah stock, dimana yg mengurangi stock nilainya berdasarkan nilai cogs,
  100.        sedangkan yg menambah stock nilainya berdasarkan harga standar. Hal ini berlaku juga untuk exchange
  101.     */
  102.     UPDATE tt_gl_journal_costing SET amount = ROUND(tt_gl_journal_costing.qty * (A.gl_amount / A.qty), vRoundingAmount),
  103.                                     total_amount_product = ABS(A.gl_amount), total_qty_product = ABS(A.qty)
  104.     FROM in_summary_monthly_amount A
  105.     WHERE  tt_gl_journal_costing.session_id = pSessionId AND
  106.         tt_gl_journal_costing.tenant_id = A.tenant_id AND
  107.         tt_gl_journal_costing.ou_bu_id = A.ou_bu_id AND
  108.         tt_gl_journal_costing.ou_branch_id = A.ou_branch_id AND
  109.         tt_gl_journal_costing.ou_sub_bu_id = A.ou_sub_bu_id AND
  110.         tt_gl_journal_costing.doc_type_id = A.doc_type_id AND
  111.         tt_gl_journal_costing.product_id = A.product_id AND
  112.         A.date_year_month = pYearMonth AND
  113.         A.doc_type_id NOT IN (521, 560) AND
  114.         A.qty <> 0;
  115.        
  116.     UPDATE tt_gl_journal_costing SET amount = ROUND(tt_gl_journal_costing.qty * (A.gl_amount / A.qty), vRoundingAmount),
  117.                                     total_amount_product = ABS(A.gl_amount), total_qty_product = ABS(A.qty)
  118.     FROM in_summary_monthly_amount A
  119.     WHERE  tt_gl_journal_costing.session_id = pSessionId AND
  120.         tt_gl_journal_costing.tenant_id = A.tenant_id AND
  121.         tt_gl_journal_costing.ou_bu_id = A.ou_bu_id AND
  122.         tt_gl_journal_costing.ou_branch_id = A.ou_branch_id AND
  123.         tt_gl_journal_costing.ou_sub_bu_id = A.ou_sub_bu_id AND
  124.         tt_gl_journal_costing.doc_type_id = A.doc_type_id AND
  125.         tt_gl_journal_costing.product_id = A.product_id AND
  126.         A.date_year_month = pYearMonth AND
  127.         A.doc_type_id IN (521, 560) AND
  128.         A.qty > 0 AND
  129.         tt_gl_journal_costing.sign_journal = vSignDebit;
  130.  
  131.     UPDATE tt_gl_journal_costing SET amount = ROUND(tt_gl_journal_costing.qty * (A.gl_amount / A.qty), vRoundingAmount),
  132.                                     total_amount_product = ABS(A.gl_amount), total_qty_product = ABS(A.qty)
  133.     FROM in_summary_monthly_amount A
  134.     WHERE  tt_gl_journal_costing.session_id = pSessionId AND
  135.         tt_gl_journal_costing.tenant_id = A.tenant_id AND
  136.         tt_gl_journal_costing.ou_bu_id = A.ou_bu_id AND
  137.         tt_gl_journal_costing.ou_branch_id = A.ou_branch_id AND
  138.         tt_gl_journal_costing.ou_sub_bu_id = A.ou_sub_bu_id AND
  139.         tt_gl_journal_costing.doc_type_id = A.doc_type_id AND
  140.         tt_gl_journal_costing.product_id = A.product_id AND
  141.         A.date_year_month = pYearMonth AND
  142.         A.doc_type_id IN (521, 560) AND
  143.         A.qty < 0 AND
  144.         tt_gl_journal_costing.sign_journal = vSignCredit;
  145.        
  146.     /*
  147.      * summary untuk menghitung total nilai alokasi hasil costing dari in_summary_monthly_amount
  148.      * selisih nilai alokasi dan total nilai dari in_summary_monthly_amount akan diberikan
  149.      * ke item journal trx yang paling maksimum id nya.
  150.      */    
  151.     INSERT INTO tt_gl_summary_amount_product
  152.     (session_id, tenant_id, ou_bu_id, ou_branch_id, ou_sub_bu_id,
  153.      doc_type_id, product_id, journal_trx_item_id, alloc_amount, gl_amount)
  154.     SELECT A.session_id, A.tenant_id, A.ou_bu_id, A.ou_branch_id, A.ou_sub_bu_id,
  155.         A.doc_type_id, A.product_id, MAX(A.journal_trx_item_id), SUM(A.amount), A.total_amount_product
  156.     FROM tt_gl_journal_costing A
  157.     WHERE A.session_id = pSessionId AND
  158.         A.doc_type_id NOT IN (521, 560)
  159.     GROUP BY A.session_id, A.tenant_id, A.ou_bu_id, A.ou_branch_id, A.ou_sub_bu_id,
  160.             A.doc_type_id, A.product_id, A.total_amount_product;
  161.      
  162.     INSERT INTO tt_gl_summary_amount_product
  163.     (session_id, tenant_id, ou_bu_id, ou_branch_id, ou_sub_bu_id,
  164.      doc_type_id, product_id, journal_trx_item_id, alloc_amount, gl_amount, sign_journal)
  165.     SELECT A.session_id, A.tenant_id, A.ou_bu_id, A.ou_branch_id, A.ou_sub_bu_id,
  166.         A.doc_type_id, A.product_id, MAX(A.journal_trx_item_id), SUM(A.amount), A.total_amount_product, A.sign_journal
  167.     FROM tt_gl_journal_costing A
  168.     WHERE A.session_id = pSessionId AND
  169.         A.doc_type_id IN (521, 560)
  170.     GROUP BY A.session_id, A.tenant_id, A.ou_bu_id, A.ou_branch_id, A.ou_sub_bu_id,
  171.             A.doc_type_id, A.product_id, A.total_amount_product, A.sign_journal;
  172.      
  173.     UPDATE tt_gl_journal_costing SET amount = amount + A.gl_amount - A.alloc_amount
  174.     FROM tt_gl_summary_amount_product A
  175.     WHERE A.session_id = pSessionId AND
  176.         tt_gl_journal_costing.session_id = A.session_id AND
  177.         tt_gl_journal_costing.journal_trx_item_id = A.journal_trx_item_id AND
  178.         A.alloc_amount <> A.gl_amount;
  179.    
  180.     /*
  181.      * update nilai buku untuk semua transaksi di gl_journal_trx_item
  182.      */
  183.     UPDATE gl_journal_trx_item SET numerator_rate = 1, denominator_rate = 1,
  184.                                 gl_amount = A.amount,
  185.                                 gl_curr_code = vCurrGL
  186.     FROM tt_gl_journal_costing A
  187.     WHERE A.session_id = pSessionId AND
  188.         gl_journal_trx_item.journal_trx_item_id = A.journal_trx_item_id;
  189.        
  190.     /*
  191.      * hitung summary journal per trx, nilai summary akan digunakan
  192.      *  1.untuk update nilai item journal mapping
  193.      *  2.untuk hitung selisih forex : hny untuk trx Nota Klaim  
  194.      */
  195.     INSERT INTO tt_gl_summary_journal
  196.     (session_id, ctgr_journal, journal_trx_id, sign_journal,
  197.     gl_amount, temp_amount)
  198.     SELECT A.session_id, 'ITEM', A.journal_trx_id, A.sign_journal,
  199.             SUM(A.amount), SUM(A.amount)
  200.     FROM tt_gl_journal_costing A
  201.     WHERE A.session_id = pSessionId
  202.     GROUP BY session_id, journal_trx_id, sign_journal;
  203.  
  204.     /*
  205.      * ambil data journal trx mapping untuk doc type id = Nota Klaim
  206.      * hitung rate dan nilai buku nya
  207.      * update langsung data gl_journal_trx_mapping nya
  208.      */
  209.     INSERT INTO tt_gl_journal_trx_mapping
  210.     (session_id, doc_type_id, journal_trx_mapping_id, journal_trx_id, line_no,
  211.     sign_journal, curr_code, amount,
  212.     journal_date, type_rate)   
  213.     SELECT pSessionId, A.doc_type_id, D.journal_trx_mapping_id, D.journal_trx_id, D.line_no,
  214.         D.sign_journal, D.curr_code, D.amount,
  215.         D.journal_date, D.type_rate
  216.     FROM tt_gl_journal_costing A, gl_journal_trx_mapping D
  217.     WHERE A.session_id = pSessionId AND
  218.         A.doc_type_id = 511 AND
  219.         A.journal_trx_id = D.journal_trx_id
  220.     GROUP BY A.doc_type_id, D.journal_trx_mapping_id, D.journal_trx_id, D.line_no,
  221.         D.sign_journal, D.curr_code, D.amount, D.journal_date, D.type_rate;
  222.    
  223.     INSERT INTO tt_gl_admin_journal_rate
  224.     (session_id, type_rate, journal_date, curr_code, gl_curr_code, data_exchange_rate) 
  225.     SELECT pSessionId, A.type_rate, A.journal_date, A.curr_code, vCurrGL, f_get_exchange_rate(pTenantId, A.type_rate, A.journal_date, A.curr_code, vCurrGL)
  226.     FROM (     
  227.         SELECT A.journal_date, A.type_rate, A.curr_code
  228.         FROM tt_gl_journal_trx_mapping A
  229.         WHERE A.session_id = pSessionId
  230.         GROUP BY journal_date, type_rate, curr_code) A;
  231.        
  232.     UPDATE tt_gl_journal_trx_mapping SET numerator_rate = (data_exchange_rate).numerator_rate,
  233.                                         denominator_rate = (data_exchange_rate).denominator_rate,
  234.                                         gl_amount = ROUND(amount * (data_exchange_rate).numerator_rate / (data_exchange_rate).denominator_rate, vRoundingAmount)                                       
  235.     FROM tt_gl_admin_journal_rate A
  236.     WHERE tt_gl_journal_trx_mapping.session_id = pSessionId AND
  237.         tt_gl_journal_trx_mapping.session_id = A.session_id AND
  238.         tt_gl_journal_trx_mapping.type_rate = A.type_rate AND
  239.         tt_gl_journal_trx_mapping.journal_date = A.journal_date AND
  240.         tt_gl_journal_trx_mapping.curr_code = A.curr_code;
  241.    
  242.     /*
  243.      * update nilai buku untuk item journal mapping Nota Klaim
  244.      */
  245.     UPDATE gl_journal_trx_mapping SET numerator_rate = A.numerator_rate, denominator_rate = A.denominator_rate, gl_amount = A.gl_amount, gl_curr_code = vCurrGL
  246.     FROM tt_gl_journal_trx_mapping A
  247.     WHERE A.session_id = pSessionId AND
  248.         gl_journal_trx_mapping.journal_trx_mapping_id = A.journal_trx_mapping_id;
  249.        
  250.     /*
  251.      * buat data journal trx mapping untuk doc type yang bukan nota klaim
  252.      * dengan menghitung total nilai dari tt_gl_journal_costing
  253.      * hal ini dilakukan untuk memastikan jika terjadi kesalahan coding dalam membuat template journal
  254.      * maka nanti akan bisa muncul Forex, padahal transaksi selain Nota Klaim seharusnya tidak ada forex.
  255.      *
  256.      * Khusus untuk adj qty, amountnya harus memperhatikan sign journal nya, karena dlm 1 trx adj qty,
  257.      * bisa saja memiliki 2 jenis journal item dengan sign journal yg berbeda. Hal ini berlaku juga untuk exchange (WTC, 160212)
  258.      */
  259.     INSERT INTO tt_gl_journal_trx_mapping
  260.     (session_id, doc_type_id, journal_trx_mapping_id, journal_trx_id, line_no,
  261.     sign_journal, curr_code, amount, gl_amount,
  262.     journal_date, type_rate)   
  263.     SELECT pSessionId, A.doc_type_id, D.journal_trx_mapping_id, D.journal_trx_id, D.line_no,
  264.         D.sign_journal, D.curr_code, D.amount, SUM(A.amount),
  265.         D.journal_date, D.type_rate
  266.     FROM tt_gl_journal_costing A, gl_journal_trx_mapping D
  267.     WHERE A.session_id = pSessionId AND
  268.         A.doc_type_id NOT IN (511,521,560) AND
  269.         A.journal_trx_id = D.journal_trx_id
  270.     GROUP BY A.doc_type_id, D.journal_trx_mapping_id, D.journal_trx_id, D.line_no,
  271.         D.sign_journal, D.curr_code, D.journal_date, D.type_rate;
  272.            
  273.     INSERT INTO tt_gl_journal_trx_mapping
  274.     (session_id, doc_type_id, journal_trx_mapping_id, journal_trx_id, line_no,
  275.     sign_journal, curr_code, amount, gl_amount,
  276.     journal_date, type_rate)   
  277.     SELECT pSessionId, A.doc_type_id, D.journal_trx_mapping_id, D.journal_trx_id, D.line_no,
  278.         D.sign_journal, D.curr_code, D.amount, SUM(CASE WHEN A.sign_journal = vSignDebit THEN A.amount ELSE -1 * A.amount END),
  279.         D.journal_date, D.type_rate
  280.     FROM tt_gl_journal_costing A, gl_journal_trx_mapping D
  281.     WHERE A.session_id = pSessionId AND
  282.         A.doc_type_id IN (521,560) AND
  283.         A.journal_trx_id = D.journal_trx_id
  284.     GROUP BY A.doc_type_id, D.journal_trx_mapping_id, D.journal_trx_id, D.line_no,
  285.         D.sign_journal, D.curr_code, D.journal_date, D.type_rate;
  286.        
  287.     /*
  288.      * Update sign_journal menjadi D untuk doc adj qty yg amountnya < 0
  289.      */
  290.     UPDATE tt_gl_journal_trx_mapping SET sign_journal = vSignDebit, gl_amount = ABS(gl_amount)
  291.     WHERE doc_type_id IN (521,560) AND
  292.         gl_amount < 0 AND
  293.         session_id = pSessionId;
  294.            
  295.     /*
  296.      * update gl_journal_trx_mapping untuk nilai buku transaksi yang bukan Nota Klaim
  297.      */
  298.     UPDATE gl_journal_trx_mapping SET numerator_rate = 1, denominator_rate = 1,
  299.                                 gl_amount = A.gl_amount,
  300.                                 gl_curr_code = vCurrGL,
  301.                                 sign_journal = A.sign_journal
  302.     FROM tt_gl_journal_trx_mapping A
  303.     WHERE A.session_id = pSessionId AND
  304.         A.doc_type_id <> 511 AND
  305.         gl_journal_trx_mapping.journal_trx_mapping_id = A.journal_trx_mapping_id;
  306.                        
  307.     INSERT INTO tt_gl_summary_journal
  308.     (session_id, ctgr_journal, journal_trx_id, sign_journal, gl_amount, temp_amount)
  309.     SELECT A.session_id, 'MAPPING', A.journal_trx_id, A.sign_journal, SUM(A.gl_amount), SUM(A.gl_amount)
  310.     FROM tt_gl_journal_trx_mapping A
  311.     WHERE A.session_id = pSessionId
  312.     GROUP BY session_id, journal_trx_id, sign_journal;
  313.        
  314.     UPDATE tt_gl_summary_journal SET temp_amount = temp_amount * -1
  315.     WHERE sign_journal = vSignCredit AND
  316.         session_id = pSessionId;
  317.    
  318.     INSERT INTO tt_gl_summary_journal
  319.     (session_id, ctgr_journal, journal_trx_id, sign_journal, gl_amount, temp_amount)
  320.     SELECT A.session_id, 'ALL', A.journal_trx_id, vSignCredit, 0, SUM(A.temp_amount)
  321.     FROM tt_gl_summary_journal A
  322.     WHERE A.session_id = pSessionId
  323.     GROUP BY A.session_id, A.journal_trx_id;
  324.    
  325.     UPDATE tt_gl_summary_journal SET sign_journal = vSignDebit, temp_amount = temp_amount * -1
  326.     WHERE session_id = pSessionId AND
  327.         ctgr_journal = 'ALL' AND
  328.         temp_amount < 0;
  329.        
  330.     DELETE FROM gl_journal_trx_fx A
  331.     WHERE EXISTS (
  332.         SELECT 1
  333.         FROM tt_gl_summary_journal B
  334.         WHERE A.journal_trx_id = B.journal_trx_id AND
  335.               B.ctgr_journal = 'ALL' AND
  336.               B.session_id = pSessionId
  337.     );
  338.        
  339.     /*
  340.      * buat transaksi forex
  341.      * seharusnya cuma ada untuk transaksi Nota Klaim
  342.      * WTC, 160628, khusus untuk transaksi Nota Klaim, selisih nilai dimasukkan ke COA HPP.
  343.      *     Selain nota klaim, dimasukkan sebagai biaya selisih kurs.
  344.      */
  345.     INSERT INTO gl_journal_trx_fx
  346.     (tenant_id, journal_trx_id, line_no, ref_doc_type_id, ref_id,  
  347.     partner_id, product_id, cashbank_id, ou_rc_id, segmen_id,
  348.     sign_journal, flg_source_coa, activity_gl_id, coa_id,
  349.     curr_code, amount, journal_date, type_rate,
  350.     numerator_rate, denominator_rate, gl_curr_code, gl_amount,  
  351.     journal_desc, remark,
  352.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  353.     SELECT B.tenant_id, A.journal_trx_id, 1, vEmptyId, vEmptyId,
  354.         vEmptyId, vEmptyId, vEmptyId, vEmptyId, vEmptyId,
  355.         A.sign_journal, vSystemCOA, vEmptyId, f_get_system_coa_by_group_coa(B.tenant_id, 'BiayaSelisihKurs'),
  356.         vCurrGL, A.temp_amount, B.doc_date, vEmptyValue,
  357.         1, 1, vCurrGL, A.temp_amount,
  358.         'FX', 'Forex ' || C.doc_desc || ' ' || B.doc_date,
  359.         0, pDatetime, pUserId, pDatetime, pUserId
  360.     FROM tt_gl_summary_journal A,
  361.         gl_journal_trx B, m_document C
  362.     WHERE A.session_id = pSessionId AND
  363.         A.journal_trx_id = B.journal_trx_id AND
  364.         B.doc_type_id = C.doc_type_id AND
  365.         A.ctgr_journal = 'ALL' AND
  366.         A.temp_amount <> 0 AND
  367.         B.doc_type_id NOT IN (511, 560);
  368.  
  369.     -- WTC, 160628, khusus untuk transaksi Nota Klaim, selisih nilai dimasukkan ke COA HPP
  370.     INSERT INTO gl_journal_trx_fx
  371.     (tenant_id, journal_trx_id, line_no, ref_doc_type_id, ref_id,  
  372.     partner_id, product_id, cashbank_id, ou_rc_id, segmen_id,
  373.     sign_journal, flg_source_coa, activity_gl_id, coa_id,
  374.     curr_code, amount, journal_date, type_rate,
  375.     numerator_rate, denominator_rate, gl_curr_code, gl_amount,  
  376.     journal_desc, remark,
  377.     "version", create_datetime, create_user_id, update_datetime, update_user_id)
  378.     SELECT B.tenant_id, A.journal_trx_id, 1, vEmptyId, vEmptyId,
  379.         vEmptyId, vEmptyId, vEmptyId, vEmptyId, vEmptyId,
  380.         A.sign_journal, vSystemCOA, vEmptyId, f_get_system_coa_by_group_coa(B.tenant_id, 'HargaPokokPenjualan'),
  381.         vCurrGL, A.temp_amount, B.doc_date, vEmptyValue,
  382.         1, 1, vCurrGL, A.temp_amount,
  383.         'COGS', 'Selisih COGS atas Nota Klaim ' || C.doc_desc || ' ' || B.doc_date,
  384.         0, pDatetime, pUserId, pDatetime, pUserId
  385.     FROM tt_gl_summary_journal A,
  386.         gl_journal_trx B, m_document C
  387.     WHERE A.session_id = pSessionId AND
  388.         A.journal_trx_id = B.journal_trx_id AND
  389.         B.doc_type_id = C.doc_type_id AND
  390.         A.ctgr_journal = 'ALL' AND
  391.         A.temp_amount <> 0 AND
  392.         B.doc_type_id IN (511, 560);
  393.        
  394.     /*
  395.      * data rate dari transaksi klaim
  396.      */    
  397.     INSERT INTO gl_admin_journal_rate
  398.     (tenant_id, journal_year_month, process_datetime, process_user_id,  
  399.     journal_date, type_rate, curr_code, gl_curr_code, numerator_rate, denominator_rate)
  400.     SELECT pTenantId, pYearMonth, pDatetime, pUserId,
  401.         journal_date, type_rate, curr_code, gl_curr_code, (data_exchange_rate).numerator_rate, (data_exchange_rate).denominator_rate
  402.     FROM tt_gl_admin_journal_rate
  403.     WHERE session_id = pSessionId AND
  404.         curr_code <> gl_curr_code;
  405.            
  406.     UPDATE gl_admin_journal_trx SET process_datetime = pDatetime, process_user_id = pUserId
  407.     WHERE tenant_id = pTenantId AND
  408.         ou_id = pOuId AND
  409.         journal_process_periode = vJournalProcessPeriode AND
  410.         ledger_code = vLedgerCode AND
  411.         journal_year_month = pYearMonth;
  412.        
  413.     UPDATE gl_journal_trx SET status_doc = vStatusRelease, version = version + 1, update_datetime = pDatetime, update_user_id = pUserId
  414.     FROM (SELECT journal_trx_id
  415.             FROM tt_gl_journal_costing A
  416.             WHERE A.session_id = pSessionId
  417.             GROUP BY journal_trx_id) A
  418.     WHERE gl_journal_trx.journal_trx_id = A.journal_trx_id;
  419.    
  420.     -- update status document khusus untuk document cost allocation to product (528)
  421.     UPDATE gl_journal_trx SET status_doc = vStatusRelease, version = version + 1, update_datetime = pDatetime, update_user_id = pUserId
  422.     WHERE doc_type_id = 528
  423.     AND SUBSTRING(doc_date, 1, 6) = pYearMonth;
  424.    
  425.     DELETE FROM tt_gl_journal_costing WHERE session_id = pSessionId;
  426.     DELETE FROM tt_gl_summary_amount_product WHERE session_id = pSessionId;
  427.     DELETE FROM tt_gl_summary_journal WHERE session_id = pSessionId;
  428.     DELETE FROM tt_gl_journal_trx_mapping WHERE session_id = pSessionId;
  429.     DELETE FROM tt_gl_admin_journal_rate WHERE session_id = pSessionId;
  430.    
  431. END;
  432. $BODY$
  433.   LANGUAGE plpgsql VOLATILE
  434.   COST 100;
  435.   /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement