widana

f_upload_coa

Jan 27th, 2017
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. CREATE OR REPLACE FUNCTION f_upload_coa(bigint)
  2.   RETURNS integer AS
  3. $BODY$
  4. DECLARE
  5.     pUlHeaderId             ALIAS FOR $1;
  6.  
  7.     vCount                  bigint;
  8.     vStatusOk               character varying := 'OK';
  9.     vStatusFail             character varying := 'FAIL';
  10.     vStatusX                character varying := 'X';
  11.     vEmpty                  character varying := '';
  12.     vTypeData               character varying := 'coa';
  13.     vDateTo                 character varying := '22991231';
  14.     vModeLogAdd             character varying := 'A';
  15.     vModeLogUpdate          character varying := 'U';
  16.     vComboIdCoaType         character varying := 'COATYPE';
  17.     vNullLongValue          bigint := -99;
  18.    
  19.     vCurrentDateTime        character varying;
  20.     vTenantId               bigint;
  21.     vCurrentDate            character varying;
  22.     vSessionId              character varying;
  23.    
  24. BEGIN
  25.     SELECT f_datetime((extract(epoch from now())*1000)::bigint) INTO vCurrentDateTime;
  26.     SELECT to_char(CURRENT_DATE, 'YYYYMMDD') INTO vCurrentDate;
  27.     SELECT generate_session_id() INTO vSessionId;
  28.     SELECT tenant_id INTO vTenantId FROM ul_header WHERE ul_header_id = pUlHeaderId;
  29.  
  30.     -- update tenant di table ul coa
  31.     UPDATE ul_coa
  32.         SET tenant_id = vTenantId
  33.     WHERE ul_header_id = pUlHeaderId;
  34.  
  35.     UPDATE ul_coa Z
  36.         SET status = vStatusX , message = Z.message || 'Type Coa tidak terdaftar, '
  37.     FROM ul_coa A
  38.     LEFT JOIN t_combo_value B ON A.type_coa_code = B.code AND B.combo_id = vComboIdCoaType
  39.     WHERE A.ul_header_id = pUlHeaderId
  40.         AND A.ul_coa_id = Z.ul_coa_id
  41.         AND A.status <> vStatusFail
  42.         AND B.code IS NULL;
  43.        
  44.     -- Sign coa code harus terdafar di table master
  45.     UPDATE ul_coa Z
  46.         SET status = vStatusX , message = Z.message || 'Sign Coa tidak terdaftar, '
  47.     FROM ul_coa A
  48.     LEFT JOIN t_combo_value B ON A.sign_coa = B.code AND B.combo_id = vComboIdCoaType
  49.     WHERE A.ul_header_id = pUlHeaderId
  50.         AND A.ul_coa_id = Z.ul_coa_id
  51.         AND A.status <> vStatusFail
  52.         AND B.code IS NULL;
  53.  
  54.     -- validasi kode group coa harus terdaftar di table master
  55.     UPDATE ul_coa Z
  56.         SET status = vStatusX , message = Z.message || 'Kode Group Coa tidak terdaftar,  '
  57.     FROM ul_coa A
  58.     LEFT JOIN m_group_coa B ON A.group_coa_code = B.group_coa_code AND A.tenant_id = B.tenant_id
  59.     WHERE A.ul_header_id = pUlHeaderId
  60.         AND A.ul_header_id = Z.ul_header_id
  61.         AND A.ul_coa_id = Z.ul_coa_id
  62.         AND A.status <> vStatusFail
  63.         AND B.group_coa_code IS NULL;
  64.     /*
  65.      * TODO menambahkan valdiasi dupikasi.
  66.      */
  67.     WITH duplicate AS (
  68.         SELECT tenant_id,main_acc,sub_acc,COUNT(main_acc)
  69.         FROM ul_coa
  70.         WHERE ul_header_id = pUlHeaderId
  71.         GROUP BY tenant_id,main_acc,sub_acc
  72.         HAVING COUNT(main_acc) > 1
  73.         )
  74.     UPDATE ul_coa AS Z
  75.         SET status = vStatusX, message = Z.message || 'Coa yang diinput tidak boleh duplikat, '
  76.     FROM ul_coa A
  77.     INNER JOIN duplicate B
  78.         ON A.tenant_id = B.tenant_id AND A.main_acc = B.main_acc AND A.sub_acc = B.sub_acc
  79.     WHERE A.ul_header_id = pUlHeaderId
  80.         AND A.status <> vStatusFail
  81.         AND A.ul_coa_id = Z.ul_coa_id;
  82.  
  83.     /*
  84.      * TODO: Menambahkan validasi
  85.      */
  86.        
  87.     UPDATE ul_coa Z
  88.         SET status = vStatusX, message = Z.message || 'Type Coa ' || A.type_coa_code || ' tidak terdaftar di Group Coa Code ' || A.group_coa_code || ', '
  89.     FROM ul_coa A
  90.     LEFT JOIN m_group_coa B ON A.tenant_id = B.tenant_id
  91.         AND A.group_coa_code = B.group_coa_code
  92.         AND A.type_coa_code = B.type_coa
  93.     WHERE A.ul_header_id = pUlHeaderId
  94.         AND A.status <> vStatusFail
  95.         AND A.ul_coa_id = Z.ul_coa_id
  96.         AND B.group_coa_code IS NULL;  
  97.  
  98.     --Set Status X menjadi FAIL
  99.     UPDATE ul_coa
  100.         SET status = vStatusFail
  101.     WHERE status = vStatusX
  102.     AND ul_header_id = pUlHeaderId;
  103.  
  104.     --Set Status '' menjadi OK
  105.     UPDATE ul_coa
  106.         SET status = vStatusOk
  107.     WHERE status <> vStatusFail
  108.     AND ul_header_id = pUlHeaderId;
  109.        
  110.     INSERT INTO m_coa(
  111.             coa_id, tenant_id, main_acc, sub_acc, group_coa_id, coa_desc,
  112.             sign_coa, create_datetime, create_user_id, update_datetime, update_user_id,
  113.             version, active, active_datetime, non_active_datetime)
  114.     SELECT nextval('coa_seq') AS coa_id,A.tenant_id,A.main_acc,A.sub_acc,B.group_coa_id,A.coa_desc,
  115.         A.sign_coa,vCurrentDateTime AS create_datetime,C.user_id AS create_user_id,vCurrentDateTime AS update_datetime,C.user_id AS update_user_id,
  116.         0 AS version,'Y' AS active,vCurrentDateTime AS active_datetime,'' AS non_active_datetime
  117.     FROM ul_coa A
  118.     INNER JOIN m_group_coa B ON A.group_coa_code = B.group_coa_code AND A.tenant_id = B.tenant_id
  119.     INNER JOIN ul_header C ON A.ul_header_id = C.ul_header_id
  120.     WHERE A.status <> vStatusFail
  121.     AND A.ul_header_id = pUlHeaderId
  122.     AND NOT EXISTS (SELECT 1
  123.             FROM m_coa Z
  124.             WHERE A.tenant_id = Z.tenant_id
  125.             AND A.main_acc = Z.main_acc
  126.             AND A.sub_acc = Z.sub_acc);
  127.    
  128.     SELECT COUNT(1) INTO vCount
  129.     FROM ul_coa
  130.     WHERE status = vStatusFail AND ul_header_id = pUlHeaderId;
  131.    
  132.     RETURN vCount;
  133.  
  134. END;
  135. $BODY$
  136.   LANGUAGE plpgsql VOLATILE
  137.   COST 100
  138. /
Advertisement
Add Comment
Please, Sign In to add comment