Advertisement
tercnem

proses costing wip

Jan 23rd, 2019
207
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. -- Function: in_process_costing_finish_goods(bigint, character varying, character varying, bigint, character varying, bigint)
  2.  
  3. -- DROP FUNCTION in_process_costing_finish_goods(bigint, character varying, character varying, bigint, character varying, bigint);
  4.  
  5. CREATE OR REPLACE FUNCTION in_process_costing_wip(bigint, character varying, character varying, bigint, character varying, bigint)
  6.   RETURNS void AS
  7. $BODY$
  8. DECLARE
  9.  
  10.     pTenantId           ALIAS FOR $1;
  11.     pSessionId          ALIAS FOR $2;
  12.     pYearMonth          ALIAS FOR $3;
  13.     pOuId               ALIAS FOR $4;
  14.     pDatetime           ALIAS FOR $5;
  15.     pUserId             ALIAS FOR $6;
  16.  
  17.     vNextYearMonth          character varying(6);
  18.     vCurrGL                 character varying(5);
  19.     vFlagNo                 character varying(1);
  20.     vFlagYes                character varying(1);
  21.     vEmptyValue             character varying(1);
  22.     vEmptyId                bigint;
  23.     vDocTypeAwal            bigint;
  24.     vGroupProductFG         character varying(5);
  25.  
  26.     vRoundingDigit          integer;
  27.     vTypeRate               character varying(5);
  28.     vStatusRelease          character varying(1);
  29. BEGIN
  30.    
  31.     vFlagNo := 'N';
  32.     vFlagYes := 'Y';
  33.     vDocTypeAwal := -99;
  34.     vEmptyId := -99;
  35.     vEmptyValue := ' ';
  36.     vGroupProductFG := 'FG';
  37.  
  38.     vTypeRate := 'COM';
  39.     vStatusRelease := 'R';
  40.    
  41.     SELECT TO_CHAR(TO_DATE(MAX(pYearMonth),'YYYYMM') + interval '1 Month','YYYYMM') INTO vNextYearMonth;
  42.    
  43.     vCurrGL := f_get_value_system_config_by_param_code(pTenantId,'ValutaBuku');
  44.     vRoundingDigit := CAST(f_get_value_system_config_by_param_code(pTenantId,'rounding.gl.amount') AS integer);
  45.  
  46.     DELETE FROM tt_in_doc_product_price WHERE session_id = pSessionId;
  47.    
  48.     DELETE FROM tt_in_add_product_unamount WHERE session_id = pSessionId;
  49.    
  50.     DELETE FROM tt_in_product_base_price WHERE session_id = pSessionId;
  51.    
  52.     DELETE FROM tt_in_summary_monthly_product WHERE session_id = pSessionId;
  53.    
  54.     DELETE FROM tt_in_summary_monthly_cogs WHERE session_id = pSessionId;
  55.    
  56.     DELETE FROM tt_in_summary_monthly_amount_remain WHERE session_id = pSessionId;
  57.    
  58.     DELETE FROM tt_in_doc_production_product_price WHERE session_id = pSessionId;
  59.     /*
  60.      * costing product hanya berdasarkan ou business unit, jadi untuk sementara sub_ou_id diisi dengan -99
  61.      */
  62.    
  63.     /*
  64.      * membuat summary nilai pembelian berdasarkan hasil jurnal
  65.      * untuk transaksi receive goods
  66.      * NK, 16 Feb 2015 : Pembelian Internal menghasilkan dokumen semua sesuai doc type Receive Goods
  67.      * Receive Goods : 111
  68.      */
  69.     INSERT INTO in_summary_monthly_amount
  70.     (date_year_month, tenant_id, ou_bu_id, ou_branch_id, ou_sub_bu_id,
  71.     doc_type_id, product_id, base_uom_id, qty,
  72.     gl_curr_code, gl_amount, flg_amount,
  73.     "version", create_datetime, create_user_id, update_datetime, update_user_id, remark)
  74.     SELECT pYearMonth, A.tenant_id, A.ou_bu_id, A.ou_branch_id, A.ou_sub_bu_id,
  75.         A.doc_type_id, C.product_id, C.uom_id, SUM(C.qty),
  76.         C.gl_curr_code, SUM(C.gl_amount), 'PURCH_PRICE',
  77.         0, pDatetime, pUserId, pDatetime, pUserId, vGroupProductFG
  78.     FROM gl_journal_trx A, dt_date B, gl_journal_trx_item C, m_document_journal D, vw_wip_product E
  79.     WHERE A.tenant_id = pTenantId AND
  80.         A.ou_bu_id = pOuId AND
  81.         A.status_doc = vStatusRelease AND
  82.         A.doc_date = B.string_date AND
  83.         B.year_month_date = pYearMonth AND
  84.         A.journal_trx_id = C.journal_trx_id AND
  85.         A.doc_type_id = D.doc_type_id AND
  86.         D.ledger_code IN ('PURCH') AND
  87.         C.journal_desc = 'PRODUCT_STOCK' AND
  88.         A.doc_type_id IN (111) AND
  89.         C.product_id = E.product_id
  90.     GROUP BY A.tenant_id, A.ou_bu_id, A.ou_branch_id, A.ou_sub_bu_id, A.doc_type_id, C.product_id, C.uom_id, C.gl_curr_code;
  91.  
  92.     /*
  93.      * ambil daftar product yang akan diproses,hny yang group FINISH GOODS
  94.      * dan berikan tanda jika barang tersebut adalah barang assembly
  95.      * NOT USED ANYMORE, NK 31 DES 2013, USE VIEW
  96.     INSERT INTO tt_in_product
  97.     (session_id, product_id, base_uom_id, flg_assembly)
  98.     SELECT pSessionId, A.product_id, A.base_uom_id, vFlagNo
  99.     FROM m_product A, m_ctgr_product B, m_group_product C
  100.     WHERE A.ctgr_product_id = B.ctgr_product_id AND
  101.         B.group_product_id = C.group_product_id AND
  102.         C.group_product_code = vGroupProductFG;
  103.        
  104.     UPDATE tt_in_product SET flg_assembly = vFlagYes
  105.     WHERE EXISTS (SELECT 1 FROM m_ext_product A
  106.                 WHERE tt_in_product.product_id = A.product_id);
  107.      */  
  108.     /*
  109.      * ambil data receive goods dari in_summary_monthly_amount yang product Finish Goods
  110.      * NK, 16 Feb 2015 : receive goods internal menggunakan doc type receive goods
  111.      */        
  112.     INSERT INTO tt_in_doc_product_price
  113.     (session_id, tenant_id, ou_bu_id, ou_branch_id, ou_sub_bu_id, product_id,
  114.      doc_type_id, ref_id, doc_no, doc_date,
  115.      curr_code, amount, qty, uom_id,
  116.      numerator_rate, denominator_rate,
  117.      gl_curr_code, gl_amount)
  118.     SELECT pSessionId, A.tenant_id, A.ou_bu_id, A.ou_branch_id, A.ou_sub_bu_id, A.product_id,
  119.         A.doc_type_id, vEmptyId, vEmptyValue, vEmptyValue,
  120.         A.gl_curr_code, A.gl_amount, A.qty, A.base_uom_id,
  121.         1, 1,
  122.         A.gl_curr_code, A.gl_amount
  123.     FROM in_summary_monthly_amount A, vw_wip_product E
  124.     WHERE A.date_year_month = pYearMonth AND
  125.         A.doc_type_id IN (111) AND
  126.         A.tenant_id = pTenantId AND
  127.         A.ou_bu_id = pOuId AND
  128.         A.product_id = E.product_id;   
  129.        
  130.     /*
  131.      * ambil data adjusment stok amount
  132.      * jika curr <> curr G/L, maka lakukan hitung rate untuk ke nilai sesuai valuta G/L
  133.      * 522 : adj stock amount ( mempengaruhi COGS )
  134.      * 523 : adj stock amount balance ( mempengaruhi saldo akhir )
  135.      * 528 : costing allocation to product ( mempengaruhi COGS )
  136.      */
  137.     INSERT INTO tt_in_doc_product_price
  138.     (session_id, tenant_id, ou_bu_id, ou_branch_id, ou_sub_bu_id, product_id,
  139.      doc_type_id, ref_id, doc_no, doc_date,
  140.      curr_code, amount, qty, uom_id,
  141.      numerator_rate, denominator_rate,
  142.      gl_curr_code, gl_amount)
  143.     SELECT pSessionId, A.tenant_id, B.ou_bu_id, B.ou_branch_id, B.ou_sub_bu_id, A.product_id,
  144.         A.doc_type_id, A.ref_id, A.doc_no, A.doc_date,
  145.         A.curr_code, A.amount, A.qty, A.uom_id,
  146.         1, 1, vCurrGL, ROUND( A.amount, vRoundingDigit)
  147.     FROM in_product_price_balance A, m_ou_structure B, dt_date C, vw_wip_product E
  148.     WHERE A.doc_date = C.string_date AND
  149.         C.year_month_date = pYearMonth AND
  150.         A.tenant_id = pTenantId AND
  151.         A.ou_id = B.ou_id AND
  152.         B.ou_bu_id = pOuId AND
  153.         A.doc_type_id IN (522, 523, 528) AND
  154.         A.product_id = E.product_id;   
  155.    
  156.     -- hitung nilai pembukuan untuk transaksi adjusment stok amount
  157.     UPDATE tt_in_doc_product_price SET numerator_rate = B.amount_to, denominator_rate = B.amount_from
  158.     FROM m_exchange_rate B
  159.     WHERE tt_in_doc_product_price.session_id = pSessionId AND
  160.         tt_in_doc_product_price.tenant_id = B.tenant_id AND
  161.         B.type_exchange_rate = vTypeRate AND
  162.         tt_in_doc_product_price.doc_date = B.date_from AND
  163.         tt_in_doc_product_price.curr_code = B.curr_code_from AND
  164.         tt_in_doc_product_price.gl_curr_code = B.curr_code_to AND
  165.         tt_in_doc_product_price.doc_type_id IN (522, 523, 528) AND
  166.         tt_in_doc_product_price.curr_code <> vCurrGL;
  167.  
  168.     UPDATE tt_in_doc_product_price SET gl_amount = ROUND(amount * numerator_rate / denominator_rate, vRoundingDigit)
  169.     WHERE tt_in_doc_product_price.session_id = pSessionId AND
  170.           tt_in_doc_product_price.doc_type_id IN (522, 523, 528) AND
  171.           tt_in_doc_product_price.curr_code <> vCurrGL;
  172.          
  173.     /*
  174.      * product non assembly
  175.      * ambil data transaksi yg tambah stok, tp belum memiliki nilai
  176.      * 1.return note : 502
  177.      * 2.adj stok qty plus : 521
  178.      * 3.adj stok outlet qty plus : 413
  179.      * 4.production product : 540
  180.      */
  181.     INSERT INTO tt_in_add_product_unamount
  182.     (session_id, tenant_id, ou_bu_id, ou_branch_id, ou_sub_bu_id, product_id,
  183.      doc_type_id, qty, uom_id, gl_curr_code, gl_amount, flg_amount)
  184.     SELECT pSessionId, A.tenant_id, B.ou_bu_id, B.ou_branch_id, B.ou_sub_bu_id, A.product_id,
  185.         A.doc_type_id, A.qty, A.base_uom_id, vCurrGL, 0, vEmptyValue
  186.     FROM in_log_product_balance_stock A, m_ou_structure B, dt_date C, vw_wip_product E
  187.     WHERE A.ou_id = B.ou_id AND
  188.         B.ou_bu_id = pOuId AND
  189.         A.doc_date = C.string_date AND
  190.         C.year_month_date = pYearMonth AND
  191.         A.doc_type_id = 502 AND
  192.         A.product_id = E.product_id;   
  193.  
  194.     INSERT INTO tt_in_add_product_unamount
  195.     (session_id, tenant_id, ou_bu_id, ou_branch_id, ou_sub_bu_id, product_id,
  196.      doc_type_id, qty, uom_id, gl_curr_code, gl_amount, flg_amount)
  197.     SELECT pSessionId, A.tenant_id, B.ou_bu_id, B.ou_branch_id, B.ou_sub_bu_id, A.product_id,
  198.         A.doc_type_id, A.qty, A.base_uom_id, vCurrGL, 0, vEmptyValue
  199.     FROM in_log_product_balance_stock A, m_ou_structure B, dt_date C, vw_wip_product E
  200.     WHERE A.ou_id = B.ou_id AND
  201.         B.ou_bu_id = pOuId AND
  202.         A.doc_date = C.string_date AND
  203.         C.year_month_date = pYearMonth AND
  204.         A.doc_type_id IN ( 521, 413 ) AND
  205.         A.product_id = E.product_id AND
  206.         A.qty > 0;
  207.    
  208.     --ambil product wip dari input hasil produksi
  209.     INSERT INTO tt_in_add_product_unamount
  210.     (session_id, tenant_id, ou_bu_id, ou_branch_id, ou_sub_bu_id, product_id,
  211.      doc_type_id, qty, uom_id, gl_curr_code, gl_amount, flg_amount)
  212.     SELECT pSessionId, pTenantId, B.ou_bu_id, B.ou_branch_id, B.ou_sub_bu_id, A.product_id,
  213.         540, A.base_production_qty, A.base_uom_id, vCurrGL, 0, vEmptyValue
  214.     FROM in_balance_input_hasil_produksi_item A, m_ou_structure B, dt_date C, vw_wip_product E, m_warehouse_ou F
  215.     WHERE F.ou_id = B.ou_id AND
  216.         B.ou_bu_id = pOuId AND
  217.         A.doc_date = C.string_date AND
  218.         C.year_month_date = pYearMonth AND
  219.         A.product_id = E.product_id AND
  220.         A.warehouse_id = F.warehouse_id AND
  221.         A.base_production_qty > 0 AND
  222.         A.line_no = 1;
  223.        
  224.     /*
  225.      * buat data yang akan menjadi acuan harga standard
  226.      * 1.data purch price di bulan bersangkutan
  227.      * 2.data nilai barang di awal bulan
  228.      * 3.data master harga standard
  229.      * 4.data raw product produksi
  230.      */
  231.     INSERT INTO tt_in_product_base_price
  232.     (session_id, tenant_id, ou_id, product_id,
  233.      flg_amount, qty, uom_id, gl_curr_code, gl_amount)
  234.     SELECT A.session_id, A.tenant_id, A.ou_bu_id, A.product_id,
  235.         'PURCH_PRICE', SUM(A.qty), A.uom_id, A.gl_curr_code, SUM(A.gl_amount)
  236.     FROM tt_in_doc_product_price A
  237.     WHERE A.session_id = pSessionId AND
  238.         A.doc_type_id IN ( 111)
  239.     GROUP BY A.session_id, A.tenant_id, A.ou_bu_id, A.product_id,
  240.         A.uom_id, A.gl_curr_code;
  241.    
  242.     INSERT INTO tt_in_product_base_price
  243.     (session_id, tenant_id, ou_id, product_id,
  244.      flg_amount, qty, uom_id, gl_curr_code, gl_amount)
  245.     SELECT pSessionId, A.tenant_id, A.ou_bu_id, A.product_id,
  246.         'BGN_BALANCE', SUM(A.qty), A.base_uom_id, A.gl_curr_code, SUM(A.gl_amount)
  247.     FROM in_summary_monthly_amount A, vw_wip_product E
  248.     WHERE A.date_year_month = pYearMonth AND
  249.         A.doc_type_id = vDocTypeAwal AND
  250.         A.tenant_id = pTenantId AND
  251.         A.ou_bu_id = pOuId AND
  252.         A.product_id = E.product_id
  253.     GROUP BY A.tenant_id, A.ou_bu_id, A.product_id,
  254.         A.base_uom_id, A.gl_curr_code;
  255.    
  256.     INSERT INTO tt_in_product_base_price
  257.     (session_id, tenant_id, ou_id, product_id,
  258.      flg_amount, qty, uom_id, gl_curr_code, gl_amount)
  259.     SELECT pSessionId, A.tenant_id, A.ou_id, A.product_id,
  260.         'STANDARD_PRICE', 0, E.base_uom_id, A.curr_code, SUM(A.amount)
  261.     FROM in_product_standard_cogs A, vw_wip_product E
  262.     WHERE A.tenant_id = pTenantId AND
  263.         A.ou_id = pOuId AND
  264.         A.year_month_date = pYearMonth AND
  265.         A.product_id = E.product_id
  266.     GROUP BY A.tenant_id, A.ou_id, A.product_id, A.curr_code, E.base_uom_id;
  267.    
  268.     INSERT INTO tt_in_product_base_price
  269.     (session_id, tenant_id, ou_id, product_id,
  270.      flg_amount, qty, uom_id, gl_curr_code, gl_amount)
  271.     SELECT pSessionId, A.tenant_id, A.ou_bu_id, A.product_id,
  272.         'RAW_BGN_BALANCE', SUM(A.qty), A.base_uom_id, A.gl_curr_code, SUM(A.gl_amount)
  273.     FROM in_summary_monthly_amount A, vw_raw_materials_product E
  274.     WHERE A.date_year_month = vNextYearMonth AND
  275.         A.doc_type_id = vDocTypeAwal AND
  276.         A.tenant_id = pTenantId AND
  277.         A.ou_bu_id = pOuId AND
  278.         A.product_id = E.product_id
  279.     GROUP BY A.tenant_id, A.ou_bu_id, A.product_id,
  280.         A.base_uom_id, A.gl_curr_code;
  281.    
  282.     INSERT INTO tt_in_product_base_price
  283.     (session_id, tenant_id, ou_id, product_id,
  284.      flg_amount, qty, uom_id, gl_curr_code, gl_amount)
  285.     SELECT pSessionId, A.tenant_id, A.ou_id, A.product_id,
  286.         'RAW_STANDARD_PRICE', 0, E.base_uom_id, A.curr_code, SUM(A.amount)
  287.     FROM in_product_standard_cogs A, vw_raw_materials_product E
  288.     WHERE A.tenant_id = pTenantId AND
  289.         A.ou_id = pOuId AND
  290.         A.year_month_date = pYearMonth AND
  291.         A.product_id = E.product_id
  292.     GROUP BY A.tenant_id, A.ou_id, A.product_id, A.curr_code, E.base_uom_id;
  293.    
  294.     --ambil informasi transaksi produksi product
  295.    
  296.     WITH product_wip AS (
  297.         SELECT balance_input_hasil_produksi_item_id AS product_wip_id, inventory_id, A.product_id,
  298.                B.ou_bu_id, B.ou_branch_id, B.ou_sub_bu_id, A.base_production_qty, A.base_uom_id
  299.         FROM in_balance_input_hasil_produksi_item A, m_ou_structure B, dt_date C, m_warehouse_ou F, vw_wip_product G
  300.         WHERE F.ou_id = B.ou_id AND
  301.         B.ou_bu_id = pOuId AND
  302.         A.doc_date = C.string_date AND
  303.         C.year_month_date = pYearMonth AND
  304.         A.warehouse_id = F.warehouse_id AND
  305.         A.base_production_qty > 0 AND
  306.         A.line_no = 1 AND
  307.         G.product_id = A.product_id
  308.     )  
  309.     INSERT INTO tt_in_doc_production_product_price(
  310.             session_id, tenant_id, ou_bu_id, ou_branch_id, ou_sub_bu_id, doc_type_id, ref_id,
  311.             doc_date, product_id, child_product_id, child_amount, child_qty, flg_amount, production_qty, base_uom_id)
  312.     SELECT  pSessionId, pTenantId, E.ou_bu_id, E.ou_branch_id, E.ou_sub_bu_id, 540, E.product_wip_id,
  313.             A.doc_date, E.product_id, A.product_id, 0, ABS(A.base_production_qty), vEmptyValue, E.base_production_qty, E.base_uom_id
  314.     FROM in_balance_input_hasil_produksi_item A,
  315.          product_wip E
  316.     WHERE A.inventory_id = E.inventory_id AND
  317.         A.line_no <> 1;
  318.    
  319.     --memberi nilai untuk chid produksi product
  320.     UPDATE tt_in_doc_production_product_price SET
  321.         child_amount = ROUND(tt_in_doc_production_product_price.child_qty * A.gl_amount, vRoundingDigit),
  322.         flg_amount = A.flg_amount
  323.     FROM tt_in_product_base_price A
  324.     WHERE A.session_id = pSessionId AND
  325.         tt_in_doc_production_product_price.session_id = A.session_id AND
  326.         tt_in_doc_production_product_price.tenant_id = A.tenant_id AND
  327.         tt_in_doc_production_product_price.ou_bu_id = A.ou_id AND
  328.         tt_in_doc_production_product_price.child_product_id = A.product_id AND
  329.         tt_in_doc_production_product_price.flg_amount = vEmptyValue AND    
  330.         A.flg_amount = 'RAW_STANDARD_PRICE';
  331.    
  332.     UPDATE tt_in_doc_production_product_price SET
  333.         child_amount = ROUND(tt_in_doc_production_product_price.child_qty * ( A.gl_amount / A.qty ), vRoundingDigit),
  334.         flg_amount = A.flg_amount
  335.     FROM tt_in_product_base_price A
  336.     WHERE A.session_id = pSessionId AND
  337.         tt_in_doc_production_product_price.session_id = A.session_id AND
  338.         tt_in_doc_production_product_price.tenant_id = A.tenant_id AND
  339.         tt_in_doc_production_product_price.ou_bu_id = A.ou_id AND
  340.         tt_in_doc_production_product_price.child_product_id = A.product_id AND
  341.         tt_in_doc_production_product_price.flg_amount = vEmptyValue AND    
  342.         A.flg_amount = 'RAW_BGN_BALANCE';
  343.        
  344.     --memberi nilai untuk product hasil produksi berdasrkan sum childnya
  345.     WITH production_price AS (
  346.     SELECT 'PRODUCTION_PRICE' AS flg_amount, session_id, tenant_id, ou_bu_id,
  347.             doc_type_id, ref_id, doc_date, product_id, base_uom_id,
  348.             production_qty, ROUND(SUM(child_amount)/production_qty,vRoundingDigit) AS gl_amount
  349.     FROM tt_in_doc_production_product_price
  350.     WHERE session_id = pSessionId
  351.     GROUP BY session_id, tenant_id, ou_bu_id, doc_type_id, ref_id, doc_date, product_id, base_uom_id, production_qty)
  352.    
  353.     INSERT INTO tt_in_product_base_price
  354.     (session_id, tenant_id, ou_id, product_id,
  355.      flg_amount, qty, uom_id, gl_curr_code, gl_amount)
  356.     SELECT pSessionId, A.tenant_id, A.ou_bu_id, A.product_id,
  357.         flg_amount,SUM(A.production_qty), A.base_uom_id, vCurrGL, SUM(A.gl_amount)
  358.     FROM production_price A
  359.     GROUP BY A.tenant_id, A.ou_bu_id, A.product_id, A.base_uom_id, A.flg_amount;
  360.    
  361.     /*
  362.      * isi nilai data tt_in_add_product_unamount dengan urutan :
  363.      * 1. update dengan data flg amount PRODUCTION_PRICE
  364.      * 2. update dengan data flg amount STANDARD_PRICE
  365.      * 3. jika belum ada, update dengan data flg amount BGN_BALANCE
  366.      * 4. jika belum ada, update dengan data flg amount PURCH_PRICE
  367.      */    
  368.     UPDATE tt_in_add_product_unamount SET
  369.             gl_amount = ROUND(tt_in_add_product_unamount.qty * A.gl_amount/A.qty,vRoundingDigit),
  370.             flg_amount = A.flg_amount
  371.     FROM tt_in_product_base_price A
  372.     WHERE A.session_id = pSessionId AND
  373.         tt_in_add_product_unamount.session_id = A.session_id AND
  374.         tt_in_add_product_unamount.tenant_id = A.tenant_id AND
  375.         tt_in_add_product_unamount.ou_bu_id = A.ou_id AND
  376.         tt_in_add_product_unamount.product_id = A.product_id AND
  377.         tt_in_add_product_unamount.flg_amount = vEmptyValue AND
  378.         A.flg_amount = 'PRODUCTION_PRICE';
  379.    
  380.        
  381.     UPDATE tt_in_add_product_unamount SET gl_amount = tt_in_add_product_unamount.qty * A.gl_amount, flg_amount = A.flg_amount
  382.     FROM tt_in_product_base_price A
  383.     WHERE A.session_id = pSessionId AND
  384.         tt_in_add_product_unamount.session_id = A.session_id AND
  385.         tt_in_add_product_unamount.tenant_id = A.tenant_id AND
  386.         tt_in_add_product_unamount.ou_bu_id = A.ou_id AND
  387.         tt_in_add_product_unamount.product_id = A.product_id AND
  388.         tt_in_add_product_unamount.flg_amount = vEmptyValue AND
  389.         A.flg_amount = 'STANDARD_PRICE';
  390.    
  391.     UPDATE tt_in_add_product_unamount SET gl_amount = ROUND(tt_in_add_product_unamount.qty * ( A.gl_amount / A.qty ), vRoundingDigit), flg_amount = A.flg_amount
  392.     FROM tt_in_product_base_price A
  393.     WHERE A.session_id = pSessionId AND
  394.         tt_in_add_product_unamount.session_id = A.session_id AND
  395.         tt_in_add_product_unamount.tenant_id = A.tenant_id AND
  396.         tt_in_add_product_unamount.ou_bu_id = A.ou_id AND
  397.         tt_in_add_product_unamount.product_id = A.product_id AND
  398.         tt_in_add_product_unamount.flg_amount = vEmptyValue AND    
  399.         A.flg_amount = 'BGN_BALANCE';
  400.        
  401.     UPDATE tt_in_add_product_unamount SET gl_amount = ROUND(tt_in_add_product_unamount.qty * ( A.gl_amount / A.qty ), vRoundingDigit), flg_amount = A.flg_amount
  402.     FROM tt_in_product_base_price A
  403.     WHERE A.session_id = pSessionId AND
  404.         tt_in_add_product_unamount.session_id = A.session_id AND
  405.         tt_in_add_product_unamount.tenant_id = A.tenant_id AND
  406.         tt_in_add_product_unamount.ou_bu_id = A.ou_id AND
  407.         tt_in_add_product_unamount.product_id = A.product_id AND
  408.         tt_in_add_product_unamount.flg_amount = vEmptyValue AND    
  409.         A.flg_amount = 'PURCH_PRICE';
  410.  
  411.        
  412. /*
  413.  *  menghitung harga rata rata product (non assembly ) berdasarkan :
  414.  *  1. harga purchasing
  415.  *  2. harga adj stock amount ( bukan yg balance amount ), cost allocation product
  416.  *  3. transaksi tambah stok qty, dengan harga sudah diproses : retur jual, adj stok qty > 0, produksi product qty > 0
  417.  *  4. harga saldo awal
  418.  */    
  419.     INSERT INTO tt_in_summary_monthly_product
  420.     (session_id, date_year_month, tenant_id, ou_bu_id, ou_branch_id, ou_sub_bu_id,
  421.     doc_type_id, product_id, base_uom_id, qty,
  422.     gl_curr_code, gl_amount, flg_amount)
  423.     SELECT pSessionId, pYearMonth, A.tenant_id, A.ou_bu_id, A.ou_branch_id, A.ou_sub_bu_id,
  424.         A.doc_type_id, A.product_id, A.uom_id, SUM(A.qty),
  425.         A.gl_curr_code, SUM(A.gl_amount), 'PURCH_PRICE'
  426.     FROM tt_in_doc_product_price A
  427.     WHERE A.session_id = pSessionId AND
  428.         A.doc_type_id IN (111)
  429.     GROUP BY A.tenant_id, A.ou_bu_id, A.ou_branch_id, A.ou_sub_bu_id, A.doc_type_id, A.product_id, A.uom_id, A.gl_curr_code;
  430.    
  431.     INSERT INTO tt_in_summary_monthly_product
  432.     (session_id, date_year_month, tenant_id, ou_bu_id, ou_branch_id, ou_sub_bu_id,
  433.     doc_type_id, product_id, base_uom_id, qty,
  434.     gl_curr_code, gl_amount, flg_amount)
  435.     SELECT pSessionId, pYearMonth, A.tenant_id, A.ou_bu_id, A.ou_branch_id, A.ou_sub_bu_id,
  436.         A.doc_type_id, A.product_id, A.uom_id, SUM(A.qty),
  437.         A.gl_curr_code, SUM(A.gl_amount), 'TRANSACTION'
  438.     FROM tt_in_doc_product_price A
  439.     WHERE A.session_id = pSessionId AND
  440.         A.doc_type_id IN ( 522, 528 )
  441.     GROUP BY A.tenant_id, A.ou_bu_id, A.ou_branch_id, A.ou_sub_bu_id, A.doc_type_id, A.product_id, A.uom_id, A.gl_curr_code;
  442.  
  443.     INSERT INTO tt_in_summary_monthly_product
  444.     (session_id, date_year_month, tenant_id, ou_bu_id, ou_branch_id, ou_sub_bu_id,
  445.     doc_type_id, product_id, base_uom_id, qty,
  446.     gl_curr_code, gl_amount, flg_amount)
  447.     SELECT pSessionId, pYearMonth, A.tenant_id, A.ou_bu_id, A.ou_branch_id, A.ou_sub_bu_id,
  448.         A.doc_type_id, A.product_id, A.uom_id, SUM(A.qty),
  449.         A.gl_curr_code, SUM(A.gl_amount), A.flg_amount
  450.     FROM tt_in_add_product_unamount A
  451.     WHERE A.session_id = pSessionId
  452.     GROUP BY A.tenant_id, A.ou_bu_id, A.ou_branch_id, A.ou_sub_bu_id, A.doc_type_id, A.product_id, A.uom_id, A.gl_curr_code, A.flg_amount;
  453.  
  454.     INSERT INTO tt_in_summary_monthly_product
  455.     (session_id, date_year_month, tenant_id, ou_bu_id, ou_branch_id, ou_sub_bu_id,
  456.     doc_type_id, product_id, base_uom_id, qty,
  457.     gl_curr_code, gl_amount, flg_amount)
  458.     SELECT pSessionId, pYearMonth, A.tenant_id, A.ou_bu_id, A.ou_branch_id, A.ou_sub_bu_id,
  459.         A.doc_type_id, A.product_id, A.base_uom_id, SUM(A.qty),
  460.         A.gl_curr_code, SUM(A.gl_amount), A.flg_amount
  461.     FROM in_summary_monthly_amount A, vw_wip_product E
  462.     WHERE A.date_year_month = pYearMonth AND
  463.         A.doc_type_id = vDocTypeAwal AND
  464.         A.ou_bu_id = pOuId AND
  465.         A.tenant_id = pTenantId AND
  466.         A.product_id = E.product_id
  467.     GROUP BY A.tenant_id, A.ou_bu_id, A.ou_branch_id, A.ou_sub_bu_id, A.doc_type_id, A.product_id, A.base_uom_id, A.gl_curr_code, A.flg_amount;
  468.  
  469.     /*
  470.      * hitung harga rata-rata sebagai dasar harga pokok
  471.      */
  472.     INSERT INTO tt_in_summary_monthly_cogs
  473.     (session_id, date_year_month, tenant_id, ou_id,
  474.     product_id, qty_total, curr_code, amount_total, avg_price)
  475.     SELECT pSessionId, pYearMonth, A.tenant_id, A.ou_bu_id,
  476.         A.product_id, SUM(A.qty), A.gl_curr_code, SUM(A.gl_amount), 0
  477.     FROM tt_in_summary_monthly_product A
  478.     WHERE A.session_id = pSessionId
  479.     GROUP BY A.tenant_id, A.ou_bu_id, A.product_id, A.gl_curr_code;
  480.    
  481.     UPDATE tt_in_summary_monthly_cogs
  482.       SET avg_price = amount_total / qty_total
  483.     WHERE session_id = pSessionId AND
  484.       qty_total <> 0;
  485.    
  486.     /*
  487.      * memberikan nilai untuk transaksi stok yang mengurangi qty, sesuai harga rata rata bulan ini
  488.      * transaksi selain adj stok qty dan adj stok qty outlet , yang qty < 0
  489.      * transaksi pemakaian Nota klaim, DO, DO Internal, Sales Invoice Konsinyasi, POS Shop, Return POS Shop, Pos Shop In Shop, Return POS Shop In Shop
  490.      * transaksi pemakaian Nota klaim (511), DO (311) , POS Shop (431), Pos Shop In Shop(431)
  491.      * NK, 16 Feb 2015 : tambahan transaksi DO Receipt ( 526 )
  492.      * Sales Invoice Konsinyasi(354), DO Internal tidak jadi dipakai(154)
  493.      * Return POS Shop, Return POS SHop In SHop belum ada
  494.      * transaksi hasil produksi (540)
  495.      */
  496.     INSERT INTO tt_in_summary_monthly_product
  497.     (session_id, date_year_month, tenant_id,  ou_bu_id, ou_branch_id, ou_sub_bu_id,
  498.     doc_type_id, product_id, base_uom_id, qty,
  499.     gl_curr_code, gl_amount, flg_amount)
  500.     SELECT pSessionId, pYearMonth, A.tenant_id, B.ou_bu_id, B.ou_branch_id, B.ou_sub_bu_id,
  501.         A.doc_type_id, A.product_id, A.base_uom_id, SUM(A.qty),
  502.         vCurrGL, 0, 'MONTHLY_AVG'
  503.     FROM in_log_product_balance_stock A, m_ou_structure B, dt_date C, vw_wip_product E
  504.     WHERE A.ou_id = B.ou_id AND
  505.         B.ou_bu_id = pOuId AND
  506.         A.doc_date = C.string_date AND
  507.         C.year_month_date = pYearMonth AND
  508.         A.doc_type_id IN (511,311,431,526) AND
  509.         A.product_id = E.product_id
  510.     GROUP BY A.tenant_id, B.ou_bu_id, B.ou_branch_id, B.ou_sub_bu_id, A.doc_type_id, A.product_id, A.base_uom_id;  
  511.  
  512.     -- khusus untuk DO POS, ambil dari in_log yg doc nya POS
  513.     INSERT INTO tt_in_summary_monthly_product
  514.     (session_id, date_year_month, tenant_id,  ou_bu_id, ou_branch_id, ou_sub_bu_id,
  515.     doc_type_id, product_id, base_uom_id, qty,
  516.     gl_curr_code, gl_amount, flg_amount)
  517.     SELECT pSessionId, pYearMonth, A.tenant_id, B.ou_bu_id, B.ou_branch_id, B.ou_sub_bu_id,
  518.         431, A.product_id, A.base_uom_id, SUM(A.qty),
  519.         vCurrGL, 0, 'MONTHLY_AVG'
  520.     FROM in_log_product_balance_stock A, m_ou_structure B, dt_date C, vw_wip_product E
  521.     WHERE A.ou_id = B.ou_id AND
  522.         B.ou_bu_id = pOuId AND
  523.         A.doc_date = C.string_date AND
  524.         C.year_month_date = pYearMonth AND
  525.         A.doc_type_id IN (401,402,403,404,405,406) AND
  526.         A.product_id = E.product_id
  527.     GROUP BY A.tenant_id, B.ou_bu_id, B.ou_branch_id, B.ou_sub_bu_id, A.product_id, A.base_uom_id
  528.     HAVING SUM(A.qty) <> 0;
  529.  
  530.    
  531.     INSERT INTO tt_in_summary_monthly_product
  532.     (session_id, date_year_month, tenant_id,  ou_bu_id, ou_branch_id, ou_sub_bu_id,
  533.     doc_type_id, product_id, base_uom_id, qty,
  534.     gl_curr_code, gl_amount, flg_amount)
  535.     SELECT pSessionId, pYearMonth, A.tenant_id, B.ou_bu_id, B.ou_branch_id, B.ou_sub_bu_id,
  536.         A.doc_type_id, A.product_id, A.base_uom_id, SUM(A.qty),
  537.         vCurrGL, 0, 'MONTHLY_AVG'
  538.     FROM in_log_product_balance_stock A, m_ou_structure B, dt_date C, vw_wip_product E
  539.     WHERE A.ou_id = B.ou_id AND
  540.         B.ou_bu_id = pOuId AND
  541.         A.doc_date = C.string_date AND
  542.         C.year_month_date = pYearMonth AND
  543.         A.doc_type_id IN (521, 413) AND
  544.         A.product_id = E.product_id AND
  545.         A.qty < 0
  546.     GROUP BY A.tenant_id, B.ou_bu_id, B.ou_branch_id, B.ou_sub_bu_id, A.doc_type_id, A.product_id, A.base_uom_id;
  547.    
  548.    
  549.     INSERT INTO tt_in_summary_monthly_product
  550.     (session_id, date_year_month, tenant_id,  ou_bu_id, ou_branch_id, ou_sub_bu_id,
  551.     doc_type_id, product_id, base_uom_id, qty,
  552.     gl_curr_code, gl_amount, flg_amount)
  553.     SELECT pSessionId, pYearMonth, pTenantId, B.ou_bu_id, B.ou_branch_id, B.ou_sub_bu_id,
  554.         540, A.product_id, A.base_uom_id, SUM(A.base_production_qty),
  555.         vCurrGL, 0, 'MONTHLY_AVG'
  556.     FROM in_balance_input_hasil_produksi_item A, m_ou_structure B, dt_date C, vw_wip_product E, m_warehouse_ou F
  557.     WHERE F.ou_id = B.ou_id AND
  558.         B.ou_bu_id = pOuId AND
  559.         A.doc_date = C.string_date AND
  560.         C.year_month_date = pYearMonth AND
  561.         A.product_id = E.product_id AND
  562.         A.warehouse_id = F.warehouse_id AND
  563.         A.base_production_qty < 0 AND
  564.         A.line_no = 1
  565.     GROUP BY  B.ou_bu_id, B.ou_branch_id, B.ou_sub_bu_id, A.product_id, A.base_uom_id;
  566.    
  567. /*  NK, 25 Jan 2014, submit adj stok qty diubah sehingga menghasilkan 2 jenis log data product balance stock
  568.  *  qty < 0 dan qty > 0 dipisahkan
  569.     INSERT INTO tt_in_summary_monthly_product
  570.     (session_id, date_year_month, tenant_id, ou_id, sub_ou_id,
  571.     doc_type_id, product_id, base_uom_id, qty,
  572.     gl_curr_code, gl_amount, flg_amount)
  573.     SELECT pSessionId, pYearMonth, A.tenant_id, C.ou_bu_id, C.ou_id,
  574.         A.doc_type_id, B.product_id, B.base_uom_id, SUM(B.qty_realization),
  575.         vCurrGL, 0, 'MONTHLY_AVG'
  576.     FROM in_inventory A, in_inventory_item B, m_ou_structure C, dt_date D, vw_finish_goods_product E
  577.     WHERE A.ou_from_id = C.ou_id AND
  578.         C.ou_bu_id = pOuId AND
  579.         A.inventory_id = B.inventory_id AND
  580.         A.doc_date = D.string_date AND
  581.         D.date_year_month = pYearMonth AND
  582.         A.doc_type_id IN (521, 413) AND
  583.         B.qty_realization < 0 AND
  584.         B.product_id = E.product_id
  585.     GROUP BY A.tenant_id, C.ou_bu_id, C.ou_id, A.doc_type_id, B.product_id, B.base_uom_id;
  586. */
  587.     UPDATE tt_in_summary_monthly_product SET gl_amount = ROUND(qty * (A.amount_total / A.qty_total), vRoundingDigit)
  588.     FROM tt_in_summary_monthly_cogs A
  589.     WHERE A.session_id = pSessionId AND
  590.         tt_in_summary_monthly_product.session_id = A.session_id AND
  591.         tt_in_summary_monthly_product.tenant_id = A.tenant_id AND
  592.         tt_in_summary_monthly_product.ou_bu_id = A.ou_id AND
  593.         tt_in_summary_monthly_product.product_id = A.product_id AND
  594.         tt_in_summary_monthly_product.doc_type_id IN (511,311,431,526,521,413, 540) AND
  595.         tt_in_summary_monthly_product.flg_amount = 'MONTHLY_AVG' AND
  596.         A.qty_total <> 0;
  597.  
  598.     /*
  599.      * untuk menghitung saldo akhir di bulan tersebut, dengan cara membuat record saldo awal untuk bulan berikutnya
  600.      * 1. ambil data adj stok balance amount ( adjust nilai akhir saldo barang )
  601.      * 2. hitung saldo akhir
  602.      */    
  603.     INSERT INTO tt_in_summary_monthly_product
  604.     (session_id, date_year_month, tenant_id, ou_bu_id, ou_branch_id, ou_sub_bu_id,
  605.     doc_type_id, product_id, base_uom_id, qty,
  606.     gl_curr_code, gl_amount, flg_amount)
  607.     SELECT pSessionId, pYearMonth, A.tenant_id, A.ou_bu_id, A.ou_branch_id, A.ou_sub_bu_id,
  608.         A.doc_type_id, A.product_id, A.uom_id, SUM(A.qty),
  609.         A.gl_curr_code, SUM(A.gl_amount), 'TRANSACTION'
  610.     FROM tt_in_doc_product_price A
  611.     WHERE A.session_id = pSessionId AND
  612.         A.doc_type_id = 523
  613.     GROUP BY A.tenant_id, A.ou_bu_id, A.ou_branch_id, A.ou_sub_bu_id, A.doc_type_id, A.product_id, A.uom_id, A.gl_curr_code;
  614.        
  615.     /*
  616.      * Persiapan data saldo awal untuk bulan berikutnya. Periksa terlebih dahulu apakah ada data yg qty = 0, tetapi gl_amount <> 0.
  617.      * Nilai gl_amount tsb akan dialokasikan ke data transaksi pengeluaran stok dengan id terbesar untuk product ybs.
  618.      */
  619.     INSERT INTO tt_in_summary_monthly_amount_remain
  620.     (session_id, date_year_month, tenant_id, ou_bu_id, ou_branch_id, ou_sub_bu_id,
  621.     doc_type_id, product_id, base_uom_id, qty,
  622.     gl_curr_code, gl_amount, flg_amount, summary_monthly_product_id)
  623.     SELECT pSessionId, A.date_year_month, A.tenant_id, A.ou_bu_id, vEmptyId, vEmptyId,
  624.         vDocTypeAwal, A.product_id, A.base_uom_id, SUM(A.qty),
  625.         vCurrGL, SUM(A.gl_amount), 'BGN_BALANCE', vEmptyId
  626.     FROM tt_in_summary_monthly_product A
  627.     WHERE A.session_id = pSessionId
  628.     GROUP BY A.date_year_month, A.tenant_id, A.ou_bu_id, A.product_id, A.base_uom_id;
  629.    
  630.     -- Cari id data sebagai penampung alokasi nilai
  631.     UPDATE tt_in_summary_monthly_amount_remain
  632.         SET summary_monthly_product_id = (
  633.             SELECT MAX(A.summary_monthly_product_id)
  634.             FROM tt_in_summary_monthly_product A
  635.             WHERE A.session_id = pSessionId AND
  636.                 tt_in_summary_monthly_amount_remain.session_id = A.session_id AND
  637.                 tt_in_summary_monthly_amount_remain.date_year_month = A.date_year_month AND
  638.                 tt_in_summary_monthly_amount_remain.tenant_id = A.tenant_id AND
  639.                 tt_in_summary_monthly_amount_remain.ou_bu_id = A.ou_bu_id AND
  640.                 tt_in_summary_monthly_amount_remain.product_id = A.product_id AND
  641.                 A.doc_type_id IN (511,311,431,526,521,413,540) AND
  642.                 A.flg_amount = 'MONTHLY_AVG')
  643.     WHERE session_id = pSessionId AND qty = 0 AND gl_amount <> 0;
  644.    
  645.     /*
  646.      * NK, 16 Feb 2015
  647.      * simpan terlebih dahulu data product yang qty = 0, dan nilai <> 0
  648.      * dimana nilai dari product tersebut akan dialokasi ke trx yang menggunakan produk tersebut
  649.      */
  650.     INSERT INTO in_summary_monthly_zero_qty_amount
  651.     (date_year_month, tenant_id, ou_bu_id, ou_branch_id, ou_sub_bu_id,
  652.     product_id, qty_sum, base_uom_id, gl_curr_code, amount_sum,
  653.     doc_type_id, qty, gl_amount, remark)
  654.     SELECT A.date_year_month, A.tenant_id, A.ou_bu_id, A.ou_branch_id, A.ou_sub_bu_id,
  655.         A.product_id, A.qty, A.base_uom_id, A.gl_curr_code, A.gl_amount,
  656.         B.doc_type_id, B.qty, B.gl_amount, vGroupProductFG
  657.     FROM tt_in_summary_monthly_amount_remain A, tt_in_summary_monthly_product B
  658.     WHERE A.session_id = pSessionId AND
  659.         A.summary_monthly_product_id <> vEmptyId AND
  660.         B.summary_monthly_product_id = A.summary_monthly_product_id;
  661.    
  662.     UPDATE tt_in_summary_monthly_product SET gl_amount = tt_in_summary_monthly_product.gl_amount - A.gl_amount
  663.     FROM tt_in_summary_monthly_amount_remain A
  664.     WHERE A.session_id = pSessionId AND
  665.         A.summary_monthly_product_id <> vEmptyId AND
  666.         tt_in_summary_monthly_product.summary_monthly_product_id = A.summary_monthly_product_id;
  667.        
  668.     INSERT INTO tt_in_summary_monthly_product
  669.     (session_id, date_year_month, tenant_id, ou_bu_id, ou_branch_id, ou_sub_bu_id,
  670.     doc_type_id, product_id, base_uom_id, qty, gl_curr_code, gl_amount, flg_amount)
  671.     SELECT A.session_id, vNextYearMonth, A.tenant_id, A.ou_bu_id, A.ou_branch_id, A.ou_sub_bu_id,
  672.         A.doc_type_id, A.product_id, A.base_uom_id, A.qty, A.gl_curr_code, A.gl_amount, A.flg_amount
  673.     FROM tt_in_summary_monthly_amount_remain A
  674.     WHERE A.session_id = pSessionId AND A.qty > 0;
  675.                
  676.     INSERT INTO in_summary_monthly_cogs
  677.     (date_year_month, tenant_id, ou_id, product_id,
  678.     qty_total, curr_code, amount_total, avg_price,
  679.     "version", create_datetime, create_user_id, update_datetime, update_user_id, remark)
  680.     SELECT A.date_year_month, A.tenant_id, A.ou_id, A.product_id,
  681.             A.qty_total, A.curr_code, A.amount_total, A.avg_price,
  682.             0, pDatetime, pUserId, pDatetime, pUserId, vGroupProductFG
  683.     FROM tt_in_summary_monthly_cogs A
  684.     WHERE A.session_id = pSessionId;
  685.        
  686.     INSERT INTO in_summary_monthly_amount
  687.     (date_year_month, tenant_id, ou_bu_id, ou_branch_id, ou_sub_bu_id,
  688.     doc_type_id, product_id, base_uom_id, qty,
  689.     gl_curr_code, gl_amount, flg_amount,
  690.     "version", create_datetime, create_user_id, update_datetime, update_user_id, remark)
  691.     SELECT A.date_year_month, A.tenant_id, A.ou_bu_id, A.ou_branch_id, A.ou_sub_bu_id,
  692.         A.doc_type_id, A.product_id, A.base_uom_id, A.qty,
  693.         A.gl_curr_code, A.gl_amount, A.flg_amount,
  694.         0, pDatetime, pUserId, pDatetime, pUserId, vGroupProductFG
  695.     FROM tt_in_summary_monthly_product A
  696.     WHERE A.session_id = pSessionId AND
  697.             A.date_year_month = pYearMonth AND
  698.             A.doc_type_id NOT IN (vDocTypeAwal, 111);
  699.  
  700.     INSERT INTO in_summary_monthly_amount
  701.     (date_year_month, tenant_id, ou_bu_id, ou_branch_id, ou_sub_bu_id,
  702.     doc_type_id, product_id, base_uom_id, qty,
  703.     gl_curr_code, gl_amount, flg_amount,
  704.     "version", create_datetime, create_user_id, update_datetime, update_user_id, remark)
  705.     SELECT A.date_year_month, A.tenant_id, A.ou_bu_id, A.ou_branch_id, A.ou_sub_bu_id,
  706.         A.doc_type_id, A.product_id, A.base_uom_id, A.qty,
  707.         A.gl_curr_code, A.gl_amount, A.flg_amount,
  708.         0, pDatetime, pUserId, pDatetime, pUserId, vGroupProductFG
  709.     FROM tt_in_summary_monthly_product A
  710.     WHERE A.session_id = pSessionId AND
  711.         A.date_year_month = vNextYearMonth;
  712.        
  713.     DELETE FROM tt_in_doc_product_price WHERE session_id = pSessionId;
  714.    
  715.     DELETE FROM tt_in_add_product_unamount WHERE session_id = pSessionId;
  716.    
  717.     DELETE FROM tt_in_product_base_price WHERE session_id = pSessionId;
  718.    
  719.     DELETE FROM tt_in_summary_monthly_product WHERE session_id = pSessionId;
  720.    
  721.     DELETE FROM tt_in_summary_monthly_cogs WHERE session_id = pSessionId;
  722.    
  723.     DELETE FROM tt_in_summary_monthly_amount_remain WHERE session_id = pSessionId;
  724.    
  725.     DELETE FROM tt_in_doc_production_product_price WHERE session_id = pSessionId;
  726.  END;
  727. $BODY$
  728.   LANGUAGE plpgsql VOLATILE
  729.   COST 100;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement