Advertisement
Kwards

Untitled

Jan 24th, 2018
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. CREATE OR REPLACE FUNCTION sl_confirm_group_arisan(bigint, bigint,character varying)
  2.   RETURNS integer AS
  3. $BODY$
  4. DECLARE
  5.      pGroupArisanId         ALIAS FOR $1;
  6.      pUserId                ALIAS FOR $2;
  7.      pDatetime              ALIAS FOR $3;
  8.      
  9.      vStatusArisanRelease   character varying;
  10.      vNullValue             bigint;
  11.      vSessionId             character varying;
  12. BEGIN
  13.    
  14.     vStatusArisanRelease :='R';
  15.     vNullValue:=-99;
  16.    
  17.    
  18.     SELECT f_make_uid() INTO vSessionId;
  19.  
  20.     /*
  21.         1. update group, statusnya
  22.         2. generate schedule balance
  23.      */
  24.    
  25.     UPDATE sl_group_arisan
  26.     SET status_arisan = vStatusArisanRelease,
  27.         update_datetime = pDatetime,
  28.         update_user_id =pUserId
  29.     WHERE group_arisan_id =pGroupArisanId;
  30.    
  31.     -- untuk generate order dari pemenang
  32.     INSERT INTO tt_temp_order_schedule_arisan(session,group_arisan_id,group_arisan_member_id,rnd)
  33.     SELECT vSessionId,group_arisan_id,group_arisan_member_id,(floor(random() * (99+1))::int) as rnd
  34.     FROM sl_group_arisan_member
  35.     WHERE group_arisan_id = pGroupArisanId
  36.     AND ketua_arisan_id =vNullValue;
  37.    
  38.     INSERT INTO tt_temp_order_schedule_arisan(session_id,group_arisan_id,group_arisan_member_id,rnd)
  39.     SELECT vSessionId,group_arisan_id,group_arisan_member_id,1000::int as rnd
  40.     FROM sl_group_arisan_member
  41.     WHERE group_arisan_id = pGroupArisanId
  42.     AND ketua_arisan_id <>vNullValue;
  43.  
  44.     --insert data dasar untuk schedule 
  45.     WITH raw AS(
  46.         SELECT  A.group_arisan_id,C.wallet_client_id,C.member_id AS ketua_member_id,
  47.             A.group_arisan_member_id AS winner_group_arisan_member_id,
  48.             A.group_arisan_member_name AS winner_name,
  49.             A.group_arisan_member_phone AS winner_phone,
  50.             vNo AS flg_input_member_code,
  51.             vNo AS flg_is_member_or_not,
  52.             '' AS member_code,
  53.             '' AS payment_due_date,
  54.             vNo AS payment_status,
  55.             vNo AS shipment_status,
  56.             0 AS payment_amount,
  57.             B.periode_arisan_code ,
  58.             (ROW_NUMBER() OVER (PARTITION BY A.group_arisan_id ORDER BY D.rnd) -1)AS line_no,
  59.             B.first_shake_date,
  60.             vNo AS shake_status
  61.         FROM sl_group_arisan_member A
  62.         JOIN sl_group_arisan B ON A.group_arisan_id =B.group_arisan_id
  63.         JOIN mlm_ketua_arisan C ON C.ketua_arisan_id =B.ketua_arisan_id
  64.         JOIN tt_temp_order_schedule_arisan D ON D.group_arisan_member_Id =A.group_arisan_member_id AND D.session_id =vSessionId
  65.         WHERE A.group_arisan_id =pGroupArisanId
  66.     )
  67.     INSERT INTO sl_group_arisan_balance_schedule(
  68.         group_arisan_id,wallet_client_id,ketua_member_id,line_no,shake_date,shake_status,
  69.         winner_group_arisan_member_id,winner_name,winner_phone,flg_input_member_code,
  70.         flg_is_member_or_not,member_code,payment_due_date,payment_date,payment_status,shipment_status,
  71.         payment_status,create_datetime,create_user_id,update_datetime,update_user_id,version
  72.     )
  73.     SELECT group_arisan_id,wallet_client_id,ketua_member_id,line_no+1 AS line_no,
  74.             CASE WHEN periode_arisan_code ='1WEEK' THEN
  75.             to_char(to_timestamp(first_shake_date,'YYYYMMDD')+ line_no*(INTERVAL '7 Day'),'YYYYMMDD')
  76.               WHEN periode_arisan_code = '2WEEK' THEN  
  77.             to_char(to_timestamp(first_shake_date,'YYYYMMDD')+ line_no*(INTERVAL '14 Day'),'YYYYMMDD')
  78.               WHEN periode_arisan_code = '1MONTH' THEN
  79.             to_char(to_timestamp(first_shake_date,'YYYYMMDD')+ line_no*(INTERVAL '1 month'),'YYYYMMDD')
  80.             END AS shake_date,
  81.          shake_status,winner_group_arisan_member_id,winner_name,winner_phone,flg_input_member_code,
  82.          flg_is_member_or_not,member_code,payment_due_date,' ' AS payment_date,payment_status,shipment_status,
  83.          payment_amount,pDatetime,pUserId,pDatetime,pUserId,0
  84.     FROM raw;
  85.    
  86.     -- update payment_due_date, shake_date + 1
  87.     UPDATE sl_group_arisan_balance_schedule
  88.     SET payment_due_date = to_char(to_timestamp(shake_date,'YYYYMMDD') + INTERVALS '1 Day','YYYYMMDD')
  89.     WHERE group_arisan_id =pGroupArisanId;
  90.    
  91.     SELECT member_count INTO vMemberCount
  92.     FROM sl_group_arisan WHERE group_arisan_id =pGroupArisanId;
  93.    
  94.     SELECT SUM(total_catalog_amount) INTO vTotalAmount
  95.     FROM sl_group_arisan_member WHERE group_arisan_id =pGroupArisanId;
  96.    
  97.     -- update payment amount
  98.     UPDATE sl_group_arisan_balance_schedule
  99.     SET payment_amount = TRUNC(vTotalAmount/vMemberCount,0)
  100.     WHERE group_arisan_id =pGroupArisanId
  101.     AND line_no < vMemberCount;
  102.    
  103.     SELECT SUM(payment_amount) INTO vTotalScheduleAmount
  104.     FROM sl_group_arisan_balance_schedule WHERE group_arisan_id =pGroupArisanId;
  105.    
  106.     UPDATE sl_group_arisan_balance_schedule
  107.     SET payment_amount = vTotalAmount - vTotalScheduleAmount
  108.     WHERE group_arisan_id =pGroupArisanId
  109.     AND payment_amount = 0;
  110.    
  111.     -- insert log
  112.     INSERT INTO sl_log_group_arisan_balance_schedule(
  113.     group_arisan_schedule_balance_id,group_arisan_id,wallet_client_id,ketua_member_id,line_no,shake_date,shake_status,
  114.     winner_group_arisan_member_id,winner_name,winner_phone,flg_input_member_code,flg_is_member_or_not,member_code,payment_due_date,
  115.     payment_date,payment_status,payment_amount,shipment_status,create_datetime,create_user_id,update_datetime,update_user_id,version
  116.     )
  117.     SELECT group_arisan_schedule_balance_id,group_arisan_id,wallet_client_id,ketua_member_id,line_no,shake_date,shake_status,
  118.     winner_group_arisan_member_id,winner_name,winner_phone,flg_input_member_code,flg_is_member_or_not,member_code,payment_due_date,
  119.     payment_date,payment_status,payment_amount,shipment_status,create_datetime,create_user_id,update_datetime,update_user_id,version
  120.     FROM sl_group_arisan_balance_schedule
  121.     WHERE group_arisan_id = pGroupArisanId;
  122.    
  123.    
  124.    
  125.     return 0;
  126. END;
  127. $BODY$
  128. LANGUAGE plpgsql VOLATILE
  129. COST 100;
  130. /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement