CREATE OR REPLACE
PACKAGE XXDM_SOP_OUTBOUND_PKG
IS
/*---------------------------------------------------------
Current Version : 1.00
Create By :
Create Date : 2009-05-14
Purpose : S&OP Outbound.
Logicality :
---------------------------------------------------------*/
/* The index is important, otherwise {resultset} doesn't work. */
TYPE SqlReturnTbl IS TABLE OF Varchar(500) INDEX BY BINARY_INTEGER;
PROCEDURE xxdm_sop_outbound_data
(p_level_id IN VARCHAR2
,p_member_id IN VARCHAR2
,p_user_id IN NUMBER
,p_fcst_type IN VARCHAR2);
PROCEDURE xxdm_sop_outbound_firmed
(p_level_id IN VARCHAR2
,p_member_id IN VARCHAR2
,p_user_id IN NUMBER);
PROCEDURE xxdm_sop_outbound_notfirmed
(p_level_id IN VARCHAR2
,p_member_id IN VARCHAR2
,p_user_id IN NUMBER);
PROCEDURE update_sop_outbound_status
(p_s_id IN NUMBER
,o_result OUT SqlReturnTbl);
PROCEDURE update_supply_lbfs_flag
(p_item_id IN VARCHAR2
,p_ro IN VARCHAR2
,p_site IN VARCHAR2
,p_supplier IN VARCHAR2
,p_supply_plan_id IN NUMBER
,p_sales_date IN VARCHAR2
,o_result OUT SqlReturnTbl);
PROCEDURE update_supply_po_flag
(p_item_id IN VARCHAR2
,p_ro IN VARCHAR2
,p_site IN VARCHAR2
,p_supplier IN VARCHAR2
,p_supply_plan_id IN NUMBER
,p_sales_date IN VARCHAR2
,p_po_flag IN NUMBER);
PROCEDURE insert_sop_outbound_data
(
p_supply_plan_id IN NUMBER,
p_supply_plan_code IN VARCHAR2,
p_supply_plan_desc IN VARCHAR2,
p_fcst_type IN VARCHAR2,
p_plan_method IN VARCHAR2,
p_plc_status IN VARCHAR2,
p_ro_org IN VARCHAR2,
p_ro_org_desc IN VARCHAR2,
p_sp_item IN VARCHAR2,
p_sp_item_desc IN VARCHAR2,
p_supplier IN VARCHAR2,
p_supplier_desc IN VARCHAR2,
p_supplier_site IN VARCHAR2,
p_supplier_site_desc IN VARCHAR2,
p_plan_date IN DATE,
p_net_demand_qty IN NUMBER,
p_month_idx IN NUMBER,
p_po_number IN VARCHAR2,
p_po_status IN VARCHAR2,
p_created_by IN NUMBER,
p_creation_date IN DATE,
p_flag IN NUMBER);
PROCEDURE update_outbound_po_status
(p_action IN VARCHAR2,
p_s_id IN NUMBER,
p_po_status IN VARCHAR2,
p_log_code IN VARCHAR2);
PROCEDURE update_sop_outbound_po
(p_s_id IN NUMBER,
p_pono IN VARCHAR2,
p_log_code IN VARCHAR2);
END;
/
CREATE OR REPLACE
PACKAGE BODY XXDM_SOP_OUTBOUND_PKG
IS
/*------------------------------------------------------------------------------
Created by
Function:
S&OP Outbound.
Logicality:
this procedure use to S&OP Outbound
Input: p_level_id -- demantra data model items level id
p_member_id -- demantra data model items member id
p_user_id -- demantra user id
Output:
null
------------------------------------------------------------------------------*/
PROCEDURE xxdm_sop_outbound_data
(p_level_id IN VARCHAR2
,p_member_id IN VARCHAR2
,p_user_id IN NUMBER
,p_fcst_type IN VARCHAR2)
IS
v_level_id NUMBER;
v_member_id NUMBER;
v_count NUMBER;
v_notice_id VARCHAR2 (100);
v_plan_method VARCHAR2 (10);
v_supply_plan_code VARCHAR2 (10);
v_substruct NUMBER :=0;
v_index NUMBER :=0;
v_plan_date_old NUMBER :=0;
v_plan_date_new NUMBER :=0;
v_ro_org VARCHAR2 (10);
v_ro VARCHAR2 (10);
v_org VARCHAR2 (10);
v_input_name VARCHAR2 (50);
exp_supply_code_isnull EXCEPTION;
exp_plan_method_isnull EXCEPTION;
-- IRP AND MP AND EOL-B > 0
CURSOR cur_supply_one IS
SELECT t_ep_ro_org.ro_org,
t_ep_ro_org.ro_org_desc,
t_ep_item.item,
t_ep_i_att_1.i_att_1_desc as dm_item_desc,
t_ep_ebs_supplier.ebs_supplier,
t_ep_ebs_supplier.ebs_supplier_desc,
t_ep_site.site,
t_ep_site.dm_site_desc,
supply_plan_data.sales_date,
t_ep_i_att_6.i_att_6_desc AS plc_status,
nvl(supply_plan_data.ro_vendor_accept, supply_plan_data.ro_net_demand) as net_demand_qty
FROM demantra.supply_plan_data supply_plan_data,
demantra.mdp_matrix mdp_matrix,
demantra.t_ep_ro_org t_ep_ro_org,
demantra.t_ep_item t_ep_item,
demantra.t_ep_site t_ep_site,
demantra.t_ep_ebs_supplier t_ep_ebs_supplier,
demantra.t_ep_i_att_6 t_ep_i_att_6,
demantra.t_ep_i_att_1 t_ep_i_att_1
WHERE supply_plan_data.supply_plan_id = p_member_id
AND supply_plan_data.item_id = mdp_matrix.item_id
AND supply_plan_data.location_id = mdp_matrix.location_id
AND mdp_matrix.t_ep_ro_org_ep_id = t_ep_ro_org.t_ep_ro_org_ep_id
AND mdp_matrix.t_ep_item_ep_id = t_ep_item.t_ep_item_ep_id
AND mdp_matrix.t_ep_site_ep_id = t_ep_site.t_ep_site_ep_id
AND mdp_matrix.t_ep_ebs_supplier_ep_id = t_ep_ebs_supplier.t_ep_ebs_supplier_ep_id
AND mdp_matrix.t_ep_i_att_6_ep_id = t_ep_i_att_6.t_ep_i_att_6_ep_id
AND t_ep_item.item = t_ep_i_att_1.i_att_1
AND (t_ep_i_att_6.i_att_6_desc IN ('IRP','MP')
OR (t_ep_i_att_6.i_att_6_desc ='EOL-B'
AND nvl(supply_plan_data.ro_vendor_accept, supply_plan_data.ro_net_demand)>0 ));
-- EOL-V AND EOL-B > 0
CURSOR cur_supply_two IS
SELECT 'BNQ:TPC' ro_org,
'BNQ:TPC' ro_org_desc,
t_ep_item.item,
t_ep_i_att_1.i_att_1_desc as dm_item_desc,
t_ep_ebs_supplier.ebs_supplier,
t_ep_ebs_supplier.ebs_supplier_desc,
t_ep_site.site,
t_ep_site.dm_site_desc,
supply_plan_data.sales_date,
t_ep_i_att_6.i_att_6_desc AS plc_status,
nvl(supply_plan_data.tpc_vendor_accept, supply_plan_data.tpc_net_demand) as net_demand_qty
FROM demantra.supply_plan_data supply_plan_data,
demantra.mdp_matrix mdp_matrix,
demantra.t_ep_ro_org t_ep_ro_org,
demantra.t_ep_item t_ep_item,
demantra.t_ep_site t_ep_site,
demantra.t_ep_ebs_supplier t_ep_ebs_supplier,
demantra.t_ep_i_att_6 t_ep_i_att_6,
demantra.t_ep_i_att_1 t_ep_i_att_1
WHERE supply_plan_data.supply_plan_id = p_member_id
AND supply_plan_data.item_id = mdp_matrix.item_id
AND supply_plan_data.location_id = mdp_matrix.location_id
AND mdp_matrix.t_ep_ro_org_ep_id = t_ep_ro_org.t_ep_ro_org_ep_id
AND mdp_matrix.t_ep_item_ep_id = t_ep_item.t_ep_item_ep_id
AND mdp_matrix.t_ep_site_ep_id = t_ep_site.t_ep_site_ep_id
AND mdp_matrix.t_ep_ebs_supplier_ep_id = t_ep_ebs_supplier.t_ep_ebs_supplier_ep_id
AND mdp_matrix.t_ep_i_att_6_ep_id = t_ep_i_att_6.t_ep_i_att_6_ep_id
AND t_ep_item.item = t_ep_i_att_1.i_att_1
AND (t_ep_i_att_6.i_att_6_desc = 'EOL-V'
OR (t_ep_i_att_6.i_att_6_desc ='EOL-B'
AND nvl(supply_plan_data.tpc_vendor_accept, supply_plan_data.tpc_net_demand)>0));
--EOL-B IS NULL OR =0
CURSOR cur_supply_three IS
SELECT t_ep_ro_org.ro_org,
t_ep_ro_org.ro_org_desc,
t_ep_item.item,
t_ep_i_att_1.i_att_1_desc as dm_item_desc,
t_ep_ebs_supplier.ebs_supplier,
t_ep_ebs_supplier.ebs_supplier_desc,
t_ep_site.site,
t_ep_site.dm_site_desc,
supply_plan_data.sales_date,
t_ep_i_att_6.i_att_6_desc AS plc_status,
0 as net_demand_qty
FROM demantra.supply_plan_data supply_plan_data,
demantra.mdp_matrix mdp_matrix,
demantra.t_ep_ro_org t_ep_ro_org,
demantra.t_ep_item t_ep_item,
demantra.t_ep_site t_ep_site,
demantra.t_ep_ebs_supplier t_ep_ebs_supplier,
demantra.t_ep_i_att_6 t_ep_i_att_6,
demantra.t_ep_i_att_1 t_ep_i_att_1
WHERE supply_plan_data.supply_plan_id = p_member_id
AND supply_plan_data.item_id = mdp_matrix.item_id
AND supply_plan_data.location_id = mdp_matrix.location_id
AND mdp_matrix.t_ep_ro_org_ep_id = t_ep_ro_org.t_ep_ro_org_ep_id
AND mdp_matrix.t_ep_item_ep_id = t_ep_item.t_ep_item_ep_id
AND mdp_matrix.t_ep_site_ep_id = t_ep_site.t_ep_site_ep_id
AND mdp_matrix.t_ep_ebs_supplier_ep_id = t_ep_ebs_supplier.t_ep_ebs_supplier_ep_id
AND mdp_matrix.t_ep_i_att_6_ep_id = t_ep_i_att_6.t_ep_i_att_6_ep_id
AND t_ep_item.item = t_ep_i_att_1.i_att_1
AND t_ep_i_att_6.i_att_6_desc = 'EOL-B'
AND (nvl(supply_plan_data.ro_vendor_accept, supply_plan_data.ro_net_demand) IS NULL OR nvl(supply_plan_data.ro_vendor_accept, supply_plan_data.ro_net_demand)=0)
AND (nvl(supply_plan_data.tpc_vendor_accept, supply_plan_data.tpc_net_demand) IS NULL OR nvl(supply_plan_data.tpc_vendor_accept, supply_plan_data.tpc_net_demand)=0);
CURSOR cur_plan IS
SELECT supply_plan_id, TO_CHAR (plan_date, 'yyyymm') AS plan_date
FROM demantra.xxdm_sop_outbound
WHERE supply_plan_id = p_member_id
GROUP BY supply_plan_id, TO_CHAR (plan_date, 'yyyymm')
ORDER BY plan_date;
rec_one cur_supply_one%ROWTYPE;
rec_two cur_supply_two%ROWTYPE;
rec_three cur_supply_three%ROWTYPE;
rec_plan cur_plan%ROWTYPE;
BEGIN
dbms_output.put_line('aaa ');
v_level_id:=TO_NUMBER(p_level_id);
v_member_id:=TO_NUMBER(p_member_id);
-- v_level_id:=p_level_id; -- add by steven
-- v_member_id:=p_member_id; -- add by steven
--SUPPLY_PLAN_ID is member id
-- get SUPPLY_PLAN_CODE is v_notice_id
--v_notice_id:='20090522-PRJ-BQP-IRP-001';
v_notice_id := demantra.xxdm_util_pkg.xxdm_get_notice_id (v_level_id, v_member_id);
dbms_output.put_line('v_notice_id=' || v_notice_id); --for test
--SELECT * FROM DEMANTRA.SUPPLY_PLAN
IF v_notice_id IS NULL THEN
RAISE exp_supply_code_isnull;
END IF;
--get plan method
v_plan_method := demantra.xxdm_util_pkg.xxdm_get_plan_method(v_member_id);
IF v_plan_method IS NULL THEN
--RAISE exp_plan_method_isnull;
NULL;
END IF;
dbms_output.put_line('v_plan_method=' || v_plan_method); --for test
v_supply_plan_code := demantra.xxdm_util_pkg.xxdm_get_supply_plan_code(v_member_id);
--delete data before inserting data
IF p_fcst_type='1' THEN
DELETE FROM demantra.xxdm_sop_outbound
WHERE supply_plan_id = v_member_id;
ELSIF p_fcst_type='2' THEN
DELETE FROM demantra.xxdm_sop_outbound
WHERE supply_plan_id = v_member_id AND po_number IS NULL;
ELSE
NULL;
END IF;
-- IRP AND MP AND EOL-B > 0
OPEN cur_supply_one;
LOOP
FETCH cur_supply_one INTO rec_one;
EXIT WHEN cur_supply_one%NOTFOUND;
insert_sop_outbound_data(v_member_id,v_supply_plan_code,v_notice_id,p_fcst_type,v_plan_method
,rec_one.plc_status,rec_one.ro_org,rec_one.ro_org_desc,rec_one.item,rec_one.dm_item_desc
,rec_one.ebs_supplier,rec_one.ebs_supplier_desc,rec_one.site,rec_one.dm_site_desc,rec_one.sales_date
,round(rec_one.net_demand_qty,0),0,'','',p_user_id
,sysdate,0);
END LOOP;
CLOSE cur_supply_one;
-- EOL-V AND EOL-B > 0
OPEN cur_supply_two;
LOOP
FETCH cur_supply_two INTO rec_two;
EXIT WHEN cur_supply_two%NOTFOUND;
insert_sop_outbound_data(v_member_id,v_supply_plan_code,v_notice_id,p_fcst_type,v_plan_method
,rec_two.plc_status,rec_two.ro_org,rec_two.ro_org_desc,rec_two.item,rec_two.dm_item_desc
,rec_two.ebs_supplier,rec_two.ebs_supplier_desc,rec_two.site,rec_two.dm_site_desc,rec_two.sales_date
,round(rec_two.net_demand_qty,0),0,'','',p_user_id
,sysdate,0);
END LOOP;
CLOSE cur_supply_two;
--EOL-B IS NULL OR =0
OPEN cur_supply_three;
LOOP
FETCH cur_supply_three INTO rec_three;
EXIT WHEN cur_supply_three%NOTFOUND;
insert_sop_outbound_data(v_member_id,v_supply_plan_code,v_notice_id,p_fcst_type,v_plan_method
,rec_three.plc_status,rec_three.ro_org,rec_three.ro_org_desc,rec_three.item,rec_three.dm_item_desc
,rec_three.ebs_supplier,rec_three.ebs_supplier_desc,rec_three.site,rec_three.dm_site_desc,rec_three.sales_date
,round(rec_three.net_demand_qty,0),0,'','',p_user_id
,sysdate,1);
END LOOP;
CLOSE cur_supply_three;
--re caculate month_idx
OPEN cur_plan;
LOOP
FETCH cur_plan INTO rec_plan;
EXIT WHEN cur_plan%NOTFOUND;
IF v_index > 1 THEN
v_plan_date_new := to_number(rec_plan.plan_date);
v_substruct := v_plan_date_new - v_plan_date_old;
v_plan_date_old := v_plan_date_new;
ELSE
v_plan_date_old := to_number(rec_plan.plan_date);
v_substruct := 1;
END IF;
v_index := v_index + v_substruct;
UPDATE demantra.xxdm_sop_outbound
SET month_idx = v_index
WHERE supply_plan_id = rec_plan.supply_plan_id
AND TO_CHAR (plan_date, 'yyyymm') = rec_plan.plan_date;
END LOOP;
CLOSE cur_plan;
UPDATE demantra.xxdm_sop_outbound
SET ro_org = 'BNQ:TPC',
ro = 'TPC',
org = 'TPC',
flag=0
WHERE month_idx > 12 AND flag = 1;
FOR rec_temp IN (SELECT mps.input_name
FROM apps.msc_plan_sched_v mps,
demantra.supply_plan sp
WHERE sp.supply_plan_id=p_member_id
AND sp.plan_id=mps.plan_id AND ROWNUM<=1) LOOP
UPDATE demantra.xxdm_sop_outbound
SET FACILITY = substr(rec_temp.input_name,10,3)
WHERE supply_plan_id = p_member_id AND FACILITY IS NULL;
END LOOP;
FOR rec_temp IN (SELECT mps.input_name
FROM apps.msc_plan_sched_v mps,
demantra.supply_plan sp
WHERE sp.supply_plan_id=p_member_id
AND sp.plan_id=mps.plan_id) LOOP
xxdm_util_pkg.insert_step_log_common(rec_temp.input_name,'O','','','','','005');
END LOOP;
dbms_output.put_line('Successfully.');
COMMIT;
EXCEPTION
WHEN exp_supply_code_isnull THEN
ROLLBACK;
raise_application_error(-20101, 'supply plan code is null.');
WHEN exp_plan_method_isnull THEN
ROLLBACK;
raise_application_error(-20102, 'plan method is null.');
WHEN OTHERS THEN
ROLLBACK;
RAISE;
END;
/*------------------------------------------------------------------------------
Created by
Function:
S&OP Outbound insert single data.
Logicality:
this procedure use to S&OP Outbound
Input:
Output:
null
------------------------------------------------------------------------------*/
PROCEDURE insert_sop_outbound_data
(
p_supply_plan_id IN NUMBER,
p_supply_plan_code IN VARCHAR2,
p_supply_plan_desc IN VARCHAR2,
p_fcst_type IN VARCHAR2,
p_plan_method IN VARCHAR2,
p_plc_status IN VARCHAR2,
p_ro_org IN VARCHAR2,
p_ro_org_desc IN VARCHAR2,
p_sp_item IN VARCHAR2,
p_sp_item_desc IN VARCHAR2,
p_supplier IN VARCHAR2,
p_supplier_desc IN VARCHAR2,
p_supplier_site IN VARCHAR2,
p_supplier_site_desc IN VARCHAR2,
p_plan_date IN DATE,
p_net_demand_qty IN NUMBER,
p_month_idx IN NUMBER,
p_po_number IN VARCHAR2,
p_po_status IN VARCHAR2,
p_created_by IN NUMBER,
p_creation_date IN DATE,
p_flag IN NUMBER
)
IS
v_count NUMBER;
v_ro VARCHAR2 (10);
v_org VARCHAR2 (10);
v_category VARCHAR2 (240);
v_outbound_lbfs_flag NUMBER;
v_lbfs_status VARCHAR2 (1);
BEGIN
SELECT 1
INTO v_count
FROM demantra.xxdm_sop_outbound
WHERE supply_plan_id = p_supply_plan_id
AND fcst_type = p_fcst_type
AND ro_org = p_ro_org
AND sp_item = p_sp_item
AND supplier = p_supplier
AND supplier_site = p_supplier_site
AND plan_date = TO_DATE(TO_CHAR(p_plan_date,'YYYY-MM-DD'),'YYYY-MM-DD');
EXCEPTION
WHEN NO_DATA_FOUND THEN
--insert data
v_ro := demantra.xxdm_util_pkg.xxdm_get_ro(p_ro_org);
v_org := demantra.xxdm_util_pkg.xxdm_get_org(p_ro_org);
--v_ro := demantra.xxdm_util_pkg.xxdm_get_substr_before_split(p_ro_org,':');
--v_org := demantra.xxdm_util_pkg.xxdm_get_substr_after_split(p_ro_org,':');
--dbms_output.put_line('p_sp_item='||p_sp_item); -- for test
v_category := demantra.xxdm_util_pkg.xxdm_get_item_category(p_sp_item);
--dbms_output.put_line('v_category='||v_category); -- for test
v_outbound_lbfs_flag :=demantra.xxdm_util_pkg.get_outbound_lbfs_flag(p_sp_item,v_ro,p_supplier_site,p_supplier,p_supply_plan_id,TO_CHAR('YYYYMMDD'));
dbms_output.put_line('v_outbound_lbfs_flag ='||v_outbound_lbfs_flag);
IF v_outbound_lbfs_flag = 1 THEN
v_lbfs_status :='Y';
ELSE
v_lbfs_status :='X';
END IF;
INSERT INTO demantra.xxdm_sop_outbound
(s_id
,supply_plan_id
,supply_plan_code
,supply_plan_desc
,fcst_type
,plan_method
,plc_status
,ro
,org
,ro_org
,ro_org_desc
,sp_item
,sp_item_desc
,category
,supplier
,supplier_desc
,supplier_site
,supplier_site_desc
,plan_date
,net_demand_qty
,month_idx
,po_number
,po_status
,created_by
,creation_date
,flag
,lbfs_status
)
VALUES
(demantra.xxdm_sop_outbound_s.NEXTVAL
,p_supply_plan_id
,p_supply_plan_code
,p_supply_plan_desc
,p_fcst_type
,p_plan_method
,p_plc_status
,v_ro
,v_org
,p_ro_org
,p_ro_org_desc
,p_sp_item
,p_sp_item_desc
,v_category
,p_supplier
,p_supplier_desc
,p_supplier_site
,p_supplier_site_desc
,p_plan_date
,p_net_demand_qty
,p_month_idx
,p_po_number
,p_po_status
,p_created_by
,p_creation_date
,p_flag
,v_lbfs_status
);
END;
/*------------------------------------------------------------------------------
Created by HI4/Robbie.Zhu on 2009-5-14
Function:
S&OP Outbound not confirmed.
Logicality:
this procedure use to S&OP Outbound
Input: p_level_id -- demantra data model items level id
p_member_id -- demantra data model items member id
p_user_id -- demantra user id
Output:
null
------------------------------------------------------------------------------*/
PROCEDURE xxdm_sop_outbound_notfirmed
(p_level_id IN VARCHAR2
,p_member_id IN VARCHAR2
,p_user_id IN NUMBER)
IS
BEGIN
insert into demantra.xxdm_log_id values(p_level_id,p_member_id,p_user_id);
commit;
xxdm_sop_outbound_data(p_level_id,p_member_id,p_user_id,1);
EXCEPTION
WHEN OTHERS THEN
RAISE;
END;
/*------------------------------------------------------------------------------
Created by
Function:
S&OP Outbound confirmed.
Logicality:
this procedure use to S&OP Outbound
Input: p_level_id -- demantra data model items level id
p_member_id -- demantra data model items member id
p_user_id -- demantra user id
Output:
null
------------------------------------------------------------------------------*/
PROCEDURE xxdm_sop_outbound_firmed
(p_level_id IN VARCHAR2
,p_member_id IN VARCHAR2
,p_user_id IN NUMBER)
IS
BEGIN
xxdm_sop_outbound_data(p_level_id,p_member_id,p_user_id,2);
EXCEPTION
WHEN OTHERS THEN
RAISE;
END;
/*------------------------------------------------------------------------------
Created by HI4/Robbie.Zhu on 2009-5-14
Function:
update outbound lbfs status
Logicality:
Input: p_s_id -- seqence id
Output:
null
------------------------------------------------------------------------------*/
PROCEDURE update_sop_outbound_status
(p_s_id IN NUMBER,
o_result OUT SqlReturnTbl)
IS
BEGIN
UPDATE demantra.xxdm_sop_outbound
SET lbfs_status = 'Y'
WHERE s_id = p_s_id;
o_result(1) := 'update_sop_outbound_status successfully.';
EXCEPTION
WHEN OTHERS THEN
RAISE;
END;
/*------------------------------------------------------------------------------
Created by
Function:
update lbfs flag
Logicality:
Input:
Output:
null
------------------------------------------------------------------------------*/
PROCEDURE update_supply_lbfs_flag
(p_item_id IN VARCHAR2
,p_ro IN VARCHAR2
,p_site IN VARCHAR2
,p_supplier IN VARCHAR2
,p_supply_plan_id IN NUMBER
,p_sales_date IN VARCHAR2
,o_result OUT SqlReturnTbl)
IS
BEGIN
UPDATE demantra.supply_plan_data
SET t_ep_outbound_lbfs_flag = 1
WHERE item_id IN (SELECT item_id
FROM demantra.t_ep_item i, demantra.items items
WHERE i.t_ep_item_ep_id = items.t_ep_item_ep_id
AND i.item = p_item_id)
AND location_id IN
(SELECT loc.location_id
FROM demantra.t_ep_organization o,
demantra.t_ep_site s,
demantra.t_ep_ebs_supplier ss,
demantra.location loc
WHERE loc.t_ep_organization_ep_id = o.t_ep_organization_ep_id
AND loc.t_ep_site_ep_id = s.t_ep_site_ep_id
AND loc.t_ep_ebs_supplier_ep_id = ss.t_ep_ebs_supplier_ep_id
AND o.organization = p_ro
AND s.site = p_site
AND ss.ebs_supplier = p_supplier)
AND supply_plan_id = p_supply_plan_id
AND sales_date = TO_DATE (p_sales_date, 'YYYYMMDD');
o_result(1) := 'update_supply_lbfs_flag successfully. ';
EXCEPTION
WHEN OTHERS THEN
RAISE;
END;
/*------------------------------------------------------------------------------
Created by
Function:
update po flag
Logicality:
Input:
Output:
null
------------------------------------------------------------------------------*/
PROCEDURE update_supply_po_flag
(p_item_id IN VARCHAR2
,p_ro IN VARCHAR2
,p_site IN VARCHAR2
,p_supplier IN VARCHAR2
,p_supply_plan_id IN NUMBER
,p_sales_date IN VARCHAR2
,p_po_flag IN NUMBER)
IS
BEGIN
UPDATE demantra.supply_plan_data
SET t_ep_outbound_po_flag = p_po_flag
WHERE item_id IN (SELECT item_id
FROM demantra.t_ep_item i, demantra.items items
WHERE i.t_ep_item_ep_id = items.t_ep_item_ep_id
AND i.item = p_item_id)
AND location_id IN
(SELECT loc.location_id
FROM demantra.t_ep_organization o,
demantra.t_ep_site s,
demantra.t_ep_ebs_supplier ss,
demantra.location loc
WHERE loc.t_ep_organization_ep_id = o.t_ep_organization_ep_id
AND loc.t_ep_site_ep_id = s.t_ep_site_ep_id
AND loc.t_ep_ebs_supplier_ep_id = ss.t_ep_ebs_supplier_ep_id
AND o.organization = p_ro
AND s.site = p_site
AND ss.ebs_supplier = p_supplier)
AND supply_plan_id = p_supply_plan_id
AND sales_date = TO_DATE (p_sales_date, 'YYYYMMDD');
EXCEPTION
WHEN OTHERS THEN
RAISE;
END;
/*------------------------------------------------------------------------------
Created by
Function:
update outbound po number
Logicality:
Input: p_s_id -- seqence id
Output:
null
------------------------------------------------------------------------------*/
PROCEDURE update_sop_outbound_po
(p_s_id IN NUMBER,
p_pono IN VARCHAR2,
p_log_code IN VARCHAR2)
IS
v_supply_plan_id NUMBER;
BEGIN
/*SELECT a.supply_plan_id
INTO v_supply_plan_id
FROM demantra.xxdm_sop_outbound a
WHERE a.ROWID = p_row_id; */
UPDATE demantra.xxdm_sop_outbound
SET po_number = p_pono,po_status=NULL
WHERE s_id = p_s_id;
/*FOR rec_temp IN (SELECT mps.input_name
FROM apps.msc_plan_sched_v mps,
demantra.supply_plan sp
WHERE sp.supply_plan_id=v_supply_plan_id
AND sp.plan_id=mps.plan_id) LOOP
xxdm_util_pkg.insert_step_log_common2(rec_temp.input_name,'O','','','','',p_log_code);
END LOOP; */
EXCEPTION
WHEN OTHERS THEN
RAISE;
END;
/*------------------------------------------------------------------------------
Created by
Function:
update outbound po status
Logicality:
Input: p_s_id -- seqence id
Output:
null
------------------------------------------------------------------------------*/
PROCEDURE update_outbound_po_status
(p_action IN VARCHAR2,
p_s_id IN NUMBER,
p_po_status IN VARCHAR2,
p_log_code IN VARCHAR2)
IS
v_supply_plan_id NUMBER;
v_action VARCHAR2 (50);
v_sp_item VARCHAR2 (240);
v_ro VARCHAR2 (10);
v_supplier VARCHAR2 (240);
v_supplier_site VARCHAR2 (240);
v_plan_date DATE;
BEGIN
v_action := UPPER(p_action);
SELECT a.supply_plan_id,a.sp_item,a.ro,a.supplier,a.supplier_site,a.plan_date
INTO v_supply_plan_id,v_sp_item,v_ro,v_supplier,v_supplier_site,v_plan_date
FROM demantra.xxdm_sop_outbound a
WHERE a.s_id = p_s_id;
CASE v_action
WHEN 'APPORVE' THEN
UPDATE demantra.xxdm_sop_outbound
SET po_status = p_po_status
WHERE s_id = p_s_id;
update_supply_po_flag(v_sp_item,v_ro,v_supplier_site,v_supplier,v_supply_plan_id,TO_CHAR(v_plan_date,'YYYYMMDD'),1);
FOR rec_temp IN (SELECT mps.input_name
FROM apps.msc_plan_sched_v mps,
demantra.supply_plan sp
WHERE sp.supply_plan_id=v_supply_plan_id
AND sp.plan_id=mps.plan_id) LOOP
xxdm_util_pkg.insert_step_log_common2(rec_temp.input_name,'O','','','','',p_log_code);
END LOOP;
WHEN 'CANCEL' THEN
UPDATE demantra.xxdm_sop_outbound
SET po_number = '',po_status = p_po_status
WHERE s_id = p_s_id;
update_supply_po_flag(v_sp_item,v_ro,v_supplier_site,v_supplier,v_supply_plan_id,TO_CHAR(v_plan_date,'YYYYMMDD'),0);
ELSE DBMS_OUTPUT.PUT_LINE('No such action');
END CASE;
EXCEPTION
WHEN OTHERS THEN
RAISE;
END;
END;
/