Advertisement
Guest User

Untitled

a guest
Nov 21st, 2017
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. CREATE OR REPLACE FUNCTION f_count_daily_nbp_nbg(bigint, bigint, character varying, character varying)
  2.   RETURNS void AS
  3. $BODY$
  4. DECLARE
  5.     pTenantId               alias for $1;
  6.     pOuId                   alias for $2;
  7.     pYearMonth              alias for $3;
  8.     pSessionId              alias for $4;
  9.     vCurrentDateTime        character varying;
  10.    
  11.     vDbName                 text;
  12.     vDbUser                 text;
  13.     vDbPassword             text;
  14.     vDbPort                 text;
  15.     vDbHostAddr             text;
  16.    
  17. BEGIN
  18.  
  19.     RAISE NOTICE 'Start counting... %', clock_timestamp();
  20.  
  21. SELECT f_get_value_system_config_by_param_code(pTenantId, 'PALOMAWEB.DB.NAME')::text INTO vDbName;
  22. SELECT f_get_value_system_config_by_param_code(pTenantId, 'PALOMAWEB.DB.USER')::text INTO vDbUser;
  23. SELECT f_get_value_system_config_by_param_code(pTenantId, 'PALOMAWEB.DB.PASSWORD')::text INTO vDbPassword;
  24. SELECT f_get_value_system_config_by_param_code(pTenantId, 'PALOMAWEB.DB.PORT')::text INTO vDbPort;
  25. SELECT f_get_value_system_config_by_param_code(pTenantId, 'PALOMAWEB.DB.HOSTADDR')::text INTO vDbHostAddr;
  26.  
  27. vCurrentDateTime := to_char(current_timestamp, 'YYYYMMDDHH24MISS');
  28.    
  29. -- Function ini akan menghitung jumlah nbp dan nbg setiap dari bulan terakhir process hingga hari ini.
  30. /*
  31. vCurrentPeriod := to_char(current_timestamp, 'YYYYMM');
  32.  
  33. -- mendapatkan last processed period
  34. SELECT date_year_month INTO vLastProcessedPeriod
  35. FROM m_admin_process_ledger
  36. WHERE tenant_id = pTenantId
  37. AND ou_id = pOuId
  38. AND ledger_code='MLM'
  39. AND status_ledger = '1'
  40. ORDER BY date_year_month DESC
  41. LIMIT 1;
  42. */
  43.  
  44. /*
  45.  * Modified By Tommy Ky 9 Maret 2017
  46.  *  - dblink tidak langsung menghitung nilai nbp, tetapi ditampung dulu di table temporer tt_mlm_member_sales_detail
  47.  *  - menambahkan perhitungan untuk bnp (nbp * product_value per item) dan bng (total bnp)
  48.  */
  49.  
  50. /*
  51.  *  - dblink tidak langsung menghitung nilai nbp, tetapi ditampung dulu di table temporer tt_mlm_member_sales_detail
  52. -- lakukan perhitungan member yang sudah belanja dan masukkan kedalam tabel temporary tt_current_nbp;
  53. -- 'dbname=palomaweb port=5432 hostaddr=192.168.0.225 user=sts password=Awesome123!'::text,
  54.     INSERT INTO tt_current_nbp(member_id, nbp, session_id)
  55.     SELECT member_id,nbp_member,session_id
  56.     FROM dblink(
  57.         'dbname='||vDbName||' port='||vDbPort||' hostaddr='||vDbHostAddr||' user='||vDbUser||' password='||vDbPassword||''::text,
  58.         'SELECT member_id, SUM(nett_amount) AS nbp_member, '''||pSessionId||''' AS session_id
  59.         FROM mlm_member_sales A
  60.         INNER JOIN mlm_member_sales_detail B ON A.id = B.doc_id
  61.         WHERE SUBSTRING(doc_date,0,7) = '''||pYearMonth||'''
  62.         AND flag_cancel = ''N''
  63.         GROUP BY member_id
  64.         ORDER BY member_id ASC'
  65.         ) AS A
  66.         (
  67.             member_id   bigint,
  68.             nbp_member  numeric,
  69.             session_id  character varying
  70.         );
  71. */
  72. RAISE NOTICE 'Retrieve data from Web DS... %', clock_timestamp();
  73.  
  74.     INSERT INTO tt_mlm_member_sales_detail
  75.         (session_id, member_sales_detail_id, member_sales_id, product_catalog_id, qty, catalog_price, percent_discount_member, percent_discount_promo,
  76.         amount_discount_member, amount_discount_promo, nett_price, nett_amount, flg_cancel, create_user_id, create_datetime, update_user_id,
  77.         update_datetime, version, product_value, member_id)
  78.     SELECT A.session_id, A.id, A.doc_id, A.product_catalog_id, A.qty, A.catalog_price, A.percent_discount_member, A.percent_discount_promo,
  79.         A.amount_discount_member, A.amount_discount_promo, A.nett_price, A.nett_amount, A.flag_cancel, A.create_user_id, A.create_datetime, A.update_user_id,
  80.         A.update_datetime, A.version, D.product_value, A.member_id
  81.     FROM dblink(
  82.         'dbname='||vDbName||' port='||vDbPort||' hostaddr='||vDbHostAddr||' user='||vDbUser||' password='||vDbPassword||''::text,
  83.         'SELECT '''||pSessionId||''' AS session_id, B.id, doc_id, product_catalog_id, qty, catalog_price, percent_discount_member, percent_discount_promo,
  84.         amount_discount_member, amount_discount_promo, nett_price, nett_amount, flag_cancel, B.create_user_id, B.create_datetime, B.update_user_id,
  85.         B.update_datetime, B.version, A.member_id
  86.         FROM mlm_member_sales A
  87.         INNER JOIN mlm_member_sales_detail B ON A.id = B.doc_id
  88.         WHERE SUBSTRING(doc_date,0,7) = '''||pYearMonth||'''
  89.         AND flag_cancel = ''N'''
  90.         ) AS A
  91.         (
  92.             session_id              character varying(100),
  93.             id                      bigint,
  94.             doc_id                  bigint,
  95.             product_catalog_id      bigint,
  96.             qty                     bigint,
  97.             catalog_price           numeric(15,2),
  98.             percent_discount_member numeric(15,2),
  99.             percent_discount_promo  numeric(15,2),
  100.             amount_discount_member  numeric(15,2),
  101.             amount_discount_promo   numeric(15,2),
  102.             nett_price              numeric(15,2),
  103.             nett_amount             numeric(15,2),
  104.             flag_cancel             character varying(1),
  105.             create_user_id          bigint,
  106.             create_datetime         character varying(14),
  107.             update_user_id          bigint,
  108.             update_datetime         character varying(14),
  109.             version                 bigint,
  110.             member_id               bigint
  111.         )
  112.     INNER JOIN m_product_catalog B ON A.product_catalog_id = B.product_catalog_id
  113.     INNER JOIN m_product_custom C ON B.product_id = C.product_id
  114.     INNER JOIN m_style_product D ON C.style_product = D.style_product AND B.catalog_id = D.catalog_id
  115.     GROUP BY A.session_id, A.id, A.doc_id, A.product_catalog_id, A.qty, A.catalog_price, A.percent_discount_member, A.percent_discount_promo,
  116.     A.amount_discount_member, A.amount_discount_promo, A.nett_price, A.nett_amount, A.flag_cancel, A.create_user_id, A.create_datetime, A.update_user_id,
  117.     A.update_datetime, A.version, D.product_value, A.member_id
  118.     ORDER BY A.doc_id, A.id;
  119.    
  120.     -- lakukan perhitungan member yang sudah belanja dan masukkan kedalam tabel temporary tt_current_nbp;
  121.     RAISE NOTICE 'Insert into Current NBP... %', clock_timestamp();
  122.  
  123.     INSERT INTO tt_current_nbp(member_id, nbp, session_id, bnp)
  124.     SELECT member_id, SUM(nett_amount) AS nbp_member, session_id, SUM(nett_amount * product_value / 100) AS bnp
  125.     FROM tt_mlm_member_sales_detail
  126.     GROUP BY member_id, session_id;
  127.    
  128.     -- Ambil data Penjualan Pulsa
  129.     INSERT INTO tt_current_nbp(member_id, nbp, session_id, bnp)
  130.     SELECT B.member_id, SUM(A.item_amount), pSessionId, SUM(A.item_amount * A.pv_percent / 100) AS bnp
  131.     FROM mlm_trx_penjualan_pulsa A
  132.     INNER JOIN mlm_member B ON A.member_code = B.member_code
  133.     WHERE SUBSTRING(A.create_datetime,1,6) = pYearMonth
  134.     GROUP BY B.member_id;
  135.    
  136.     ANALYZE tt_current_nbp;
  137.    
  138. -- lakukan perhitungan nbg semua member dan masukkan kedalam tabel temporary tt_current_nbg;
  139.    
  140.     INSERT INTO tt_current_nbg(member_id,nbg,session_id, bng)
  141.     SELECT B.upline_id as member_id, COALESCE(SUM(nbp),0) AS nbg_member, pSessionId AS session_id, COALESCE(SUM(bnp),0)
  142.     FROM tt_current_nbp A
  143.     RIGHT JOIN mlm_member_tree B ON A.member_id = B.member_id
  144.       WHERE A.session_id = pSessionId
  145.     GROUP BY B.upline_id;
  146.    
  147.     ANALYZE tt_current_nbg;
  148.    
  149. -- insert ke tabel mlm_member_daily_nbp_nbg
  150.     RAISE NOTICE 'Re-Insert into mlm_member_daily_nbp_nbg... %', clock_timestamp();
  151.    
  152.     DELETE FROM mlm_member_daily_nbp_nbg WHERE period = pYearMonth;
  153.    
  154.     INSERT INTO mlm_member_daily_nbp_nbg (tenant_id, ou_id,member_id,period,nbp,nbg,last_process_date, bnp, bng)
  155.     SELECT pTenantId AS tenant_id, pOuId AS ou_id, A.member_id,
  156.         pYearMonth as period, COALESCE(nbp,0) AS nbp,
  157.         nbg, vCurrentDateTime AS last_process_date, COALESCE(bnp,0) AS bnp, bng
  158.     FROM tt_current_nbg A
  159.     LEFT JOIN tt_current_nbp B ON A.member_id = B.member_id AND B.session_id = pSessionId
  160.     WHERE
  161.        A.session_id = pSessionId;
  162.  
  163.     DELETE FROM tt_mlm_member_sales_detail WHERE session_id = pSessionId;
  164.     DELETE FROM tt_current_nbp where session_id = pSessionId;
  165.     DELETE FROM tt_current_nbg where session_id = pSessionId;
  166. END;
  167. $BODY$
  168.   LANGUAGE plpgsql VOLATILE
  169.   COST 100;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement