Advertisement
tercnem

in_process_costing_raw_materials.sql

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