Anda di halaman 1dari 60

CREATE OR REPLACE PACKAGE BODY INTREBOS.

TRANSFER_ANALYSIS_PACK_bkp as
PROCEDURE TAG_GENERATION IS
/*
Change History
--------------
MF 9/2/04 Created. It calls Txfer_Generation procedure to create o
ne TR for a TAG
*/
v_xfer_anal_run_nbr intrebos.transfer_analysis_run.xfer_anal_run_nbr%type
;
v_xfer_to_loc_nbr intrebos.location.loc_nbr%type;
v_source_module intrebos.intrebos_interface_queue.source_module%type;
v_country_code intrebos.transfer_analysis.corp_country_code%type;
e_sqlcode number;
e_sqlmsg varchar2(200);
v_results number := 0;
v_so_nbr number := 0;
v_sqlerr number := 0;
v_sqlmsg varchar2(200) := '';
v_sortcode varchar2(20);
e_noresults_error exception;
e_tr_generation_error exception;
--Preeti - added sort code to allow sorting based on TAG sort code.12/19/07
--Cursor for TRANSFER_ANALYSIS_RUN
cursor c_approved_TR is
SELECT
DISTINCT IIQ.SOURCE_KEY,
DECODE(TA.REQ_TYPE_CODE,'C',0,'D',0,'F',0,'J',TA.XFER_TO,TAL.XFER_TO_LOC
_NBR) XFER_TO_LOC_NBR,
IIQ.SOURCE_MODULE,
decode(tar.sort_code,null,'A',tar.sort_code) as sort_code,
loc.loc_country
FROM
INTREBOS.INTREBOS_INTERFACE_QUEUE IIQ,
Intrebos.Transfer_Analysis_Location TAL,
Intrebos.Transfer_Analysis TA ,
Intrebos.Transfer_Analysis_RUN TAR,
intrebos.location loc
WHERE IIQ.SOURCE_MODULE = 'TAG'
AND IIQ.DEST_MODULE = 'SOR'
AND IIQ.POSTED_FLAG = 'N'
AND IIQ.Source_Key = TAL.Xfer_Anal_Run_Nbr
AND TAL.Xfer_Anal_Run_Nbr = TAR.Xfer_Anal_Run_Nbr
AND TAR.Xfer_Anal_REF_Nbr = TA.Xfer_Anal_REF_Nbr
and tal.loc_nbr= loc.loc_nbr
UNION
SELECT DISTINCT IIQ.SOURCE_KEY, TRR.TO_LOC_NBR, IIQ.SOURCE_MODULE ,
decode(tr.sort_order_cd,null,'A',tr.sort_order_cd) as sort_code, trr.cou
ntry_cd
FROM INTREBOS.INTREBOS_INTERFACE_QUEUE IIQ, Intrebos.Transfer_Run_Resu
lt TRR,
Intrebos.Transfer_Run TR, intrebos.code_table_by_module CV
WHERE IIQ.SOURCE_MODULE = 'TXR'
AND IIQ.DEST_MODULE = 'SOR'
AND IIQ.POSTED_FLAG = 'N'
AND IIQ.Source_Key = TRR.Xfer_Run_Nbr
AND TR.Xfer_Run_Nbr = TRR.Xfer_Run_Nbr
AND TR.xfer_type_cd = CV.code
AND CV.sys_code = '57'
AND CV.code_type = 'TR'
AND CV.module_code = 'TXR'
UNION
SELECT DISTINCT IIQ.SOURCE_KEY, TRR.LOC_NBR, 'DCS' ,
decode(tr.sort_order_cd,null,'A',tr.sort_order_cd) as sort_code, trr.cou
ntry_cd
FROM INTREBOS.INTREBOS_INTERFACE_QUEUE IIQ, Intrebos.Transfer_Run_Resu
lt TRR,
Intrebos.Transfer_Run TR, code_values CV
WHERE IIQ.SOURCE_MODULE = 'TXR'
AND IIQ.DEST_MODULE = 'SOR'
AND IIQ.POSTED_FLAG = 'N'
AND IIQ.Source_Key = TRR.Xfer_Run_Nbr
AND TR.Xfer_Run_Nbr = TRR.Xfer_Run_Nbr
AND TR.xfer_type_cd = CV.code
AND CV.sys_code = '57'
AND CV.code_type = 'SO';
BEGIN
-- Fetching Approved TR from Intrebos Interface Queue Table.Added s
ort code to the list - Preeti
open c_approved_TR;
loop
fetch c_approved_TR into v_xfer_anal_run_nbr, v_xfer_to_loc_nbr,
v_source_module, v_sortcode,v_country_code;
exit when c_approved_TR%notfound;
if v_source_module = 'TAG' then
SELECT COUNT(*) INTO v_results FROM INTREBOS.TRANSFER_AN
ALYSIS_RESULTS
WHERE XFER_ANAL_RUN_NBR = v_xfer_anal_run_nbr;
else
SELECT COUNT(*) INTO v_results FROM INTREBOS.TRANSFER_RU
N_RESULT
WHERE XFER_RUN_NBR = v_xfer_anal_run_nbr;
end if;
if v_results = 0 then
close c_approved_TR;
raise e_noresults_error;
end if;
--Preeti -added sort code - 12/20/07
txfer_generation(v_xfer_anal_run_nbr, v_xfer_to_loc_nbr, v_sourc
e_module, v_sortcode, v_country_code, v_so_nbr, v_sqlerr, v_sqlmsg);
--If an error has occurred in Txfer_Generation
if v_sqlerr <> 0 then
raise e_tr_generation_error;
end if;
end loop;
close c_approved_TR;
EXCEPTION
WHEN e_noresults_error THEN
ROLLBACK;
UPDATE INTREBOS.INTREBOS_INTERFACE_QUEUE
SET POSTED_FLAG = 'E', COMMENTS = 'No Records in INTREBOS.TRA
NSFER_ANALYSIS_RESULTS Table'
WHERE SOURCE_KEY = v_xfer_anal_run_nbr
AND SOURCE_MODULE = 'TAG'
AND DEST_MODULE = 'SOR';
COMMIT;
--If there is any other error or e_tr_generation_error error the
n this clause is used
WHEN others THEN
close c_approved_TR;
IF v_sqlerr = 0 THEN
e_sqlcode := sqlcode;
e_sqlmsg := substr(sqlerrm,1,200);
ELSE
e_sqlcode := v_sqlerr;
e_sqlmsg := v_sqlmsg;
END IF;
UPDATE INTREBOS.INTREBOS_INTERFACE_QUEUE
SET POSTED_FLAG = 'E', COMMENTS = 'Err Code : ' || e_sqlcode
|| ' Msg : ' || e_sqlmsg
WHERE SOURCE_KEY = v_xfer_anal_run_nbr
AND SOURCE_MODULE = 'TAG'
AND DEST_MODULE = 'SOR';
--If error occurred inside Txfer_Generation procedure th
en v_so_nbr will NOT be 0 otherwise
--the error occurred inside TAG_Generation
IF v_so_nbr > 0 THEN
UPDATE INTREBOS.JOB_CONTROL
SET RECORDS_PROCESSED = 0,SUCCESS_OR_FAILURE = 'FAILU
RE',END_DATETIME = SYSDATE,
SQL_COMMAND = 'Err Code : ' || e_sqlcode || ' Msg
: ' || e_sqlmsg
WHERE JOB_ID = v_so_nbr AND JOB_NAME = 'TXFER_GENERATIO
N';
ELSE
UPDATE INTREBOS.JOB_CONTROL
SET RECORDS_PROCESSED = 0,SUCCESS_OR_FAILURE = 'FAILU
RE',END_DATETIME = SYSDATE,
SQL_COMMAND = 'Err Code : ' || e_sqlcode || ' Msg
: ' || e_sqlmsg
WHERE JOB_ID = v_xfer_anal_run_nbr AND JOB_NAME = 'TAG_
GENERATION';
END IF;
COMMIT;
END TAG_GENERATION;
--------------------------------------------------------------------------------
------
--Adding to create SO from Transfer Engine Tables also for Reverse Logistics Pro
ject
--New IN valiable is added for the procedure v_source_module
--Based on v_source_module data will be got from TAG tables or Transfer Engine t
ables
-- Preeti 08/31/07 Determine number of distinct items for each TAG.
-- If the number of items per location >999,move it to an
other TR.
-- POS is having problems handling TRs with locations hav
ing greater than 999 items.
-- Added sort code to the Procedure - 12/20/07
--------------------------------------------------------------------------------
------
PROCEDURE TXFER_GENERATION(v_xfer_anal_run_nbr IN INTREBOS.Transfer_Analysis_Run
.XFER_ANAL_RUN_NBR%type,
xfer_loc_to IN Intrebos.location.LOC_NBR%type, v_source_module IN intrebos.intre
bos_interface_queue.source_module%type,
v_sortcode IN intrebos.Transfer_Analysis_RUN.sort_code%type,
v_country_code in intrebos.transfer_analysis.corp_country_code%type, so_nbr OUT
number, sqlerr OUT number, sqlmsg OUT varchar2)
IS
--Variables for SO_DESC
v_so_desc_country_code intrebos.location.loc_country%type;-- intrebo
s.so_desc.country_code%type;
v_so_desc_so_nbr intrebos.so_dest.so_nbr%type;
v_so_status varchar2(200);-- intrebos.so_desc.so_status%ty
pe;
v_so_create_date date;--intrebos.so_desc.so_create_date%type;
v_so_create_user intrebos.so_desc.so_create_user%type;
v_so_approve_date intrebos.so_desc.so_approve_date%type;
v_so_approve_user intrebos.so_desc.so_approve_user%type;
v_so_type intrebos.so_desc.so_type%type;
v_business_type intrebos.so_desc.business_type%type;
v_so_rev_share intrebos.so_desc.so_rev_share%type
:= 'N';
v_so_nofill_order intrebos.so_desc.so_nofill_order%type
:= 'N';
v_so_pre_book intrebos.so_desc.so_pre_book%type
:= 'N';
v_so_cancel_ship_date intrebos.so_desc.so_cancel_ship_date%type
:= '01-JAN-3500';
v_period_date intrebos.so_desc.period_date%type;
v_so_buyer intrebos.so_desc.so_buyer%type
:= '99';
v_so_requested_user intrebos.so_desc.so_requested_user%type
:= ' ';
v_so_buyer_comments intrebos.so_desc.so_buyer_comments%type
:= 'C - Corporate Initiated';
v_so_dc_comments intrebos.so_desc.so_dc_comments%type
:= null;
v_so_internal_comments intrebos.so_desc.so_internal_comments%type
;
v_so_copy_nbr intrebos.so_desc.so_copy_nbr%type
:= null;
v_so_sort_order intrebos.so_desc.so_sort_order%type;
v_last_update_user intrebos.so_desc.last_update_user%type;
v_last_update_date intrebos.so_desc.last_update_date%type;
v_last_update_module intrebos.so_desc.last_update_module%type;
v_so_replenishment intrebos.so_desc.so_replenishment%type
:= 'N';
v_tot_sugg_txfer_qty intrebos.so_desc.tot_sugg_txfer_qty%type;
v_txfer_exp_date intrebos.so_desc.txfer_exp_date%type;
v_txfer_start_date intrebos.so_desc.txfer_start_date%type;
v_send_to_loc_date intrebos.so_desc.send_to_loc_date%type;
v_txfer_ship_method intrebos.so_desc.txfer_ship_method%type;
v_sent_date intrebos.so_desc.sent_date%type;
v_reqst_reason intrebos.so_desc.reqst_reason%type;
--Variables for SO_ITEMS
v_so_items_country_code intrebos.so_items.country_code%type;
v_soi_tot_qty_ord intrebos.so_items.soi_tot_qty_ord%type;
v_soi_tot_qty_rcv intrebos.so_items.soi_tot_qty_rcv%type
:= 0;
v_soi_delivery_date intrebos.so_items.soi_delivery_date%type
:= '01-JAN-3500';
v_soi_lot_qty intrebos.so_items.soi_lot_qty%type
:= 1;
--Variables for SO_DEST_ITEMS
v_so_dest_items_country_code intrebos.so_dest_items.country_code%type;
v_sodi_qty_rcv intrebos.so_dest_items.sodi_qty_rcv%type
:= 0;
--Other Variables
v_xfer_anal_ref_nbr intrebos.transfer_analysis_run.xfer_anal_ref
_nbr%type;
v_start_doc_nbr intrebos.doc_nbrs.start_doc_nbr%type;
v_end_doc_nbr intrebos.doc_nbrs.end_doc_nbr%type;
v_curr_doc_nbr intrebos.doc_nbrs.curr_doc_nbr%type;
v_auto_increment intrebos.doc_nbrs.auto_increment%type;
v_warn_doc intrebos.doc_nbrs.warn_doc%type;
v_rowid rowid;
v_results number :=0;
v_no_of_TRs number :=0; --Preeti - 09/06/07
v_loc_TR_count number :=0;
v_counter number :=0; --Preeti - 09/06/07
v_loc_nbr number :=0;
v_loc_count number :=0;
v_MAX_loc_nbr number :=0;
v_MAX_loc_count number :=0;
v_sort_order_list varchar2(4000);
v_line_nbr intrebos.so_items.line_nbr%type :=0;
v_item_count number :=0;
--Added for store to store transfers
v_store_to_store number:=1;
v_count_s2s number:=0;
--Added to avoid unique constraint violation
v_count_business_type number :=0;
v_count_TAR number :=0;
v_count_SO number :=0;
--Added by Preethi surendran for Guam TAG
v_count_TAGResults number := 0;
v_so_items_count number :=0 ;
v_so_dest_items_count number := 0;
v_data_found boolean:=true;
-- Adding a record type to store the various number of TRs Preeti - 09/06/07
TYPE TR_NO_List IS RECORD (rec_TR_nbr intrebos.so_desc.so_nbr%type);
TYPE TR_NO IS TABLE OF TR_NO_List INDEX BY BINARY_INTEGER;
TR_NO_value TR_NO;
--Cursor for TAG-loc-count
cursor c_TAG_loc_count is
SELECT LOC_NBR,COUNT(*)
FROM
(
SELECT DISTINCT TAR.ITEM_NBR AS ITEM_NBR, TAR.BUSINESS_TYPE_CD AS BUSINE
SS_TYPE, TAR.LOC_NBR AS LOC_NBR
FROM
INTREBOS.TRANSFER_ANALYSIS_RESULTS TAR,
INTREBOS.TRANSFER_ANALYSIS TA,
INTREBOS.TRANSFER_ANALYSIS_RUN TARUN,
intrebos.location loc
WHERE
TAR.XFER_ANAL_RUN_NBR = TARUN.XFER_ANAL_RUN_NBR
AND TARUN.XFER_ANAL_REF_NBR = TA.XFER_ANAL_REF_NBR
AND TAR.XFER_ANAL_RUN_NBR =v_xfer_anal_run_nbr
AND DECODE(TA.REQ_TYPE_CODE,'C',0,'D',0,'F',0,'J',TA.XFER_TO,TAR.XFER_TO
_LOC_NBR) = xfer_loc_to
AND DECODE(NVL(TAR.LAST_CHANGE_XFER_QTY,0),0,TAR.SUGGEST_XFER_QTY, TAR.L
AST_CHANGE_XFER_QTY) > 0
AND NVL(TAR.EXCL_IND,0)=0
and tar.loc_nbr=loc.loc_nbr
and loc.loc_country=decode(v_country_code,'GU','GU','US','US','CA','CA','US')
)
GROUP BY LOC_NBR HAVING COUNT(*) >999 ORDER BY COUNT(*) DESC,LOC_NBR;

cursor c_TXR_loc_count is
SELECT LOC_NBR,COUNT(*)
FROM
(
SELECT DISTINCT TRR.ITEM_NBR AS ITEM_NBR, TRR.BUSINESS_TYPE_CD AS BUSIN
ESS_TYPE, TRR.LOC_NBR AS LOC_NBR
FROM
INTREBOS.TRANSFER_RUN_RESULT TRR
WHERE
TRR.XFER_RUN_NBR = v_xfer_anal_run_nbr
AND TRR.TO_LOC_NBR = xfer_loc_to
AND TRR.SUGGEST_XFER_QTY > 0
)
GROUP BY LOC_NBR HAVING COUNT(*) >999 ORDER BY COUNT(*) DESC,LOC_NBR;
BEGIN
If trim(v_sortcode) = 'A' then
v_sort_order_list:='im.division,im.item_desc';
else
v_sort_order_list:='im.division,im.rental_dept,im.rental_class,im.item_de
sc,im.retail_class,im.retail_subclass';
end if;

-- GET THE CORRESPONDING REF NBR FROM TRANSFER_ANALYSIS_RUN TABLE.


---------------------------------------------------------------------
---------------------------------------------------------------------
--Added by Preethi Surendran for Guam TAG
begin
if(v_source_module='TAG') then
SELECT COUNT(*) into v_count_TAGResults
FROM
(
SELECT DISTINCT TAR.ITEM_NBR AS ITEM_NBR, TAR.BUSINESS_TYPE_CD AS BUSINE
SS_TYPE, TAR.LOC_NBR AS LOC_NBR
FROM
INTREBOS.TRANSFER_ANALYSIS_RESULTS TAR,
INTREBOS.TRANSFER_ANALYSIS TA,
INTREBOS.TRANSFER_ANALYSIS_RUN TARUN,
intrebos.location loc
WHERE
TAR.XFER_ANAL_RUN_NBR = TARUN.XFER_ANAL_RUN_NBR
AND TARUN.XFER_ANAL_REF_NBR = TA.XFER_ANAL_REF_NBR
AND TAR.XFER_ANAL_RUN_NBR =v_xfer_anal_run_nbr
AND DECODE(TA.REQ_TYPE_CODE,'C',0,'D',0,'F',0,'J',TA.XFER_TO,TAR.XFER_TO
_LOC_NBR) = xfer_loc_to
AND DECODE(NVL(TAR.LAST_CHANGE_XFER_QTY,0),0,TAR.SUGGEST_XFER_QTY, TAR.L
AST_CHANGE_XFER_QTY) > 0
AND NVL(TAR.EXCL_IND,0)=0
and tar.loc_nbr=loc.loc_nbr
and loc.loc_country=decode(v_country_code,'GU','GU','US','US','CA','CA','US')
);

end if;
exception when no_data_found then
v_data_found:=false;
when others then
dbms_output.put_line('Failed during count. Ignore count and proceed');
end;
if v_source_module = 'TAG' THEN
SELECT XFER_ANAL_REF_NBR INTO v_xfer_anal_ref_nbr
FROM INTREBOS.TRANSFER_ANALYSIS_RUN
WHERE XFER_ANAL_RUN_NBR = v_xfer_anal_run_nbr;
dbms_output.put_line ('TAG - RUN nbr/REF Nbr/xfer_loc_to: ' || v_xfer_an
al_run_nbr || ' / ' || v_xfer_anal_ref_nbr || ' / ' || xfer_loc_to);
dbms_output.put_line ('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~');

elsif v_source_module = 'TXR' THEN


dbms_output.put_line ('TXR - RUN nbr/xfer_loc_to: ' || v_xfer_anal_run_n
br || ' / ' || xfer_loc_to);
dbms_output.put_line ('~~~~~~~~~~~~~~~~~~~~~~~~~~~');

end if;
-- dbms_output.put_line ('Nbr of MAX items - start:' || TO_CHAR(SYSDATE,
'MM/DD/YYYY HH24:MI:SS'));

-- CREATING NEW TXFER ORDER NBR.DETERMINE HOW MANY TRS ARE NEEDED. PREET
I - 09/05/07
-- GET DISTINCT ITEM NBRS AND THEN SPLIT BY 999 TO GET TOTAL NUMBER OF T
RS REQUIRED.
------------------------------------------------------------------------
-----------
------------------------------------------------------------------------
-----------
if v_source_module = 'TAG' THEN
-- Retrieve the first record, which is the one with the max numb
er of locations.
OPEN c_TAG_loc_count;
FETCH c_TAG_loc_count INTO v_MAX_loc_nbr,v_MAX_loc_count;
CLOSE c_TAG_loc_count;
elsif v_source_module = 'TXR' THEN
-- Retrieve the first record, which is the one with the max numb
er of locations.
OPEN c_TXR_loc_count;
FETCH c_TXR_loc_count INTO v_MAX_loc_nbr,v_MAX_loc_count;
CLOSE c_TXR_loc_count;
dbms_output.put_line ('TXR - RUN nbr/xfer_loc_to: ' || v_xfer_anal_run_n
br || ' / ' || xfer_loc_to);
dbms_output.put_line ('~~~~~~~~~~~~~~~~~~~~~~~~~~~');

else
dbms_output.put_line ('TXR - RUN nbr/xfer_loc_to: ' || v_xfer_anal_run_n
br || ' / ' || xfer_loc_to);
dbms_output.put_line ('~~~~~~~~~~~~~~~~~~~~~~~~~~~');
dbms_output.put_line ('OP order - "DC to Store" - will only have ONE ord
er generated.');
end if;

-- GET MAX COUNT OF ITEMS PER LOCATION AND THEN SPLIT BY 999 TO GET TOT
AL NUMBER OF TRS REQUIRED.
-- OP Order for reverse logistics will always have one SO created.
-----------------------------------------------------------------------
--------------------------
-----------------------------------------------------------------------
--------------------------
--Added by Preethi Surendran for Guam TAG
if v_source_module = 'TAG' or v_source_module = 'TXR' then
if v_MAX_loc_count=0 then
v_no_of_TRs:=1;
dbms_output.put_line ('NO location in TAG has >999 ite
ms.');
else
v_no_of_TRs:= ceil(v_MAX_loc_count/999);
dbms_output.put_line ('MAX(item count) for location hav
ing >999 items: '|| v_MAX_loc_count ||' / LOC_NBR: ' ||v_MAX_loc_nbr);
end if;
else
v_no_of_TRs:= 1;
end if;
dbms_output.put_line ('Nbr of TRs: '|| v_no_of_TRs);

SELECT START_DOC_NBR,END_DOC_NBR,CURR_DOC_NBR,AUTO_INCREMENT,WARN_DOC,RO
WID
INTO v_start_doc_nbr,v_end_doc_nbr,v_curr_doc_nbr,v_auto_increment,v_w
arn_doc,v_rowid
FROM INTREBOS.DOC_NBRS
WHERE TABLE_NAME = 'SO_DESC'
AND FIELD_NAME = 'SO_NBR'
FOR UPDATE;
-- GENERATE THE TR NUMBER LIST
------------------------------
------------------------------
-- dbms_output.put_line ('Nbr of TRs - start:' || TO_CHAR(SYSDATE,'MM/DD
/YYYY HH24:MI:SS'));
-- ADD NEW TR NUMBERS TO THE LIST
for v_counter in 1..v_no_of_TRs loop
TR_NO_value(v_counter).rec_TR_nbr:= v_curr_doc_nbr;
v_curr_doc_nbr := v_curr_doc_nbr + v_auto_increment;

-- Insert Record into Job Control Table.


INSERT INTO JOB_CONTROL
(JOB_ID,
JOB_NAME,
RECORDS_PROCESSED,
SUCCESS_OR_FAILURE,
START_DATETIME,
END_DATETIME,
LAST_PROCESS_DATETIME)
VALUES (TR_NO_value(v_counter).rec_TR_nbr,
'TR_GENERATION',
0,
'WIP',
SYSDATE,
SYSDATE,
SYSDATE);

end loop;
UPDATE DOC_NBRS
SET CURR_DOC_NBR = v_curr_doc_nbr
WHERE ROWID = v_rowid;
COMMIT;
-- Retrive Data to be inserted into SO_DESC.
if v_source_module = 'TAG' then
SELECT BUSINESS_TYPE,REQ_TYPE_CODE,XFER_REASON_CODE
INTO v_business_type, v_so_type, v_reqst_reason
FROM INTREBOS.TRANSFER_ANALYSIS
WHERE XFER_ANAL_REF_NBR = v_xfer_anal_ref_nbr;
else
SELECT COUNTRY_CD,BUSINESS_TYPE_CD,DECODE(XFER_TYPE_CD, 'L', 'E'
, XFER_TYPE_CD),REQUEST_DESC
INTO v_so_desc_country_code, v_business_type, v_so_type, v_req
st_reason
FROM INTREBOS.TRANSFER_RUN
WHERE XFER_RUN_NBR = v_xfer_anal_run_nbr;
end if;
--Added by Preethi Surendran for Guam TAG
if(v_source_module='TAG') then
v_so_desc_country_code:=v_country_code;
end if;
-- Use US country code in Line Item records for Guam orders
if v_so_desc_country_code = 'GU' then
v_so_items_country_code := 'US';
v_so_dest_items_country_code := 'US';
else
v_so_items_country_code := v_so_desc_country_code;
v_so_dest_items_country_code := v_so_desc_country_code;
end if;
v_tot_sugg_txfer_qty := 0;
if v_source_module = 'TAG' then
SELECT STATUS_CODE,
SHIP_CODE,
SORT_CODE,
XFER_INST,
CREATE_USER,
CREATE_DATE,
APPROVE_USER,
APPROVE_DATE,
SEND_TO_LOC_DATE,
START_XFER_DATE,
XFER_EXPIRE_DATE,
LAST_UPDATE_USER,
LAST_UPDATE,
LAST_UPDATE_MODULE
INTO v_so_status,
v_txfer_ship_method,
v_so_sort_order,
v_so_internal_comments,
v_so_create_user,
v_so_create_date,
v_so_approve_user,
v_so_approve_date,
v_send_to_loc_date,
v_txfer_start_date,
v_txfer_exp_date,
v_last_update_user,
v_last_update_date,
v_last_update_module
FROM INTREBOS.TRANSFER_ANALYSIS_RUN
WHERE XFER_ANAL_REF_NBR = v_xfer_anal_ref_nbr
AND XFER_ANAL_RUN_NBR = v_xfer_anal_run_nbr;
elsif v_source_module = 'TXR' then --Rev Log Changes
SELECT decode(RUN_STATUS_CD, 'C', 'A', RUN_STATUS_CD),
SHIP_METHOD_CD,
SORT_ORDER_CD,
XFER_INSTR_TXT,
LAST_UPDATE_USER_ID,
LAST_UPDATE_DTS,
APPROVE_USER_ID,
APPROVE_DTS,
SEND_TO_LOC_DT,
XFER_START_DT,
XFER_END_DT,
LAST_UPDATE_USER_ID,
LAST_UPDATE_DTS,
LAST_UPDATE_MODULE
INTO v_so_status,
v_txfer_ship_method,
v_so_sort_order,
v_so_internal_comments,
v_so_create_user,
v_so_create_date,
v_so_approve_user,
v_so_approve_date,
v_send_to_loc_date,
v_txfer_start_date,
v_txfer_exp_date,
v_last_update_user,
v_last_update_date,
v_last_update_module
FROM INTREBOS.TRANSFER_RUN
WHERE XFER_RUN_NBR = v_xfer_anal_run_nbr;
else
SELECT 'P',
SHIP_METHOD_CD,
SORT_ORDER_CD,
XFER_INSTR_TXT,
LAST_UPDATE_USER_ID,
LAST_UPDATE_DTS,
APPROVE_USER_ID,
APPROVE_DTS,
SEND_TO_LOC_DT,
XFER_START_DT,
XFER_END_DT,
LAST_UPDATE_USER_ID,
LAST_UPDATE_DTS,
LAST_UPDATE_MODULE
INTO v_so_status,
v_txfer_ship_method,
v_so_sort_order,
v_so_internal_comments,
v_so_create_user,
v_so_create_date,
v_so_approve_user,
v_so_approve_date,
v_send_to_loc_date,
v_txfer_start_date,
v_txfer_exp_date,
v_last_update_user,
v_last_update_date,
v_last_update_module
FROM INTREBOS.TRANSFER_RUN
WHERE XFER_RUN_NBR = v_xfer_anal_run_nbr;
end if;
if v_source_module <> 'DCS' then
SELECT PERIOD_END_DT INTO v_period_date FROM DA.PERIOD
WHERE DAY_DT = TRUNC(v_txfer_start_date);
else
SELECT PERIOD_END_DT INTO v_period_date FROM DA.PERIOD P, INTREB
OS.TRANSFER_RUN TR
WHERE XFER_RUN_NBR = v_xfer_anal_run_nbr
AND DAY_DT = TRUNC(sysdate);
end if;
-- INSERT INTO SO_DESC. NOW INSIDE A LOOP TO HANDLE MULTIPLE TR GENERATION. PREE
TI-09/07/07
--------------------------------------------------------------------------------
-----------
--------------------------------------------------------------------------------
-----------
-- dbms_output.put_line ('SO_DESC - start:' || TO_CHAR(SYSDATE,'MM/DD/YY
YY HH24:MI:SS'));
v_counter:=1;
for v_counter in 1..v_no_of_TRs loop
INSERT INTO intrebos.SO_DESC
(COUNTRY_CODE,
SO_NBR,
SO_STATUS,
SO_CREATE_DATE,
SO_CREATE_USER,
SO_APPROVE_DATE,
SO_APPROVE_USER,
SO_TYPE,
BUSINESS_TYPE,
DC_NBR,
SO_REV_SHARE,
SO_NOFILL_ORDER,
SO_PRE_BOOK,
SO_CANCEL_SHIP_DATE,
PERIOD_DATE,
SO_BUYER,
SO_REQUESTED_USER,
SO_BUYER_COMMENTS,
SO_DC_COMMENTS,
SO_INTERNAL_COMMENTS,
SO_COPY_NBR,
SO_SORT_ORDER,
LAST_UPDATE_USER,
LAST_UPDATE_DATE,
LAST_UPDATE_MODULE,
SO_REPLENISHMENT,
TOT_SUGG_TXFER_QTY,
TXFER_EXP_DATE,
TXFER_START_DATE,
SEND_TO_LOC_DATE,
TXFER_SHIP_METHOD,
SENT_DATE,
REQST_REASON)
VALUES (v_so_desc_country_code,
TR_NO_value(v_counter).rec_TR_nbr, --Preeti
v_so_status,
v_so_create_date,
v_so_create_user,
v_so_approve_date,
v_so_approve_user,
v_so_type,
v_business_type,
xfer_loc_to,
v_so_rev_share,
v_so_nofill_order,
v_so_pre_book,
v_so_cancel_ship_date,
v_period_date,
v_so_buyer,
v_so_requested_user,
v_so_buyer_comments,
v_so_dc_comments,
v_so_internal_comments,
v_so_copy_nbr,
v_so_sort_order,
v_last_update_user,
v_last_update_date,
v_last_update_module,
v_so_replenishment,
v_tot_sugg_txfer_qty,
v_txfer_exp_date,
v_txfer_start_date,
v_send_to_loc_date,
v_txfer_ship_method,
v_sent_date,
v_reqst_reason);

end loop;
-- NOW THERE IS A 999 ITEM LIMIT CONDITION PER LOCATION. PREETI-09/07/07
-- FIRST INSERT ITEMS FOR ALL LOCATIONS HAVING >999 ITEMS. THEN INSERT T
HE ITEMS FOR THE
-- REMAINING LOCATIONS.
------------------------------------------------------------------------
--------------------
-- Sample Logic:
-- TAG HAS
-- Loc1 Item count=1500
-- Loc2 Item count=1200
-- Loc3 Item count=500
-- Loc4 Item count=100
--TR1 HAS TR2 HAS
-- Loc1 Item count=999 Loc1 Item count=501
-- Loc2 Item count=999 Loc2 Item count=201
-- Loc3 Item count=500
-- Loc4 Item count=100
------------------------------------------------------------------------
--------------------
v_counter:=1;
v_soi_tot_qty_ord := 0;
for v_counter in 1..v_no_of_TRs loop
-- Insert Record Into POSO_IMPORT_DESC VALUES.
-- This was moved up so that It can be used in SO_ITEMS query.
INSERT INTO INTREBOS.POSO_IMPORT_DESC
(MODULE_CODE,
IMPORT_SEQ_NBR,
ORDER_NBR)
VALUES
('SOR',
v_xfer_anal_run_nbr,
TR_NO_value(v_counter).rec_TR_nbr);
SELECT COUNT(*) INTO v_results
FROM INTREBOS.POSO_ADDNL_INFO
WHERE ORDER_NBR = v_xfer_anal_run_nbr;
-- What is the significance
if v_results = 1 then
UPDATE INTREBOS.POSO_ADDNL_INFO
SET ORDER_NBR = TR_NO_value(v_counter).rec_TR_nbr
WHERE ORDER_NBR = v_xfer_anal_run_nbr;
end if;
end loop;
-- dbms_output.put_line ('SO_DEST - start:' || TO_CHAR(SYSDATE,'MM/DD/YY
YY HH24:MI:SS'));
-- SO_DEST INSERT
-----------------
-----------------
if v_source_module = 'TAG' then
-------------------------
-------------------------
-- FIRST INSERT ALL LOCATIONS>999 INTO MULTIPLE TRs.
-----------------------------------------------
if v_MAX_loc_count<> 0 then -- if locations have more than 999 items
dbms_output.put_line ('SO_DEST TAG - LOC>999: ' || TO_CHAR(SYSDATE,'MM
/DD/YYYY HH24:MI:SS'));
OPEN c_TAG_loc_count;
LOOP
FETCH c_TAG_loc_count INTO v_loc_nbr,v_loc_count;
exit when c_TAG_loc_count%notfound;
-- How many TRs will a particular location span into.
v_loc_TR_count:=ceil(v_loc_count/999);
for v_counter in 1..v_loc_TR_count loop
-- If a location has more than 999 items, it will be split i
nto multiple TRs.
INSERT INTO INTREBOS.SO_DEST (LOC_NBR,SO_NBR)
values (v_loc_nbr,TR_NO_value(v_counter).rec_TR_nbr);
end loop;
END LOOP;
CLOSE c_TAG_loc_count;
end if; ---Rajan Added
-- NOW INSERT ALL LOC <999 INTO THE FIRST TR.
-----------------------------------------------
v_counter:=1;
INSERT INTO INTREBOS.SO_DEST (LOC_NBR,SO_NBR)
SELECT distinct TAR.LOC_NBR ,TR_NO_value(v_counter).rec_
TR_nbr
FROM
INTREBOS.TRANSFER_ANALYSIS_RESULTS TAR,
INTREBOS.TRANSFER_ANALYSIS TA,
INTREBOS.TRANSFER_ANALYSIS_run Trun
WHERE
TAr.XFER_ANAL_Run_NBR = v_xfer_anal_run_nbr
and trun.XFER_ANAL_RUN_NBR = v_xfer_anal_run_nbr
and TA.XFER_ANAL_Ref_NBR = trun.XFER_ANAL_Ref_NBR
AND DECODE(TA.REQ_TYPE_CODE,'C',0,'D',0,'F',0,'J',TA.XFE
R_TO,TAR.XFER_TO_LOC_NBR) = xfer_loc_to
AND DECODE(NVL(LAST_CHANGE_XFER_QTY,0),0,SUGGEST_XFER_QT
Y,LAST_CHANGE_XFER_QTY) > 0
AND NVL(EXCL_IND,0) = 0
and TAR.loc_nbr not in (select loc_nbr from intrebos.so_
dest where so_nbr=TR_NO_value(v_counter).rec_TR_nbr)
--Added by Preethi Surendran for Guam TAG
and tar.loc_nbr in (select loc_nbr from intrebos.location where trim
(loc_country)=decode(v_country_code,'GU','GU','US','US','CA','CA','US'));
elsif v_source_module = 'TXR' then
-----------------------------
-----------------------------
-- FIRST INSERT ALL LOCATIONS>999 INTO MULTIPLE TRs.
-----------------------------------------------
if v_MAX_loc_count<> 0 then -- if locations have more than 999
items
dbms_output.put_line ('SO_DEST TXR - LOC>999: ' || TO_CHAR(SYSD
ATE,'MM/DD/YYYY HH24:MI:SS'));
OPEN c_TXR_loc_count;
LOOP
FETCH c_TXR_loc_count INTO v_loc_nbr,v_loc_count;
exit when c_TXR_loc_count%notfound;
-- How many TRs will a particular location span into.
v_loc_TR_count := ceil(v_loc_count/999);
for v_counter in 1..v_loc_TR_count loop
-- If a location has more than 999 items, it will be
split into multiple TRs.
INSERT INTO INTREBOS.SO_DEST (LOC_NBR,SO_NBR)
values (v_loc_nbr,TR_NO_value(v_counter).rec_TR_nbr)
;
end loop;
END LOOP;
CLOSE c_TXR_loc_count;
end if;
-- NOW INSERT ALL LOC <999 INTO THE FIRST TR.
-----------------------------------------------
v_counter:=1;

INSERT INTO INTREBOS.SO_DEST (LOC_NBR,SO_NBR)


SELECT distinct TRR.LOC_NBR , TR_NO_value(v_counter).rec_TR_nbr
FROM INTREBOS.TRANSFER_RUN_RESULT trr
WHERE XFER_RUN_NBR = v_xfer_anal_run_nbr
AND TO_LOC_NBR = xfer_loc_to
AND SUGGEST_XFER_QTY > 0
and TRR.loc_nbr not in (select loc_nbr from intrebos.so_dest whe
re so_nbr=TR_NO_value(v_counter).rec_TR_nbr);
else -- OP order
----------------
-- OP order type will always have one SO generated irrespective
of the nbr of items.
----------------------------------------------------------------
-------------------
----------------------------------------------------------------
-------------------
INSERT INTO INTREBOS.SO_DEST (LOC_NBR,SO_NBR)
SELECT UNIQUE(TO_LOC_NBR) ,TR_NO_value(1).rec_TR_nbr
FROM INTREBOS.TRANSFER_RUN_RESULT
WHERE XFER_RUN_NBR = v_xfer_anal_run_nbr
AND LOC_NBR = xfer_loc_to
AND SUGGEST_XFER_QTY > 0;
end if;

-- dbms_output.put_line ('SO_ITEMS - start:' || TO_CHAR(SYSDATE,'MM/DD/YYYY HH24


:MI:SS'));
-- SO_ITEMS INSERT
------------------
------------------
if v_source_module = 'TAG' then
-------------------------------

v_counter := 1;
--Added by Preethi 06-Oct to insert in intrebos.so_items for the first TR
--First TR will have all items transferred to locations<999 items and first 999
items from other locations

if (xfer_loc_to=0) then
for c_TR1 in
(select loc_nbr from so_dest where so_nbr = TR_NO_value(v_counter).rec_TR_nbr)
loop
INSERT INTO INTREBOS.SO_ITEMS
(SO_NBR,
COUNTRY_CODE,
ITEM_NBR,
BUSINESS_TYPE_CD,
LINE_NBR,
SOI_TOT_QTY_ORD,
SOI_TOT_QTY_RCV,
SOI_DELIVERY_DATE,
SOI_LOT_TYPE,
SOI_LOT_QTY)
SELECT TR_NO_value(v_counter).rec_TR_nbr,
v_so_items_country_code,
ITEM_NBR,BUSINESS_TYPE_CD,rnum,--(ROWNUM + v_line_nbr)-1 ,
v_soi_tot_qty_ord,
v_soi_tot_qty_rcv,
to_date(v_soi_delivery_date) as soi_delivery_date,
'01',
v_soi_lot_qty
FROM(SELECT ITEM_NBR,BUSINESS_TYPE_CD,rnum
FROM (SELECT s.ITEM_NBR,BUSINESS_TYPE_CD, rownum - 1 rnum FROM
((SELECT
--Added by Preethi for tuning
/*+ driving_site(tar) use_hash(tar si) index(TAR, TRANSFER_ANALYSIS_RESULTS_P
K) index(si, SO_ITEMS_PDX) INDEX(IM,ITEM_MASTER_PK) index(im, ITEM_MASTER_ITEM_N
BR)*/
DISTINCT TAR.ITEM_NBR, TAR.BUSINESS_TYPE_CD
FROM
--TAG Duplicate fix
(select /*+ DRIVING_SITE(TAR) INDEX(INTREBOS.TRANSFER_ANALYSIS_RESULTS TRANSFE
R_ANALYSIS_RESULTS_PK) */
* from intrebos.transfer_analysis_results
where (item_nbr) not in (SELECT ITEM_NBR FROM SO_ITEMS soi, so_desc sd
WHERE soi.SO_NBR IN (SELECT ORDER_NBR FROM
INTREBOS.POSO_IMPORT_DESC WHERE MODULE_CODE ='SOR' AND IMPORT_SEQ_NBR=v_xfer_a
nal_run_nbr)
and soi.so_nbr=sd.so_nbr and sd.country_code=v_country_code)) TAR,
-- INTREBOS.TRANSFER_ANALYSIS_RESULTS TAR,
INTREBOS.TRANSFER_ANALYSIS TA,
INTREBOS.TRANSFER_ANALYSIS_RUN TARUN,
INTREBOS.ITEM_MASTER IM
WHERE TAR.XFER_ANAL_RUN_NBR = TARUN.XFER_ANAL_RU
N_NBR
AND TARUN.XFER_ANAL_REF_NBR = TA.XFER_ANAL_REF_N
BR
AND TAR.XFER_ANAL_RUN_NBR = v_xfer_anal_run_nbr
AND DECODE(TA.REQ_TYPE_CODE,'C',0,'D',0,'F',0,'J',TA.X
FER_TO,TAR.XFER_TO_LOC_NBR)= xfer_loc_to
AND DECODE(NVL(TAR.LAST_CHANGE_XFER_QTY,0),0,TAR.SUGGE
ST_XFER_QTY, TAR.LAST_CHANGE_XFER_QTY) > 0
AND NVL(TAR.EXCL_IND,0)=0
AND TAR.ITEM_NBR=IM.ITEM_NBR
and TAR.Loc_Nbr=c_TR1.Loc_Nbr
--Added by Preethi Surendran for Guam TAG
and tar.loc_nbr in (select loc_nbr from intrebos.location where trim
(loc_country)=decode(v_country_code,'GU','GU','US','US','CA','CA','US'))
and TA.CORP_COUNTRY_CODE=IM.COUNTRY_CODE)
MINUS
(SELECT ITEM_NBR,BUSINESS_TYPE_CD FROM INTREBOS.SO_ITE
MS SI
where SI.SO_NBR = TR_NO_value(v_counter).rec_TR_nbr)
) s,item_master im
WHERE s.item_nbr=im.ITEM_NBR AND im.COUNTRY_CODE=decod
e(v_so_desc_country_code,'US','US','CA','CA','GU','US','US')
ORDER BY v_sort_order_list)
where rownum-1<999);
end loop;
--TAG Long run fix
select count(distinct business_type_cd) into v_count_business_type
from intrebos.transfer_analysis_results tar where xfer_anal_run_nbr=v_xfer_anal_
run_nbr and xfer_to_loc_nbr=xfer_loc_to
and tar.loc_nbr in (select loc_nbr from intrebos.location where trim(loc_country
)=decode(v_country_code,'GU','GU','US','US','CA','CA','US'));
if (v_count_business_type>1) then
--Added to avoid unique constraint violation due to business type
for c_item_count in
(select item_nbr,count(distinct business_type_cd) from intrebos.transfer_analysi
s_results
where xfer_anal_run_nbr = v_xfer_anal_run_nbr and xfer_to_loc_nbr=xfer_loc_to
group by item_nbr
having count(distinct business_type_cd)>1)
loop
for c_bus in (select
/*+ driving_site(tar) use_hash(tar SI) index(TAR, TRANSFER_ANALYSIS_RESULTS_P
K) index(si, SO_ITEMS_PDX) index(im, ITEM_MASTER_ITEM_NBR)*/
TAR.Xfer_Anal_Run_Nbr,TAR.Item_Nbr,TAR.loc_nbr,TAR.business_type_cd,SI.Line_N
br
from intrebos.transfer_analysis_results TAR, intrebos.so_items SI
where TAR.Xfer_Anal_Run_Nbr =v_xfer_anal_run_nbr
--Added by Preethi Surendran for Guam TAG
and tar.loc_nbr in (select loc_nbr from intrebos.location where trim(loc_count
ry)=decode(v_country_code,'GU','GU','US','US','CA','CA','US'))
and TAR.Loc_Nbr in (select distinct loc_nbr from intrebos.transfer_analysis_lo
cation where
xfer_anal_run_nbr=v_xfer_anal_run_nbr) and
tar.item_nbr=c_item_count.item_nbr and
tar.business_type_cd in (select distinct business_type_cd from intrebos.transf
er_analysis_item
where xfer_anal_run_nbr=v_xfer_anal_run_nbr)
and TAR.Item_Nbr=SI.Item_Nbr and SI.So_Nbr= TR_NO_value(v_counter).rec_TR_nbr
and (tar.item_nbr,tar.business_type_cd) not in (select /*+ driving_site(so_it
ems) index(si, SO_ITEMS_PDX) */
item_nbr,business_type_cd from intrebos.so_items soi, intrebos.so_desc sd
where soi.so_nbr=TR_NO_value(v_counter).rec_TR_nbr and item_nbr=c_item_count.i
tem_nbr
and soi.so_nbr=sd.so_nbr and sd.country_code=v_country_code))
loop
INSERT INTO INTREBOS.SO_ITEMS
(SO_NBR,
COUNTRY_CODE,
ITEM_NBR,
BUSINESS_TYPE_CD,
LINE_NBR,
SOI_TOT_QTY_ORD,
SOI_TOT_QTY_RCV,
SOI_DELIVERY_DATE,
SOI_LOT_TYPE,
SOI_LOT_QTY)
SELECT TR_NO_value(v_counter).rec_TR_nbr,
v_so_items_country_code,
ITEM_NBR,BUSINESS_TYPE_CD,c_bus.line_nbr+10,
v_soi_tot_qty_ord,
v_soi_tot_qty_rcv,
to_date(v_soi_delivery_date) as soi_delivery_date,
'01',
v_soi_lot_qty
FROM(SELECT ITEM_NBR,BUSINESS_TYPE_CD,rnum
FROM (SELECT s.ITEM_NBR,BUSINESS_TYPE_CD, rownum - 1 rnum from
--rnum
((SELECT
--Added by Preethi for tuning
/*+ driving_site(tar) use_hash(tar im) index(TAR, TRANS
FER_ANALYSIS_RESULTS_PK) INDEX(IM,ITEM_MASTER_PK) index(im, ITEM_MASTER_ITEM_NBR
)*/
DISTINCT TAR.ITEM_NBR, TAR.BUSINESS_TYPE_CD
FROM
(select /*+ DRIVING_SITE(TAR) INDEX(INTREBOS.TRANSFER_ANALYSIS_RESULTS TRANSFE
R_ANALYSIS_RESULTS_PK) */
* from intrebos.transfer_analysis_results
where (item_nbr,business_type_cd) not in (SELECT ITEM_NBR,business_type_cd FRO
M SO_ITEMS soi, intrebos.so_desc sd
WHERE soi.SO_NBR = TR_NO_value(v_counter).rec_TR_nbr and soi.so_nbr=sd.so_nbr
and sd.country_code=v_country_code) and xfer_anal_run_nbr=v_xfer_anal_run_nbr)
TAR,
INTREBOS.TRANSFER_ANALYSIS TA,
INTREBOS.TRANSFER_ANALYSIS_RUN TARUN,
INTREBOS.ITEM_MASTER IM
WHERE TAR.XFER_ANAL_RUN_NBR = TARUN.XFER_ANAL_RU
N_NBR
AND TARUN.XFER_ANAL_REF_NBR = TA.XFER_ANAL_REF_N
BR
and tar.xfer_anal_run_nbr=c_bus.xfer_anal_run_nbr
AND TAR.XFER_ANAL_RUN_NBR = v_xfer_anal_run_nbr
AND DECODE(TA.REQ_TYPE_CODE,'C',0,'D',0,'F',0,'J',TA.X
FER_TO,TAR.XFER_TO_LOC_NBR)= xfer_loc_to
AND DECODE(NVL(TAR.LAST_CHANGE_XFER_QTY,0),0,TAR.SUGGE
ST_XFER_QTY, TAR.LAST_CHANGE_XFER_QTY) > 0
AND NVL(TAR.EXCL_IND,0)=0
AND TAR.ITEM_NBR=IM.ITEM_NBR
and TAR.item_nbr=c_bus.item_nbr
--Added by Preethi Surendran for Guam TAG
and tar.loc_nbr in (select loc_nbr from intrebos.location where trim(loc_count
ry)=decode(v_country_code,'GU','GU','US','US','CA','CA','US'))
and tar.business_type_cd=c_bus.business_type_cd
and TA.CORP_COUNTRY_CODE=IM.COUNTRY_CODE)
) s,item_master im
WHERE s.item_nbr=im.ITEM_NBR AND im.COUNTRY_CODE=decode(
v_so_desc_country_code,'US','US','CA','CA','GU','US','US')
ORDER BY v_sort_order_list));

end loop;
end loop;
end if;
--Added for store to store transfer
else

for c_TR1 in
(select distinct loc_nbr from intrebos.so_dest where so_nbr=TR_NO_value(v_store_
to_store).rec_TR_nbr)
loop
begin
INSERT INTO INTREBOS.SO_ITEMS
(SO_NBR,
COUNTRY_CODE,
ITEM_NBR,
BUSINESS_TYPE_CD,
LINE_NBR,
SOI_TOT_QTY_ORD,
SOI_TOT_QTY_RCV,
SOI_DELIVERY_DATE,
SOI_LOT_TYPE,
SOI_LOT_QTY)
SELECT TR_NO_value(v_counter).rec_TR_nbr,
v_so_items_country_code,
ITEM_NBR,BUSINESS_TYPE_CD,rnum,--(ROWNUM + v_line_nbr)-1 ,
v_soi_tot_qty_ord,
v_soi_tot_qty_rcv,
to_date(v_soi_delivery_date) as soi_delivery_date,
'01',
v_soi_lot_qty
FROM(SELECT ITEM_NBR,BUSINESS_TYPE_CD,rnum
FROM (SELECT s.ITEM_NBR,BUSINESS_TYPE_CD, rownum - 1 rnum FROM
((SELECT
--Added by Preethi for tuning
/*+ driving_site(tar) use_hash(tar im) index(TAR, TRANSFER_ANALYSIS_RESULTS_P
K) INDEX(IM,ITEM_MASTER_PK) index(im, ITEM_MASTER_ITEM_NBR)*/
DISTINCT TAR.ITEM_NBR, TAR.BUSINESS_TYPE_CD
FROM
--TAG Long run issue
(select /*+ DRIVING_SITE(TAR) INDEX(INTREBOS.TRANSFER_ANALYSIS_RESULTS TRANSFE
R_ANALYSIS_RESULTS_PK) index(im, ITEM_MASTER_ITEM_NBR)*/
* from intrebos.transfer_analysis_results
where (item_nbr) not in (SELECT ITEM_NBR FROM SO_ITEMS
WHERE SO_NBR = TR_NO_value(v_store_to_store).rec_TR_nbr) and xfer_anal_run_nb
r=v_xfer_anal_run_nbr) TAR,
--INTREBOS.TRANSFER_ANALYSIS_RESULTS TAR,
INTREBOS.TRANSFER_ANALYSIS TA,
INTREBOS.TRANSFER_ANALYSIS_RUN TARUN,
INTREBOS.ITEM_MASTER IM
WHERE TAR.XFER_ANAL_RUN_NBR = TARUN.XFER_ANAL_RU
N_NBR
AND TARUN.XFER_ANAL_REF_NBR = TA.XFER_ANAL_REF_N
BR
AND TAR.XFER_ANAL_RUN_NBR = v_xfer_anal_run_nbr
AND DECODE(TA.REQ_TYPE_CODE,'C',0,'D',0,'F',0,'J',TA.X
FER_TO,TAR.XFER_TO_LOC_NBR)= xfer_loc_to
AND DECODE(NVL(TAR.LAST_CHANGE_XFER_QTY,0),0,TAR.SUGGE
ST_XFER_QTY, TAR.LAST_CHANGE_XFER_QTY) > 0
AND NVL(TAR.EXCL_IND,0)=0
AND TAR.ITEM_NBR=IM.ITEM_NBR
and TAR.Loc_Nbr=c_TR1.Loc_Nbr
--Added by Preethi Surendran for Guam TAG
and tar.loc_nbr in (select loc_nbr from intrebos.location where trim(loc_count
ry)=decode(v_country_code,'GU','GU','US','US','CA','CA','US'))
and TA.CORP_COUNTRY_CODE=IM.COUNTRY_CODE)
/*MINUS
(SELECT ITEM_NBR,BUSINESS_TYPE_CD FROM INTREBOS.SO_ITEMS
SI
where SI.SO_NBR IN (SELECT ORDER_NBR FROM INTREBOS.POSO_
IMPORT_DESC WHERE MODULE_CODE ='SOR' AND IMPORT_SEQ_NBR=v_xfer_anal_run_nbr))
*/ ) s,item_master im
WHERE s.item_nbr=im.ITEM_NBR AND im.COUNTRY_CODE=decode(
v_so_desc_country_code,'GU','US','US','US','CA','CA','US')
ORDER BY v_sort_order_list)
where rownum-1<999);

exception
when no_data_found then
dbms_output.put_line('No data found');
when others then
DBMS_OUTPUT.PUT_LINE(SQLERRM);
END;

end loop;
--Added for TAG Long run fix
select count(distinct business_type_cd) into v_count_business_type
from intrebos.transfer_analysis_results tar where xfer_anal_run_nbr=v_xfer_anal_
run_nbr and xfer_to_loc_nbr=xfer_loc_to
--Added by Preethi Surendran for Guam TAG
and tar.loc_nbr in (select loc_nbr from intrebos.location where trim(loc_count
ry)=decode(v_country_code,'GU','GU','US','US','CA','CA','US'));
if (v_count_business_type>1) then
for c_item_count in
(select item_nbr,count(distinct business_type_cd) from intrebos.transfer_analysi
s_item
where xfer_anal_run_nbr = v_xfer_anal_run_nbr
group by item_nbr
having count(distinct business_type_cd)>1)
loop
for c_bus in (select
/*+ driving_site(tar) use_hash(tar SI) index(TAR, TRANSFER_ANALYSIS_RESULTS_P
K) index(si, SO_ITEMS_PDX) index(im, ITEM_MASTER_ITEM_NBR)*/
TAR.Xfer_Anal_Run_Nbr,TAR.Item_Nbr,TAR.loc_nbr,TAR.business_type_cd,SI.Line_N
br
from intrebos.transfer_analysis_results TAR, intrebos.so_items SI
where TAR.Xfer_Anal_Run_Nbr =v_xfer_anal_run_nbr and xfer_to_loc_nbr=xfer_loc_
to
--and loc_nbr=c_TR1.Loc_Nbr
--Added by Preethi Surendran for Guam TAG
and tar.loc_nbr in (select loc_nbr from intrebos.location where trim(loc_count
ry)=decode(v_country_code,'GU','GU','US','US','CA','CA','US'))
and TAR.Item_Nbr=SI.Item_Nbr and SI.So_Nbr= TR_NO_value(v_store_to_store).rec_
TR_nbr
and (tar.item_nbr,tar.business_type_cd) not in (select /*+ driving_site(so_it
ems) index(si, SO_ITEMS_PDX) */
item_nbr,business_type_cd from intrebos.so_items
where so_nbr=TR_NO_value(v_store_to_store).rec_TR_nbr))
loop

INSERT INTO INTREBOS.SO_ITEMS


(SO_NBR,
COUNTRY_CODE,
ITEM_NBR,
BUSINESS_TYPE_CD,
LINE_NBR,
SOI_TOT_QTY_ORD,
SOI_TOT_QTY_RCV,
SOI_DELIVERY_DATE,
SOI_LOT_TYPE,
SOI_LOT_QTY)
SELECT TR_NO_value(v_counter).rec_TR_nbr,
v_so_items_country_code,
ITEM_NBR,BUSINESS_TYPE_CD,c_bus.line_nbr+10,
v_soi_tot_qty_ord,
v_soi_tot_qty_rcv,
to_date(v_soi_delivery_date) as soi_delivery_date,
'01',
v_soi_lot_qty
FROM(SELECT ITEM_NBR,BUSINESS_TYPE_CD,rnum
FROM (SELECT s.ITEM_NBR,BUSINESS_TYPE_CD, rownum - 1 rnum from
--rnum
((SELECT
--Added by Preethi for tuning
/*+ driving_site(tar) use_hash(tar im) index(TAR, TRANSFER_ANALYSIS_RESULTS_P
K) INDEX(IM,ITEM_MASTER_PK) index(im, ITEM_MASTER_ITEM_NBR)*/
DISTINCT TAR.ITEM_NBR, TAR.BUSINESS_TYPE_CD
FROM
(select /*+ DRIVING_SITE(TAR) INDEX(INTREBOS.TRANSFER_ANALYSIS_RESULTS TRANSFE
R_ANALYSIS_RESULTS_PK) */
* from intrebos.transfer_analysis_results
where (item_nbr,business_type_cd) not in (SELECT ITEM_NBR,business_type_cd FRO
M SO_ITEMS
WHERE SO_NBR = TR_NO_value(v_store_to_store).rec_TR_nbr) and xfer_anal_run_nb
r=v_xfer_anal_run_nbr) TAR,
--INTREBOS.TRANSFER_ANALYSIS_RESULTS TAR,
INTREBOS.TRANSFER_ANALYSIS TA,
INTREBOS.TRANSFER_ANALYSIS_RUN TARUN,
INTREBOS.ITEM_MASTER IM
WHERE TAR.XFER_ANAL_RUN_NBR = TARUN.XFER_ANAL_RU
N_NBR
AND TARUN.XFER_ANAL_REF_NBR = TA.XFER_ANAL_REF_N
BR
AND TAR.XFER_ANAL_RUN_NBR = v_xfer_anal_run_nbr
AND DECODE(TA.REQ_TYPE_CODE,'C',0,'D',0,'F',0,'J',TA.X
FER_TO,TAR.XFER_TO_LOC_NBR)= xfer_loc_to
AND DECODE(NVL(TAR.LAST_CHANGE_XFER_QTY,0),0,TAR.SUGGE
ST_XFER_QTY, TAR.LAST_CHANGE_XFER_QTY) > 0
AND NVL(TAR.EXCL_IND,0)=0
AND TAR.ITEM_NBR=IM.ITEM_NBR
and TAR.item_nbr=c_bus.item_nbr
--Added by Preethi Surendran for Guam TAG
and tar.loc_nbr in (select loc_nbr from intrebos.location where trim(loc_count
ry)=decode(v_country_code,'GU','GU','US','US','CA','CA','US'))
and tar.business_type_cd=c_bus.business_type_cd
and TA.CORP_COUNTRY_CODE=IM.COUNTRY_CODE)
) s,item_master im
WHERE s.item_nbr=im.ITEM_NBR AND im.COUNTRY_CODE=decode(
v_so_desc_country_code,'GU','US','US','US','CA','CA','US')
ORDER BY v_sort_order_list));
end loop;
end loop;
end if;
end if;

elsif v_source_module = 'TXR' then -- Added for Reverse Logistics.


----------------------------------
v_counter := 1;

INSERT INTO INTREBOS.SO_ITEMS


(SO_NBR,
COUNTRY_CODE,
ITEM_NBR,
BUSINESS_TYPE_CD,
LINE_NBR,
SOI_TOT_QTY_ORD,
SOI_TOT_QTY_RCV,
SOI_DELIVERY_DATE,
SOI_LOT_TYPE,
SOI_LOT_QTY)
SELECT TR_NO_value(v_counter).rec_TR_nbr,
v_so_items_country_code,
ITEM_NBR,BUSINESS_TYPE_CD,ROWNUM-1 ,
v_soi_tot_qty_ord,
v_soi_tot_qty_rcv,
v_soi_delivery_date,
'01',
v_soi_lot_qty
FROM(SELECT ITEM_NBR,BUSINESS_TYPE_CD, rnum
FROM(SELECT s.ITEM_NBR,BUSINESS_TYPE_CD ,rownum -1 rnum
FROM
(SELECT DISTINCT TRR.ITEM_NBR, TRR.BUSINESS_TYPE_CD
FROM
INTREBOS.TRANSFER_RUN_RESULT TRR,
INTREBOS.ITEM_MASTER IM
WHERE
TRR.XFER_RUN_NBR =v_xfer_anal_run_nbr
AND TRR.TO_LOC_NBR =xfer_loc_to
AND TRR.SUGGEST_XFER_QTY > 0
AND TRR.ITEM_NBR=IM.ITEM_NBR AND TRR.COUNTRY_CD
=IM.COUNTRY_CODE
-- MINUS
-- SELECT ITEM_NBR,BUSINESS_TYPE_CD FROM INTREBOS.S
O_ITEMS SI
-- where SI.SO_NBR IN (SELECT ORDER_NBR FROM INTREB
OS.POSO_IMPORT_DESC WHERE MODULE_CODE ='SOR' AND IMPORT_SEQ_NBR=v_xfer_anal_run_
nbr)
) s,item_master im
WHERE s.item_nbr=im.ITEM_NBR AND im.COUNTRY_CODE
=decode(v_so_desc_country_code,'US','US','GU','US','CA','CA','US')
ORDER BY v_sort_order_list));
v_line_nbr := v_line_nbr + SQL%ROWCOUNT;
else -- OP ORDER for Reverse Logistics
---------------------------------------
if v_so_type = 'OP' then
SELECT IN_STORE_DT INTO v_soi_delivery_date
FROM INTREBOS.TRANSFER_RUN
WHERE XFER_RUN_NBR = v_xfer_anal_run_nbr;
end if;
-- OP order type will always have one SO generated irrespective
of the nbr of items.

INSERT INTO INTREBOS.SO_ITEMS


(SO_NBR,
COUNTRY_CODE,
ITEM_NBR,
BUSINESS_TYPE_CD,
LINE_NBR,
SOI_TOT_QTY_ORD,
SOI_TOT_QTY_RCV,
SOI_DELIVERY_DATE,
SOI_LOT_TYPE,
SOI_LOT_QTY)
SELECT TR_NO_value(1).rec_TR_nbr,
v_so_items_country_code,
ITEM_NBR,BUSINESS_TYPE,ROWNUM-1,
v_soi_tot_qty_ord,
v_soi_tot_qty_rcv,
to_date(v_soi_delivery_date) as soi_deli
very_date,
'01',
v_soi_lot_qty
FROM (
SELECT DISTINCT TRR.ITEM_NBR AS ITEM_NBR,
TRR.BUSINESS_TYPE_CD AS BUSINESS_TYPE
FROM INTREBOS.TRANSFER_RUN_RESULT TRR
WHERE TRR.XFER_RUN_NBR =v_xfer_anal_run_nb
r
AND TRR.LOC_NBR =xfer_loc_to
AND TRR.SUGGEST_XFER_QTY > 0)
ORDER BY ITEM_NBR;
end if; -- end of so-items

-- SO_DEST_ITEMS INSERT
-----------------------
-----------------------
-- dbms_output.put_line ('SO_DEST_ITEMS - start:' || TO_CHAR(SYSDATE,'MM
/DD/YYYY HH24:MI:SS'));
if v_source_module = 'TAG' then
for v_counter in 1..v_no_of_TRs loop
if v_counter = 1 then
if v_no_of_TRs = 1 then
INSERT INTO INTREBOS.SO_DEST_ITEMS
(ITEM_NBR,
SO_NBR,
COUNTRY_CODE,
LOC_NBR,
LINE_NBR,
SODI_QTY_ORD,
SODI_QTY_RCV,
QOH,
MIN_KEEP_QTY,
BUSINESS_TYPE_CD)
SELECT
--Added by Preethi for Tuning 04-Oct-09
/*+ driving_site(TAR) use_hash(tar,si) index(TAR, TRANSFER_ANALYSIS_RESULTS_PK)
INDEX(SI, SO_ITEMS_PDX) */
DISTINCT TAR.ITEM_NBR,
TR_NO_value(v_counter).rec_TR_nbr,
v_so_dest_items_country_code,
TAR.LOC_NBR,
SI.LINE_NBR,
DECODE(NVL(TAR.LAST_CHANGE_XFER_QTY,0),0,TAR.SUG
GEST_XFER_QTY,TAR.LAST_CHANGE_XFER_QTY) AS SUGGEST_XFER_QTY,
v_sodi_qty_rcv,
TAR.QOH,
TAR.FINAL_PROTECT_QTY,
TAR.BUSINESS_TYPE_CD
FROM
--Added by Preethi for TAG Duplicate fix
(select /*+ DRIVING_SITE(TAR) INDEX(INTREBOS.TRANSFER_ANALYSIS_RESULTS TRANSFER_
ANALYSIS_RESULTS_PK) */
* from intrebos.transfer_analysis_results where (item_nbr,loc_nbr) not
in (select item_nbr,loc_nbr from intrebos.so_dest_items
where so_nbr=TR_NO_value(v_store_to_store).rec_TR_nbr)) TAR,
--INTREBOS.TRANSFER_ANALYSIS_RESULTS TAR
,
INTREBOS.TRANSFER_ANALYSIS TA,
INTREBOS.TRANSFER_ANALYSIS_RUN TARUN,
INTREBOS.SO_ITEMS SI
WHERE
TAR.XFER_ANAL_RUN_NBR = TARUN.XFER_ANAL_
RUN_NBR
AND TARUN.XFER_ANAL_REF_NBR = TA.XFER_AN
AL_REF_NBR
AND TAR.XFER_ANAL_RUN_NBR = v_xfer_anal_
run_nbr
AND SI.SO_NBR=TR_NO_value(v_counter).rec
_TR_nbr
AND DECODE(TA.REQ_TYPE_CODE,'C',0,'D',0,
'F',0,'J',TA.XFER_TO,TAR.XFER_TO_LOC_NBR) = xfer_loc_to
AND NVL(EXCL_IND,0) = 0
AND DECODE(NVL(LAST_CHANGE_XFER_QTY,0),0
,SUGGEST_XFER_QTY,LAST_CHANGE_XFER_QTY) > 0
AND TAR.ITEM_NBR=SI.ITEM_NBR
--Added by Preethi Surendran for Guam TAG
and tar.loc_nbr in (select loc_nbr from intrebos.location where trim(loc_count
ry)=decode(v_country_code,'GU','GU','US','US','CA','CA','US'))
AND TAR.BUSINESS_TYPE_CD = SI.BUSINESS_T
YPE_CD;
else
INSERT INTO INTREBOS.SO_DEST_ITEMS
(ITEM_NBR,
SO_NBR,
COUNTRY_CODE,
LOC_NBR,
LINE_NBR,
SODI_QTY_ORD,
SODI_QTY_RCV,
QOH,
MIN_KEEP_QTY,
BUSINESS_TYPE_CD)
SELECT
--Added by Preethi for Tuning 04-Oct-09
/*+ driving_site(TAR) use_hash(tar,si) index(TAR, TRANSFER_ANALYSIS_RESULTS_PK)
INDEX(SI, SO_ITEMS_PDX) */
DISTINCT TAR.ITEM_NBR,
TR_NO_value(v_counter).rec_TR_nbr,
v_so_dest_items_country_code,
TAR.LOC_NBR,
SI.LINE_NBR,
DECODE(NVL(TAR.LAST_CHANGE_XFER_QTY,0),0,TAR.SUG
GEST_XFER_QTY,TAR.LAST_CHANGE_XFER_QTY) AS SUGGEST_XFER_QTY,
v_sodi_qty_rcv,
TAR.QOH,
TAR.FINAL_PROTECT_QTY,
TAR.BUSINESS_TYPE_CD
FROM
--Added by Preethi for TAG Duplicate fix
(select /*+ DRIVING_SITE(TAR) INDEX(INTREBOS.TRANSFER_ANALYSIS_RESULTS TRANSFER_
ANALYSIS_RESULTS_PK) */
* from intrebos.transfer_analysis_results where (item_nbr,loc_nbr) not in (selec
t item_nbr,loc_nbr from intrebos.so_dest_items
where so_nbr=TR_NO_value(v_store_to_store).rec_TR_nbr)) TAR,
--INTREBOS.TRANSFER_ANALYSIS_RESULTS TAR
,
INTREBOS.TRANSFER_ANALYSIS TA,
INTREBOS.TRANSFER_ANALYSIS_RUN TARUN,
INTREBOS.SO_ITEMS SI
WHERE
TAR.XFER_ANAL_RUN_NBR = TARUN.XFER_ANAL_
RUN_NBR
AND TARUN.XFER_ANAL_REF_NBR = TA.XFER_AN
AL_REF_NBR
AND TAR.XFER_ANAL_RUN_NBR = v_xfer_anal_
run_nbr
AND SI.SO_NBR=TR_NO_value(v_counter).rec
_TR_nbr
AND DECODE(TA.REQ_TYPE_CODE,'C',0,'D',0,
'F',0,'J',TA.XFER_TO,TAR.XFER_TO_LOC_NBR) = xfer_loc_to
AND NVL(EXCL_IND,0) = 0
AND DECODE(NVL(LAST_CHANGE_XFER_QTY,0),0
,SUGGEST_XFER_QTY,LAST_CHANGE_XFER_QTY) > 0
AND TAR.ITEM_NBR=SI.ITEM_NBR
AND TAR.BUSINESS_TYPE_CD = SI.BUSINESS_T
YPE_CD
--Added by Preethi Surendran for Guam TAG
and tar.loc_nbr in (select loc_nbr from intrebos.location where trim(loc_count
ry)=decode(v_country_code,'GU','GU','US','US','CA','CA','US'))
AND TAR.LOC_NBR NOT IN (SELECT LOC_NBR F
ROM SO_DEST WHERE SO_NBR = TR_NO_value(v_counter+1).rec_TR_nbr);
end if;
end if;
----
if v_no_of_TRs > 1 then
for c1 in
(select loc_nbr from so_dest so where so_nbr = TR_NO_val
ue(v_counter).rec_TR_nbr
--Added by Preethi Surendran for Guam TAG
minus
select distinct loc_nbr from so_dest_items sodi where s
o_nbr = TR_NO_value(v_counter).rec_TR_nbr)
loop
if v_counter > 1 then
INSERT INTO INTREBOS.SO_ITEMS
(SO_NBR,
COUNTRY_CODE,
ITEM_NBR,
BUSINESS_TYPE_CD,
LINE_NBR,
SOI_TOT_QTY_ORD,
SOI_TOT_QTY_RCV,
SOI_DELIVERY_DATE,
SOI_LOT_TYPE,
SOI_LOT_QTY)
SELECT TR_NO_value(v_counter).rec_TR_nbr,
v_so_items_country_code,
ITEM_NBR,BUSINESS_TYPE_CD,rownum-1,
--Commented by Rajan for TAG constraint fix
--rnum,
v_soi_tot_qty_ord,
v_soi_tot_qty_rcv,
to_date(v_soi_delivery_date) as soi_delivery_date,
'01',
v_soi_lot_qty
FROM (SELECT ITEM_NBR,BUSINESS_TYPE_CD,rnum
FROM (SELECT s.ITEM_NBR,BUSINESS_TYPE_CD, (rownum + v_
line_nbr)-1 rnum
FROM (SELECT
--Added by Preethi for tuning 04-Oct-09
/*+ driving_site(TAR) USE_HASH(TAR,IM) INDEX(TAR, TRANSFER_ANALYSIS_RESULTS_PK)
INDEX(IM, ITEM_MASTER_PK) INDEX(IM, ITEM_MASTER_ITEM_NBR) */
DISTINCT TAR.ITEM_NBR, TAR.BUSINESS_TYPE
_CD
FROM
--Added by Preethi for TAG Duplicate fix
(select /*+ DRIVING_SITE(TAR) INDEX(INTREBOS.TRANSFER_ANALYSIS_RESULTS TRANSFER_
ANALYSIS_RESULTS_PK) */
* from intrebos.transfer_analysis_results where (item_nbr,loc_nbr) not in (selec
t item_nbr,loc_nbr from intrebos.so_dest_items
where so_nbr in (select order_nbr from intrebos.poso_import_desc where module_co
de='SOR' and import_seq_nbr = v_xfer_anal_run_nbr))) TAR,
--INTREBOS.TRANSFER_ANALYSIS_RESULTS TAR
,
INTREBOS.TRANSFER_ANALYSIS TA,
INTREBOS.TRANSFER_ANALYSIS_RUN TARUN,
INTREBOS.ITEM_MASTER IM
WHERE TAR.XFER_ANAL_RUN_NBR = TARUN.XFER
_ANAL_RUN_NBR
AND TARUN.XFER_ANAL_REF_NBR = TA.XFER_AN
AL_REF_NBR
AND TAR.XFER_ANAL_RUN_NBR = v_xfer_anal_
run_nbr
AND DECODE(TA.REQ_TYPE_CODE,'C',0,'D',0,
'F',0,'J',TA.XFER_TO,TAR.XFER_TO_LOC_NBR)= xfer_loc_to
AND DECODE(NVL(TAR.LAST_CHANGE_XFER_QTY,
0),0,TAR.SUGGEST_XFER_QTY, TAR.LAST_CHANGE_XFER_QTY) > 0
AND NVL(TAR.EXCL_IND,0)=0
AND TAR.ITEM_NBR=IM.ITEM_NBR AND TA.CORP
_COUNTRY_CODE=IM.COUNTRY_CODE
AND LOC_NBR IN c1.loc_nbr
--Added by Preethi Surendran for Guam TAG
and tar.loc_nbr in (select loc_nbr from intrebos.location where trim(loc_count
ry)=decode(v_country_code,'GU','GU','US','US','CA','CA','US'))
AND tar.ITEM_NBR NOT IN (SELECT ITEM_NBR FROM SO
_DEST_ITEMS sodi, intrebos.so_desc sd
WHERE sodi.SO_NBR IN (SELECT ORDER_NBR FROM INTREBOS.POSO_IMPORT_DESC WHERE
MODULE_CODE ='SOR' AND IMPORT_SEQ_NBR=v_xfer_anal_run_nbr) and sodi.so_nbr=sd.so
_nbr and sd.country_code=v_country_code and loc_nbr = c1.loc_nbr)
minus
select item_nbr, business_type_cd from so_items
where
so_nbr = TR_NO_value(v_counter).rec_TR_nbr
) s,item_master im
WHERE s.item_nbr=im.ITEM_NBR AND im.COUNTRY_CODE
=decode(v_so_desc_country_code,'GU','US','US','US','CA','CA','US')
ORDER BY v_sort_order_list)
where rownum-1<=999);
end if;
INSERT INTO INTREBOS.SO_DEST_ITEMS
(ITEM_NBR,
SO_NBR,
COUNTRY_CODE,
LOC_NBR,
LINE_NBR,
SODI_QTY_ORD,
SODI_QTY_RCV,
QOH,
MIN_KEEP_QTY,
BUSINESS_TYPE_CD)
SELECT
--Added by Preethi for Tuning 04-Oct-09
/*+ driving_site(TAR) use_hash(tar,si) index(TAR, TRANSFER_ANALYSIS_RESULTS_PK)
INDEX(SI, SO_ITEMS_PDX) */
DISTINCT TAR.ITEM_NBR,
TR_NO_value(v_counter).rec_TR_nbr,
v_so_dest_items_country_code,
TAR.LOC_NBR,
SI.LINE_NBR,
DECODE(NVL(TAR.LAST_CHANGE_XFER_QTY,0),0,TAR.SUG
GEST_XFER_QTY,TAR.LAST_CHANGE_XFER_QTY) AS SUGGEST_XFER_QTY,
v_sodi_qty_rcv,
TAR.QOH,
TAR.FINAL_PROTECT_QTY,
TAR.BUSINESS_TYPE_CD
FROM
--Added by Preethi for TAG Duplicate fix
(select /*+ DRIVING_SITE(TAR) INDEX(INTREBOS.TRANSFER_ANALYSIS_RESULTS TRANSFER_
ANALYSIS_RESULTS_PK) */
* from intrebos.transfer_analysis_results where (item_nbr,loc_nbr) not in (selec
t item_nbr,loc_nbr from intrebos.so_dest_items sodi, intrebos.so_desc sd
where sodi.so_nbr in (select order_nbr from intrebos.poso_import_desc
where module_code='SOR' and import_seq_nbr = v_xfer_anal_run_nbr) and sodi.so_nb
r=sd.so_nbr and sd.country_code=v_country_code)) TAR,
--INTREBOS.TRANSFER_ANALYSIS_RESULTS TAR
,
INTREBOS.TRANSFER_ANALYSIS TA,
INTREBOS.TRANSFER_ANALYSIS_RUN TARUN,
INTREBOS.SO_ITEMS SI
WHERE
TAR.XFER_ANAL_RUN_NBR = TARUN.XFER_ANAL_
RUN_NBR
AND TARUN.XFER_ANAL_REF_NBR = TA.XFER_AN
AL_REF_NBR
AND TAR.XFER_ANAL_RUN_NBR = v_xfer_anal_
run_nbr
AND SI.SO_NBR=TR_NO_value(v_counter).rec
_TR_nbr
AND DECODE(TA.REQ_TYPE_CODE,'C',0,'D',0,
'F',0,'J',TA.XFER_TO,TAR.XFER_TO_LOC_NBR) = xfer_loc_to
AND NVL(EXCL_IND,0) = 0
AND DECODE(NVL(LAST_CHANGE_XFER_QTY,0),0
,SUGGEST_XFER_QTY,LAST_CHANGE_XFER_QTY) > 0
AND TAR.ITEM_NBR=SI.ITEM_NBR
AND TAR.BUSINESS_TYPE_CD = SI.BUSINESS_T
YPE_CD
--Added by Preethi Surendran for Guam TAG
and tar.loc_nbr in (select loc_nbr from intrebos.location where trim(loc_count
ry)=decode(v_country_code,'GU','GU','US','US','CA','CA','US'))
AND TAR.LOC_NBR = c1.loc_nbr and
rownum <= 999;
end loop;
end if;
----
end loop;
elsif v_source_module = 'TXR' then --Rev Log Changes
for v_counter in 1..v_no_of_TRs loop
if v_counter = 1 then
if v_no_of_TRs = 1 then
INSERT INTO INTREBOS.SO_DEST_ITEMS
(ITEM_NBR,
SO_NBR,
COUNTRY_CODE,
LOC_NBR,
LINE_NBR,
SODI_QTY_ORD,
SODI_QTY_RCV,
QOH,
MIN_KEEP_QTY,
BUSINESS_TYPE_CD)
SELECT /*+ use_hash(si XRICR) index(XRICR) */
DISTINCT TRR.ITEM_NBR,
TR_NO_value(v_counter).rec_TR_nbr,
v_so_dest_items_country_code,
TRR.LOC_NBR,
SI.LINE_NBR,
TRR.SUGGEST_XFER_QTY,
v_sodi_qty_rcv,
DECODE(TRR.BUSINESS_TYPE_CD, 'P', XRICR.PRP_QOH_
QTY, XRICR.TRADE_QOH_QTY),
0,
TRR.BUSINESS_TYPE_CD As Business_Type
FROM
INTREBOS.TRANSFER_RUN_RESULT TRR,
INTREBOS.XFER_RUN_ITEM_CLASS_RESULT XRICR ,
INTREBOS.SO_ITEMS SI
WHERE
TRR.XFER_RUN_NBR = XRICR.XFER_RUN_NBR
AND TRR.XFER_RUN_NBR = v_xfer_anal_run_nbr
AND TRR.TO_LOC_NBR = xfer_loc_to
AND SI.SO_NBR=TR_NO_value(v_counter).rec_TR_nbr
AND TRR.LOC_NBR = XRICR.LOC_NBR
AND TRR.ITEM_NBR = XRICR.ITEM_NBR
AND SUGGEST_XFER_QTY > 0
AND TRR.ITEM_NBR = SI.ITEM_NBR
AND TRR.BUSINESS_TYPE_CD = SI.BUSINESS_TYPE_CD;
else
INSERT INTO INTREBOS.SO_DEST_ITEMS
(ITEM_NBR,
SO_NBR,
COUNTRY_CODE,
LOC_NBR,
LINE_NBR,
SODI_QTY_ORD,
SODI_QTY_RCV,
QOH,
MIN_KEEP_QTY,
BUSINESS_TYPE_CD)
SELECT /*+ use_hash(si XRICR) index(XRICR) */
DISTINCT TRR.ITEM_NBR,
TR_NO_value(v_counter).rec_TR_nbr,
v_so_dest_items_country_code,
TRR.LOC_NBR,
SI.LINE_NBR,
TRR.SUGGEST_XFER_QTY,
v_sodi_qty_rcv,
DECODE(TRR.BUSINESS_TYPE_CD, 'P', XRICR.PRP_QOH_
QTY, XRICR.TRADE_QOH_QTY),
0,
TRR.BUSINESS_TYPE_CD As Business_Type
FROM
INTREBOS.TRANSFER_RUN_RESULT TRR,
INTREBOS.XFER_RUN_ITEM_CLASS_RESULT XRICR ,
INTREBOS.SO_ITEMS SI
WHERE
TRR.XFER_RUN_NBR = XRICR.XFER_RUN_NBR
AND TRR.XFER_RUN_NBR = v_xfer_anal_run_nbr
AND TRR.TO_LOC_NBR = xfer_loc_to
AND SI.SO_NBR=TR_NO_value(v_counter).rec_TR_nbr
AND TRR.LOC_NBR = XRICR.LOC_NBR
AND TRR.ITEM_NBR = XRICR.ITEM_NBR
AND SUGGEST_XFER_QTY > 0
AND TRR.ITEM_NBR = SI.ITEM_NBR
AND TRR.BUSINESS_TYPE_CD = SI.BUSINESS_TYPE_CD
AND TRR.LOC_NBR NOT IN (SELECT LOC_NBR FROM SO_D
EST WHERE SO_NBR = TR_NO_value(v_counter+1).rec_TR_nbr);
end if;
end if;
if v_no_of_TRs > 1 then
for c1 in
(select loc_nbr from so_dest where so_nbr = TR_NO_value(
v_counter).rec_TR_nbr
minus
select distinct loc_nbr from so_dest_items where so_nbr
= TR_NO_value(v_counter).rec_TR_nbr)
loop
if v_counter > 1 then
INSERT INTO INTREBOS.SO_ITEMS
(SO_NBR,
COUNTRY_CODE,
ITEM_NBR,
BUSINESS_TYPE_CD,
LINE_NBR,
SOI_TOT_QTY_ORD,
SOI_TOT_QTY_RCV,
SOI_DELIVERY_DATE,
SOI_LOT_TYPE,
SOI_LOT_QTY)
SELECT TR_NO_value(v_counter).rec_TR_nbr,
v_so_items_country_code,
ITEM_NBR,BUSINESS_TYPE_CD,ROWNUM-1 ,
v_soi_tot_qty_ord,
v_soi_tot_qty_rcv,
v_soi_delivery_date,
'01',
v_soi_lot_qty
FROM(SELECT ITEM_NBR,BUSINESS_TYPE_CD, rnum
FROM(SELECT s.ITEM_NBR,BUSINESS_TYPE_CD ,(rownum + v_l
ine_nbr)-1 rnum FROM
(SELECT DISTINCT TRR.ITEM_NBR, TRR.BUSINESS_TYPE_CD
FROM
INTREBOS.TRANSFER_RUN_RESULT TRR,
INTREBOS.ITEM_MASTER IM
WHERE
TRR.XFER_RUN_NBR =v_xfer_anal_run_nbr
AND TRR.TO_LOC_NBR =xfer_loc_to
AND TRR.SUGGEST_XFER_QTY > 0
AND TRR.ITEM_NBR=IM.ITEM_NBR AND TRR.COUNTRY_CD=
IM.COUNTRY_CODE
AND LOC_NBR = c1.loc_nbr
AND trr.ITEM_NBR NOT IN (SELECT ITEM_NBR FROM SO
_DEST_ITEMS sodi, intrebos.so_desc sd
WHERE sodi.SO_NBR IN (SELECT ORDER_NBR FROM INTREBOS.POSO_IMPORT_DESC WHERE
MODULE_CODE ='SOR' AND IMPORT_SEQ_NBR=v_xfer_anal_run_nbr)
and sd.country_code=v_country_code
and sodi.so_nbr=sd.so_nbr and loc_nbr = c1.loc_nbr)
MINUS
SELECT ITEM_NBR,BUSINESS_TYPE_CD FROM INTREBOS.S
O_ITEMS SI
where SI.SO_NBR = TR_NO_value(v_counter).rec_TR_
nbr
) s,item_master im
WHERE s.item_nbr=im.ITEM_NBR AND im.COUNTRY_CODE
=v_so_desc_country_code
ORDER BY v_sort_order_list)
where rownum-1<=999);
end if;
INSERT INTO INTREBOS.SO_DEST_ITEMS
(ITEM_NBR,
SO_NBR,
COUNTRY_CODE,
LOC_NBR,
LINE_NBR,
SODI_QTY_ORD,
SODI_QTY_RCV,
QOH,
MIN_KEEP_QTY,
BUSINESS_TYPE_CD)
SELECT /*+ use_hash(si XRICR) index(XRICR) */
DISTINCT TRR.ITEM_NBR,
TR_NO_value(v_counter).rec_TR_nbr,
v_so_dest_items_country_code,
TRR.LOC_NBR,
SI.LINE_NBR,
TRR.SUGGEST_XFER_QTY,
v_sodi_qty_rcv,
DECODE(TRR.BUSINESS_TYPE_CD, 'P', XRICR.PRP_QOH_
QTY, XRICR.TRADE_QOH_QTY),
0,
TRR.BUSINESS_TYPE_CD As Business_Type
FROM
INTREBOS.TRANSFER_RUN_RESULT TRR,
INTREBOS.XFER_RUN_ITEM_CLASS_RESULT XRICR ,
INTREBOS.SO_ITEMS SI
WHERE
TRR.XFER_RUN_NBR = XRICR.XFER_RUN_NBR
AND TRR.XFER_RUN_NBR = v_xfer_anal_run_nbr
AND TRR.TO_LOC_NBR = xfer_loc_to
AND SI.SO_NBR=TR_NO_value(v_counter).rec_TR_nbr
AND TRR.LOC_NBR = XRICR.LOC_NBR
AND TRR.ITEM_NBR = XRICR.ITEM_NBR
AND SUGGEST_XFER_QTY > 0
AND TRR.ITEM_NBR = SI.ITEM_NBR
AND TRR.BUSINESS_TYPE_CD = SI.BUSINESS_TYPE_CD
AND TRR.LOC_NBR = c1.loc_nbr and rownum <= 999;
end loop;
end if;
end loop;
else
-- OP order type will always have one SO generated irrespective
of the nbr of items.
INSERT INTO INTREBOS.SO_DEST_ITEMS
(ITEM_NBR,
SO_NBR,
COUNTRY_CODE,
LOC_NBR,
LINE_NBR,
SODI_QTY_ORD,
SODI_QTY_RCV,
QOH,
MIN_KEEP_QTY,
BUSINESS_TYPE_CD)
SELECT /*+ use_hash(si XRICR) index(XRICR) */
DISTINCT TRR.ITEM_NBR,
TR_NO_value(1).rec_TR_nbr,
v_so_dest_items_country_code,
TRR.TO_LOC_NBR,
SI.LINE_NBR,
TRR.SUGGEST_XFER_QTY,
v_sodi_qty_rcv,
DECODE(TRR.BUSINESS_TYPE_CD, 'P', XRICR.PRP_QOH_QTY, XR
ICR.TRADE_QOH_QTY),
0,
TRR.BUSINESS_TYPE_CD As Business_Type
FROM INTREBOS.TRANSFER_RUN_RESULT TRR,
INTREBOS.XFER_RUN_ITEM_CLASS_RESULT XRICR ,
INTREBOS.SO_ITEMS SI
WHERE
TRR.XFER_RUN_NBR = XRICR.XFER_RUN_NBR
AND TRR.XFER_RUN_NBR = v_xfer_anal_run_nbr
AND TRR.LOC_NBR = xfer_loc_to
AND SI.SO_NBR=TR_NO_value(1).rec_TR_nbr
AND TRR.LOC_NBR = XRICR.LOC_NBR
AND TRR.ITEM_NBR = XRICR.ITEM_NBR
AND SUGGEST_XFER_QTY > 0
AND TRR.ITEM_NBR=SI.ITEM_NBR
AND TRR.BUSINESS_TYPE_CD = SI.BUSINESS_TYPE_CD;
end if;

-- Update SODI_QTY_ORD in SO_DEST_ITEMS And TOT_SUGG_TXFER_QTY in SO_DES


C
-- Same query Irrespective of Tag type
for v_counter in 1..v_no_of_TRs loop
delete from so_items where so_nbr = TR_NO_value(v_counter
).rec_TR_nbr
and item_nbr in (select item_nbr from so_items w
here so_nbr = TR_NO_value(v_counter).rec_TR_nbr minus select distinct item_nbr f
rom so_dest_items where so_nbr =
TR_NO_value(v_counter).rec_TR_nbr);

for c1_update in
(select /*+ driving_site(sodi) use_hash(si,sodi) index_desc(sodi, so_dest_items_
pdx) index(si,so_items_pdx) */
si.so_nbr,si.item_nbr,si.country_code,si.business_type_cd,sum(nvl(sodi_qty_ord,0
)) qty
from intrebos.so_dest_items sodi, intrebos.so_items si
where si.so_nbr=sodi.so_nbr
and si.item_nbr=sodi.item_nbr
and si.country_code=sodi.country_code
and nvl(si.business_type_cd,0)=nvl(sodi.business_type_cd,0)
and sodi.so_nbr=TR_NO_value(v_counter).rec_TR_nbr
group by si.so_nbr,si.item_nbr,si.country_code,si.business_type_cd)
loop
update intrebos.so_items SI
set soi_tot_qty_ord=c1_update.qty
where SI.item_nbr=c1_update.item_nbr
and SI.so_nbr=c1_update.so_nbr
and nvl(SI.business_type_cd,0)=nvl(c1_update.business_type_cd,0)
and SI.country_code=c1_update.country_code
and SI.so_nbr=TR_NO_value(v_counter).rec_TR_nbr;
end loop;

/* Commented by Preethi on 04-Oct-09 and replaced it with cursor to increase per


formance
UPDATE INTREBOS.SO_ITEMS SI
SET (SOI_TOT_QTY_ORD)=
(SELECT sum(nvl(SODI_QTY_ORD,0)) FROM INTREBOS.SO_DES
T_ITEMS SODI
WHERE SI.SO_NBR=SODI.SO_NBR
AND SI.ITEM_NBR=SODI.ITEM_NBR
AND nvl(SI.BUSINESS_TYPE_CD,0)=nvl(SODI.BUSINESS_TY
PE_CD,0) and SODI.SO_NBR = TR_NO_value(v_counter).rec_TR_nbr)
WHERE SI.SO_NBR = TR_NO_value(v_counter).rec_TR_nbr;
*/
UPDATE INTREBOS.SO_DESC SC
SET (TOT_SUGG_TXFER_QTY )=(SELECT SUM(nvl(SODI_QTY_ORD,0)
)
FROM INTREBOS.SO_DEST_ITEMS SODI
WHERE
SC.SO_NBR=SODI.SO_NBR AND
SODI.SO_NBR = TR_NO_value(v_counter).rec_TR_nbr)
WHERE SC.SO_NBR = TR_NO_value(v_counter).rec_TR_nbr;
end loop;
-- Update the INTREBOS_INTERFACE_QUEUE
if v_source_module <> 'DCS' then
UPDATE INTREBOS.INTREBOS_INTERFACE_QUEUE
SET POSTED_FLAG = 'Y'
WHERE SOURCE_KEY = v_xfer_anal_run_nbr
AND SOURCE_MODULE = v_source_module --Rev Log Changes
AND DEST_MODULE = 'SOR';
else
UPDATE INTREBOS.INTREBOS_INTERFACE_QUEUE
SET POSTED_FLAG = 'Y'
WHERE SOURCE_KEY = v_xfer_anal_run_nbr
AND SOURCE_MODULE = 'TXR' --Rev Log Changes
AND DEST_MODULE = 'SOR';
end if;
-- Insert Record into INTREBOS_INTERFACE_QUEUE for PI interface to pick
it up
-- Uncomment This in next phase when SO matching is done.
for v_counter in 1..v_no_of_TRs loop
INSERT INTO INTREBOS.INTREBOS_INTERFACE_QUEUE
(SOURCE_KEY,
SOURCE_MODULE,
DEST_MODULE,
POSTED_FLAG,
CREATED_DATE)
VALUES
(TR_NO_value(v_counter).rec_TR_nbr,
'SIF',
'PIT',
'N',
sysdate);
end loop;

COMMIT;
if v_source_module <> 'TAG' then
update intrebos.transfer_run set run_status_cd = 'C'
where xfer_run_nbr = v_xfer_anal_run_nbr;
end if;
for v_counter in 1..v_no_of_TRs loop
dbms_output.put_line ('SO Nbr : ' || TR_NO_value(v_counter).rec_
TR_nbr || ' created');
-- Update Job Control Table
UPDATE INTREBOS.JOB_CONTROL
SET RECORDS_PROCESSED = 0,SUCCESS_OR_FAILURE = 'SUCCESS',END_
DATETIME = SYSDATE
WHERE JOB_ID = v_so_desc_so_nbr AND JOB_NAME = 'TR_GENERATION';
end loop;
COMMIT;
--Added by Preethi Surendran for Guam TAG
begin
select count(*) into v_so_items_count from intrebos.so_items where so_nbr = TR_N
O_value(v_counter).rec_TR_nbr;
select count(*) into v_so_dest_items_count from intrebos.so_dest_items where so_
nbr = TR_NO_value(v_counter).rec_TR_nbr;
if(v_so_items_count = 0 and v_so_dest_items_count=0) then

delete from intrebos.so_dest_items where so_nbr = TR_NO_value(v_counter).rec_TR_


nbr;
delete from intrebos.so_items where so_nbr = TR_NO_value(v_counter).rec_TR_nbr;
delete from intrebos.so_dest where so_nbr = TR_NO_value(v_counter).rec_TR_nbr;
delete from intrebos.so_desc where so_nbr = TR_NO_value(v_counter).rec_TR_nbr;
delete from intrebos.poso_import_desc where import_seq_nbr = v_xfer_anal_run_nbr
and module_code='SOR'
and order_nbr = TR_NO_value(v_counter).rec_TR_nbr;
end if;
commit;

end;
EXCEPTION
when others then
so_nbr := v_so_desc_so_nbr;
sqlerr := sqlcode;
sqlmsg := substr(sqlerrm,1,200);
dbms_output.put_line (sqlmsg);
rollback;
END TXFER_GENERATION;
procedure doDCOrder (vStr in varchar2 )
is
sSQL varchar2(1024);
c number;
n number;
begin
c:= dbms_sql.open_cursor;
dbms_sql.parse (c, vStr, dbms_sql.native);
n:= dbms_sql.execute(c);
dbms_sql.close_cursor(c);
dbms_output.put_line ('Succesful');
exception
when others then
dbms_output.put_line ('Error ' || to_char(sqlcode) || ' doDCOrder');
dbms_output.put_line (sqlerrm);
end doDCOrder;
-- *
--
-- name verifyCombine
--
-- description returns 1 if Order is Valid. 0 if invalid
-- if Invalid - the Out parameter ErrDesc has the Error Description string
--
--
--
--
-- Change History
-- 28-Nov-2001 PSK Created
--
-- *
function verifyCombine (vOrderNbr so_desc.so_nbr%type, vErrorDesc out varchar2 )
return Number
is
bRetval pls_integer := 0;
vRowCount pls_integer;
begin
-- Check for Duplicate Request Type
select count(*)
into vRowCount
from
(select distinct
ta.req_type_code
from intrebos.transfer_analysis_run tar,
intrebos.transfer_analysis ta,
intrebos.poso_import_desc po
where po.import_seq_nbr = vordernbr
and tar.xfer_anal_run_nbr = po.order_nbr
and ta.xfer_anal_ref_nbr = tar.xfer_anal_ref_nbr
);
if (vRowCount > 1) then
vErrorDesc := 'Multiple request type codes';
return 1;
end if;
-- Check for Duplicate transfer-to location
select count(*)
into vRowCount
from
(select distinct nvl(ta.xfer_to, 0)
from intrebos.transfer_analysis_run tar,
intrebos.transfer_analysis ta,
intrebos.poso_import_desc po
where po.import_seq_nbr = vordernbr
and tar.xfer_anal_run_nbr = po.order_nbr
and ta.xfer_anal_ref_nbr = tar.xfer_anal_ref_nbr
);
if (vRowCount > 1) then
vErrorDesc := 'Multiple xfer-to location';
return 2;
end if;
-- Check for Duplicate Division
select count(*)
into vRowCount
from
(select distinct
decode (isCombinedDivision(ta.corp_item_division), 1, 'CO', ta.c
orp_item_division)
from intrebos.transfer_analysis_run tar,
intrebos.transfer_analysis ta,
intrebos.poso_import_desc po
where po.import_seq_nbr = vordernbr
and tar.xfer_anal_run_nbr = po.order_nbr
and ta.xfer_anal_ref_nbr = tar.xfer_anal_ref_nbr
);
if (vRowCount > 1) then
vErrorDesc := 'Multiple divisions';
return 3;
end if;
-- Check for Duplicate Transfer Start Date
select count(*)
into vRowCount
from
(select distinct
tar.START_XFER_DATE
from intrebos.transfer_analysis_run tar,
intrebos.poso_import_desc po
where po.import_seq_nbr = vordernbr
and tar.xfer_anal_run_nbr = po.order_nbr
);
if (vRowCount > 1) then
vErrorDesc := 'Duplicate transfer start date';
return 4;
end if;
-- Check for Duplicate Country Code
select count(*)
into vRowCount
from
(select distinct
ta.corp_country_code
from intrebos.transfer_analysis_run tar,
intrebos.transfer_analysis ta,
intrebos.poso_import_desc po
where po.import_seq_nbr = vordernbr
and tar.xfer_anal_run_nbr = po.order_nbr
and ta.xfer_anal_ref_nbr = tar.xfer_anal_ref_nbr
);
if (vRowCount > 1) then
vErrorDesc := 'Multiple Country Codes';
return 5;
end if;
-- Check for Duplicate Business Type
select count(*)
into vRowCount
from
(select distinct
ta.business_type
from intrebos.transfer_analysis_run tar,
intrebos.transfer_analysis ta,
intrebos.poso_import_desc po
where po.import_seq_nbr = vordernbr
and tar.xfer_anal_run_nbr = po.order_nbr
and ta.xfer_anal_ref_nbr = tar.xfer_anal_ref_nbr
);
if (vRowCount > 1) then
vErrorDesc := 'Multiple business_types';
return 6;
end if;
-- Check for Duplicate Analysis Number
select count(*)
into vRowCount
from
(select tar.xfer_anal_ref_nbr, count(*)
from intrebos.transfer_analysis_run tar,
intrebos.poso_import_desc po
where po.import_seq_nbr = vordernbr
and tar.xfer_anal_run_nbr = po.order_nbr
group by tar.xfer_anal_ref_nbr
having count(*) > 1
);
if (vRowCount > 0) then
vErrorDesc := 'Ref Nbr not Unique';
return 7;
end if;
return 0;
exception
when others then
dbms_output.put_line ('Error ' || to_char(sqlcode) || 'verifyCom
bine ' );
dbms_output.put_line (sqlerrm);
vErrorDesc := sqlerrm;
return 5;
end verifyCombine;
function isCombinedDivision (vDivision in item.division%type) return Number
is
bRetval pls_integer := 0;
begin
select 1
into bRetval
from code_table_by_module
where module_code = 'TAG'
and sys_code = '41'
and code_type = '@V'
and code = vDivision;
return bRetval;
exception
when others then
return 0;
end isCombinedDivision;
-- Author: Mattes
-- Description: This procedure will delete a run created with the TAG
-- GUI. If there are multiple runs for an analysis only the records from
-- the TAG tables that match the XFER_ANAL_RUN_NBR (input) will be deleted.
-- If this is the last run for an analysis, then the records from the
-- TAG tables that match the XFER_ANAL_REF_NBR (derived) will also be
-- deleted. This procedure will also delete the records created from a
-- Combine process, i.e. intrebos_interface_queue and poso_import_desc
-- records.
PROCEDURE TXFER_DELETE (vRunNbr IN NUMBER) is
vRefNbr NUMBER(8,0);
vTmpNbr NUMBER(8,0);
vCount NUMBER(8,0);
vRunsLeft NUMBER(8,0);
vErrMsg VARCHAR2(200);
vIsCombineParent BOOLEAN := FALSE;
eCannotContinue EXCEPTION;
BEGIN
DBMS_OUTPUT.PUT_LINE('Start delete for run nbr: ' || vRunNbr);
-- First need to change the status of the intrebos_interface_queue and
-- transfer_analysis_run records so backend processes cannot pick them
-- up.
-- TODO: May want to add 'A' below later.
UPDATE
intrebos.transfer_analysis_run run
SET
run.STATUS_CODE = 'X'
WHERE
run.XFER_ANAL_RUN_NBR = vRunNbr
AND run.STATUS_CODE NOT IN ('D', 'W');
-- If we can't change the status then exit.
IF SQL%ROWCOUNT = 0 THEN
RAISE eCannotContinue;
END IF;
-- Commit the status change.
COMMIT;
DBMS_OUTPUT.PUT_LINE('Changed transfer_analysis_run status.');
-- See if this run was a combine and was going to the backend process.
SELECT
count(*)
INTO
vTmpNbr
FROM
intrebos.intrebos_interface_queue iiq
WHERE
iiq.SOURCE_KEY = vRunNbr
AND iiq.SOURCE_MODULE = 'TAG'
AND iiq.DEST_MODULE = 'COMB';
IF vTmpNbr > 0 THEN
DELETE FROM
intrebos.intrebos_interface_queue iiq
WHERE
iiq.SOURCE_KEY = vRunNbr
AND iiq.SOURCE_MODULE = 'TAG'
AND iiq.DEST_MODULE = 'COMB';
DBMS_OUTPUT.PUT_LINE('Deleted record from intrebos_interface_queue.');
COMMIT;
-- Set flag for poso below.
vIsCombineParent := TRUE;
END IF;
vCount := 0;
LOOP
DELETE FROM
intrebos.transfer_analysis_weeks weeks
WHERE
weeks.XFER_ANAL_RUN_NBR = vRunNbr
AND rownum < 10000;
IF SQL%ROWCOUNT = 0 THEN
COMMIT;
EXIT;
END IF;
vCount := vCount + SQL%ROWCOUNT;
COMMIT;
END LOOP;
DBMS_OUTPUT.PUT_LINE('Deleted from transfer_analysis_weeks: ' ||
vCount);
vCount := 0;
LOOP
DELETE FROM
intrebos.transfer_analysis_results results
WHERE
results.XFER_ANAL_RUN_NBR = vRunNbr
AND rownum < 10000;
IF SQL%ROWCOUNT = 0 THEN
COMMIT;
EXIT;
END IF;
vCount := vCount + SQL%ROWCOUNT;
COMMIT;
END LOOP;
DBMS_OUTPUT.PUT_LINE('Deleted from transfer_analysis_results: ' ||
vCount);
vCount := 0;
LOOP
DELETE FROM
intrebos.transfer_analysis_item item
WHERE
item.XFER_ANAL_RUN_NBR = vRunNbr
AND rownum < 10000;
IF SQL%ROWCOUNT = 0 THEN
COMMIT;
EXIT;
END IF;
vCount := vCount + SQL%ROWCOUNT;
COMMIT;
END LOOP;
DBMS_OUTPUT.PUT_LINE('Deleted from transfer_analysis_item: ' ||
vCount);
vCount := 0;
LOOP
DELETE FROM
intrebos.transfer_analysis_location loc
WHERE
loc.XFER_ANAL_RUN_NBR = vRunNbr
AND rownum < 10000;
IF SQL%ROWCOUNT = 0 THEN
COMMIT;
EXIT;
END IF;
vCount := vCount + SQL%ROWCOUNT;
COMMIT;
END LOOP;
DBMS_OUTPUT.PUT_LINE('Deleted from transfer_analysis_location: ' ||
vCount);
-- Get the reference number.
SELECT
run.XFER_ANAL_REF_NBR
INTO
vRefNbr
FROM
intrebos.transfer_analysis_run run
WHERE
run.XFER_ANAL_RUN_NBR = vRunNbr;
-- Now get rid of records in combine support tables.
-- First need to see if this a a parent of the combine process. If so
-- then need to change the childrens status code back to 'T' if they
-- exist.
IF vIsCombineParent = TRUE
THEN
vCount := 0;
FOR c1 IN
(
SELECT
poso.ORDER_NBR
FROM
intrebos.poso_import_desc poso
WHERE
poso.IMPORT_SEQ_NBR = vRunNbr
AND poso.MODULE_CODE = 'TAGC'
)
LOOP
UPDATE
intrebos.transfer_analysis_run run
SET
run.STATUS_CODE = 'T'
WHERE
run.XFER_ANAL_RUN_NBR = c1.ORDER_NBR;
DBMS_OUTPUT.PUT_LINE('Changed Status Code for run: ' || c1.ORDER_NBR);
END LOOP;
END IF;
vCount := 0;
LOOP
DELETE FROM
intrebos.poso_import_desc poso
WHERE
poso.IMPORT_SEQ_NBR = vRunNbr
AND poso.MODULE_CODE = 'TAGC'
AND rownum < 10000;
IF SQL%ROWCOUNT = 0 THEN
COMMIT;
EXIT;
END IF;
vCount := vCount + SQL%ROWCOUNT;
COMMIT;
END LOOP;
DBMS_OUTPUT.PUT_LINE('Deleted from poso_import_desc: ' ||
vCount);
-- Finally, get rid of the parent tables.
DELETE FROM
intrebos.transfer_analysis_run run
WHERE
run.XFER_ANAL_RUN_NBR = vRunNbr;
COMMIT;
DBMS_OUTPUT.PUT_LINE('Deleted transfer_analysis_run record.');
-- Need to see if there are any more run numbers for this ref number
-- in the transfer_analysis_run table. If so, then don't delete the
-- transfer_analysis record yet.
-- All of the tables that use the ref number as the key, need to not
-- be deleted until all of the runs have been removed.
SELECT
count(*)
INTO
vRunsLeft
FROM
intrebos.transfer_analysis_run run
WHERE
run.XFER_ANAL_REF_NBR = vRefNbr;
IF vRunsLeft = 0 THEN
-- Remove the global tables.
vCount := 0;
LOOP
DELETE FROM
intrebos.xfer_calc_by_div_fmt_loc loc
WHERE
loc.XFER_ANAL_REF_NBR = vRefNbr
AND rownum < 10000;
IF SQL%ROWCOUNT = 0 THEN
COMMIT;
EXIT;
END IF;
vCount := vCount + SQL%ROWCOUNT;
COMMIT;
END LOOP;
DBMS_OUTPUT.PUT_LINE('Deleted from xfer_calc_by_div_fmt_loc: ' || vCount);
vCount := 0;
LOOP
DELETE FROM
intrebos.xfer_calc_by_div_fmt_wks_out wks
WHERE
wks.XFER_ANAL_REF_NBR = vRefNbr
AND rownum < 10000;
IF SQL%ROWCOUNT = 0 THEN
COMMIT;
EXIT;
END IF;
vCount := vCount + SQL%ROWCOUNT;
COMMIT;
END LOOP;
DBMS_OUTPUT.PUT_LINE('Deleted from xfer_calc_by_div_fmt_wks_out: ' || vCount
);
vCount := 0;
LOOP
DELETE FROM
intrebos.xfer_calc_by_div_fmt_seq seq
WHERE
seq.XFER_ANAL_REF_NBR = vRefNbr
AND rownum < 10000;
IF SQL%ROWCOUNT = 0 THEN
COMMIT;
EXIT;
END IF;
vCount := vCount + SQL%ROWCOUNT;
COMMIT;
END LOOP;
DBMS_OUTPUT.PUT_LINE('Deleted from xfer_calc_by_div_fmt_seq: ' || vCount);
vCount := 0;
LOOP
DELETE FROM
intrebos.xfer_calc_by_item xcbi
WHERE
xcbi.XFER_ANAL_REF_NBR = vRefNbr
AND rownum < 10000;
IF SQL%ROWCOUNT = 0 THEN
COMMIT;
EXIT;
END IF;
vCount := vCount + SQL%ROWCOUNT;
COMMIT;
END LOOP;
DBMS_OUTPUT.PUT_LINE('Deleted from xfer_calc_by_item: ' || vCount);
-- Get rid of the 26 by_week records.
DELETE FROM
intrebos.transfer_analysis_by_week week
WHERE
week.XFER_ANAL_REF_NBR = vRefNbr;
vCount := SQL%ROWCOUNT;
DBMS_OUTPUT.PUT_LINE('Deleted from transfer_analysis_by_week: ' || vCount);
-- Finally get rid of the ref record.
DELETE FROM
intrebos.transfer_analysis ref
WHERE
ref.XFER_ANAL_REF_NBR = vRefNbr;
vCount := SQL%ROWCOUNT;
IF vCount = 1 THEN
DBMS_OUTPUT.PUT_LINE('Deleted transfer_analysis record.');
END IF;
ELSE
DBMS_OUTPUT.PUT_LINE('Did not delete reference records.');
END IF;
COMMIT;
EXCEPTION
WHEN eCannotContinue THEN
vErrMsg := 'Could not UPDATE status code';
DBMS_OUTPUT.PUT_LINE(vErrMsg);
RAISE_APPLICATION_ERROR(-20100, vErrMsg);
WHEN NO_DATA_FOUND THEN
vErrMsg := 'No Data Found';
DBMS_OUTPUT.PUT_LINE(vErrMsg);
RAISE_APPLICATION_ERROR(-20101, vErrMsg);
WHEN OTHERS THEN
vErrMsg := 'Error: ' || rtrim(Substr(sqlerrm, 1, 100));
DBMS_OUTPUT.PUT_LINE(vErrMsg);
RAISE_APPLICATION_ERROR(-20200, vErrMsg);
END TXFER_DELETE;
-- Author: Mattes
-- Description: This procedure will delete the results of a TAG
-- analysis. This is useful when the user want to rerun an anaysis
-- but not Copy to a new analysis. It deletes records in the
-- transfer_analysis_results and transfer_analysis_weeks tables.
PROCEDURE TXFER_DELETE_RESULTS (vRunNbr IN NUMBER) is
vRefNbr NUMBER(8,0);
vTmpNbr NUMBER(8,0);
vCount NUMBER(8,0);
vRunsLeft NUMBER(8,0);
vErrMsg VARCHAR2(200);
vIsCombineParent BOOLEAN := FALSE;
eCannotContinue EXCEPTION;
BEGIN
DBMS_OUTPUT.PUT_LINE('Start deleting results for run nbr: ' || vRunNbr);
-- Change Status Code back to 'S'.
UPDATE
intrebos.transfer_analysis_run run
SET
run.STATUS_CODE = 'S'
WHERE
run.XFER_ANAL_RUN_NBR = vRunNbr
AND run.STATUS_CODE NOT IN ('D', 'W');
-- If we can't change the status then exit.
IF SQL%ROWCOUNT = 0 THEN
RAISE eCannotContinue;
END IF;
-- Commit the status change.
COMMIT;
DBMS_OUTPUT.PUT_LINE('Changed transfer_analysis_run status.');
vCount := 0;
LOOP
DELETE FROM
intrebos.transfer_analysis_weeks weeks
WHERE
weeks.XFER_ANAL_RUN_NBR = vRunNbr
AND rownum < 10000;
IF SQL%ROWCOUNT = 0 THEN
COMMIT;
EXIT;
END IF;
vCount := vCount + SQL%ROWCOUNT;
COMMIT;
END LOOP;
DBMS_OUTPUT.PUT_LINE('Deleted from transfer_analysis_weeks: ' ||
vCount);
vCount := 0;
LOOP
DELETE FROM
intrebos.transfer_analysis_results results
WHERE
results.XFER_ANAL_RUN_NBR = vRunNbr
AND rownum < 10000;
IF SQL%ROWCOUNT = 0 THEN
COMMIT;
EXIT;
END IF;
vCount := vCount + SQL%ROWCOUNT;
COMMIT;
END LOOP;
DBMS_OUTPUT.PUT_LINE('Deleted from transfer_analysis_results: ' ||
vCount);
EXCEPTION
WHEN eCannotContinue THEN
vErrMsg := 'Could not UPDATE status code';
DBMS_OUTPUT.PUT_LINE(vErrMsg);
RAISE_APPLICATION_ERROR(-20101, vErrMsg);
WHEN OTHERS THEN
vErrMsg := 'Error: ' || rtrim(Substr(sqlerrm, 1, 100));
DBMS_OUTPUT.PUT_LINE(vErrMsg);
RAISE_APPLICATION_ERROR(-20200, vErrMsg);
END TXFER_DELETE_RESULTS;
-- Author: Mattes
-- Description: This procedure will delete the Loc/Items records of a TAG
-- analysis. This is useful when the user wants to save space on old
-- runs where the results are still needed, but the analysis will not
-- be copied or run again.
PROCEDURE TXFER_DELETE_LOC_ITEMS (vRunNbr IN NUMBER) is
vRefNbr NUMBER(8,0);
vTmpNbr NUMBER(8,0);
vCount NUMBER(8,0);
vRunsLeft NUMBER(8,0);
vErrMsg VARCHAR2(200);
vIsCombineParent BOOLEAN := FALSE;
eCannotContinue EXCEPTION;
BEGIN
DBMS_OUTPUT.PUT_LINE('Start deleting Loc/Items for run nbr: ' ||
vRunNbr);
vCount := 0;
LOOP
DELETE FROM
intrebos.transfer_analysis_item item
WHERE
item.XFER_ANAL_RUN_NBR = vRunNbr
AND rownum < 10000;
IF SQL%ROWCOUNT = 0 THEN
COMMIT;
EXIT;
END IF;
vCount := vCount + SQL%ROWCOUNT;
COMMIT;
END LOOP;
DBMS_OUTPUT.PUT_LINE('Deleted from transfer_analysis_item: ' ||
vCount);
vCount := 0;
LOOP
DELETE FROM
intrebos.transfer_analysis_location loc
WHERE
loc.XFER_ANAL_RUN_NBR = vRunNbr
AND rownum < 10000;
IF SQL%ROWCOUNT = 0 THEN
COMMIT;
EXIT;
END IF;
vCount := vCount + SQL%ROWCOUNT;
COMMIT;
END LOOP;
DBMS_OUTPUT.PUT_LINE('Deleted from transfer_analysis_location: ' ||
vCount);
EXCEPTION
WHEN eCannotContinue THEN
vErrMsg := 'Could not UPDATE status code';
DBMS_OUTPUT.PUT_LINE(vErrMsg);
RAISE_APPLICATION_ERROR(-20100, vErrMsg);
WHEN OTHERS THEN
vErrMsg := 'Error: ' || rtrim(Substr(sqlerrm, 1, 100));
DBMS_OUTPUT.PUT_LINE(vErrMsg);
RAISE_APPLICATION_ERROR(-20200, vErrMsg);
END TXFER_DELETE_LOC_ITEMS;

-- Author: Mattes
-- Description: This procedure will copy a TAG analysis to a new RunNbr.
-- The new RunNbr will be obtained from the doc_nbrs table.
PROCEDURE TXFER_COPY_RUN (vSourceRunNbr IN NUMBER, vDestRunNbr OUT NUMBER) is
vErrMsg VARCHAR2(200);
vCalcTypeCode VARCHAR2(10);
vAnalTypeCode VARCHAR2(10);
--vDestRunNbr NUMBER(8,0);
vDestRefNbr NUMBER(8,0);
vSourceRefNbr NUMBER(8,0);
vDivFmtRefNbr NUMBER(8,0);
eInvalidCalcType EXCEPTION;
eInvalidAnalType EXCEPTION;
BEGIN
DBMS_OUTPUT.PUT_LINE('Start copy of RunNbr: ' || vSourceRunNbr);
SELECT
run.XFER_ANAL_REF_NBR
INTO
vSourceRefNbr
FROM
intrebos.transfer_analysis_run run
WHERE
run.XFER_ANAL_RUN_NBR = vSourceRunNbr;
DBMS_OUTPUT.PUT_LINE('Source RefNbr: ' || vSourceRefNbr);
-- Do not allow a Combined or Imported run to be copied.
SELECT
ta.CALC_TYPE_CODE
INTO
vCalcTypeCode
FROM
intrebos.transfer_analysis ta
WHERE
ta.XFER_ANAL_REF_NBR = vSourceRefNbr;
vCalcTypeCode := rtrim(vCalcTypeCode);
IF vCalcTypeCode IN ('I')
THEN
RAISE eInvalidCalcType;
END IF;
SELECT
ta.ANAL_TYPE_CODE
INTO
vAnalTypeCode
FROM
intrebos.transfer_analysis ta
WHERE
ta.XFER_ANAL_REF_NBR = vSourceRefNbr;
vAnalTypeCode := rtrim(vAnalTypeCode);
IF vAnalTypeCode IN ('C')
THEN
RAISE eInvalidAnalType;
END IF;
-- Get a new RunNbr from doc_nbrs table.
SELECT
doc.CURR_DOC_NBR
INTO
vDestRunNbr
FROM
intrebos.doc_nbrs doc
WHERE
doc.MODULE_CODE = 'TAG'
AND doc.TABLE_NAME = 'TRANSFER_ANALYSIS_RUN'
AND doc.FIELD_NAME = 'XFER_ANAL_RUN_NBR';
-- Update the doc_nbrs.CURR_DOC_NBR field.
UPDATE
intrebos.doc_nbrs doc
SET
doc.CURR_DOC_NBR = vDestRunNbr + 1,
doc.LAST_UPDATE_USER = USER,
doc.LAST_UPDATE_DATE = SYSDATE,
doc.LAST_UPDATE_MODULE = 'TXFER_COPY_RUN'
WHERE
doc.MODULE_CODE = 'TAG'
AND doc.TABLE_NAME = 'TRANSFER_ANALYSIS_RUN'
AND doc.FIELD_NAME = 'XFER_ANAL_RUN_NBR';
-- Get a new RefNbr from doc_nbrs table.
SELECT
doc.CURR_DOC_NBR
INTO
vDestRefNbr
FROM
intrebos.doc_nbrs doc
WHERE
doc.MODULE_CODE = 'TAG'
AND doc.TABLE_NAME = 'TRANSFER_ANALYSIS'
AND doc.FIELD_NAME = 'XFER_ANAL_REF_NBR';
-- Update the doc_nbrs.CURR_DOC_NBR field.
UPDATE
intrebos.doc_nbrs doc
SET
doc.CURR_DOC_NBR = vDestRefNbr + 1,
doc.LAST_UPDATE_USER = USER,
doc.LAST_UPDATE_DATE = SYSDATE,
doc.LAST_UPDATE_MODULE = 'TXFER_COPY_RUN'
WHERE
doc.MODULE_CODE = 'TAG'
AND doc.TABLE_NAME = 'TRANSFER_ANALYSIS'
AND doc.FIELD_NAME = 'XFER_ANAL_REF_NBR';
-- Copy the transfer_analysis and transfer_analysis_by_week tables.
INSERT INTO intrebos.transfer_analysis
(
XFER_ANAL_REF_NBR,
CORP_COUNTRY_CODE,
CORP_ITEM_DIVISION,
BUSINESS_TYPE,
CALC_TYPE_CODE,
REQ_TYPE_CODE,
ANAL_TYPE_CODE,
ALL_ITEMS_IND,
ITEM_QRY_MODULE_NBR,
ITEM_QRY_NBR,
LOC_QRY_MODULE_NBR,
LOC_QRY_NBR,
XFER_DESC,
XFER_TO,
LOC_MIN_XFER_QTY,
LOC_MAX_XFER_QTY,
LOS_NBR_WEEKS,
WEEKS_OF_SALES_QTY,
XFER_PCT,
NRW_THRESHOLD_PCT,
XFER_REASON_CODE,
INCL_INBOUND_PCT,
INCL_REQ_XFER_OUT_IND,
INCL_PEND_XFER_OUT_IND,
USE_PROTECT_QTY_IND,
DESIRED_TURN_RATE_NBR,
LOC_MAX_XFER_PCT,
XFER_PRIORITY_ALGORITHM_CODE,
LAST_RCPT_WEEKS_NBR,
PERIODS_QTY,
LOC_TURN_THRESHOLD_NBR,
LOC_GROUP_TURN_THRESHOLD_NBR,
ABS_TURN_THRESHOLD_NBR,
PRP_TURN_THRESHOLD_NBR,
LOC_PROTECT_QTY,
LOC_GROUP_PROTECT_QTY,
ABS_MIN_PROTECT_QTY
)
SELECT
vDestRefNbr,
ta.CORP_COUNTRY_CODE,
ta.CORP_ITEM_DIVISION,
ta.BUSINESS_TYPE,
ta.CALC_TYPE_CODE,
ta.REQ_TYPE_CODE,
ta.ANAL_TYPE_CODE,
ta.ALL_ITEMS_IND,
ta.ITEM_QRY_MODULE_NBR,
ta.ITEM_QRY_NBR,
ta.LOC_QRY_MODULE_NBR,
ta.LOC_QRY_NBR,
ta.XFER_DESC,
ta.XFER_TO,
ta.LOC_MIN_XFER_QTY,
ta.LOC_MAX_XFER_QTY,
ta.LOS_NBR_WEEKS,
ta.WEEKS_OF_SALES_QTY,
ta.XFER_PCT,
ta.NRW_THRESHOLD_PCT,
ta.XFER_REASON_CODE,
ta.INCL_INBOUND_PCT,
ta.INCL_REQ_XFER_OUT_IND,
ta.INCL_PEND_XFER_OUT_IND,
ta.USE_PROTECT_QTY_IND,
ta.DESIRED_TURN_RATE_NBR,
ta.LOC_MAX_XFER_PCT,
ta.XFER_PRIORITY_ALGORITHM_CODE,
ta.LAST_RCPT_WEEKS_NBR,
ta.PERIODS_QTY,
ta.LOC_TURN_THRESHOLD_NBR,
ta.LOC_GROUP_TURN_THRESHOLD_NBR,
ta.ABS_TURN_THRESHOLD_NBR,
ta.PRP_TURN_THRESHOLD_NBR,
ta.LOC_PROTECT_QTY,
ta.LOC_GROUP_PROTECT_QTY,
ta.ABS_MIN_PROTECT_QTY
FROM
intrebos.transfer_analysis ta
WHERE
ta.XFER_ANAL_REF_NBR = vSourceRefNbr;
DBMS_OUTPUT.PUT_LINE('Created transfer_analysis rec: ' || vDestRefNbr)
;
INSERT INTO intrebos.transfer_analysis_by_week
(
XFER_ANAL_REF_NBR,
WEEK_OFFSET_NBR,
ADJMNT_PCT
)
SELECT
vDestRefNbr,
week.WEEK_OFFSET_NBR,
week.ADJMNT_PCT
FROM
intrebos.transfer_analysis_by_week week
WHERE
week.XFER_ANAL_REF_NBR = vSourceRefNbr;
DBMS_OUTPUT.PUT_LINE('Created transfer_analysis_by_week, nbr recs: ' |
| SQL%ROWCOUNT);
-- Now for the RunNbr based tables.
-- Only copy the required fields of the run table or else GUI bombs.
-- run.APPROVE_USER,
-- run.APPROVE_DATE,
-- run.RUN_XFER_DTS,
-- run.SEND_TO_LOC_DATE,
-- run.START_XFER_DATE,
-- run.XFER_EXPIRE_DATE,
-- run.COMPLETED_PCT,
-- run.SEND_TO_ALL_IND,
-- run.XFER_INST,
-- run.SHIP_CODE,
-- run.SORT_CODE,
-- run.RUN_START_DTS
INSERT INTO intrebos.transfer_analysis_run
(
XFER_ANAL_RUN_NBR,
XFER_ANAL_REF_NBR,
STATUS_CODE,
CREATE_USER,
CREATE_DATE,
CREATE_MODULE,
LAST_UPDATE_USER,
LAST_UPDATE,
LAST_UPDATE_MODULE
)
SELECT
vDestRunNbr,
vDestRefNbr,
run.STATUS_CODE,
run.CREATE_USER,
run.CREATE_DATE,
run.CREATE_MODULE,
run.LAST_UPDATE_USER,
run.LAST_UPDATE,
run.LAST_UPDATE_MODULE
FROM
intrebos.transfer_analysis_run run
WHERE
run.XFER_ANAL_RUN_NBR = vSourceRunNbr;
DBMS_OUTPUT.PUT_LINE('Created transfer_analysis_run rec: ' || vDestRun
Nbr);
UPDATE
intrebos.transfer_analysis_run run
SET
run.STATUS_CODE = 'S',
run.LAST_UPDATE_USER = USER,
run.LAST_UPDATE = SYSDATE,
run.LAST_UPDATE_MODULE = 'TXFER_COPY_RUN'
WHERE
run.XFER_ANAL_RUN_NBR = vDestRunNbr;
DBMS_OUTPUT.PUT_LINE('Updated STATUS_CODE');
-- Don't copy transfer_analysis_results or transfer_analysis_weeks
-- tables.
INSERT INTO intrebos.transfer_analysis_location
(
XFER_ANAL_RUN_NBR,
LOC_NBR,
SORT_SEQ_NBR,
EXCL_IND,
EXCL_REASON,
LOC_GROUP_CODE,
XFER_TO_LOC_NBR
)
SELECT
vDestRunNbr,
loc.LOC_NBR,
loc.SORT_SEQ_NBR,
loc.EXCL_IND,
loc.EXCL_REASON,
loc.LOC_GROUP_CODE,
loc.XFER_TO_LOC_NBR
FROM
intrebos.transfer_analysis_location loc
WHERE
loc.XFER_ANAL_RUN_NBR = vSourceRunNbr;
DBMS_OUTPUT.PUT_LINE('Created transfer_analysis_location, nbr recs: '
|| SQL%ROWCOUNT);
INSERT INTO intrebos.transfer_analysis_item
(
XFER_ANAL_RUN_NBR,
ITEM_NBR,
SORT_SEQ_NBR,
OVERRIDE_IND,
EXCL_IND,
EXCL_REASON,
WEEKS_OUT_QTY,
ELIGIBLE_LOC_CNT,
BUSINESS_TYPE_CD
)
SELECT
vDestRunNbr,
item.ITEM_NBR,
item.SORT_SEQ_NBR,
item.OVERRIDE_IND,
item.EXCL_IND,
item.EXCL_REASON,
item.WEEKS_OUT_QTY,
item.ELIGIBLE_LOC_CNT,
item.BUSINESS_TYPE_CD
FROM
intrebos.transfer_analysis_item item
WHERE
item.XFER_ANAL_RUN_NBR = vSourceRunNbr;
DBMS_OUTPUT.PUT_LINE('Created transfer_analysis_item, nbr recs: ' ||
SQL%ROWCOUNT);
-- Finally create the globals. Determine the proper major key record.
-- Only want one CountryCode.
SELECT
seq.DIV_FMT_REF_NBR
INTO
vDivFmtRefNbr
FROM
intrebos.xfer_calc_by_div_fmt_seq seq,
intrebos.transfer_analysis ta
WHERE
ta.XFER_ANAL_REF_NBR = vSourceRefNbr
AND seq.XFER_ANAL_REF_NBR = vSourceRefNbr
AND seq.COUNTRY_CODE = ta.CORP_COUNTRY_CODE
AND seq.BUSINESS_TYPE = ta.BUSINESS_TYPE
AND seq.DIVISION = ta.CORP_ITEM_DIVISION;
DBMS_OUTPUT.PUT_LINE('Using DivFmtRefNbr: ' || vDivFmtRefNbr);
INSERT INTO intrebos.xfer_calc_by_item
(
XFER_ANAL_REF_NBR,
COUNTRY_CODE,
ITEM_NBR,
LOS_XFER_PCT,
LOS_NBR_WEEKS,
NS_RSRV_QTY,
MAX_LOS_PCT,
WEEKS_OF_SALES_QTY,
DESIRED_WEEKS_OF_SUPPLY_QTY,
USE_PRP_IND,
PROTECTION_FACTOR_NBR,
PROTECT_QTY
)
SELECT
vDestRefNbr,
COUNTRY_CODE,
ITEM_NBR,
LOS_XFER_PCT,
LOS_NBR_WEEKS,
NS_RSRV_QTY,
MAX_LOS_PCT,
WEEKS_OF_SALES_QTY,
DESIRED_WEEKS_OF_SUPPLY_QTY,
USE_PRP_IND,
PROTECTION_FACTOR_NBR,
PROTECT_QTY
FROM
intrebos.xfer_calc_by_item
WHERE
XFER_ANAL_REF_NBR = vSourceRefNbr;
DBMS_OUTPUT.PUT_LINE('Created xfer_calc_by_item, nbr recs: ' ||
SQL%ROWCOUNT);
INSERT INTO intrebos.xfer_calc_by_div_fmt_seq
(
XFER_ANAL_REF_NBR,
DIV_FMT_REF_NBR,
COUNTRY_CODE,
BUSINESS_TYPE,
DIVISION,
FORMAT
)
SELECT
vDestRefNbr,
DIV_FMT_REF_NBR,
COUNTRY_CODE,
BUSINESS_TYPE,
DIVISION,
FORMAT
FROM
intrebos.xfer_calc_by_div_fmt_seq
WHERE
XFER_ANAL_REF_NBR = vSourceRefNbr
AND DIV_FMT_REF_NBR = vDivFmtRefNbr;
DBMS_OUTPUT.PUT_LINE('Created 1 xfer_calc_by_div_fmt_seq rec');
INSERT INTO intrebos.xfer_calc_by_div_fmt_wks_out
(
XFER_ANAL_REF_NBR,
DIV_FMT_REF_NBR,
FROM_WEEKS_OUT,
TO_WEEKS_OUT,
LOS_XFER_PCT,
MAX_LOS_PCT
)
SELECT
vDestRefNbr,
DIV_FMT_REF_NBR,
FROM_WEEKS_OUT,
TO_WEEKS_OUT,
LOS_XFER_PCT,
MAX_LOS_PCT
FROM
intrebos.xfer_calc_by_div_fmt_wks_out
WHERE
XFER_ANAL_REF_NBR = vSourceRefNbr
AND DIV_FMT_REF_NBR = vDivFmtRefNbr;
DBMS_OUTPUT.PUT_LINE('Created xfer_calc_by_div_fmt_wks_out, nbr recs:
' ||
SQL%ROWCOUNT);
INSERT INTO intrebos.xfer_calc_by_div_fmt_loc
(
XFER_ANAL_REF_NBR,
DIV_FMT_REF_NBR,
LOC_GRP_CODE,
RANK_FROM,
RANK_TO,
RANK_TIMEFRAME_CODE,
PROTECT_QTY,
DESIRED_WEEKS_OF_SUPPLY_QTY,
PROTECTION_FACTOR_NBR
)
SELECT
vDestRefNbr,
DIV_FMT_REF_NBR,
LOC_GRP_CODE,
RANK_FROM,
RANK_TO,
RANK_TIMEFRAME_CODE,
PROTECT_QTY,
DESIRED_WEEKS_OF_SUPPLY_QTY,
PROTECTION_FACTOR_NBR
FROM
intrebos.xfer_calc_by_div_fmt_loc
WHERE
XFER_ANAL_REF_NBR = vSourceRefNbr
AND DIV_FMT_REF_NBR = vDivFmtRefNbr;
DBMS_OUTPUT.PUT_LINE('Created xfer_calc_by_div_fmt_loc, nbr recs: ' ||
SQL%ROWCOUNT);
COMMIT;
EXCEPTION
WHEN NO_DATA_FOUND THEN
vErrMsg := 'Invalid RunNbr: ' || vSourceRunNbr;
RAISE_APPLICATION_ERROR(-20100, vErrMsg);
ROLLBACK;
WHEN TOO_MANY_ROWS THEN
vErrMsg := 'Getting multiple records for SELECT INTO statement.';
RAISE_APPLICATION_ERROR(-20101, vErrMsg);
ROLLBACK;
WHEN eInvalidCalcType THEN
vErrMsg := 'Cannot copy an Import analysis';
RAISE_APPLICATION_ERROR(-20102, vErrMsg);
ROLLBACK;
WHEN eInvalidAnalType THEN
vErrMsg := 'Cannot copy a Combined analysis';
RAISE_APPLICATION_ERROR(-20103, vErrMsg);
ROLLBACK;
WHEN OTHERS THEN
vErrMsg := 'Error: ' || rtrim(Substr(sqlerrm, 1, 100));
RAISE_APPLICATION_ERROR(-20200, vErrMsg);
ROLLBACK;
END TXFER_COPY_RUN;
-- Author: Mattes
-- Description: This procedure will change the status of a TAG analysis.
-- If the analysis has already begun to be processed (Status is 'W')
-- then procedure just exits. The RunNbr and the desired status is
-- passed in as arguments.
PROCEDURE TXFER_CHANGE_STATUS (vRunNbr IN NUMBER, vStatusCode IN VARCHAR2) is
vErrMsg VARCHAR2(200);
eCannotContinue EXCEPTION;
BEGIN
DBMS_OUTPUT.PUT_LINE('Changing Status Code for run nbr: ' || vRunNbr);
-- Make sure we were given a valid status.
IF vStatusCode IN ('A', 'E', 'O', 'Q', 'S', 'T')
THEN
-- Make sure the run is not in 'W'ork In Process (WIP) status, or
-- Pen'D'ing Combine.
UPDATE
intrebos.transfer_analysis_run run
SET
run.STATUS_CODE = vStatusCode
WHERE
run.XFER_ANAL_RUN_NBR = vRunNbr
AND run.STATUS_CODE NOT IN ('D', 'W');
END IF;
-- If we can't change the status then exit.
IF SQL%ROWCOUNT = 0 THEN
RAISE eCannotContinue;
END IF;
-- Commit the status change.
COMMIT;
DBMS_OUTPUT.PUT_LINE('Changed transfer_analysis_run status.');
EXCEPTION
WHEN eCannotContinue THEN
vErrMsg := 'Could not UPDATE status code';
DBMS_OUTPUT.PUT_LINE(vErrMsg);
RAISE_APPLICATION_ERROR(-20100, vErrMsg);
WHEN OTHERS THEN
vErrMsg := 'Error: ' || rtrim(Substr(sqlerrm, 1, 100));
DBMS_OUTPUT.PUT_LINE(vErrMsg);
RAISE_APPLICATION_ERROR(-20200, vErrMsg);
END TXFER_CHANGE_STATUS;
-- Author: Mattes
-- Description: This procedure will change the analysis type of a TAG analysis.
-- The rules for changing are:
-- 1. If the analysis has already begun to be processed (Status is 'W')
-- then procedure just exits.
-- 2. If the run has already been run, StatusCode 'T' then you cannot
-- change from a 'P'ending To a 'W'hat If since this will give false
-- information.
PROCEDURE TXFER_CHANGE_ANALYSIS_TYPE (vRunNbr IN NUMBER,
vAnalysisType IN VARCHAR2) is
vRefNbr NUMBER(8,0);
vStatusCode VARCHAR2(10);
vErrMsg VARCHAR2(200);
eRefNbr EXCEPTION;
eInvalidAnalysisType EXCEPTION;
eInvalidStatusCode EXCEPTION;
eChangeAnalysisType EXCEPTION;
BEGIN
DBMS_OUTPUT.PUT_LINE('Changing Analysis Type for run nbr: ' || vRunNbr);
-- Get the Status Code.
SELECT
run.STATUS_CODE
INTO
vStatusCode
FROM
intrebos.transfer_analysis_run run
WHERE
run.XFER_ANAL_RUN_NBR = vRunNbr;
vStatusCode := rtrim(vStatusCode);
-- Make sure we were given a valid status for given analysis type.
IF vAnalysisType = 'W'
THEN
IF vStatusCode NOT IN ('E', 'O', 'Q', 'S')
THEN
RAISE eInvalidStatusCode;
END IF;
ELSIF vAnalysisType = 'P'
THEN
IF vStatusCode NOT IN ('E', 'O', 'Q', 'S', 'T')
THEN
RAISE eInvalidStatusCode;
END IF;
ELSE
RAISE eInvalidAnalysisType;
END IF;
-- Get the RefNbr.
SELECT
run.XFER_ANAL_REF_NBR
INTO
vRefNbr
FROM
intrebos.transfer_analysis_run run
WHERE
run.XFER_ANAL_RUN_NBR = vRunNbr;
-- If we can't get ref nbr then exit.
IF SQL%ROWCOUNT = 0 THEN
RAISE eRefNbr;
END IF;
UPDATE
intrebos.transfer_analysis ta
SET
ta.ANAL_TYPE_CODE = vAnalysisType
WHERE
ta.XFER_ANAL_REF_NBR = vRefNbr;
-- If we can't change the status then exit.
IF SQL%ROWCOUNT = 0 THEN
RAISE eChangeAnalysisType;
END IF;
-- Commit the status change.
COMMIT;
DBMS_OUTPUT.PUT_LINE('Changed transfer_analysis AnalysisType for ref: ' ||
vRefNbr);
EXCEPTION
WHEN eRefNbr THEN
vErrMsg := 'Could not get ref nbr';
DBMS_OUTPUT.PUT_LINE(vErrMsg);
RAISE_APPLICATION_ERROR(-20100, vErrMsg);
WHEN eInvalidAnalysisType THEN
vErrMsg := 'Invalid Analysis Type: ' || vAnalysisType;
DBMS_OUTPUT.PUT_LINE(vErrMsg);
RAISE_APPLICATION_ERROR(-20101, vErrMsg);
WHEN eInvalidStatusCode THEN
vErrMsg := 'Cannot change Analysis Type for runs with Status Code: ' ||
vStatusCode;
DBMS_OUTPUT.PUT_LINE(vErrMsg);
RAISE_APPLICATION_ERROR(-20102, vErrMsg);
WHEN eChangeAnalysisType THEN
vErrMsg := 'Could not UPDATE Analysis Type';
DBMS_OUTPUT.PUT_LINE(vErrMsg);
RAISE_APPLICATION_ERROR(-20103, vErrMsg);
WHEN OTHERS THEN
vErrMsg := 'Error: ' || rtrim(Substr(sqlerrm, 1, 100));
DBMS_OUTPUT.PUT_LINE(vErrMsg);
RAISE_APPLICATION_ERROR(-20200, vErrMsg);
END TXFER_CHANGE_ANALYSIS_TYPE;
-- Author: Mark Mattes
-- Description: Modifies the results of a TAG analysis.
-- Assumptions:
-- 1. The percentage input will be used to reduce the DERIVED_XFER_PCT.
-- 2. The percentage input will be in whole numbers, i.e. 50% = 50.
-- 3. The routine will work for QOH/LOS calcs only.
-- 4. A WOS would need to have overstock saved in results table.
-- 5. A Turn calc would need have Turn rates saved in results table.
-- 6. Did not deal with Consider PRP
-- 7. For LOS calc, the By Age and By Item percentage will be updated.
-- 8. For QOH calc, the transfer_analysis table percentage will be updated.
-- 9. Cannot change the protect qty. But could do a data mod and run
-- this routine with a percentage of 0%.
PROCEDURE TXFER_MODIFY_RESULTS (vRunNbr IN NUMBER, vPctIn IN NUMBER) is
vErrMsg VARCHAR2(200);
vCalcTypeCode VARCHAR2(10);
vStatusCode VARCHAR2(10);
vRefNbr NUMBER(8,0);
vDivFmtRefNbr NUMBER(8,0);
vReductionPct NUMBER(3,2);
vPendingQOH NUMBER(8,0);
eInvalidCalcType EXCEPTION;
eInvalidStatusCode EXCEPTION;
eInvalidPct EXCEPTION;
eNotWritten EXCEPTION;
BEGIN
DBMS_OUTPUT.PUT_LINE('Start modifying results for RunNbr: ' ||
vRunNbr);
-- Get RefNbr for global update (if needed).
SELECT
run.XFER_ANAL_REF_NBR,
run.STATUS_CODE
INTO
vRefNbr,
vStatusCode
FROM
intrebos.transfer_analysis_run run
WHERE
run.XFER_ANAL_RUN_NBR = vRunNbr;
vStatusCode := rtrim(vStatusCode);
DBMS_OUTPUT.PUT_LINE('RefNbr: ' || vRefNbr);
-- Make sure we will have results and this is not already approved.
IF vStatusCode NOT IN ('T')
THEN
RAISE eInvalidStatusCode;
END IF;
-- Make sure the run is a QOH or LOS analysis.
SELECT
ta.CALC_TYPE_CODE
INTO
vCalcTypeCode
FROM
intrebos.transfer_analysis ta
WHERE
ta.XFER_ANAL_REF_NBR = vRefNbr;
vCalcTypeCode := rtrim(vCalcTypeCode);
IF vCalcTypeCode NOT IN ('Q', 'MINL', 'AVGL', 'MAXL')
THEN
RAISE eInvalidCalcType;
END IF;
-- Verify the input percentage. Convert to float.
IF vPctIn < 0 OR vPctIn > 100
THEN
RAISE eInvalidPct;
ELSE
vReductionPct := vPctIn / 100.0;
DBMS_OUTPUT.PUT_LINE('Using reduction percent: ' || vReductionPct);
END IF;
-- Loop through the results.
FOR c1 IN
(
SELECT
results.LOC_NBR,
results.ITEM_NBR,
results.QOH,
results.XFER_REQ_OUT,
results.PENDING_XFER_REQ_OUT,
results.FINAL_PROTECT_QTY,
results.AVAILABLE_TO_XFER,
results.LOS_RESULT,
results.SUGGEST_XFER_QTY,
results.DERIVED_XFER_PCT,
results.SELECTED_LOS_SALES_QTY
FROM
intrebos.transfer_analysis_results results
WHERE
results.XFER_ANAL_RUN_NBR = vRunNbr
)
LOOP
-- The percentage saved in the results table is in float 0 to 1.
c1.DERIVED_XFER_PCT :=
c1.DERIVED_XFER_PCT - c1.DERIVED_XFER_PCT * vReductionPct;
c1.AVAILABLE_TO_XFER :=
c1.SELECTED_LOS_SALES_QTY * c1.DERIVED_XFER_PCT;
vPendingQOH := c1.QOH - c1.XFER_REQ_OUT - c1.PENDING_XFER_REQ_OUT;
IF (vPendingQOH - c1.AVAILABLE_TO_XFER) < c1.FINAL_PROTECT_QTY
THEN
c1.SUGGEST_XFER_QTY := vPendingQOH - c1.FINAL_PROTECT_QTY;
ELSE
c1.SUGGEST_XFER_QTY := c1.AVAILABLE_TO_XFER;
END IF;
IF c1.SUGGEST_XFER_QTY < 0
THEN
c1.SUGGEST_XFER_QTY := 0;
END IF;
c1.LOS_RESULT := c1.SUGGEST_XFER_QTY;
-- Save the new results.
UPDATE
intrebos.transfer_analysis_results
SET
FINAL_PROTECT_QTY = c1.FINAL_PROTECT_QTY,
AVAILABLE_TO_XFER = c1.AVAILABLE_TO_XFER,
LOS_RESULT = c1.LOS_RESULT,
SUGGEST_XFER_QTY = c1.SUGGEST_XFER_QTY,
DERIVED_XFER_PCT = c1.DERIVED_XFER_PCT,
SELECTED_LOS_SALES_QTY = c1.SELECTED_LOS_SALES_QTY,
LAST_UPDATE_USER = USER,
LAST_UPDATE = SYSDATE,
LAST_UPDATE_MODULE = 'TXFER_MODIFY_RESULTS'
WHERE
XFER_ANAL_RUN_NBR = vRunNbr
AND LOC_NBR = c1.LOC_NBR
AND ITEM_NBR = c1.ITEM_NBR;
END LOOP;
-- Update the global tables for LOS calc. The percentages in the
-- global tables are in float format, i.e. 0-1.
IF vCalcTypeCode IN ('MINL', 'AVGL', 'MAXL')
THEN
UPDATE
intrebos.xfer_calc_by_item xcbi
SET
xcbi.LOS_XFER_PCT =
xcbi.LOS_XFER_PCT - xcbi.LOS_XFER_PCT * vReductionPct
WHERE
xcbi.XFER_ANAL_REF_NBR = vRefNbr;
UPDATE
intrebos.xfer_calc_by_div_fmt_wks_out xcbw
SET
xcbw.LOS_XFER_PCT =
xcbw.LOS_XFER_PCT - xcbw.LOS_XFER_PCT * vReductionPct
WHERE
xcbw.XFER_ANAL_REF_NBR = vRefNbr;
ELSIF vCalcTypeCode IN ('Q')
THEN
RAISE eNotWritten;
ELSE
RAISE eInvalidCalcType;
END IF;
COMMIT;
EXCEPTION
WHEN NO_DATA_FOUND THEN
vErrMsg := 'Invalid RunNbr: ' || vRunNbr;
RAISE_APPLICATION_ERROR(-20100, vErrMsg);
ROLLBACK;
WHEN TOO_MANY_ROWS THEN
vErrMsg := 'Getting multiple records for SELECT INTO statement.';
RAISE_APPLICATION_ERROR(-20101, vErrMsg);
ROLLBACK;
WHEN eInvalidCalcType THEN
vErrMsg := 'Can only modify QOH or LOS analysis.';
RAISE_APPLICATION_ERROR(-20102, vErrMsg);
ROLLBACK;
WHEN eInvalidStatusCode THEN
vErrMsg := 'Can only modify Process Complete.';
RAISE_APPLICATION_ERROR(-20102, vErrMsg);
ROLLBACK;
WHEN eNotWritten THEN
vErrMsg := 'Not written yet.';
RAISE_APPLICATION_ERROR(-20102, vErrMsg);
ROLLBACK;
WHEN eInvalidPct THEN
vErrMsg := 'Invalid percentage: Valid values are from 0 to 100';
RAISE_APPLICATION_ERROR(-20103, vErrMsg);
ROLLBACK;
WHEN OTHERS THEN
vErrMsg := 'Error: ' || rtrim(Substr(sqlerrm, 1, 100));
RAISE_APPLICATION_ERROR(-20200, vErrMsg);
ROLLBACK;
END TXFER_MODIFY_RESULTS;
END TRANSFER_ANALYSIS_PACK;
/

Anda mungkin juga menyukai