Professional Documents
Culture Documents
PKG Form Drop
PKG Form Drop
PKG Form Drop
pkg_form_drop IS
-- Author : DUCDV
-- Created : 5/25/2021 4:29:34 PM
-- Purpose : Luu to?n b? c?c function v? Procedure c?a nghi?p v? Form-Drop
/*
??y v?o form-drop d? job s? t? d?ng ph?n b? task theo fd_approve_matrix:
T?t c? c?c lu?ng nghi?p v? khi mu?n d?y sang form-drop th? th?c hi?n g?i th? t?
c n?y
*/
/*APPROVE*/
/*VBA_EBANK_2019_THOP-22133*/
/*PROCEDURE approve_check(sessioninfo_username VARCHAR2,
pv_auto_id NUMBER,
pv_remark VARCHAR2,
cur OUT pkg_data.cursor);*/
/*PROCEDURE approve(sessioninfo_username VARCHAR2,
pv_auto_id NUMBER,
pv_remark VARCHAR2,
pv_last_approve OUT VARCHAR2);*/
PROCEDURE approve_check(sessioninfo_username VARCHAR2,
pv_auto_id NUMBER,
pv_remark VARCHAR2,
pv_ASSIGNED_TO varchar2,
cur OUT pkg_data.cursor);
PROCEDURE approve(sessioninfo_username VARCHAR2,
pv_auto_id NUMBER,
pv_remark VARCHAR2,
pv_last_approve OUT VARCHAR2,
pv_ASSIGNED_TO varchar2 default(NULL));
/*END*/
/*ACCEPT*/
PROCEDURE chk_status_accept(pv_approve_status VARCHAR2);
/*VBA_EBANK_2019_THOP-21678 */
/*PROCEDURE accept(sessioninfo_username VARCHAR2,pv_auto_id NUMBER);*/
PROCEDURE accept(sessioninfo_username VARCHAR2,
pv_auto_id NUMBER
,cur OUT pkg_data.cursor);
/*END*/
/*REJECT*/
PROCEDURE reject_check(pv_auto_id NUMBER,
pv_remark VARCHAR2, -- VBA_EBANK_2019_THOP-37036
BPM
cur OUT pkg_data.cursor);
--VBA_EBANK_2019_THOP-37036 BPM STRAT
PROCEDURE assignee_check (pv_auto_id NUMBER,
pv_assigned_to VARCHAR2,
pv_remark VARCHAR2,
cur OUT pkg_data.cursor);
--VBA_EBANK_2019_THOP-37036 BPM END
PROCEDURE accept_check(pv_auto_id NUMBER,
cur OUT pkg_data.cursor);
/*VBA_EBANK_2019_THOP-24005*/
/*PROCEDURE reject(pv_auto_id NUMBER,
pv_remark VARCHAR2);*/
PROCEDURE reject(pv_auto_id NUMBER,
pv_remark VARCHAR2,
sessioninfo_username VARCHAR2);
/*END VBA_EBANK_2019_THOP-24005*/
/*Ph?n b? task d?n ngu?i d?ng BO, th? t?c n?y du?c call t? job c?a db v?i t?n xu?
t 1 ph?t g?i m?t l?n*/
PROCEDURE auto_assign_task(pv_channel_type VARCHAR2,
pv_menu_code VARCHAR2,
pv_approve_status VARCHAR2 DEFAULT 'NEW',
pv_is_processing VARCHAR2 DEFAULT '0',
pv_customer_type VARCHAR2,
pv_branch_level VARCHAR2);
/*VBA_EBANK_2019_THOP-29462 DATND15 07112022*/
--PROCEDURE auto_assign_task_all;
PROCEDURE auto_assign_task_all(cur OUT pkg_data.cursor);
/*END VBA_EBANK_2019_THOP-29462 DATND15 07112022*/
/*Ph?n b? l?i task khi task h?t h?n, th? t?c n?y du?c call t? job c?a db v?i t?n
xu?t x?c d?nh*/
PROCEDURE re_assign_task(pv_channel_type VARCHAR2,
pv_menu_code VARCHAR2,
pv_customer_type VARCHAR2,
pv_branch_level VARCHAR2,
pv_user_type VARCHAR2);
/*Get transaction ID */
FUNCTION fn_get_transid(table_name IN VARCHAR2,
key_field IN VARCHAR2) RETURN VARCHAR2;
--------------------------------------------------- put_to_fd
------------------------------------------------
PROCEDURE put_to_fd(pv_customer_id VARCHAR2,
pv_customer_type VARCHAR2, --CU,RU
pv_channel_type VARCHAR2,
pv_created_by VARCHAR2,
pv_key_field_value VARCHAR2,
pv_menu_code VARCHAR2,
pv_mode VARCHAR2,
pv_application_date DATE,
pv_remark VARCHAR2) IS
v_branch_code VARCHAR2(100);
v_branch_level CHAR(2);
v_identifier_key VARCHAR2(100) := '';
v_corporate_id VARCHAR2(15);
v_customer_name VARCHAR2(200);
v_form_drop_type VARCHAR2(3);
v_ho_received VARCHAR2(100);
v_l1_received VARCHAR2(100);
v_l2_received VARCHAR2(100);
v_time_expire_waiting DATE;
v_minute NUMBER;
BEGIN
-- gd_customer
BEGIN
SELECT a.servicing_branch,
b.branch_level,
a.corporate_id,
a.customer_name
INTO v_branch_code,
v_branch_level,
v_corporate_id,
v_customer_name
FROM gd_customer a
INNER JOIN gd_branch b
ON a.servicing_branch = b.branch_code
WHERE a.user_id = pv_created_by
AND a.customer_id = pv_customer_id
AND a.deleted = 'N'
AND b.deleted = 'N';
EXCEPTION
WHEN NO_DATA_FOUND THEN
RAISE e_no_data_customer;
WHEN TOO_MANY_ROWS THEN
RAISE e_too_many_customer;
END;
-- gd_form_drop_setup
BEGIN
SELECT form_drop_type,
ho_received,
l1_received,
l2_received
INTO v_form_drop_type,
v_ho_received,
v_l1_received,
v_l2_received
FROM gd_form_drop_setup
WHERE menu_code = pv_menu_code
AND customer_type = pv_customer_type
/* AND channel_code = pv_channel_type VBA_EBANK_2019_THOP-21285 */
AND status = 'A';
EXCEPTION
WHEN NO_DATA_FOUND THEN
RAISE e_no_data_fdr_setup;
WHEN TOO_MANY_ROWS THEN
RAISE e_too_many_fdr_setup;
END;
--time_expire_waiting by v_branch_level
IF v_branch_level = 'HO'
THEN
v_minute := 180;
ELSIF v_branch_level = 'L1'
THEN
v_minute := 180;
ELSE
v_minute := 180;
END IF;
proc_log_error('pkg_form_drop.put_to_fd',
'no_data_found pv_customer_id = ' || pv_customer_id ||
', pv_created_by = ' || pv_created_by,
NULL,
NULL);
ROLLBACK;
WHEN e_too_many_customer THEN
sp_throw_exception(6000, NULL);
proc_log_error('pkg_form_drop.put_to_fd',
'too_many_rows_customer pv_customer_id = ' ||
pv_customer_id || ', pv_created_by = ' ||
pv_created_by,
NULL,
NULL);
ROLLBACK;
WHEN e_no_data_fdr_setup THEN
sp_throw_exception(6000, NULL);
proc_log_error('pkg_form_drop.put_to_fd',
'e_no_data_fdr_setup pv_menu_code = ' || pv_menu_code ||
', pv_customer_type = ' || pv_customer_type ||
', pv_channel_type = ' || pv_channel_type,
NULL,
NULL);
ROLLBACK;
WHEN e_too_many_fdr_setup THEN
sp_throw_exception(6000, NULL);
proc_log_error('pkg_form_drop.put_to_fd',
'e_too_many_fdr_setup pv_menu_code = ' || pv_menu_code ||
', pv_customer_type = ' || pv_customer_type ||
', pv_channel_type = ' || pv_channel_type,
NULL,
NULL);
ROLLBACK;
WHEN OTHERS THEN
sp_throw_exception(6000, NULL);
proc_log_error('pkg_form_drop.put_to_fd', SQLERRM, SQLCODE, NULL);
ROLLBACK;
END;
--------------------------------------------------- approve_check
------------------------------------------------
/*VBA_EBANK_2019_THOP-22133*/
/*PROCEDURE approve_check(sessioninfo_username VARCHAR2,
pv_auto_id NUMBER,
pv_remark VARCHAR2,
cur OUT pkg_data.cursor) IS*/
PROCEDURE approve_check(sessioninfo_username VARCHAR2,
pv_auto_id NUMBER,
pv_remark VARCHAR2,
pv_ASSIGNED_TO varchar2,
cur OUT pkg_data.cursor) IS
/*END*/
v_last_approve VARCHAR2(2);
v_proc_approve VARCHAR2(200);
is_BPM varchar2(2); --VBA_EBANK_2019_THOP-37036 datnd15 BPM
is_user_id_form varchar2(10);--VBA_EBANK_2019_THOP-37036 datnd15 BPM
is_user_id varchar2(10);--VBA_EBANK_2019_THOP-37036 datnd15 BPM
is_user_name varchar2(100);--VBA_EBANK_2019_THOP-37036 datnd15 BPM
BEGIN
BEGIN
--VBA_EBANK_2019_THOP-37036 datnd15 BPM strat
is_BPM := fn_get_flag_BPM();
if is_BPM = 'N' then
SELECT t.USER_ID,t.USER_ASSIGNED
INTO is_user_id_form,is_user_name
FROM gd_form_drop_pending_tasks t
where t.auto_id=pv_auto_id;
update gd_form_drop_pending_tasks
set USER_ID=is_user_id
where auto_id = pv_auto_id;
end if;
-----------------------------------------------------Accept check
-------------------------------------------------------------------
PROCEDURE accept_check(pv_auto_id NUMBER,
cur OUT pkg_data.cursor) IS
v_proc_accept VARCHAR2(200);
is_BPM varchar2(2); --VBA_EBANK_2019_THOP-37036 BPM
BEGIN
--BEGIN
--VBA_EBANK_2019_THOP-37036 Datnd15 BPM strat
/* SELECT t.proc_accept
INTO v_proc_accept
FROM gd_fd_setup_module t
WHERE t.menu_code = (SELECT t.menu_code
FROM gd_form_drop_pending_tasks t
WHERE t.auto_id = pv_auto_id)
AND
t.menu_mode = (SELECT t.menu_mode
FROM gd_form_drop_pending_tasks t
WHERE t.auto_id = pv_auto_id);*/
--------------------------------------------------- reject_check
------------------------------------------------
PROCEDURE reject_check(pv_auto_id NUMBER,
pv_remark VARCHAR2, -- VBA_EBANK_2019_THOP-37036
BPM
cur OUT pkg_data.cursor) IS
v_proc_reject VARCHAR2(200);
is_BPM varchar2(2); -- VBA_EBANK_2019_THOP-37036 BPM
BEGIN
BEGIN
--------------------------------------------------- approve
------------------------------------------------
/*VBA_EBANK_2019_THOP-22133*/
/*PROCEDURE approve(sessioninfo_username VARCHAR2,
pv_auto_id NUMBER,
pv_remark VARCHAR2,
pv_last_approve OUT VARCHAR2) IS*/
PROCEDURE approve(sessioninfo_username VARCHAR2,
pv_auto_id NUMBER,
pv_remark VARCHAR2,
pv_last_approve OUT VARCHAR2,
pv_ASSIGNED_TO varchar2 default(NULL)) IS
/*END*/
v_count NUMBER;
v_fdr_param fdr_param_type;
v_user_task_tbl user_task_table_type := user_task_table_type();
v_username varchar2(100);
v_userid varchar2(100);
pt_rec gd_form_drop_pending_tasks%ROWTYPE;
tb_setup_rec gd_form_drop_setup%ROWTYPE;
tb_approve_rec gd_form_drop_approve%ROWTYPE;
v_number NUMBER;
v_status VARCHAR2(20);
v_check_maker NUMBER;
is_marker VARCHAR2(5);
v_to_email varchar2(50); --Lannq2_add jira:24416 20220718
/*VBA_EBANK_2019_THOP-26571 DATND15 20220817*/
v_target_branch varchar(5);
v_branch_code number;
/*VBA_EBANK_2019_THOP-26571 DATND15 20220817*/
BEGIN
BEGIN
/*
- Neu approve lan dau th? User n?y ph?i c? quy?n l? Maker ( chua c? b?n ghi
Approve trong pending_task)
- N?u d? Approve m?t l?n r?i th? User ph?i c? quy?n l? Checker
*/
SELECT COUNT(1)
INTO v_count
FROM gd_form_drop_pending_tasks_his
WHERE auto_id = pv_auto_id
AND approve_status IN ('4', '7');
IF v_count = 0
THEN
SELECT COUNT(1)
INTO v_check_maker
FROM users
WHERE INSTR(role, 'M') > 0
AND username = sessioninfo_username
AND status = 'A';
IF v_check_maker = 0
THEN
sp_throw_exception(1403430, NULL);
END IF;
is_marker := 'Y';
ELSE
/*VBA_EBANK_2019_THOP-23949 datnd15 20220624*/
SELECT *
INTO pt_rec
FROM gd_form_drop_pending_tasks
WHERE auto_id = pv_auto_id;
select count(1) into v_count from gd_parameter t where t.parameter_type =
'FORM_DROP' and t.parameter_code = pt_rec.menu_code and t.is_active = 'Y'
and (INSTR(t.channel_tenant_id, (pt_rec.channel_type||' - VN')) > 0);
IF v_count = 0 then
/*END VBA_EBANK_2019_THOP-23949 datnd15 20220624*/
SELECT COUNT(1)
INTO v_check_maker --1
FROM users
WHERE INSTR(role, 'A') > 0
AND username = sessioninfo_username
AND status = 'A';
IF v_check_maker = 0
THEN
sp_throw_exception(1503430, NULL);
END IF;
/*VBA_EBANK_2019_THOP-23949 datnd15 20220624*/
end if;
/*END VBA_EBANK_2019_THOP-23949 datnd15 20220624*/
END IF;
BEGIN
SELECT *
INTO pt_rec
FROM gd_form_drop_pending_tasks
WHERE auto_id = pv_auto_id;
EXCEPTION
WHEN NO_DATA_FOUND THEN
pt_rec := NULL;
proc_log_error('pkg_form_drop.approve',
'no_data_found id = ' || pv_auto_id,
NULL,
NULL);
END;
PROC_VALIDATE_SESSION(pt_rec,sessioninfo_username);/*VBA_EBANK_2019_THOP-
24005*/
IF v_check_maker > 0
AND is_marker = 'Y'
THEN
v_status := '4';
pt_rec.number_of_approval := 0; -- 0
pt_rec.sequence := 0; -- 0
ELSE
v_status := '7';
END IF;
---------------------------------------
BEGIN
SELECT *
INTO tb_setup_rec
FROM gd_form_drop_setup
WHERE menu_code = pt_rec.menu_code
AND customer_type = pt_rec.customer_type
/* AND channel_code = pt_rec.channel_type VBA_EBANK_2019_THOP-21285 */
AND status = 'A';
EXCEPTION
WHEN NO_DATA_FOUND THEN
tb_setup_rec := NULL;
proc_log_error('pkg_form_drop.approve',
'no_data_found : gd_form_drop_setup: menu_code = ' ||
pt_rec.menu_code ||
',customer_type:' || pt_rec.customer_type ||
',channel_code:' || pt_rec.channel_type,
NULL,
NULL);
END;
IF (v_count > 0 OR
(v_count = 0 AND
pt_rec.number_of_approval < tb_approve_rec.number_of_approval) OR
is_marker = 'Y')
THEN
pt_rec.approve_status := v_status;
pt_rec.time_processing := SYSDATE;
v_number := seq_gd_form_drop_pending_tasks_hist.NEXTVAL();
IF pt_rec.number_of_approval <
tb_approve_rec.number_of_approval
THEN
pt_rec.number_of_approval := pt_rec.number_of_approval + 1;
END IF;
END IF;
v_fdr_param := fdr_param_type.fnc_get_fdr_param(pt_rec.menu_code,
pt_rec.customer_type,
pt_rec.channel_type,
pt_rec.branch_level,
pt_rec.branch_code,
v_role_checker,
pt_rec.sequence,
pt_rec.number_of_approval);
-----------------------------------------------------------------------------------
--------------------------------------------------
pt_rec.send_time := SYSDATE;
pt_rec.time_expire_waiting := SYSDATE +
(1 / (60 * 24) *
v_fdr_param.sla_waiting_apr);
/*VBA_EBANK_2019_THOP-18628 by DATND15*/
/*
IF v_fdr_param.user_task.user_id <> pt_rec.user_id
AND v_fdr_param.user_task.user_id IS NOT NULL
THEN
pt_rec.user_assigned := v_fdr_param.user_task.user_name;
pt_rec.user_id := v_fdr_param.user_task.user_id;
pt_rec.approve_status := '5';
pv_last_approve := 'N';
UPDATE gd_form_drop_pending_tasks e
SET row = pt_rec
WHERE e.auto_id = pt_rec.auto_id;
ELSE
sp_throw_exception(2308, '');
END IF;
*/
------------------------------------------------
/*begin VBA_EBANK_2019_THOP-22133*/
/*VBA_EBANK_2019_THOP-23949 20220624 datnd15*/
/*IF tb_setup_rec.handler_approve = 'Y' and pv_ASSIGNED_TO is not null THEN
v_userid := pv_ASSIGNED_TO;
select t.username into v_username from users t where t.user_id =
pv_ASSIGNED_TO;*/
select count(1) into v_count from gd_parameter t where t.parameter_type
= 'FORM_DROP' and t.parameter_code = pt_rec.menu_code and t.is_active = 'Y'
and (INSTR(t.channel_tenant_id, (pt_rec.channel_type||' - VN')) > 0);
IF v_count > 0 then
IF pv_ASSIGNED_TO IS NOT NULL then
v_userid := pv_ASSIGNED_TO;
select t.username into v_username from users t where t.user_id =
pv_ASSIGNED_TO;
else
sp_throw_exception(1403432,null);
end if;
/*END - VBA_EBANK_2019_THOP-23949*/
ELSE
/*end VBA_EBANK_2019_THOP-22133*/
ELSE
BEGIN
v_user_task_tbl := v_fdr_param.tbl_user_task;
/*VBA_EBANK_2019_THOP-26571 DATND15 20220817*/
/*select f.user_name , f.user_id into v_username ,v_userid from
(select ROWNUM as rn,t.* from table(v_user_task_tbl) t
where t.user_id not in (select distinct e.user_id from
gd_form_drop_pending_tasks_his e where e.auto_id = pt_rec.auto_id) order by
t.total_task asc)
f where f.rn = 1;*/
select t.target_branch into v_target_branch from
gd_form_drop_approve t where t.form_drop_setup_id = tb_setup_rec.auto_id
and t.branch_level = pt_rec.branch_level and t.sequence =
pt_rec.sequence and t.deleted = 'N';
if v_target_branch = 'SB' then
v_branch_code := pt_rec.branch_code;
elsif v_target_branch = 'HO' then
select t.branch_code into v_branch_code from gd_branch t where
t.branch_level = 'HO' and t.deleted = 'N';
else
SELECT a.parent_code INTO v_branch_code FROM gd_branch a WHERE
a.branch_level = pt_rec.branch_level AND a.branch_code = pt_rec.branch_code AND
a.deleted = 'N';
end if;
ELSE
--ERROR 1
sp_throw_exception(2306, '');
END IF;
ELSE
--ERROR 2
sp_throw_exception(2307, '');
END IF;
EXCEPTION
WHEN OTHERS THEN
proc_log_error(p_target => 'FORM_DROP_BO',
p_message => 'approve - ERORR: ' ||
SQLCODE || ' - ' || SQLERRM || ' - ' ||
DBMS_UTILITY.format_error_backtrace,
p_sqlcode => SQLCODE,
p_msgid => NULL);
RAISE_APPLICATION_ERROR(SQLCODE, SQLCODE || ' - ' || SQLERRM);
END;
END;
--------------------------------------------------- UPDATE_LAST_APROVE
------------------------------------------
PROCEDURE update_last_aprove(pv_auto_id NUMBER,
pv_remark VARCHAR2,
pv_esb_data VARCHAR2) IS
v_number NUMBER;
v_count NUMBER;
v_check_maker NUMBER;
pt_rec gd_form_drop_pending_tasks%ROWTYPE;
tb_setup_rec gd_form_drop_setup%ROWTYPE;
tb_approve_rec gd_form_drop_approve%ROWTYPE;
v_to_email varchar2(50); --Lannq2_add jira:24416 20220707
BEGIN
BEGIN
BEGIN
SELECT *
INTO pt_rec
FROM gd_form_drop_pending_tasks
WHERE auto_id = pv_auto_id;
EXCEPTION
WHEN NO_DATA_FOUND THEN
pt_rec := NULL;
proc_log_error('pkg_form_drop.UPDATE_LAST_APROVE',
'no_data_found id = ' || pv_auto_id,
NULL,
NULL);
END;
----------------------------------------------------------------------
BEGIN
SELECT *
INTO tb_setup_rec
FROM gd_form_drop_setup
WHERE menu_code = pt_rec.menu_code
AND customer_type = pt_rec.customer_type
/* AND channel_code = pt_rec.channel_type VBA_EBANK_2019_THOP-21285 */
AND status = 'A';
EXCEPTION
WHEN NO_DATA_FOUND THEN
tb_setup_rec := NULL;
proc_log_error('pkg_form_drop.approve',
'no_data_found menu_code = ' || pt_rec.menu_code ||
',customer_type:' || pt_rec.customer_type ||
',channel_code:' || pt_rec.channel_type,
NULL,
NULL);
END;
------------------------------------------------------------------------
BEGIN
SELECT *
INTO tb_approve_rec
FROM gd_form_drop_approve
WHERE branch_level = pt_rec.branch_level -- HO
AND form_drop_setup_id = tb_setup_rec.auto_id --1403
AND sequence = pt_rec.sequence;
EXCEPTION
WHEN NO_DATA_FOUND THEN
tb_approve_rec := NULL;
proc_log_error('pkg_form_drop.approve',
'no_data_found branch_level = ' ||
pt_rec.branch_level || ',customer_type:' ||
tb_setup_rec.auto_id,
NULL,
NULL);
END;
IF v_count = 0
THEN
pt_rec.number_of_approval := 0; -- 0
pt_rec.sequence := 0; -- 0
END IF;
----- Insert his when last approve and susscessfully all roles approve
pt_rec.approve_status := '8';
pt_rec.is_processing := '2';
pt_rec.time_processing := SYSDATE;
v_number := seq_gd_form_drop_pending_tasks_hist.NEXTVAL();
---------------------------------------------------------------------- INSERT
WITH SUSSCESSFULL -------------------------------------------------------
pt_rec.sequence := 0;
UPDATE gd_form_drop_pending_tasks e
SET row = pt_rec
WHERE e.auto_id = pt_rec.auto_id;
-- Notice l?i cho ngu?i t?o task ? chi nh?nh bi?t kq ph? duy?t
--START Lannq2_sua jira:24416 20220714
BEGIN
Select nvl(email,'test@vba.fpt.vn') into v_to_email
From gd_users_maintenance
where user_id = pt_rec.created_by
and nvl(corporate_id,'1') = nvl(pt_rec.corporate_id,'1') --
Lannq2_sua jira:24416 20220718
and deleted = 'N';
EXCEPTION WHEN OTHERS THEN v_to_email := 'test@vba.fpt.vn';
END;
EXCEPTION
WHEN OTHERS THEN
proc_log_error(p_target => 'FORM_DROP_BO',
p_message => 'update_lasr_approve - ERORR: ' ||
SQLCODE || ' - ' || SQLERRM || ' - ' ||
DBMS_UTILITY.format_error_backtrace,
p_sqlcode => SQLCODE,
p_msgid => NULL);
RAISE_APPLICATION_ERROR(SQLCODE, SQLCODE || ' - ' || SQLERRM);
END;
END;
--------------------------------------------------- chk_status_accept
----------------------------------------
PROCEDURE chk_status_accept(pv_approve_status VARCHAR2) IS
BEGIN
IF pv_approve_status IN ('3', '6')
THEN
sp_throw_exception(1203430, '');
END IF;
END;
--------------------------------------------------- accept
------------------------------------------------
/*VBA_EBANK_2019_THOP-21678 */
/*PROCEDURE accept(sessioninfo_username VARCHAR2,
pv_auto_id NUMBER) IS*/
PROCEDURE accept(sessioninfo_username VARCHAR2,
pv_auto_id NUMBER
,cur OUT pkg_data.cursor) IS
/*END*/
v_count NUMBER;
v_number NUMBER;
pt_rec gd_form_drop_pending_tasks%ROWTYPE;
v_fdr_total_tasks_rec gd_form_drop_total_tasks%ROWTYPE;
v_setup_object gd_form_drop_setup%rowtype;/*VBA_EBANK_2019_THOP-21678
20220609*/
v_approve_object gd_form_drop_approve%rowtype;/*VBA_EBANK_2019_THOP-21678
20220609*/
v_time_sla number;/*VBA_EBANK_2019_THOP-21678 */
v_to_email varchar2(50); --Lannq2_add jira:24416
20220707
v_check_gen_notice CHAR(1) DEFAULT 'N'; --Lannq2_add jira:24416
20220719
BEGIN
BEGIN
BEGIN
SELECT *
INTO pt_rec
FROM gd_form_drop_pending_tasks
WHERE auto_id = pv_auto_id;
EXCEPTION
WHEN NO_DATA_FOUND THEN
pt_rec := NULL;
END;
UPDATE gd_form_drop_pending_tasks e
SET row = pt_rec
WHERE e.auto_id = pt_rec.auto_id;
UPDATE gd_form_drop_total_tasks a
SET a.total_task = v_fdr_total_tasks_rec.total_task,
a.last_update = SYSDATE,
a.updated_by = sessioninfo_username
WHERE a.auto_id = v_fdr_total_tasks_rec.auto_id;
ELSE
INSERT INTO gd_form_drop_total_tasks
(auto_id,
user_id,
total_task,
created_date,
created_by,
last_update,
updated_by)
VALUES
(seq_gd_form_drop_total_tasks.NEXTVAL,
pt_rec.user_id,
1,
SYSDATE,
sessioninfo_username,
SYSDATE,
sessioninfo_username);
END IF;
v_number := seq_gd_form_drop_pending_tasks_hist.NEXTVAL();
END IF;
/*VBA_EBANK_2019_THOP-21678 */
OPEN CUR FOR
select TO_CHAR(v_time_sla) PARAM_VALUE from dual;
/*END*/
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
RAISE;
proc_log_error(p_target => 'FORM_DROP_BO',
p_message => 'accept - ERORR: ' ||
SQLCODE || ' - ' || SQLERRM || ' - ' ||
DBMS_UTILITY.format_error_backtrace,
p_sqlcode => SQLCODE,
p_msgid => NULL);
RAISE_APPLICATION_ERROR(SQLCODE, SQLCODE || ' - ' || SQLERRM);
END;
END;
--------------------------------------------------- reject
------------------------------------------------
/*VBA_EBANK_2019_THOP-24005*/
/*PROCEDURE reject(pv_auto_id NUMBER,
pv_remark VARCHAR2) IS*/
PROCEDURE reject(pv_auto_id NUMBER,
pv_remark VARCHAR2,
sessioninfo_username VARCHAR2) IS
/*END VBA_EBANK_2019_THOP-24005*/
v_count NUMBER;
v_number NUMBER;
is_marker VARCHAR2(5);
pt_rec gd_form_drop_pending_tasks%ROWTYPE;
tb_setup_rec gd_form_drop_setup%ROWTYPE;
tb_approve_rec gd_form_drop_approve%ROWTYPE;
--START Lannq2_s?a jira:24416 20220707
v_to_email varchar2(50);
--END Lannq2_s?a jira:24416 20220707
BEGIN
BEGIN
is_marker := 'N';
IF v_count = 0
THEN
pt_rec.number_of_approval := 0;
pt_rec.sequence := 0;
is_marker := 'Y';
END IF;
------------------------------------------------------------------
BEGIN
SELECT *
INTO tb_setup_rec
FROM gd_form_drop_setup
WHERE menu_code = pt_rec.menu_code
AND customer_type = pt_rec.customer_type
/* AND channel_code = pt_rec.channel_type VBA_EBANK_2019_THOP-21285*/
AND status = 'A';
EXCEPTION
WHEN NO_DATA_FOUND THEN
tb_setup_rec := NULL;
proc_log_error('pkg_form_drop.approve',
'no_data_found menu_code = ' || pt_rec.menu_code ||
',customer_type:' || pt_rec.customer_type ||
',channel_code:' || pt_rec.channel_type,
NULL,
NULL);
END;
---------------------------------------------------------
pt_rec.time_processing := SYSDATE;
pt_rec.sequence := '0';
UPDATE gd_form_drop_pending_tasks e
SET row = pt_rec
WHERE e.auto_id = pt_rec.auto_id;
-- Notice l?i cho ngu?i t?o task ? chi nh?nh bi?t kq b? t? ch?i
--START Lannq2_s?a jira:24416 20220714
BEGIN
Select nvl(email,'test@vba.fpt.vn') into v_to_email
From gd_users_maintenance
where user_id = pt_rec.created_by
and nvl(corporate_id,'1') = nvl(pt_rec.corporate_id,'1')
--Lannq2_sua jira:24416 20220718
and deleted = 'N';
EXCEPTION WHEN NO_DATA_FOUND THEN
v_to_email := 'test@vba.fpt.vn';
END;
ELSE
sp_throw_exception(2306, '');
END IF;
ELSE
sp_throw_exception(2307, '');
END IF;
EXCEPTION
WHEN OTHERS THEN
proc_log_error(p_target => 'FORM_DROP_BO',
p_message => 'accept - ERORR: ' ||
SQLCODE || ' - ' || SQLERRM || ' - ' ||
DBMS_UTILITY.format_error_backtrace,
p_sqlcode => SQLCODE,
p_msgid => NULL);
RAISE_APPLICATION_ERROR(SQLCODE, SQLCODE || ' - ' || SQLERRM);
END;
END;
--------------------------------------------------- auto_assign_task
----------------------------------
PROCEDURE auto_assign_task(pv_channel_type VARCHAR2,
pv_menu_code VARCHAR2,
pv_approve_status VARCHAR2 DEFAULT 'NEW',
pv_is_processing VARCHAR2 DEFAULT '0',
pv_customer_type VARCHAR2,
pv_branch_level VARCHAR2) IS
CURSOR c_pending_tasks IS
SELECT *
FROM gd_form_drop_pending_tasks a
WHERE a.approve_status = pv_approve_status
AND a.menu_code = pv_menu_code
/* AND a.channel_type = pv_channel_type VBA_EBANK_2019_THOP-21285*/
and a.customer_type = pv_customer_type -- VBA_EBANK_2019_THOP-30292
DATND15 28102022
AND a.branch_level = pv_branch_level
AND TRUNC(a.application_date) <= TRUNC(SYSDATE)
AND a.is_processing = pv_is_processing
AND a.send_time IS NULL
AND a.time_expire_waiting IS NULL
FOR UPDATE OF a.user_assigned, a.user_id, a.send_time,
a.time_expire_waiting, a.approve_status, a.sla_processing;
/* COMMENT BY DUCDV5*/
v_row_data gd_form_drop_pending_tasks%ROWTYPE;
v_fdr_param fdr_param_type;
v_user_task_tbl user_task_table_type := user_task_table_type();
l_idx INTEGER;
v_branch_id NUMBER;
v_user_name VARCHAR2(50);
v_fdr_param_exp EXCEPTION;
v_not_found_user_exp EXCEPTION;
v_count_user NUMBER;
v_flag_assign BOOLEAN;
v_flag_update BOOLEAN := FALSE;
v_to_email VARCHAR2 (50); --START Lannq2_s?a jira:24416 20220701
BEGIN
v_fdr_param := fdr_param_type.fnc_get_fdr_param(pv_menu_code,
pv_customer_type,
pv_channel_type,
pv_branch_level,
NULL,
'M',
NULL,
NULL);
OPEN c_pending_tasks;
LOOP
FETCH c_pending_tasks
INTO v_row_data;
UPDATE gd_form_drop_pending_tasks a
SET a.user_assigned = v_user_task_tbl(l_idx).user_name,
a.user_id = v_user_task_tbl(l_idx).user_id,
a.send_time = SYSDATE,
a.time_expire_waiting = SYSDATE + v_fdr_param.sla_waiting_mkr /
(60 * 24),
a.approve_status = '2',
a.sla_processing = v_fdr_param.sla_process_mkr
WHERE a.auto_id = v_pending_task_id;
BEGIN
Select nvl(email,'test@vba.fpt.vn') into v_to_email
From users
where user_id = v_user_task_tbl(l_idx).user_id --Lannq2_s?a
jira:24416 20220714
and deleted = 'N'; --Lannq2_s?a
jira:24416 20220714
EXCEPTION WHEN NO_DATA_FOUND THEN
v_to_email := 'test@vba.fpt.vn';
END;
sp_ins_noti_form_drop (PV_SITE => 'BO', --
Lannq2_add jira:24416 20220725
PV_MENU_CODE => '03430',
PV_SUB_MENU_CODE => '03430.01',
PV_NOTICE_TYPE => 'T',
PV_KEY_VALUE => v_pending_task_id,
pv_NOTICE_USER =>
v_user_task_tbl(l_idx).user_name,
pv_CORPORATE_ID => NULL,
PV_CREATE_USER => v_row_data.created_by,
PV_DEVICE_ID => NULL,
PV_EMAIL => v_to_email,
PV_CHANNEL_TYPE => v_row_data.channel_type
);
INSERT INTO gd_form_drop_assign_task_log
(auto_id,
pending_task_id,
user_assigned,
remark,
created_date)
VALUES
(seq_fdr_assign_task_log.NEXTVAL,
v_pending_task_id,
v_user_task_tbl(l_idx).user_name,
'task ' || v_pending_task_id || ' assign to ' ||
v_user_task_tbl(l_idx)
.user_name,
SYSDATE);
DBMS_OUTPUT.put_line('end update task for user ' ||
v_user_task_tbl(l_idx)
.user_name || ', auto_id = ' ||
v_row_data.auto_id);
v_user_task_tbl(l_idx).total_task := v_user_task_tbl(l_idx)
.total_task + 1;
SELECT CAST(MULTISET (SELECT user_task_type(user_id,
user_name,
branch_id,
total_task,
total_task_process)
FROM TABLE(v_user_task_tbl)
ORDER BY total_task,
total_task_process -- note: here we have a very
simple sort-operation;
-- it could be much more complex obviously
) AS user_task_table_type)
INTO v_user_task_tbl
FROM DUAL;
DBMS_OUTPUT.put_line('result:');
LOOP
DBMS_OUTPUT.put_line('** ' || v_user_task_tbl(l_idx)
.user_name || ' branch ' ||
v_user_task_tbl(l_idx)
.branch_id || ' task: ' ||
v_user_task_tbl(l_idx)
.total_task || ' task process: ' ||
v_user_task_tbl(l_idx)
.total_task_process);
l_idx := v_user_task_tbl.NEXT(l_idx);
EXIT WHEN l_idx IS NULL;
END LOOP;
v_flag_update := TRUE;
END IF;
END LOOP;
CLOSE c_pending_tasks;
IF v_flag_update = TRUE
THEN
COMMIT;
END IF;
ELSE
/*VBA_EBANK_2019_THOP-25485 DATND15 20220729*/
--RAISE v_not_found_user_exp;
v_err_msg := 'v_user_task_tbl not found ' || 'menu_code:' ||
pv_menu_code || ',customer_type:' || pv_customer_type ||
',channel_type:' || pv_channel_type || ',branch_level:' ||
pv_branch_level;
proc_log_error('pkg_form_drop.auto_assign_task',
v_err_msg,
NULL,
NULL);
/*END VBA_EBANK_2019_THOP-25485 DATND15 20220729*/
/*VBA_EBANK_2019_THOP-25485 DATND15 20220802*/
COMMIT;
/*END VBA_EBANK_2019_THOP-25485 DATND15 20220802*/
END IF;
proc_log_error('pkg_form_drop.auto_assign_task',
'//end process pv_menu_code = ' || pv_menu_code ||
', pv_channel_type = ' || pv_channel_type ||
', pv_customer_type = ' || pv_customer_type ||
',pv_branch_level = ' || pv_branch_level,
NULL,
NULL);
ELSE
/*VBA_EBANK_2019_THOP-25485 DATND15 20220729*/
--RAISE v_fdr_param_exp;
v_err_msg := 'gd_form_drop_setup not config ' || 'menu_code:' ||
pv_menu_code || ',customer_type:' || pv_customer_type ||
',channel_type:' || pv_channel_type || ',branch_level:' ||
pv_branch_level;
proc_log_error('pkg_form_drop.auto_assign_task',
v_err_msg,
NULL,
NULL);
/*END VBA_EBANK_2019_THOP-25485 DATND15 20220729*/
/*VBA_EBANK_2019_THOP-25485 DATND15 20220802*/
COMMIT;
/*END VBA_EBANK_2019_THOP-25485 DATND15 20220802*/
END IF;
EXCEPTION
/*VBA_EBANK_2019_THOP-25485 DATND15 20220729*/
/*WHEN v_fdr_param_exp THEN
v_err_msg := 'gd_form_drop_setup not config ' || 'menu_code:' ||
pv_menu_code || ',customer_type:' || pv_customer_type ||
',channel_type:' || pv_channel_type || ',branch_level:' ||
pv_branch_level;
proc_log_error('pkg_form_drop.auto_assign_task',
v_err_msg,
NULL,
NULL);
ROLLBACK;
WHEN v_not_found_user_exp THEN
v_err_msg := 'v_user_task_tbl not found ' || 'menu_code:' ||
pv_menu_code || ',customer_type:' || pv_customer_type ||
',channel_type:' || pv_channel_type || ',branch_level:' ||
pv_branch_level;
proc_log_error('pkg_form_drop.auto_assign_task',
v_err_msg,
NULL,
NULL);
ROLLBACK;*/
/*END VBA_EBANK_2019_THOP-25485 DATND15 20220729*/
WHEN OTHERS THEN
proc_log_error('pkg_form_drop.auto_assign_task',
SQLERRM,
SQLCODE,
NULL);
ROLLBACK;
END;
IF pv_user_type = v_role_maker
THEN
re_assign_task_maker(pv_channel_type,
pv_menu_code,
pv_customer_type,
pv_branch_level,
pv_user_type);
ELSE
re_assign_task_checker(pv_channel_type,
pv_menu_code,
pv_customer_type,
pv_branch_level,
pv_user_type);
END IF;
END;
CURSOR c_pending_tasks IS
SELECT *
FROM gd_form_drop_pending_tasks a
WHERE a.approve_status = '5'
AND a.menu_code = pv_menu_code
/* AND a.channel_type = pv_channel_type VBA_EBANK_2019_THOP-21285*/
and a.customer_type = pv_customer_type -- VBA_EBANK_2019_THOP-30292
DATND15 28102022
AND a.branch_level = pv_branch_level
AND a.is_processing = '0'
AND a.send_time IS NOT NULL
AND a.time_expire_waiting IS NOT NULL
AND a.time_expire_waiting < SYSDATE
FOR UPDATE OF a.user_assigned, a.user_id, a.send_time,
a.time_expire_waiting, a.time_expire_waiting, a.approve_status, a.sla_processing;
v_fdr_param fdr_param_type;
v_user_task user_task_type;
v_param_setup_exp EXCEPTION;
v_not_found_user_exp EXCEPTION;
v_err_msg VARCHAR(1000);
v_user_name VARCHAR2(50);
--START Lannq2_s?a jira:24416 20220705
v_to_email varchar2(50);
--END Lannq2_s?a jira:24416 20220705
BEGIN
OPEN c_pending_tasks;
LOOP
FETCH c_pending_tasks
INTO v_row_data;
v_fdr_param := fdr_param_type.fnc_get_fdr_param(pv_menu_code,
pv_customer_type,
pv_channel_type,
pv_branch_level,
v_row_data.branch_code,
pv_user_type,
v_row_data.sequence,
v_row_data.number_of_approval);
UPDATE gd_form_drop_pending_tasks a
SET a.user_assigned = v_user_name,
a.user_id = v_user_task.user_id,
a.send_time = SYSDATE,
a.time_expire_waiting = SYSDATE + v_fdr_param.sla_waiting_apr /
(60 * 24),
a.approve_status = '5',
a.sla_processing = v_fdr_param.sla_process_apr
WHERE a.auto_id = v_pending_task_id;
BEGIN
Select nvl(email,'test@vba.fpt.vn') into v_to_email
From users
where user_id = v_user_task.user_id --Lannq2_s?a jira:24416
20220714
and deleted = 'N'; --Lannq2_s?a jira:24416
20220714
EXCEPTION WHEN NO_DATA_FOUND THEN
v_to_email := 'test@vba.fpt.vn';
END;
CLOSE c_pending_tasks;
COMMIT;
EXCEPTION
/*VBA_EBANK_2019_THOP-25485 DATND15 20220729*/
/*WHEN v_param_setup_exp THEN
v_err_msg := 'gd_form_drop_setup not config ' || 'menu_code:' ||
pv_menu_code || ',customer_type:' || pv_customer_type ||
',channel_type:' || pv_channel_type || ',branch_level:' ||
pv_branch_level;
proc_log_error('pkg_form_drop.re_assign_task_checker',
v_err_msg,
NULL,
NULL);
WHEN v_not_found_user_exp THEN
v_err_msg := 'gd_form_drop_setup not config ' || 'menu_code:' ||
pv_menu_code || ',customer_type:' || pv_customer_type ||
',channel_type:' || pv_channel_type || ',branch_level:' ||
pv_branch_level;
proc_log_error('pkg_form_drop.re_assign_task_checker',
v_err_msg,
NULL,
NULL);*/
/*END VBA_EBANK_2019_THOP-25485 DATND15 20220729*/
WHEN OTHERS THEN
ROLLBACK;
proc_log_error('pkg_form_drop.re_assign_task_checker',
SQLERRM,
SQLCODE,
NULL);
RAISE;
END;
--------------------------------------------------- re_assign_task
------------------------------------------------
PROCEDURE re_assign_task_maker(pv_channel_type VARCHAR2,
pv_menu_code VARCHAR2,
pv_customer_type VARCHAR2,
pv_branch_level VARCHAR2,
pv_user_type VARCHAR2) IS
v_row_data gd_form_drop_pending_tasks%ROWTYPE;
CURSOR c_pending_tasks IS
SELECT *
FROM gd_form_drop_pending_tasks a
WHERE a.approve_status = '2'
AND a.menu_code = pv_menu_code
/* AND a.channel_type = pv_channel_type VBA_EBANK_2019_THOP-21285*/
and a.customer_type = pv_customer_type -- VBA_EBANK_2019_THOP-30292
DATND15 28102022
AND a.branch_level = pv_branch_level
AND a.is_processing = '0'
AND a.send_time IS NOT NULL
AND a.time_expire_waiting IS NOT NULL
AND a.time_expire_waiting < SYSDATE
FOR UPDATE OF a.user_assigned, a.user_id, a.send_time,
a.time_expire_waiting, a.time_expire_waiting, a.approve_status, a.sla_processing;
v_fdr_param fdr_param_type;
v_user_task_tbl user_task_table_type := user_task_table_type();
l_idx INTEGER;
v_param_setup_exp EXCEPTION;
v_not_found_user_exp EXCEPTION;
v_err_msg VARCHAR(1000);
v_count_user NUMBER;
v_branch_id NUMBER;
v_user_name VARCHAR2(50);
v_flag_assign BOOLEAN;
--START Lannq2_s?a jira:24416 20220705
v_to_email varchar2(50);
--END Lannq2_s?a jira:24416 20220705
BEGIN
v_fdr_param := fdr_param_type.fnc_get_fdr_param(pv_menu_code,
pv_customer_type,
pv_channel_type,
pv_branch_level,
NULL,
pv_user_type,
NULL,
NULL);
v_user_task_tbl := v_fdr_param.tbl_user_task;
LOOP
FETCH c_pending_tasks
INTO v_row_data;
v_count_user := v_user_task_tbl.COUNT;
l_idx := v_user_task_tbl.FIRST;
v_branch_id := v_user_task_tbl(l_idx).branch_id;
v_user_name := v_user_task_tbl(l_idx).user_name;
v_flag_assign := FALSE;
/* begin 20220127 CANGND jira: VBA_EBANK_2019_THOP-19226 */
/* WHILE (v_flag_assign = FALSE AND
v_user_name <> NVL(v_row_data.user_assigned, '') AND
l_idx < v_count_user)*/
/*VBA_EBANK_2019_THOP-25485 CANGND 20220812*/
/*WHILE (v_flag_assign = FALSE AND
v_user_name <> NVL(v_row_data.user_assigned, '') AND
l_idx <= v_count_user)*/
WHILE (v_flag_assign = FALSE AND
l_idx <= v_count_user)
/*END VBA_EBANK_2019_THOP-25485 CANGND 20220812*/
/* END 20220127 CANGND jira: VBA_EBANK_2019_THOP-19226 */
LOOP
/*VBA_EBANK_2019_THOP-25485 CANGND 20220812*/
/*IF (TO_NUMBER(v_branch_id) = TO_NUMBER(v_row_data.branch_code))
AND fn_check_busy(v_user_name, v_row_data.created_date) = 0
THEN*/
IF (TO_NUMBER(v_branch_id) = TO_NUMBER(v_row_data.branch_code)) AND
v_user_name <> NVL(v_row_data.user_assigned, '')
AND fn_check_busy(v_user_name, v_row_data.created_date) = 0
THEN
/*END VBA_EBANK_2019_THOP-25485 CANGND 20220812*/
v_flag_assign := TRUE;
/* begin 20220127 CANGND jira: VBA_EBANK_2019_THOP-19226 */
/* ELSE */
ELSE
l_idx := l_idx + 1;
/*VBA_EBANK_2019_THOP-25485*/
--IF l_idx < v_count_user THEN
IF l_idx <= v_count_user THEN
/*END VBA_EBANK_2019_THOP-25485*/
v_branch_id := v_user_task_tbl(l_idx).branch_id;
v_user_name := v_user_task_tbl(l_idx).user_name;
END IF;
/*
DBMS_OUTPUT.put_line('begin update task for user ' ||
v_user_task_tbl(l_idx)
.user_name);
*/
IF (v_user_name IS NOT NULL AND v_flag_assign = TRUE)
THEN
v_pending_task_id := v_row_data.auto_id;
DBMS_OUTPUT.put_line('update task for user ' || v_user_task_tbl(l_idx)
.user_name);
UPDATE gd_form_drop_pending_tasks a
SET a.user_assigned = v_user_task_tbl(l_idx).user_name,
a.user_id = v_user_task_tbl(l_idx).user_id,
a.send_time = SYSDATE,
a.time_expire_waiting = SYSDATE + v_fdr_param.sla_waiting_mkr /
(60 * 24),
a.approve_status = '2',
a.sla_processing = v_fdr_param.sla_process_mkr
WHERE a.auto_id = v_pending_task_id;
/* insert history */
v_user_task_tbl(l_idx).total_task := v_user_task_tbl(l_idx)
.total_task + 1;
DBMS_OUTPUT.put_line('result:');
LOOP
DBMS_OUTPUT.put_line('** ' || v_user_task_tbl(l_idx)
.user_name || ' branch ' ||
v_user_task_tbl(l_idx)
.branch_id || ' task: ' ||
v_user_task_tbl(l_idx)
.total_task || ' task process: ' ||
v_user_task_tbl(l_idx)
.total_task_process);
l_idx := v_user_task_tbl.NEXT(l_idx);
EXIT WHEN l_idx IS NULL;
END LOOP;
END IF;
END LOOP;
CLOSE c_pending_tasks;
COMMIT;
ELSE
/*VBA_EBANK_2019_THOP-25485 DATND15 20220729*/
--RAISE v_not_found_user_exp;
v_err_msg := 'gd_form_drop_setup not config ' || 'menu_code:' ||
pv_menu_code || ',customer_type:' || pv_customer_type ||
',channel_type:' || pv_channel_type || ',branch_level:' ||
pv_branch_level;
proc_log_error('pkg_form_drop.re_assign_task_maker',
v_err_msg,
NULL,
NULL);
/*END VBA_EBANK_2019_THOP-25485 DATND15 20220729*/
/*VBA_EBANK_2019_THOP-25485 DATND15 20220802*/
COMMIT;
/*END VBA_EBANK_2019_THOP-25485 DATND15 20220802*/
END IF;
proc_log_error('pkg_form_drop.re_assign_task_maker',
'//end process pv_menu_code = ' || pv_menu_code ||
', pv_channel_type = ' || pv_channel_type ||
', pv_customer_type = ' || pv_customer_type ||
',pv_branch_level = ' || pv_branch_level,
NULL,
NULL);
ELSE
/*VBA_EBANK_2019_THOP-25485 DATND15 20220729*/
--RAISE v_param_setup_exp;
v_err_msg := 'gd_form_drop_setup not config ' || 'menu_code:' ||
pv_menu_code || ',customer_type:' || pv_customer_type ||
',channel_type:' || pv_channel_type || ',branch_level:' ||
pv_branch_level;
proc_log_error('pkg_form_drop.re_assign_task_maker',
v_err_msg,
NULL,
NULL);
/*END VBA_EBANK_2019_THOP-25485 DATND15 20220729*/
/*VBA_EBANK_2019_THOP-25485 DATND15 20220802*/
COMMIT;
/*END VBA_EBANK_2019_THOP-25485 DATND15 20220802*/
END IF;
EXCEPTION
/*VBA_EBANK_2019_THOP-25485 DATND15 20220729*/
/* WHEN v_param_setup_exp THEN
v_err_msg := 'gd_form_drop_setup not config ' || 'menu_code:' ||
pv_menu_code || ',customer_type:' || pv_customer_type ||
',channel_type:' || pv_channel_type || ',branch_level:' ||
pv_branch_level;
proc_log_error('pkg_form_drop.re_assign_task_maker',
v_err_msg,
NULL,
NULL);
WHEN v_not_found_user_exp THEN
v_err_msg := 'gd_form_drop_setup not config ' || 'menu_code:' ||
pv_menu_code || ',customer_type:' || pv_customer_type ||
',channel_type:' || pv_channel_type || ',branch_level:' ||
pv_branch_level;
proc_log_error('pkg_form_drop.re_assign_task_maker',
v_err_msg,
NULL,
NULL);*/
/*END VBA_EBANK_2019_THOP-25485 DATND15 20220729*/
WHEN OTHERS THEN
ROLLBACK;
proc_log_error('pkg_form_drop.re_assign_task_maker',
SQLERRM,
SQLCODE,
NULL);
RAISE;
END;
--------------------------------------------------- fnc_get_user
------------------------------------------------
FUNCTION fnc_get_user(pv_group_list VARCHAR2) RETURN user_task_type IS
user_tbl user_task_table_type := user_task_table_type();
v_user_rec user_task_type;
CURSOR c_user_task IS
SELECT a.user_id,
a.username user_name,
a.branch_id,
COUNT(b.auto_id) total_task
FROM users a
LEFT JOIN gd_form_drop_pending_tasks b
ON a.user_id = b.user_id
WHERE pkg_fdr_string_util.fn_match_string(a.group_code,
pv_group_list) > 0
AND (a.status = 'A')
AND INSTR(a.role, 'M') > 0
GROUP BY a.user_id,
a.username,
a.branch_id
ORDER BY total_task ASC;
BEGIN
FOR r_user_task IN c_user_task
LOOP
user_tbl.EXTEND;
user_tbl(user_tbl.LAST) := user_task_type(r_user_task.user_id,
r_user_task.user_name,
r_user_task.branch_id,
r_user_task.total_task,
0);
END LOOP;
IF user_tbl.COUNT > 0
THEN
SELECT CAST(MULTISET (SELECT user_task_type(user_id,
user_name,
branch_id,
total_task,
total_task_process)
FROM TABLE(user_tbl)
ORDER BY total_task,
total_task_process) AS user_task_table_type)
INTO user_tbl
FROM DUAL;
SELECT user_task_type(user_tbl(user_tbl.FIRST).user_id,
user_tbl(user_tbl.FIRST).user_name,
user_tbl(user_tbl.FIRST).branch_id,
user_tbl(user_tbl.FIRST).total_task,
user_tbl(user_tbl.FIRST).total_task_process)
INTO v_user_rec
FROM DUAL;
RETURN v_user_rec;
ELSE
RETURN NULL;
END IF;
EXCEPTION
WHEN OTHERS THEN
proc_log_error('pkg_form_drop.fnc_get_user', SQLERRM, SQLCODE, NULL);
RETURN NULL;
END;
--------------------------------------------------- fnc_get_user_ext
------------------------------------------------
FUNCTION fnc_get_user_ext(pv_group_list VARCHAR2,
pv_branch_id VARCHAR2,
pv_same_division CHAR DEFAULT 'Y')
RETURN user_task_type IS
user_tbl user_task_table_type := user_task_table_type();
v_user_rec user_task_type;
CURSOR c_user_task IS
SELECT a.user_id,
a.username user_name,
a.branch_id,
COUNT(b.auto_id) total_task
FROM users a
LEFT JOIN gd_form_drop_pending_tasks b
ON a.user_id = b.user_id
WHERE a.branch_id = pv_branch_id
AND pkg_fdr_string_util.fn_match_string(a.group_code,
pv_group_list) > 0
AND (a.status = 'A')
--AND TRUNC(c.created_date) = TRUNC(SYSDATE)
AND INSTR(a.role, 'A') > 0
GROUP BY a.user_id,
a.username,
a.branch_id
ORDER BY total_task ASC;
BEGIN
FOR r_user_task IN c_user_task
LOOP
user_tbl.EXTEND;
user_tbl(user_tbl.LAST) := user_task_type(r_user_task.user_id,
r_user_task.user_name,
r_user_task.branch_id,
r_user_task.total_task,
0);
END LOOP;
IF user_tbl.COUNT > 0
THEN
SELECT user_task_type(user_tbl(user_tbl.FIRST).user_id,
user_tbl(user_tbl.FIRST).user_name,
user_tbl(user_tbl.FIRST).branch_id,
user_tbl(user_tbl.FIRST).total_task,
user_tbl(user_tbl.FIRST).total_task_process)
INTO v_user_rec
FROM DUAL;
END IF;
RETURN v_user_rec;
EXCEPTION
WHEN OTHERS THEN
proc_log_error('pkg_form_drop.fnc_get_list_user_ext',
SQLERRM,
SQLCODE,
NULL);
RETURN NULL;
END;
--------------------------------------------------- fnc_get_list_user
------------------------------------------------
FUNCTION fnc_get_list_user(pv_group_list VARCHAR2,
pv_role VARCHAR2)
RETURN user_task_table_type IS
user_tbl user_task_table_type := user_task_table_type();
l_idx INTEGER;
CURSOR c_user_task IS
SELECT a.user_id,
a.username user_name,
a.branch_id,
COUNT(b.auto_id) total_task
FROM users a
LEFT JOIN gd_form_drop_pending_tasks b
ON a.user_id = b.user_id
WHERE pkg_fdr_string_util.fn_match_string(a.group_code,
pv_group_list) > 0
AND (a.status = 'A')
/*VBA_EBANK_2019_THOP-23949*/
--AND INSTR(a.role, pv_role) > 0
AND ((INSTR(a.role, pv_role) > 0 AND pv_role <> ('M,A'))
OR
((INSTR(a.role, 'M') > 0 OR INSTR(a.role, 'A') > 0) AND pv_role =
('M,A')))
/*END VBA_EBANK_2019_THOP-23949*/
-- AND (TRUNC (c.created_date) = TRUNC (SYSDATE))
GROUP BY a.user_id,
a.username,
a.branch_id
ORDER BY total_task ASC;
BEGIN
FOR r_user_task IN c_user_task
LOOP
user_tbl.EXTEND;
user_tbl(user_tbl.LAST) := user_task_type(r_user_task.user_id,
r_user_task.user_name,
r_user_task.branch_id,
r_user_task.total_task,
0);
END LOOP;
IF user_tbl.COUNT > 0
THEN
SELECT CAST(MULTISET (SELECT user_task_type(user_id,
user_name,
branch_id,
total_task,
total_task_process)
FROM TABLE(user_tbl)
ORDER BY total_task,
total_task_process -- note: here we have a very simple
sort-operation;
-- it could be much more complex obviously
) AS user_task_table_type)
INTO user_tbl
FROM DUAL;
/*VBA_EBANK_2019_THOP-23949*/
/*
l_idx := user_tbl.FIRST;
LOOP
proc_log_error('pkg_form_drop.fnc_get_list_user',
SQLERRM,
SQLCODE,
NULL);
RETURN NULL;
END IF;
EXCEPTION
WHEN OTHERS THEN
proc_log_error('pkg_form_drop.fnc_get_list_user',
SQLERRM,
SQLCODE,
NULL);
RETURN NULL;
END;
--------------------------------------------------- fnc_fdr_setup
------------------------------------------------
FUNCTION fnc_fdr_setup(pv_menu_code IN gd_form_drop_setup.menu_code%TYPE,
pv_customer_type IN gd_form_drop_setup.customer_type%TYPE,
pv_channel_code IN gd_form_drop_setup.channel_code%TYPE)
RETURN fdr_param_type AS
v_fdr_setup_row gd_form_drop_setup%ROWTYPE;
v_param fdr_param_type;
v_ho_received VARCHAR2(2000);
v_l1_received VARCHAR2(2000);
v_l2_received VARCHAR2(2000);
BEGIN
BEGIN
SELECT *
INTO v_fdr_setup_row
FROM gd_form_drop_setup a
WHERE a.menu_code = pv_menu_code
AND a.customer_type = pv_customer_type;
/* AND a.channel_code = pv_channel_code; VBA_EBANK_2019_THOP-21285*/
EXCEPTION
WHEN NO_DATA_FOUND THEN
v_fdr_setup_row := NULL;
END;
--------------------------------------------------- reject_check
------------------------------------------------
FUNCTION fn_split_string(i_str IN VARCHAR2,
i_delim IN VARCHAR2 DEFAULT '|')
RETURN SYS.odcivarchar2list DETERMINISTIC AS
p_result SYS.odcivarchar2list := sys.odcivarchar2list();
p_start NUMBER(5) := 1;
p_end NUMBER(5);
c_len CONSTANT NUMBER(5) := LENGTH(i_str);
c_ld CONSTANT NUMBER(5) := LENGTH(i_delim);
BEGIN
IF c_len > 0
THEN
p_end := INSTR(i_str, i_delim, p_start);
RETURN p_result;
END;
--------------------------------------------------- fn_split_value
------------------------------------------------
FUNCTION fn_split_value(i_str IN VARCHAR2,
i_char IN CHAR,
i_order IN NUMBER DEFAULT 1) RETURN VARCHAR2 AS
p_result VARCHAR2(2000);
BEGIN
SELECT REGEXP_SUBSTR(i_str, '[^' || i_char || ']+', 1, i_order)
INTO p_result
FROM DUAL;
RETURN p_result;
END;
--------------------------------------------------- fn_get_transid
------------------------------------------------
FUNCTION fn_get_transid(table_name IN VARCHAR2,
key_field IN VARCHAR2) RETURN VARCHAR2 AS
p_result VARCHAR2(2000);
exc VARCHAR2(500);
--jira:22195 vietq6 20220606
tran_id VARCHAR2(100);
BEGIN
BEGIN
EXECUTE IMMEDIATE (exc)
INTO p_result;
EXCEPTION
WHEN OTHERS THEN
exc := 'SELECT TRANS_ID TRANSACTION_REF_NO FROM ' || table_name ||
' WHERE auto_ID = ' || key_field;
BEGIN
EXECUTE IMMEDIATE (exc)
INTO p_result;
EXCEPTION
WHEN OTHERS THEN
p_result := NULL;
END;
END;
RETURN p_result;
END;
/*** auto_assign_task_all***/
/*VBA_EBANK_2019_THOP-29462 DATND15 07112022*/
--PROCEDURE auto_assign_task_all IS
PROCEDURE auto_assign_task_all(cur OUT pkg_data.cursor) IS
/*END VBA_EBANK_2019_THOP-29462 DATND15 07112022*/
CURSOR cur_form_drop_setup IS
SELECT a.menu_code,
a.menu_group_code,
a.channel_code,
a.customer_type,
a.time_start,
a.time_end
FROM gd_form_drop_setup a
WHERE a.status = 'A'
AND a.deleted = 'N';
re_assign_task_branch_level(row_form_drop_setup.channel_code,
row_form_drop_setup.menu_code,
row_form_drop_setup.customer_type,
'A');
END IF;
ELSE
re_assign_task_branch_level(row_form_drop_setup.channel_code,
row_form_drop_setup.menu_code,
row_form_drop_setup.customer_type,
'M');
re_assign_task_branch_level(row_form_drop_setup.channel_code,
row_form_drop_setup.menu_code,
row_form_drop_setup.customer_type,
'A');
END IF;
END LOOP;
--VBA_EBANK_2019_THOP-37036 BPM start
END IF;
--VBA_EBANK_2019_THOP-37036 BPM end
/*VBA_EBANK_2019_THOP-29462 DATND15 07112022*/
open cur for
SELECT 'a' A from dual;
EXCEPTION
WHEN OTHERS THEN
proc_log_error(p_target => 'FORM_DROP',
p_message => 're_assign_task_all- ERORR: ' ||
SQLCODE || ' - ' || SQLERRM || ' - ' ||
DBMS_UTILITY.format_error_backtrace,
p_sqlcode => SQLCODE,
p_msgid => NULL);
RAISE_APPLICATION_ERROR(SQLCODE, SQLCODE || ' - ' || SQLERRM);
END;
/*END VBA_EBANK_2019_THOP-29462 DATND15 07112022*/
END;
-----------USER_APPROVE
SELECT COUNT(1)
INTO vcount
FROM gd_form_drop_pending_tasks_his t
WHERE t.auto_id = auto_id_x;
IF vcount > 0
THEN
SELECT a.user_assigned
INTO p_result
FROM gd_form_drop_pending_tasks_his a
WHERE a.number_insert =
(SELECT MAX(f.number_insert)
FROM gd_form_drop_pending_tasks_his f
WHERE f.auto_id = auto_id_x);
END IF;
RETURN p_result;
END;
RETURN v_count;
END;
/*VBA_EBANK_2019_THOP-22133*/
/*VBA_EBANK_2019_THOP-23949 20220624 datnd15*/
/*PROCEDURE PROC_LOADHANDLER(pv_MENU_CODE_D varchar2,
pv_CUSTOMER_TYPE_D varchar2,
cur OUT pkg_data.cursor)*/
PROCEDURE PROC_LOADHANDLER(pv_AUTO_ID varchar2,
cur OUT pkg_data.cursor)
/*END - VBA_EBANK_2019_THOP-23949 20220624 datnd15*/
IS
is_value varchar2(5);
v_count number;/*VBA_EBANK_2019_THOP-23949*/
pt_rec gd_form_drop_pending_tasks%rowtype;
/*VBA_EBANK_2019_THOP-23949 20220624 datnd15*/
BEGIN
--sp_throw_exception(101,pv_AUTO_ID);
/*VBA_EBANK_2019_THOP-23949 20220624 datnd15*/
--select t.handler_approve into is_value from gd_form_drop_setup t where
t.menu_code = pv_MENU_CODE_D and t.customer_type = pv_CUSTOMER_TYPE_D and t.deleted
= 'N';
select * into pt_rec from gd_form_drop_pending_tasks t where t.auto_id =
pv_AUTO_ID;
select count(1) into v_count from gd_parameter t where t.parameter_type =
'FORM_DROP' and t.parameter_code = pt_rec.menu_code and t.is_active = 'Y'
and (INSTR(t.channel_tenant_id, (pt_rec.channel_type||' - VN')) > 0);
IF v_count >0 and FUNC_CHECK_LAST(pt_rec) = 'Y' then
is_value := 'Y';
else
is_value := 'N';
end if;
/*END - VBA_EBANK_2019_THOP-23949 20220624 datnd15*/
OPEN CUR FOR
--Start jira 25863
--select is_value "ASSIGNED_TO.VISIBLE" from dual;
select is_value "ASSIGNED_TO.VISIBLE",'' REMARK from dual;
--End jira 25863
END;
/*END*/
/*VBA_EBANK_2019_THOP-23447*/
PROCEDURE GET_VALID_PROC(pv_auto_id NUMBER,cur OUT
pkg_data.cursor) IS
v_proc_valid VARCHAR2(200);
BEGIN
SELECT t.proc_valid
INTO v_proc_valid
FROM gd_fd_setup_module t
WHERE t.menu_code = (SELECT t.menu_code
FROM gd_form_drop_pending_tasks t
WHERE t.auto_id = pv_auto_id)
AND
t.menu_mode = (SELECT t.menu_mode
FROM gd_form_drop_pending_tasks t
WHERE t.auto_id = pv_auto_id);
OPEN cur FOR
SELECT v_proc_valid proc_valid FROM DUAL;
END;
/*END - VBA_EBANK_2019_THOP-23447*/
/*VBA_EBANK_2019_THOP-24005*/
PROCEDURE PROC_VALIDATE_SESSION(pt_rec gd_form_drop_pending_tasks%rowtype,
session_username varchar2)
IS
user_acces number;
BEGIN
IF pt_rec.auto_id is not null then
select t.user_id into user_acces from users t where t.username =
session_username;
IF pt_rec.user_id <> user_acces then
sp_throw_exception(1403431,null);
end if;
end if;
END;
/*END - VBA_EBANK_2019_THOP-24005*/
/*VBA_EBANK_2019_THOP-23949 20220627 datnd15*/
FUNCTION FUNC_CHECK_LAST(pt_rec gd_form_drop_pending_tasks
%rowtype) return varchar2 as
tb_setup_rec gd_form_drop_setup%ROWTYPE;
tb_approve_rec gd_form_drop_approve
%ROWTYPE;
visiable varchar2(2) default('Y');
v_count number;
sequence_rec number;
number_approve number;
begin
IF pt_rec.approve_status = 3 then
sequence_rec := 1;
number_approve := 1;
else
sequence_rec := pt_rec.sequence;
number_approve := pt_rec.number_of_approval;
end if;
SELECT *
INTO tb_setup_rec
FROM gd_form_drop_setup
WHERE menu_code = pt_rec.menu_code
AND customer_type = pt_rec.customer_type
AND status = 'A';
SELECT COUNT(1)
INTO v_count
FROM gd_form_drop_approve
WHERE branch_level = pt_rec.branch_level
AND sequence = sequence_rec
AND form_drop_setup_id = tb_setup_rec.auto_id;
IF v_count > 0 then
IF pt_rec.approve_status <> 3 then
SELECT *
INTO tb_approve_rec
FROM gd_form_drop_approve
WHERE branch_level = pt_rec.branch_level
AND form_drop_setup_id = tb_setup_rec.auto_id
AND sequence = sequence_rec;
SELECT COUNT(1)
INTO v_count
FROM gd_form_drop_approve
WHERE branch_level = pt_rec.branch_level
AND sequence > sequence_rec
AND form_drop_setup_id = tb_setup_rec.auto_id;
IF (v_count = 0 AND number_approve = tb_approve_rec.number_of_approval) then
visiable := 'N';
end if;
END IF;
else
visiable := 'N';
end if;
return visiable;
end;
END;
--End jira 25863