Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Download as pdf or txt
Download as pdf or txt
You are on page 1of 29

CREATE OR REPLACE PACKAGE BODY APPS.

XXEAM_ZONAR_MILEAGE_PKG
IS
/* *************************************************************************** *
/
/* $Header : XXEAM_ZONAR_MILEAGE_PKG.pkb 1.0 06-JUN-2012 *
/
/* Name : XXEAM_ZONAR_MILEAGE_PKG.pkb *
/
/* Copyright : Global PTM *
/
/* *
/
/* Created On: 22-MAY-2012 *
/
/* Created By: Malathy Muthu *
/
/* Purpose : Package to perform Zonar Mileage Integration *
/
/* *************************************************************************** *
/
/* Modification History: *
/
/* Version By Date Comments *
/
/* 1.0 Malathy Muthu 06-JUN-2012 Initial Version *
/
/* *
/
/* *************************************************************************** *
/
pv_request_id NUMBER (15) := FND_GLOBAL.conc_request_id;-- Request Id
pv_user_id NUMBER (15) := FND_GLOBAL.user_id; -- User Id
pv_login_id NUMBER (15) := FND_GLOBAL.login_id; -- Login Id
pv_date DATE := SYSDATE;
PROCEDURE debug(p_message VARCHAR2)
IS
BEGIN
fnd_file.put_line(fnd_file.LOG,p_message);
END;
PROCEDURE print(p_message VARCHAR2)
IS
BEGIN
fnd_file.put_line(fnd_file.OUTPUT,p_message);
END;
PROCEDURE SEND_EMAIL(
P_SUBJECT IN VARCHAR2,
P_MESSAGE IN VARCHAR2,
P_RET_STATUS OUT NUMBER,
P_RET_MESSAGE OUT VARCHAR2)
IS
P_SENDER VARCHAR2(4000);
P_RECIPIENTS VARCHAR2(4000);
P_CC VARCHAR2(4000) := NULL;
P_MESSAGE1 VARCHAR2(4000);
BEGIN
P_MESSAGE1 := P_MESSAGE||' Request Id is :'||pv_request_id;
IF PV_USER_ID IS NOT NULL THEN
BEGIN
SELECT email_address
INTO p_recipients
FROM fnd_user
WHERE user_id = pv_user_id
AND start_date <= TRUNC(SYSDATE)
AND NVL(end_date,TRUNC(SYSDATE+1)) > TRUNC(SYSDATE);
EXCEPTION WHEN OTHERS THEN
p_recipients := NULL;
END;
END IF;
debug('Global User id is :'||pv_user_id);
debug('Email Address associated with the user id is :'||p_recipients);
debug('Inside Send_Email Procedure');
IF p_recipients IS NOT NULL THEN
debug('Inside If');
IF (( P_RECIPIENTS IS NOT NULL) AND
( P_CC IS NOT NULL ) AND
( P_SUBJECT IS NOT NULL) AND ( P_MESSAGE IS NOT NULL)
) THEN
UTL_MAIL.SEND ( SENDER => P_RECIPIENTS,
RECIPIENTS => P_RECIPIENTS,
CC => P_CC,
SUBJECT => P_SUBJECT,
MESSAGE => P_MESSAGE1);
P_RET_STATUS := 0;
P_RET_MESSAGE := 'Success';
debug('Inside Send_Email Procedure :Success');
ELSIF ( P_CC IS NULL ) THEN
debug('Inside elsif');
UTL_MAIL.SEND ( SENDER => P_RECIPIENTS,
RECIPIENTS => P_RECIPIENTS,
SUBJECT => P_SUBJECT,
MESSAGE => P_MESSAGE1);
P_RET_STATUS := 0;
P_RET_MESSAGE := 'Success';
debug('Inside Send_Email Procedure :Success');
END IF;
END IF;
EXCEPTION
WHEN OTHERS THEN
debug('Error inside Send_Email Procedure. '||sqlcode||' '||sqlerrm);
P_RET_STATUS := SQLCODE;
P_RET_MESSAGE := SUBSTR(SQLERRM,1,150);
END SEND_EMAIL;
PROCEDURE PULL_FROM_ZONAR (p_customer IN VARCHAR2
,p_username IN VARCHAR2
,p_password IN VARCHAR2
,p_from_date IN DATE
,p_to_date IN DATE
,p_return_status OUT VARCHAR2
,p_err_msg OUT VARCHAR2
)
IS
/* *************************************************************************
*/
/* Purpose : procedure to read data from the zonar and convert the xml
*/
/* Parameters: file in oracle table
*/
/*
*/
/*
*/
/* *************************************************************************
*/
req UTL_HTTP.REQ;
resp UTL_HTTP.RESP;
value VARCHAR2(1024);
fileHandler UTL_FILE.FILE_TYPE;
l_datetime VARCHAR2(20);
f_file_name VARCHAR2(50) := 'xxeam_zonar_mileage' ;
ln_start_date NUMBER;
ln_end_date NUMBER;
x_doc_id NUMBER;
lv_dir_name VARCHAR2(200) := 'XXEAM_ZONAR_WO_MILAGE_IN';
p_dest_dir VARCHAR2(200) := 'XXEAM_ZONAR_WO_MILAGE_IN_ARC';
p_file_content CLOB;
lv_url_zonar VARCHAR2(2000);
lv_return_status VARCHAR2(50) := 'SUCCESS';
lv_err_msg VARCHAR2(4000);
ln_count NUMBER;
ln_line_count NUMBER:=0;
ln_tot_count NUMBER;
ld_check_date DATE;
p_ACCOUNT_CODE VARCHAR2(20);
p_ASSET_ID VARCHAR2(20);
p_TAGID VARCHAR2(20);
p_FLEET VARCHAR2(20);
p_EXSID VARCHAR2(20);
p_START_DATE VARCHAR2(30);
p_END_DATE VARCHAR2(30);
p_DISTANCE NUMBER;
p_UNITS VARCHAR2(20);
p_ZONE_NAME VARCHAR2(30);
p_xml_data SYS.XMLTYPE;
l_err_msg VARCHAR2(4000);
l_err_CODE NUMBER;

CURSOR cu_mileage_xml
IS SELECT *
FROM
XXEAM_MILEAGE_XML_V;

BEGIN
-- Start date and End Date of the previous day midnight
DEBUG('Executing...Start date and End Date of :' ||to_date(p_from_date,'dd-mon-
rrrr')||' '||to_Date(p_to_date,'dd-mon-rrrr'));
BEGIN

ln_start_date :=round(( (p_from_date - TO_DATE('1970-01-01 00:00:00','YYYY-MM


-DD HH24:MI:SS')) * 86400 ));
ln_end_date := round(((p_to_date - TO_DATE('1970-01-01 00:00:00','YYYY-MM-
DD HH24:MI:SS')) * 86400));

SELECT to_char(SYSDATE,'DDMMYYHH24MISS')
INTO l_datetime
FROM DUAL;
EXCEPTION WHEN OTHERS THEN
lv_return_status:= 'ERROR';
p_return_status:= 'ERROR';
lv_err_msg := 'Error while processing the start date and end date parame
ter for the zonar:'||sqlerrm||sqlcode;
PRINT(lv_err_msg);
DEBUG(lv_err_msg);
END;

IF lv_return_status <> 'ERROR' THEN


-- Pull of Data from the Zonar
DEBUG('Executing...Pull of Data from the Zonar');

BEGIN
f_file_name := f_file_name||l_datetime||'.xml';
fileHandler := UTL_FILE.FOPEN('XXEAM_ZONAR_WO_MILAGE_IN', f_file_name, 'W');
DEBUG('http://necmulticsc.zonarsystems.net/interface.php?customer='||p_custom
er||'&username='||p_username||'&password='||p_password||'&action=showposition&op
eration=multiaccntmileage&format=xml'
||'&start='||to_char(ln_start_date) ||'&end='||to_char(ln_end_date));

UTL_HTTP.set_transfer_timeout(900); -- setting 15 minutes for HTTP request ti


me
req := UTL_HTTP.BEGIN_REQUEST('http://necmulticsc.zonarsystems.net/interface.
php?customer='||p_customer||'&username='||p_username||'&password='||p_password||
'&action=showposition&operation=multiaccntmileage&format=xml'
||'&start='||to_char(ln_start_date) ||'&end='||to_char(ln_end_date));
UTL_HTTP.SET_HEADER(req, 'User-Agent', 'Mozilla/4.0');
resp := UTL_HTTP.GET_RESPONSE(req);
LOOP
UTL_HTTP.READ_LINE(resp, value, TRUE);
UTL_FILE.put_line(fileHandler, value);
END LOOP;
EXCEPTION
WHEN UTL_HTTP.END_OF_BODY THEN
BEGIN
DEBUG('XML file download from zonar successful');
UTL_FILE.FCLOSE(fileHandler);
UTL_HTTP.END_RESPONSE(resp);
END;
WHEN OTHERS THEN
lv_return_status:= 'ERROR';
p_return_status:= 'ERROR';
lv_err_msg := 'Error during the pull of Data from the Zonar:'||sq
lerrm||sqlcode;
PRINT(lv_err_msg);
DEBUG(lv_err_msg);
send_email(P_SUBJECT => 'Zonar Mileage Error',
P_MESSAGE => lv_err_msg,
P_RET_STATUS => l_err_code,
P_RET_MESSAGE => l_err_msg);
PRINT(l_err_CODE);
DEBUG(l_err_CODE);
PRINT(l_err_msg);
DEBUG(l_err_msg);
END;
--PRINT('10-Pull of Data from the Zonar COMPLETED SUCCESSFULL');
DEBUG('10-Pull of Data from the Zonar COMPLETED SUCCESSFULL');
END IF;

IF lv_return_status <> 'ERROR' THEN


-- Insert the XML file from Zonar to a staging table
DEBUG('Executing...Insert the XML file from Zonar to a staging table');

BEGIN

x_doc_id:= NULL;
SELECT XXNEC.XXEAM_ZONAR_MILEAGE_IN_SEQ.nextval
INTO x_doc_id
FROM dual;
p_file_content := xxeam_zonar2eam_xml_utility.GET_FILE_CONTENTS(f_file_nam
e,lv_dir_name);
INSERT INTO XXEAM_ZONAR_MILEAGE_IN_IDOCS
(
DOCUMENT_ID
, TRX_TYPE
, DOC
, DOCUMENT_NAME
, CREATION_DATE
, CREATED_BY
, UPDATE_DATE
, UPDATED_BY
, FILE_STATUS
)
VALUES
(
x_doc_id
, 'MILEAGE'
, xmltype.createXML(p_file_content)
, f_file_name
, SYSDATE
, NVL(apps.fnd_global.user_id,-1)
, SYSDATE
, NVL(apps.fnd_global.user_id,-1)
, 'ENTERED'
);
--PRINT('20-Insert the XML file from Zonar to a staging table COMPLETED SUCC
ESSFULL');
DEBUG('20-Insert the XML file from Zonar to a staging table COMPLETED SUCCES
SFULL');

EXCEPTION WHEN OTHERS THEN


ROLLBACK;
lv_return_status:= 'ERROR';
p_return_status:= 'ERROR';
lv_err_msg := 'Error while loading the xml file to staging table:'
||sqlerrm||sqlcode;
PRINT(lv_err_msg);
DEBUG(lv_err_msg);
END;
END IF;

IF lv_return_status <> 'ERROR' THEN


-- Archive the XML file from Zonar
DEBUG('Archive the XML file from Zonar');
BEGIN
--PRINT('Getting ready for Archive with filename-'||f_file_name||'-'||p_de
st_dir);
DEBUG('Getting ready for Archive with filename-'||f_file_name||'-'||p_dest
_dir);
utl_file.frename
(
lv_dir_name -- 'XXEAM_ZONAR_WO_MILAGE_IN' --'/stage12b/DEV
/inbound/xml/mileage'
,f_file_name
, p_dest_dir -- 'XXEAM_ZONAR_WO_MILAGE_IN_ARC' --'/stage12
b/DEV/inbound/xml/mileage/archive'
, f_file_name
, TRUE
);
--PRINT('30-Archive the XML file from Zonar COMPLETED SUCCESSFULL');
DEBUG('30-Archive the XML file from Zonar COMPLETED SUCCESSFULL');
EXCEPTION WHEN OTHERS THEN
lv_return_status:= 'ERROR';
p_return_status:= 'ERROR';
lv_err_msg := 'Error while Archiving the XML file from Zonar:'||Sq
lerrm||sqlcode;
PRINT(lv_err_msg);
DEBUG(lv_err_msg);
END;
END IF;
IF lv_return_status <> 'ERROR' THEN
--PRINT('40-XML file view created successfully for the meter reading process
COMPLETED SUCCESSFULL');
DEBUG('40-XML file view created successfully for the meter reading process C
OMPLETED SUCCESSFULL');
-- Create a record in the Interface Batch Header Table
BEGIN

SELECT count(1)
INTO ln_line_count
FROM XXEAM_MILEAGE_XML_V;
IF ln_line_count >0 THEN
INSERT INTO XXEAM_ZONAR_MILEAGE_BATCH VALUES
(
XXEAM_ZONAR_MILEAGE_BATCH_SEQ.NEXTVAL
, f_file_name
, ln_line_count
, p_from_date
, p_to_date
, ln_start_date
, ln_end_date
, NVL(apps.fnd_global.user_id,-1)
, TRUNC(SYSDATE)
, NVL(apps.fnd_global.user_id,-1)
, SYSDATE
);

-- Create a record in the Interface Batch Line Table


OPEN cu_mileage_xml;
LOOP
fetch cu_mileage_xml into P_XML_DATA;
exit when cu_mileage_xml% notfound;
select EXTRACTVALUE (p_xml_data, '*/account_code')
Into p_account_code
from dual ;
select EXTRACTVALUE (p_xml_data, '*/exsid')
Into p_exsid
from dual ;
select EXTRACTVALUE (p_xml_data, '*/start_date')
Into p_start_date
from dual ;
select EXTRACTVALUE (p_xml_data, '*/end_date')
Into p_end_date
from dual ;
select EXTRACTVALUE (p_xml_data, '*/distance')
Into p_distance
from dual ;
select EXTRACTVALUE (p_xml_data, '*/units')
Into p_units
from dual ;
INSERT INTO XXEAM_ZONAR_MILEAGE_LINE VALUES
(
XXEAM_ZONAR_MILEAGE_LINE_SEQ.NEXTVAL
,XXEAM_ZONAR_MILEAGE_BATCH_SEQ.CURRVAL
,p_ACCOUNT_CODE
,NULL
,NULL
,p_EXSID
,p_from_date
,p_START_DATE
,p_END_DATE
,p_DISTANCE
,p_UNITS
,NULL
,NVL(apps.fnd_global.user_id,-1)
,SYSDATE
,NVL(apps.fnd_global.user_id,-1)
,SYSDATE
,'NEW'
,NULL
);
END LOOP;
close cu_mileage_xml;
END IF;

--PRINT('50-Load to Staging Table Batch Header and Lines COMPLETED SUCCESSFU


LL');
DEBUG('50-Load to Staging Table Batch Header and Lines COMPLETED SUCCESSFULL
');
DEBUG('Total count of Meter readings loaded from Zonar for today('||TO_CHAR(
TRUNC(SYSDATE),'DD-MON-RRRR')||') is :'||ln_line_count);
EXCEPTION WHEN OTHERS THEN
ROLLBACK;
lv_return_status:= 'ERROR';
p_return_status:= 'ERROR';
lv_err_msg := 'Error while loading Batch Header and Lines :'||sqle
rrm||sqlcode;
PRINT(lv_err_msg);
DEBUG(lv_err_msg);
END;
END IF;
IF lv_return_status <> 'ERROR' THEN
-- XML file view created successfully for the meter reading process
DEBUG('XML file view created successfully for the meter reading process');
BEGIN
UPDATE XXEAM_ZONAR_MILEAGE_IN_IDOCS
SET FILE_STATUS = 'STAGED'
, UPDATE_DATE = SYSDATE
, UPDATED_BY = NVL(TO_NUMBER(fnd_profile.value('USER_ID')),-1)
WHERE TRX_TYPE = 'MILEAGE'
AND DOCUMENT_ID = x_doc_id;

COMMIT;
--PRINT('40-XML file view created successfully for the meter reading process
COMPLETED SUCCESSFULL');
DEBUG('40-XML file view created successfully for the meter reading process C
OMPLETED SUCCESSFULL');
EXCEPTION WHEN OTHERS THEN
ROLLBACK;
lv_return_status:= 'ERROR';
p_return_status:= 'ERROR';
lv_err_msg := 'Error while creating XML file view from the staged
zonar data:'||sqlerrm||sqlcode;
PRINT(lv_err_msg);
DEBUG(lv_err_msg);
END;
END IF;
p_return_status:=lv_return_status;
p_err_msg :=lv_err_msg;
END;
PROCEDURE PROCESS_DAY
IS
/* *************************************************************************
*/
/* Purpose : Procedure to process and group all the day
*/
/*
*/
/* *************************************************************************
*/
CURSOR cu_mileage
IS SELECT * FROM XXEAM_MILEAGE_PROCESS;
P_GPS_FLAG VARCHAR2(100);
P_EXSID VARCHAR2(30);
L_COUNT NUMBER;
l_err_msg VARCHAR2(4000);
l_err_CODE NUMBER;
BEGIN
-- Loop through to add the 4 hours to a day.
UPDATE XXEAM_ZONAR_MILEAGE_LINE
SET STATUS = 'NACSC'
,ERROR_MSG = 'Not Applicable CSC code.'
WHERE STATUS = 'NEW'
AND SUBSTR(ACCOUNT_CODE,LENGTH(ACCOUNT_CODE)-3,LENGTH(ACCOUNT_CODE)) IN (
SELECT MEANING FROM FND_LOOKUP_VALUES
WHERE LOOKUP_TYPE = 'NEC_ZONAR_MILEAGE_ORG_LIST
'
AND NVL(END_DATE_ACTIVE,SYSDATE)>= SYSDATE
and enabled_flag = 'Y');
COMMIT;
UPDATE XXEAM_ZONAR_MILEAGE_LINE
SET STATUS = 'NA-METER'
,ERROR_MSG = 'Asset Meter Association does not exist .'
WHERE STATUS = 'NEW'
AND EXSID NOT IN (
SELECT NAME FROM CSI_COUNTERS_TL
);
COMMIT;
UPDATE XXEAM_ZONAR_MILEAGE_LINE
SET STATUS = 'NULL-EXSID'
WHERE EXSID IS NULL;
COMMIT;

FOR lcu_mileage IN cu_mileage


LOOP
P_GPS_FLAG := NULL;
P_EXSID := NULL;
P_EXSID := lcu_mileage.exsid;
L_COUNT := NULL;
BEGIN
SELECT COUNT(RUN_DATE)
INTO L_COUNT
FROM XXEAM_ZONAR_MILEAGE_LINE
WHERE TRUNC(RUN_DATE) = lcu_mileage.RUN_DATE
AND EXSID = lcu_mileage.EXSID
AND ACCOUNT_CODE = lcu_mileage.ACCOUNT_CODE;
EXCEPTION WHEN OTHERS THEN
L_COUNT := 0;
END;
IF L_COUNT = 6 THEN
if P_EXSID is not null then
begin
select c_attributE11
INTO P_GPS_FLAG
from mtl_eam_asset_attr_values
where attribute_category = 'VEHICLE INFORMATION'
AND SERIAL_NUMBER = (SELECT SERIAL_NUMBER FROM CSI_ITEM_INSTANCES
WHERE INSTANCE_NUMBER = P_EXSID AND MAINTAINABLE_FLAG = 'Y')
and inventory_item_id = (SELECT inventory_item_id FROM CSI_ITEM_IN
STANCES WHERE INSTANCE_NUMBER = P_EXSID AND MAINTAINABLE_FLAG = 'Y');
exception when no_data_found then
P_GPS_FLAG := NULL;
-- send_email(P_SUBJECT => 'Zonar GPS Error',
-- P_MESSAGE => 'GPS FLAG
IS NULL',
-- P_RET_STATUS => l_err_
code,
-- P_RET_MESSAGE => l_err
_msg);
-- PRINT(l_err_CODE);
-- DEBUG(l_err_CODE);
-- PRINT(l_err_msg);
-- DEBUG(l_err_msg);
end;
end if;
IF P_GPS_FLAG = 'YES' THEN
INSERT INTO XXEAM_ZONAR_MILEAGE_LINE_PRO VALUES
(
lcu_mileage.LINE_ID
,lcu_mileage.BATCH_ID
,lcu_mileage.ACCOUNT_CODE
,lcu_mileage.TAGID
,NULL
,lcu_mileage.fleet
,lcu_mileage.exsid
,lcu_mileage.run_date
,lcu_mileage.distance
,lcu_mileage.units
,lcu_mileage.zone_name
,NVL(apps.fnd_global.user_id,-1)
,SYSDATE
,NVL(apps.fnd_global.user_id,-1)
,SYSDATE
,'NEW'
,NULL
);
ELSIF P_GPS_FLAG = 'NO' THEN
UPDATE XXEAM_ZONAR_MILEAGE_LINE
set status = 'GPS-FLAG-NO'
-- ,ERROR_MSG = LV_ERR_MSG
,UPDATE_DATE = PV_DATE
,UPDATED_BY = PV_USER_ID
WHERE EXSID = lcu_mileage.EXSID
AND TRUNC(RUN_DATE) = TRUNC(lcu_mileage.RUN_DATE)
AND ACCOUNT_CODE = lcu_mileage.ACCOUNT_CODE;
ELSE
UPDATE XXEAM_ZONAR_MILEAGE_LINE
set status = 'WRONG-GPS-FLAG'
-- ,ERROR_MSG = LV_ERR_MSG
,UPDATE_DATE = PV_DATE
,UPDATED_BY = PV_USER_ID
WHERE EXSID = lcu_mileage.EXSID
AND TRUNC(RUN_DATE) = TRUNC(lcu_mileage.RUN_DATE)
AND ACCOUNT_CODE = lcu_mileage.ACCOUNT_CODE;
END IF;
ELSE
UPDATE XXEAM_ZONAR_MILEAGE_LINE
set status = 'NEW-N'
-- ,ERROR_MSG = LV_ERR_MSG
,UPDATE_DATE = PV_DATE
,UPDATED_BY = PV_USER_ID
WHERE EXSID = lcu_mileage.EXSID
AND TRUNC(RUN_DATE) = TRUNC(lcu_mileage.RUN_DATE)
AND ACCOUNT_CODE = lcu_mileage.ACCOUNT_CODE;
END IF;
END LOOP;
commit;
UPDATE XXEAM_ZONAR_MILEAGE_LINE
SET STATUS = 'PROCESSED'
WHERE STATUS = 'NEW';
COMMIT;
UPDATE XXEAM_ZONAR_MILEAGE_LINE
SET STATUS = 'NEW'
WHERE STATUS = 'NEW-N';
COMMIT;

-- Update the not applicable csc locations.

END;

PROCEDURE CREATE_METER_READING(lv_msg_err1 out varchar2)


IS
/* *************************************************************************
*/
/* Purpose : Procedure to process new meter reading
*/
/* Also has the logic to pick re-process of errored records
*/
/*
*/
/* *************************************************************************
*/
CURSOR cu_meter_reading
IS
SELECT * FROM XXEAM_ZONAR_MILEAGE_LINE_PRO
WHERE STATUS IN ('NEW','UN-PROCESS','ERROR')
AND EXSID IS NOT NULL
ORDER BY EXSID;
CURSOR cu_meter_asc(p_exsid VARCHAR2)
IS
SELECT * FROM XXEAM_ZONAR_MILEAGE_LINE_PRO
WHERE STATUS IN ('NEW','UN-PROCESS','ERROR')
AND exsid = p_exsid
ORDER BY TRUNC(RUN_DATE) ASC;
lv_status_code VARCHAR2(15);
ln_meter_id NUMBER;
lv_continue_flag VARCHAR2(1);
l_return_status VARCHAR2(80);
l_error_code NUMBER;
l_msg_count NUMBER;
l_msg_data VARCHAR2(2000);
lv_status VARCHAR2(30);
lv_err_msg VARCHAR2(4000);
lv_msg_err VARCHAR2(4000);
-- lv_msg_err1 VARCHAR2(4000);
lv_msg_data VARCHAR2(4000);
ln_msg_index_out NUMBER;
lrec_eam_meter_reading Eam_MeterReading_PUB.meter_reading_Rec_Type;
ln_value_before_reset NUMBER:=NULL;
ln_meter_reading_id NUMBER;
ln_curr_counter_reading NUMBER;
lv_meter_name VARCHAR2(100);
lc_asset_number varchar2(100);
L_RUN_DATE DATE;
LV_RUN_DATE DATE;
l_err_code number;
l_err_msg varchar2(4000);
lv_inventory_item_id mtl_system_items.inventory_item_id%TYPE;
lv_serial_number VARCHAR2(30);
lv_organization_id mtl_system_items.organization_id%TYPE;
lv_organization_code VARCHAR2(20);
l_wip_class Varchar2(10);

BEGIN
lv_msg_err1 := NULL;
fnd_file.put_line ( fnd_file.log,'+---------***********************************
********************************************************************************
--------+');
FOR lcu_meter_reading IN cu_meter_reading
LOOP
lv_continue_flag := 'Y';

FOR lcu_meter_asc IN cu_meter_asc(lcu_meter_reading.EXSID)


LOOP
-- Initialize Variables
lv_err_msg := NULL;
lv_status_code := NULL;
ln_meter_id := NULL;
ln_meter_reading_id := NULL;
l_return_status := NULL;
l_error_code := NULL;
l_msg_data := NULL;
l_msg_count := NULL;
lv_msg_err := NULL;
lv_msg_data := NULL;
ln_msg_index_out := NULL;
ln_value_before_reset := NULL;
lv_meter_name := NULL;
lc_asset_number := NULL;
lv_inventory_item_id := NULL;
lv_serial_number := NULL;
lv_organization_id := NULL;
lv_organization_code := NULL;
l_wip_class := NULL;
L_RUN_DATE := NULL;
LV_RUN_DATE := NULL;

Begin
select substr(lcu_meter_asc.account_code,-4,4)
into l_wip_class
from dual;
exception
when others then
l_wip_class := Null;
end;

BEGIN

SELECT INVENTORY_ITEM_ID,
SERIAL_NUMBER,
CURRENT_ORGANIZATION_ID,
INV_ORGANIZATION_CODE
INTO lv_inventory_item_id,
lv_serial_number,
lv_organization_id,
lv_organization_code
FROM MTL_EAM_ASSET_NUMBERS_ALL_V EAMA
WHERE 1=1
AND INSTANCE_NUMBER = lcu_meter_asc.EXSID
AND WIP_ACCOUNTING_CLASS_CODE = l_wip_class
AND EAMA.MAINTAINABLE_FLAG = 'Y'
AND SYSDATE BETWEEN EAMA.ACTIVE_START_DATE AND NVL(EAMA.ACTIVE_
END_DATE,SYSDATE);
EXCEPTION
WHEN OTHERS THEN
lv_status_code := 'ERROR';
lv_err_msg := SUBSTR (SQLERRM, 1, 250);
UPDATE XXEAM_ZONAR_MILEAGE_LINE_PRO
SET status = 'INVALID-ASSET'
,error_msg = lv_err_msg
,update_date = pv_date
,updated_by = pv_user_id
WHERE line_id = lcu_meter_asc.line_id;
UPDATE XXEAM_ZONAR_MILEAGE_LINE
set status = 'INVALID-ASSET'
,ERROR_MSG = LV_ERR_MSG
,UPDATE_DATE = PV_DATE
,UPDATED_BY = PV_USER_ID
WHERE EXSID = lcu_meter_asc.EXSID
AND TRUNC(RUN_DATE) = TRUNC(lcu_meter_asc.RUN_DATE)
AND ACCOUNT_CODE = lcu_meter_asc.ACCOUNT_CODE;
COMMIT;
DEBUG('Exception WHEN OTHERS while validating asset number -
'||lcu_meter_asc.EXSID
||SUBSTR (SQLERRM, 1, 250)
);
END;
IF lv_continue_flag = 'Y' THEN
-- Check if Meter exists
BEGIN

SELECT meter_id
,meter_name
INTO ln_meter_id
,lv_meter_name
FROM eam_counters_v ECV
WHERE ECV.meter_name = lcu_meter_asc.EXSID
AND nvl(ECV.to_effective_date,sysdate) >= sysdate;

EXCEPTION
WHEN OTHERS
THEN

debug('Exception : '||SQLCODE||','||SUBSTR (SQLERRM, 1, 250)||'M


eter does not exists in Oracle for asset number:'
|| nvl(lc_asset_number,lcu_meter_asc.EXSID)
);
lv_status_code := 'ERROR';
lv_continue_flag := 'N';
lv_err_msg := lv_err_msg
|| '|'
||'Meter does not exists in Oracle for ass
et number:'
|| nvl(lc_asset_number,lcu_meter_asc.EXSID
);
UPDATE XXEAM_ZONAR_MILEAGE_LINE
SET status = lv_status_code
,error_msg = LTRIM (RTRIM (lv_err_msg, '|')
, '|')
,update_date = pv_date
,updated_by = pv_user_id
WHERE EXSID = lcu_meter_asc.EXSID
AND TRUNC(RUN_DATE) = TRUNC(lcu_meter_asc.RUN_DATE)
AND ACCOUNT_CODE = lcu_meter_asc.ACCOUNT_CODE;
commit;
END;
IF NVL(lv_status_code,'SUCCESS') <> 'ERROR' THEN
-- Read the current counter value for the meter.
BEGIN
ln_curr_counter_reading := 0;
LV_RUN_DATE := lcu_meter_asc.RUN_DATE;
LV_RUN_DATE := ((LV_RUN_DATE+(23/24))+(59/1440));
SELECT MAX(COUNTER_READING)
INTO ln_curr_counter_reading
FROM CSI_COUNTER_READINGS CCR
WHERE COUNTER_ID = ln_meter_id
AND NVL(DISABLED_FLAG,'N') = 'N'
AND VALUE_TIMESTAMP <= LV_RUN_DATE;
DEBUG('CURRENT METER READING IS: '||LN_CURR_COUNTER_READING);
EXCEPTION
WHEN NO_DATA_FOUND THEN
ln_curr_counter_reading:=0;
WHEN OTHERS
THEN
debug('Exception : '||SQLCODE||','||SUBSTR (SQLERRM, 1, 250)||'
Error while retrieving the current counter value for the meter name :'
|| lcu_meter_asc.EXSID
);
lv_status_code := 'ERROR';
lv_continue_flag := 'N';
lv_err_msg := lv_err_msg
|| '|'
||'Error while retrieving the current coun
ter value for the meter name :'
|| lcu_meter_asc.EXSID;
UPDATE XXEAM_ZONAR_MILEAGE_LINE
SET status = lv_status_code
,error_msg = LTRIM (RTRIM (lv_err_m
sg, '|'), '|')
,update_date = pv_date
,updated_by = pv_user_id
WHERE EXSID = lcu_meter_asc.EXSID
AND TRUNC(RUN_DATE) = TRUNC(lcu_meter_asc.RUN_DATE)
AND ACCOUNT_CODE = lcu_meter_asc.ACCOUNT_CODE;
commit;
END;
END IF; -- End if of the status code
IF nvl(lv_status_code,'SUCCESS') <> 'ERROR' THEN
L_RUN_DATE := lcu_meter_asc.RUN_DATE;
L_RUN_DATE := ((L_RUN_DATE+(23/24))+(59/1440));
debug('Date Passed to API: '||L_RUN_DATE);
lrec_eam_meter_reading.meter_id := ln_meter_id;
lrec_eam_meter_reading.current_reading := (ln_curr_counter_rea
ding+to_number(lcu_meter_asc.distance));
--lrec_eam_meter_reading.current_reading_date := lcu_meter_asc.RUN_
DATE;--+1
lrec_eam_meter_reading.current_reading_date := L_RUN_DATE;
EAM_MeterReading_PUB.create_meter_reading
(
p_api_version => 1.0
,p_init_msg_list => FND_API.G_TRUE
,p_commit => FND_API.G_TRUE
,x_msg_count => l_msg_count
,x_msg_data => l_msg_data
,x_return_status => l_return_status
,p_meter_reading_rec => lrec_eam_meter_reading
,p_value_before_reset => ln_value_before_reset
,p_ignore_warnings => 'N'
,x_meter_reading_id => ln_meter_reading_id
);
IF l_return_status = fnd_api.g_ret_sts_success THEN
DEBUG('Creation of Meter Reading is Successful for the Meter ID :
'|| ln_meter_id||' Meter Reading id : '||ln_meter_reading_id);
lv_status_code := 'PASSED';
lv_continue_flag := 'Y';
-- Update the success in the interface table
BEGIN
debug('Updating staging table.');
UPDATE XXEAM_ZONAR_MILEAGE_LINE_PRO
SET status = 'PASSED'
,error_msg = NULL
,update_date = pv_date
,updated_by = pv_user_id
WHERE line_id = lcu_meter_asc.line_id;
debug('Rows updated for record id '||lcu_meter_asc.line_id
||' = '
||SQL%ROWCOUNT);
COMMIT;
EXCEPTION
WHEN OTHERS THEN
debug('Exception: WHEN OTHERS -'||SUBSTR (SQLERRM, 1, 250));
fnd_file.put_line(fnd_file.log,( 'Unable to update staging t
able'
||' for record id :
'
|| lcu_meter_asc.li
ne_id
|| '|'
|| 'Error :'
|| SUBSTR (SQLERRM,
1, 250)
));
END;

ELSE -- Meter Reading creation Failed.


lv_continue_flag := 'N';
FOR i IN 1..fnd_msg_pub.count_msg
LOOP
fnd_msg_pub.get( p_msg_index => i
,p_encoded => 'F'
,p_data => lv_msg_data
,p_msg_index_out => ln_msg_index_out);
lv_msg_err := lv_msg_err || ', ' || lv_msg_data;
lv_msg_err1 := lv_msg_err || ', ' || lv_msg_data;
END LOOP;
DEBUG ('Creation of Meter Reading Failed with the error :'||l_er
ror_code||LTRIM(lv_msg_err,', '));
lv_status_code := 'ERROR';
lv_err_msg := 'Creation of Meter Reading Failed with the error :
'||l_error_code||LTRIM(lv_msg_err,', ');
-- send_email(P_SUBJECT => 'Oracle Mete
r Error',
-- P_MESSAGE => lv_err_msg,
-- P_RET_STATUS => l_err_code,
-- P_RET_MESSAGE => l_err_msg);
-- Update the error in the interface table.
BEGIN
debug('Updating staging table.');
UPDATE XXEAM_ZONAR_MILEAGE_LINE_PRO
SET status = 'ERROR'
,error_msg = LTRIM (RTRIM (lv_err_msg, '|'), '|')
,update_date = pv_date
,updated_by = pv_user_id
WHERE line_id = lcu_meter_asc.line_id;
debug('Rows updated for record id '||lcu_meter_asc.line_id
||' = '
||SQL%ROWCOUNT);
COMMIT;
EXCEPTION
WHEN OTHERS THEN
debug('Exception: WHEN OTHERS -'||SUBSTR (SQLERRM, 1, 250));
fnd_file.put_line(fnd_file.log,( 'Unable to update staging t
able'
||' for record id :
'
|| lcu_meter_asc.li
ne_id
|| '|'
|| 'Error :'
|| SUBSTR (SQLERRM,
1, 250)
));
END;

END IF;
END IF;

ELSE

BEGIN
debug('Updating staging table.');
UPDATE XXEAM_ZONAR_MILEAGE_LINE_PRO
SET status = 'UN-PROCESS'
,error_msg = NULL
,update_date = pv_date
,updated_by = pv_user_id
WHERE line_id = lcu_meter_asc.line_id;
debug('Rows updated for record id '||lcu_meter_reading.line_id
||' = '
||SQL%ROWCOUNT);
EXCEPTION
WHEN OTHERS THEN
debug('Exception: WHEN OTHERS -'||SUBSTR (SQLERRM, 1, 250));
fnd_file.put_line(fnd_file.log,( 'Unable to update staging t
able'
||' for record id :
'
|| lcu_meter_readin
g.line_id
|| '|'
|| 'Error :'
|| SUBSTR (SQLERRM,
1, 250)
));
END;
END IF; -- Continue flag end if

COMMIT;
END LOOP; -- Inner Loop

END LOOP;-- Outer Loop


fnd_file.put_line ( fnd_file.log,'+---------*******************************
********************************************************************************
****--------+');
END;
PROCEDURE PRINT_IMPORT_STATUS
/* ************************************************************************
**** */
/* Purpose : Report procedure called from main procedure to print statistic
s */
/* to the output file
*/
/* Parameters: None
*/
/*
*/
/* **************************************************************************
** */
IS
lv_total_record NUMBER := 0;
lv_total_error NUMBER := 0;
lv_total_invalid NUMBER := 0;
lv_total_unprocess NUMBER := 0;
lv_success_count NUMBER := 0;
lv_csc_count NUMBER := 0;
lv_meter_error NUMBER := 0;
lv_exsid_null NUMBER :=0;
BEGIN

debug('Print process details start.');


SELECT COUNT(1)
,COUNT(DECODE(status,'PASSED',1))
,COUNT(DECODE(status,'ERROR',1))
,COUNT(DECODE(status,'UN-PROCESS',1))
,COUNT(DECODE(status,'NA-CSC',1))
,COUNT(DECODE(status,'NA-METER',1))
INTO lv_total_record
,lv_success_count
,lv_total_error
,lv_total_unprocess
,lv_csc_count
,lv_meter_error
FROM XXEAM_ZONAR_MILEAGE_LINE_PRO
WHERE TRUNC(UPDATE_DATE) = TRUNC(SYSDATE);

SELECT COUNT(DECODE(status,'NA-CSC',1))/6
,COUNT(DECODE(status,'NA-METER',1))/6
,COUNT(DECODE(status,'NULL-EXSID',1))/6
INTO lv_csc_count
,lv_meter_error
,lv_exsid_null
FROM XXEAM_ZONAR_MILEAGE_LINE
WHERE TRUNC(UPDATE_DATE) = TRUNC(SYSDATE);
debug('Load Summary report for the Date :'||TO_CHAR(TRUNC(SYSDATE),'D
D-MON-RRRR'));
-- debug('Total Number of Records :' || lv_total_record);
debug('Total Number of Processed Records :' || lv_success_count);
debug('Total Number of UnProcessed Records :' || lv_total_unprocess);
debug('Total Number of Error Records :' || lv_total_error);
fnd_file.put_line ( fnd_file.LOG,'+---------******************************
********************************************************************************
*****--------+');

fnd_file.put_line ( fnd_file.LOG,
(
'+------------------------------ Zonar Mileage Interface Statistics '||TO_
CHAR(TRUNC(SYSDATE),'DD-MON-RRRR')
||'-----------------------------+'
));
/* fnd_file.put_line ( fnd_file.output,
(
'Total Number of Records : ' || lv_total_record
));*/
fnd_file.put_line ( fnd_file.LOG,
(
'Total Number of Processed Records : ' || lv_success_count
));
fnd_file.put_line ( fnd_file.LOG,
(
'Total Number of Error Records : ' || lv_total_error
));
fnd_file.put_line ( fnd_file.LOG,
(
'Total Number of UnProcessed Records : ' || lv_total_unproces
s
));
fnd_file.put_line ( fnd_file.LOG,
(
'Total Number of Not Applicable CSC Records : ' || lv_csc_cou
nt
));
fnd_file.put_line ( fnd_file.LOG,
(
'Total Number of errors on Asset-Meter Association Records :
' || lv_meter_error
));
fnd_file.put_line ( fnd_file.LOG,
(
'Total Number of errors having null exsid in zonar : ' || lv_
exsid_null
));

IF lv_success_count >0 THEN


fnd_file.put_line ( fnd_file.LOG,'+----------------------------------Pr
inting successfully created meter details'
||'---------------------------------
-+');
fnd_file.put_line ( fnd_file.LOG,
( RPAD ('Meter Name', 20)
|| ' '
|| RPAD ('Org Code', 30)
|| ' '
|| RPAD ('Date', 30)
|| ' '
|| RPAD ('Elapsed', 20)
|| ' '
|| RPAD ('Status', 20)
|| ' '
|| RPAD ('Error Message', 50)
));
fnd_file.put_line ( fnd_file.LOG,
(RPAD ('-----------', 20)
|| ' '
|| RPAD ('-----------------', 30)
|| ' '
|| RPAD ('-----------------', 20)
|| ' '
|| RPAD ('-----------------', 20)
|| ' '
|| RPAD ('-------------', 50)
));

FOR meter_error IN ( SELECT DISTINCT A.exsid NAME,C.ORGANIZATION_COD


E, TO_CHAR(run_date,'DD-MON-RRRR') run_date,distance,status,error_msg
FROM XXEAM_ZONAR_MILEAGE_LINE_PRO A, CSI_ITEM
_INSTANCES B,MTL_PARAMETERS C
WHERE status = 'PASSED'
AND TRIM(A.EXSID) = TRIM(B.INSTANCE_NUMBER)
AND C.ORGANIZATION_ID = B.LAST_VLD_ORGANIZATION_I
D
AND TRUNC(UPDATE_DATE) = TRUNC(SYSDATE)
ORDER BY exsid )
LOOP
fnd_file.put_line ( fnd_file.LOG,
(RPAD (meter_error.NAME,20)
|| ' '
|| RPAD (meter_error.run_date, 30)
|| ' '
|| RPAD (meter_error.distance, 20)
|| ' '
|| RPAD (meter_error.status, 20)
|| ' '
|| meter_error.error_msg
));
END LOOP;

END IF;

IF lv_total_error >0
THEN
debug('Error records exist.');
fnd_file.put_line ( fnd_file.LOG,
(
' '
));
fnd_file.put_line ( fnd_file.LOG,
('+----------------------------- Error Details '
||'-----------------------------+'
));
fnd_file.put_line ( fnd_file.LOG,
( RPAD ('Meter Name', 20)
|| ' '
|| RPAD ('Date', 30)
|| ' '
|| RPAD ('Elapsed', 20)
|| ' '
|| RPAD ('Status', 20)
|| ' '
|| RPAD ('Error Message', 50)
));
fnd_file.put_line ( fnd_file.LOG,
(RPAD ('-----------', 20)
|| ' '
|| RPAD ('-----------------', 30)
|| ' '
|| RPAD ('-----------------', 20)
|| ' '
|| RPAD ('-----------------', 20)
|| ' '
|| RPAD ('-------------', 50)
));
debug('Printing error details');
FOR meter_error IN ( SELECT DISTINCT exsid NAME, TO_CHAR(run_date,'DD
-MON-RRRR') run_date,distance,status,error_msg
FROM XXEAM_ZONAR_MILEAGE_LINE_PRO
WHERE status = 'ERROR'
AND TRUNC(UPDATE_DATE) = TRUNC(SYSDATE)
ORDER BY NAME)
LOOP
fnd_file.put_line ( fnd_file.LOG,
(RPAD (meter_error.NAME,20)
|| ' '
|| RPAD (meter_error.run_date, 30)
|| ' '
|| RPAD (meter_error.distance, 20)
|| ' '
|| RPAD (meter_error.status, 20)
|| ' '
|| meter_error.error_msg
));
END LOOP;
END IF;
IF lv_total_unprocess >0 THEN
fnd_file.put_line ( fnd_file.LOG,'+----------------------------------Pr
inting Unprocessed meter details'
||'---------------------------------
-+');
fnd_file.put_line ( fnd_file.LOG,
( RPAD ('Meter Name', 20)
|| ' '
|| RPAD ('Date', 30)
|| ' '
|| RPAD ('Elapsed', 20)
|| ' '
|| RPAD ('Status', 20)
|| ' '
|| RPAD ('Error Message', 50)
));
fnd_file.put_line ( fnd_file.LOG,
(RPAD ('-----------', 20)
|| ' '
|| RPAD ('-----------------', 30)
|| ' '
|| RPAD ('-----------------', 20)
|| ' '
|| RPAD ('-----------------', 20)
|| ' '
|| RPAD ('-------------', 50)
));

FOR meter_error IN ( SELECT DISTINCT exsid NAME, TO_CHAR(run_date,'D


D-MON-RRRR') run_date,distance,status,error_msg
FROM XXEAM_ZONAR_MILEAGE_LINE_PRO
WHERE status = 'UN-PROCESS'
AND TRUNC(UPDATE_DATE) = TRUNC(SYSDATE)
ORDER BY NAME)
LOOP
fnd_file.put_line ( fnd_file.LOG,
(RPAD (meter_error.NAME,20)
|| ' '
|| RPAD (meter_error.run_date, 30)
|| ' '
|| RPAD (meter_error.distance, 20)
|| ' '
|| RPAD (meter_error.status, 20)
|| ' '
|| meter_error.error_msg
));
END LOOP;

END IF;

IF lv_meter_error >0 THEN


fnd_file.put_line ( fnd_file.LOG,'+----------------------------------Pr
inting Unprocessed Asset-meter-Association error details'
||'---------------------------------
-+');
fnd_file.put_line ( fnd_file.LOG,
( RPAD ('Meter Name', 20)
|| ' '
|| RPAD ('Date', 30)
|| ' '
|| RPAD ('Elapsed', 20)
|| ' '
|| RPAD ('Status', 20)
|| ' '
|| RPAD ('Error Message', 50)
));
fnd_file.put_line ( fnd_file.LOG,
(RPAD ('-----------', 20)
|| ' '
|| RPAD ('-----------------', 30)
|| ' '
|| RPAD ('-----------------', 20)
|| ' '
|| RPAD ('-----------------', 20)
|| ' '
|| RPAD ('-------------', 50)
));

FOR meter_error IN ( SELECT DISTINCT exsid NAME, TO_CHAR(run_date,'D


D-MON-RRRR') run_date,distance,status,error_msg
FROM XXEAM_ZONAR_MILEAGE_LINE
WHERE status ='NA-METER'
AND TRUNC(UPDATE_DATE) = TRUNC(SYSDATE)
ORDER BY NAME)
LOOP
fnd_file.put_line ( fnd_file.LOG,
(RPAD (meter_error.NAME,20)
|| ' '
|| RPAD (meter_error.run_date, 30)
|| ' '
|| RPAD (meter_error.distance, 20)
|| ' '
|| RPAD (meter_error.status, 20)
|| ' '
|| meter_error.error_msg
));
END LOOP;

END IF;

IF lv_exsid_null >0 THEN


fnd_file.put_line ( fnd_file.LOG,'+----------------------------------Pr
inting Unprocessed Null exsid details'
||'---------------------------------
-+');
fnd_file.put_line ( fnd_file.LOG,
( RPAD ('Meter Name', 20)
|| ' '
|| RPAD ('Date', 30)
|| ' '
|| RPAD ('Elapsed', 20)
|| ' '
|| RPAD ('Status', 20)
|| ' '
|| RPAD ('Error Message', 50)
));
fnd_file.put_line ( fnd_file.LOG,
(RPAD ('-----------', 20)
|| ' '
|| RPAD ('-----------------', 30)
|| ' '
|| RPAD ('-----------------', 20)
|| ' '
|| RPAD ('-----------------', 20)
|| ' '
|| RPAD ('-------------', 50)
));

FOR meter_error IN ( SELECT DISTINCT exsid NAME, TO_CHAR(run_date,'D


D-MON-RRRR') run_date,distance,status,error_msg
FROM XXEAM_ZONAR_MILEAGE_LINE
WHERE status ='NULL-EXSID'
AND TRUNC(UPDATE_DATE) = TRUNC(SYSDATE)
ORDER BY NAME)
LOOP
fnd_file.put_line ( fnd_file.LOG,
(RPAD (meter_error.NAME,20)
|| ' '
|| RPAD (meter_error.run_date, 30)
|| ' '
|| RPAD (meter_error.distance, 20)
|| ' '
|| RPAD (meter_error.status, 20)
|| ' '
|| meter_error.error_msg
));
END LOOP;

END IF;
debug('print_process_details complete');
fnd_file.put_line ( fnd_file.LOG,'+---------*******************************
********************************************************************************
****--------+');

EXCEPTION WHEN OTHERS THEN


fnd_file.put_line(fnd_file.log,'Exception in procedure print the summary of
the import: '||SUBSTR (SQLERRM, 1, 250));
fnd_file.put_line(fnd_file.output,'Exception in procedure print the summary
of the import: '||SUBSTR (SQLERRM, 1, 250));
END;

PROCEDURE main ( p_errbuf OUT VARCHAR2


,p_retcode OUT NUMBER
,p_action IN VARCHAR2
,p_customer IN VARCHAR2
,p_username IN VARCHAR2
,p_password IN VARCHAR2
)
IS
/* *************************************************************************
*/
/* Purpose : Main procedure called by the program
*/
/* Parameters: p_days - Nth day to run the report from sysdate
*/
/*
*/
/*
*/
/* *************************************************************************
*/

l_return_status VARCHAR2(80):='SUCCESS';
l_msg_data VARCHAR2(2000);
p_from_date DATE;
p_to_date DATE;
lv_msg_err1 varchar2(4000) := null;
BEGIN
IF p_action = 'VALIDATE' THEN
LOOP
BEGIN
-- FIND THE FROM DATE FROM THE LAST RUN
SELECT run_date +1/6
INTO p_from_date
FROM xxeam_zonar_mileage_batch ZBAT
,xxeam_zonar_mileage_line BLIN
WHERE ZBAT.batch_id = BLIN.batch_id
AND ZBAT.batch_id = (SELECT MAX(BATCH_ID) FROM xxeam_zonar_mileage_batch)
AND ROWNUM=1;
p_to_date:= p_from_date +1/6;
debug('p_from_date:'||to_char(p_from_date,'dd-mon-rrrr'));
debug('p_to_date:'||to_char(p_to_date,'dd-mon-rrrr'));
EXCEPTION WHEN OTHERS THEN
p_from_date := TRUNC(sysdate)-1;
p_to_date := (TRUNC(sysdate)-1)+1/6;
END;
EXIT WHEN (trunc(p_FROM_date) >= TRUNC(sysdate) OR l_return_status= 'ERROR')
;
PULL_FROM_ZONAR ( p_customer
,p_username
,p_password
,p_from_date
,p_to_date
,l_return_status
,l_msg_data
);
IF l_return_status = 'ERROR' THEN
p_retcode := 2;
PRINT('Import from Zonar to the Staging table failed. Please review output
and log file to correct it.');
ELSE
DEBUG('Import from Zonar to the Staging table COMPLETED SUCCESSFULLY.'||to_
char(p_to_date,'dd-mon-rrrr'));
-- Call the process to create the meter reading.
END IF;
END LOOP;

PROCESS_DAY;
CREATE_METER_READING(lv_msg_err1);
if lv_msg_err1 is not null then
p_retcode := 1;
print('Meter Reading API errors. Check the log file for details');
end if;
PRINT_IMPORT_STATUS;
END IF;
IF p_action = 'IMPORT' THEN
CREATE_METER_READING(lv_msg_err1);

if lv_msg_err1 is not null then


p_retcode := 1;
print('Meter Reading API errors. Check the log file for details');
end if;
PRINT_IMPORT_STATUS;
END IF;

EXCEPTION WHEN OTHERS THEN


p_retcode := 2;
PRINT('ERROR IN MAIN PROCEDURE :'||sqlcode||' '||substr(sqlerrm,1,300));
END;
END XXEAM_ZONAR_MILEAGE_PKG;
/

You might also like