0% found this document useful (0 votes)
139 views108 pages

Eltzam Backage

This package body defines procedures for collecting web service information from a table and submitting job information to a web service. It collects username, password, and other configuration details to connect to the web service. It then queries job data from various tables, inserts it into a local table, and loops through the records to build SOAP requests to submit each one to the web service using UTL_HTTP.

Uploaded by

Ahmad Hamaideh
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
139 views108 pages

Eltzam Backage

This package body defines procedures for collecting web service information from a table and submitting job information to a web service. It collects username, password, and other configuration details to connect to the web service. It then queries job data from various tables, inserts it into a local table, and loops through the records to build SOAP requests to submit each one to the web service using UTL_HTTP.

Uploaded by

Ahmad Hamaideh
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 108

CREATE OR REPLACE PACKAGE BODY APPS.

XXX_HR_ELTEZAM_WS_PKG
AS
PROCEDURE COLLECT_WS_INFO (P_TRX_NAME VARCHAR2)
IS
BEGIN
FOR REC1 IN (SELECT *
FROM APPSPRO_WS
WHERE TRANSACTION_NAME = P_TRX_NAME)
LOOP
G_USER_NAME := REC1.USER_NAME;
G_PASSWORD := REC1.PASSWORD;
G_DOMAIN_NAME := REC1.DOMAIN_NAME;
G_SERVICE_NAME := REC1.SERVICE_NAME;
G_WALLET_PATH := REC1.WALLET_PATH;
G_WALLET_PASSWORD := REC1.WALLET_PASSWORD;
G_ACTION_NAME := REC1.ACTION_NAME;
G_REPORTS_PATH := REC1.REPORTS_PATH;
G_PARAM_REPORT_NAME1 := REC1.PARAM_REPORT1;
G_PARAM_REPORT_NAME2 := REC1.PARAM_REPORT2;
G_PARAM_REPORT_NAME3 := REC1.PARAM_REPORT3;
G_PARAM_REPORT_NAME4 := REC1.PARAM_REPORT4;
G_PARAM_REPORT_NAME5 := REC1.PARAM_REPORT5;
G_PARAM_REPORT_NAME6 := REC1.PARAM_REPORT6;
G_PARAM_REPORT_NAME7 := REC1.PARAM_REPORT7;
G_PARAM_REPORT_NAME8 := REC1.PARAM_REPORT8;
G_PARAM_REPORT_NAME9 := REC1.PARAM_REPORT9;
END LOOP;
END COLLECT_WS_INFO;

PROCEDURE XXX_HR_SUBMIT_JOB_INFO (P_PERSON_ID NUMBER,


P_CONNECTION_TYPE VARCHAR2)
IS
V_EMPLOYEE_NUMBER VARCHAR2 (100);
V_JOB_NO VARCHAR2 (100);
V_JOB_CLASS_CODE VARCHAR2 (100);
V_JOB_NAME_CODE VARCHAR2 (100);
V_JOB_POSITION_CODE VARCHAR2 (100);
V_START_DATE VARCHAR2 (100);
V_END_DATE VARCHAR2 (100);
V_POS_ORG_ID VARCHAR2 (100);
V_ORG_NAME VARCHAR2 (200);
V_POSITION_STATUS VARCHAR2 (100);
V_EMP_TYPE VARCHAR2 (100);
V_RANK_CODE VARCHAR2 (100);
V_LOCATION_CODE VARCHAR2 (100);
V_TRANSACTION_CODE VARCHAR2 (100);
V_VACANT_DATE VARCHAR2 (100);
V_LAST_UPDATE_DATE VARCHAR2 (100);
V_STAUTS VARCHAR2 (100);
V_ERROR_MSG VARCHAR2 (100);
V_REQ_CONTEXT UTL_HTTP.REQUEST_CONTEXT_KEY;
SOAP_REQUEST VARCHAR2 (32767);
HTTP_REQ UTL_HTTP.REQ;
HTTP_RESP UTL_HTTP.RESP;
L_BLOB BLOB;
L_DEST_OFFSET NUMBER := 1;
L_SRC_OFFSET NUMBER := 1;
L_LANG_CONTEXT NUMBER := 0;
L_WARNING NUMBER;
T_HTTP_VERSION VARCHAR2 (10) := 'HTTP/1.1';
T_CONTENT_TYPE VARCHAR2 (50) := 'text/xml; charset=utf-8';
T_URL VARCHAR2 (100);

X_CLOB CLOB;
L_BUFFER VARCHAR2 (32767);
X NUMBER;
V_CHECK_LENGTH NUMBER;
L_OFFSET NUMBER := 1;
L_AMOUNT NUMBER := 2000;
L_BUFFER2 VARCHAR2 (32767);
L_REQUEST_NUMBER VARCHAR2 (400);
L_FAULTSTRING VARCHAR2 (4000);
L_ERROR VARCHAR2 (4000);
V_ALTER_TXT VARCHAR2 (120)
:= 'alter session set nls_language = ''ARABIC''';
BEGIN
EXECUTE IMMEDIATE V_ALTER_TXT;

COLLECT_WS_INFO ('ELTEZAM_JOB_INFO');

T_URL := G_DOMAIN_NAME || G_SERVICE_NAME;

BEGIN
BEGIN
DELETE FROM XXX_HR_ELTEZAM_JOBINFO_TB
WHERE (PERSON_ID = P_PERSON_ID OR P_PERSON_ID IS NULL);

DELETE FROM XXX_HR_ELTEZAM_STATUS_TB


WHERE 1 = 1
AND WS_NAME = 'JOBINFO_WS'
AND (PERSON_ID = P_PERSON_ID OR P_PERSON_ID IS NULL);

COMMIT;
END;

INSERT INTO XXX_HR_ELTEZAM_JOBINFO_TB


SELECT PER.EMPLOYEE_NUMBER EMPLOYEEID,
HP.JOB_NO JOBNUMBE,
LPAD (HP.JOB_CLASS_CODE, 5, 0) JOBCLASSCODE,
(SELECT CASE
WHEN ASCII (SUBSTR (SEGMENT1, 1, 1)) > 57
THEN
'99'
|| SUBSTR (SEGMENT1, 3, 5)
|| SUBSTR (SEGMENT1, -2)
ELSE
SUBSTR (SEGMENT1, 1, 7)
|| SUBSTR (SEGMENT1, -2)
END
FROM PER_POSITION_DEFINITIONS_KFV KFV,
PER_ALL_POSITIONS PAP
WHERE 1 = 1
AND KFV.POSITION_DEFINITION_ID =
PAP.POSITION_DEFINITION_ID
AND PAP.POSITION_ID = F.POSITION_ID)
JOBNAMECODE,
(SELECT CASE
WHEN ASCII (SUBSTR (SEGMENT1, 1, 1)) > 57
THEN
'99'
|| SUBSTR (SEGMENT1, 3, 5)
|| SUBSTR (SEGMENT1, -2)
ELSE
SUBSTR (SEGMENT1, 1, 7)
|| SUBSTR (SEGMENT1, -2)
END
FROM PER_POSITION_DEFINITIONS_KFV KFV,
PER_ALL_POSITIONS PAP
WHERE 1 = 1
AND KFV.POSITION_DEFINITION_ID =
PAP.POSITION_DEFINITION_ID
AND PAP.POSITION_ID = F.POSITION_ID)
JOBPOSITIONCODE,
HP.START_DATE,
HP.END_DATE,
HP.POS_ORG_ID,
HP.ORG_NAME_AR ORG_NAME,
DECODE (HP.POSITION_STATUS_ID,
'OCCUPIED', 'Occupied',
'Unoccupied')
POSITIONSTATUS,
(SELECT LX.ELTEZAM_ID
FROM XXX_MAWARED_ELTEZAM_MAP_TB LX
WHERE 1 = 1
AND MAP_TYPE = 'EMP_TYPE'
AND F.EMPLOYMENT_CATEGORY = LX.EBS_ID)
EMPLOYMENTTYPECODE,
(SELECT LX.ELTEZAM_ID
FROM XXX_MAWARED_ELTEZAM_MAP_TB LX
WHERE 1 = 1
AND MAP_TYPE = 'RANK_CODE'
AND HP.POS_RANK = LX.EBS_ID)
RANKCODE,
(SELECT LOC.ELTEZAM_ID
FROM XXX_MAWARED_ELTEZAM_MAP_TB LOC
WHERE 1 = 1
AND LOCATION_CODEE = LOC.EBS_ID
AND LOC.MAP_TYPE = 'SA_CITY')
LOCATIONCODE,
(SELECT LX.ELTEZAM_ID
FROM XXX_MAWARED_ELTEZAM_MAP_TB LX
WHERE 1 = 1
AND MAP_TYPE = 'TRANS_CODE'
AND HP.TRANS_CODE = LX.EBS_ID)
TRANSACTIONCODE,
TO_CHAR (SYSDATE,
'DD-MM-RRRR',
'NLS_CALENDAR=''Arabic Hijrah''')
VACANTDATE, --f.EFFECTIVE_START_DATE VacantDate,
TO_CHAR (HP.SYS_DATE,
'DD-MM-RRRR',
'NLS_CALENDAR=''Arabic Hijrah''')
LASTUPDATEDATE,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
SYSDATE,
F.PERSON_ID
FROM PER_ALL_PEOPLE_F PER,
PER_ALL_ASSIGNMENTS_F F,
XXCUSTOM.XXX_HR_INT_POSITIONS HP
WHERE PER.PERSON_ID = F.PERSON_ID
AND HP.JOB_ID = F.JOB_ID
AND HP.POSITION_ID = F.POSITION_ID
AND HP.POS_ORG_ID = F.ORGANIZATION_ID
AND HP.LOCATION_ID = F.LOCATION_ID
AND PER.EMPLOYEE_NUMBER NOT LIKE '%X%'
AND F.EMPLOYMENT_CATEGORY <> '11'
AND SYSDATE BETWEEN F.EFFECTIVE_START_DATE
AND F.EFFECTIVE_END_DATE
AND SYSDATE BETWEEN PER.EFFECTIVE_START_DATE
AND PER.EFFECTIVE_END_DATE
AND F.PRIMARY_FLAG = 'Y'
AND (PER.PERSON_ID = P_PERSON_ID OR P_PERSON_ID IS NULL);

COMMIT;
END;

IF P_CONNECTION_TYPE = 'WEB_SERVICE'
THEN
DBMS_OUTPUT.put_line ('T_URL ' || T_URL);

FOR I
IN (SELECT EMPLOYEE_NUMBER,
JOB_NO,
JOB_CLASS_CODE,
JOB_NAME_CODE,
JOB_POSITION_CODE,
START_DATE,
END_DATE,
POS_ORG_ID,
ORG_NAME,
POSITION_STATUS,
SUBSTR (EMPLOYMENT_TYPE_CODE, 1, 7)
EMPLOYMENT_TYPE_CODE,
RANK_CODE,
LOCATION_CODE,
TRANSACTION_CODE,
VACANT_DATE,
LAST_UPDATE_DATE,
PERSON_ID
FROM XXX_HR_ELTEZAM_JOBINFO_TB
WHERE (PERSON_ID = P_PERSON_ID OR P_PERSON_ID IS NULL))
LOOP
SOAP_REQUEST :=
'<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:tem="http://tempuri.org/">
<soapenv:Header/>
<soapenv:Body>
<tem:SubmitJobInfo>
<!--Optional:-->
<tem:jobInfo>
<!--Optional:-->
<EmployeeID>'
|| I.EMPLOYEE_NUMBER
|| '</EmployeeID>
<!--Optional:-->
<JobNumber>'
|| I.JOB_NO
|| '</JobNumber>
<!--Optional:-->
<JobClassCode>'
|| I.JOB_CLASS_CODE
|| '</JobClassCode>
<!--Optional:-->
<JobNameCode>'
|| I.JOB_NAME_CODE
|| '</JobNameCode>
<!--Optional:-->
<JobPositionCode>'
|| I.JOB_POSITION_CODE
|| '</JobPositionCode>
<!--Optional:-->
<StartDate>'
|| I.START_DATE
|| '</StartDate>
<!--Optional:-->
<EndDate>'
|| I.VACANT_DATE
|| '</EndDate>
<!--Optional:-->
<PositionOrganizationID>'
|| I.POS_ORG_ID
|| '</PositionOrganizationID>
<!--Optional:-->
<PositionOrganizationName>'
|| I.ORG_NAME
|| '</PositionOrganizationName>
<PositionStatus>'
|| I.POSITION_STATUS
|| '</PositionStatus>
<!--Optional:-->
<EmploymentTypeCode>'
|| I.EMPLOYMENT_TYPE_CODE
|| '</EmploymentTypeCode>
<!--Optional:-->
<RankCode>'
|| I.RANK_CODE
|| '</RankCode>
<!--Optional:-->
<LocationCode>'
|| I.LOCATION_CODE
|| '</LocationCode>
<!--Optional:-->
<JobTransactionCode>'
|| I.TRANSACTION_CODE
|| '</JobTransactionCode>
<!--Optional:-->
<VacantDate>'
|| I.VACANT_DATE
|| '</VacantDate>
<!--Optional:-->
<LastUpdateDate>'
|| I.LAST_UPDATE_DATE
|| '</LastUpdateDate>
</tem:jobInfo>
</tem:SubmitJobInfo>
</soapenv:Body>
</soapenv:Envelope>';
L_DEST_OFFSET := 1;
L_SRC_OFFSET := 1;
L_LANG_CONTEXT := 0;
L_WARNING := NULL;
DBMS_OUTPUT.put_line (TO_CHAR (SYSDATE, 'DD/MM/YYYY HH24:MI:SS'));
DBMS_OUTPUT.put_line (
L_DEST_OFFSET
|| ','
|| L_SRC_OFFSET
|| ','
|| L_LANG_CONTEXT
|| ','
|| L_WARNING);
DBMS_OUTPUT.put_line ('Envelope');
UTL_HTTP.SET_TRANSFER_TIMEOUT (999);
----- Wallet Information -------
V_REQ_CONTEXT :=
UTL_HTTP.CREATE_REQUEST_CONTEXT (
WALLET_PATH => G_WALLET_PATH,
WALLET_PASSWORD => G_WALLET_PASSWORD);
DBMS_LOB.CREATETEMPORARY (L_BLOB, FALSE, DBMS_LOB.CALL);
DBMS_LOB.CONVERTTOBLOB (
DEST_LOB => L_BLOB,
SRC_CLOB => SOAP_REQUEST,
AMOUNT => DBMS_LOB.LOBMAXSIZE,
DEST_OFFSET => L_DEST_OFFSET,
SRC_OFFSET => L_SRC_OFFSET,
BLOB_CSID => NLS_CHARSET_ID ('AL32UTF8'), --AR8ISO8859P6
AL32UTF8 AL16UTF16
LANG_CONTEXT => L_LANG_CONTEXT,
WARNING => L_WARNING);
DBMS_OUTPUT.put_line ('SET_TRANSFER_TIMEOUT');

DBMS_OUTPUT.put_line ('WALLET_PATH ' || G_WALLET_PATH);

HTTP_REQ :=
UTL_HTTP.BEGIN_REQUEST (URL => T_URL,
REQUEST_CONTEXT => V_REQ_CONTEXT,
METHOD => 'POST',
HTTP_VERSION => 'HTTP/1.1');

UTL_HTTP.SET_HEADER (HTTP_REQ, 'User-Agent', 'Mozilla/4.0');


UTL_HTTP.SET_HEADER (HTTP_REQ, 'Connection', 'Keep-Alive');
UTL_HTTP.SET_HEADER (HTTP_REQ,
'Content-Type',
'text/xml;charset=UTF-8');
UTL_HTTP.SET_HEADER (http_req,
'Content-Length',
DBMS_LOB.GETLENGTH (L_BLOB));

UTL_HTTP.set_header (
http_req,
'SOAPAction',
'"http://tempuri.org/IEltezamDataService/SubmitJobInfo"');

-------------------- arabic------------------------------
IF V_CHECK_LENGTH > 32767
THEN
UTL_HTTP.SET_TRANSFER_TIMEOUT (999);
UTL_HTTP.SET_HEADER (HTTP_REQ, 'Trasfer-Encoding', 'chunked');
DBMS_LOB.OPEN (L_BLOB, DBMS_LOB.LOB_READWRITE);

BEGIN
WHILE L_OFFSET < V_CHECK_LENGTH
LOOP
DBMS_LOB.READ (L_BLOB,
L_AMOUNT,
L_OFFSET,
L_BUFFER2);
UTL_HTTP.WRITE_RAW (HTTP_REQ, L_BUFFER2);
L_OFFSET := L_OFFSET + L_AMOUNT;
END LOOP;
END;

DBMS_LOB.CLOSE (L_BLOB);
ELSE
UTL_HTTP.WRITE_TEXT (R => HTTP_REQ, DATA => SOAP_REQUEST);
END IF;

------------------end arabic--------------------------

HTTP_RESP := UTL_HTTP.GET_RESPONSE (HTTP_REQ);

DBMS_LOB.CREATETEMPORARY (X_CLOB, FALSE);


DBMS_LOB.OPEN (X_CLOB, DBMS_LOB.LOB_READWRITE);

BEGIN
LOOP
UTL_HTTP.READ_TEXT (HTTP_RESP, L_BUFFER);
DBMS_LOB.WRITEAPPEND (X_CLOB, LENGTH (L_BUFFER), L_BUFFER);
END LOOP;
EXCEPTION
WHEN OTHERS
THEN
IF SQLCODE <> -29266
THEN
RAISE;
END IF;
END;

DBMS_OUTPUT.PUT_LINE (
'Response Status: '
|| HTTP_RESP.STATUS_CODE
|| ' '
|| HTTP_RESP.REASON_PHRASE);

IF (HTTP_RESP.STATUS_CODE = 200)
THEN
BEGIN
SELECT REQUESTNUMBER
INTO L_REQUEST_NUMBER
FROM (SELECT XMLTYPE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
(X_CLOB),

'http://schemas.xmlsoap.org/soap/envelope/',
''),

'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"',
''),

'xmlns:xsd="http://www.w3.org/2001/XMLSchema"',
''),

'xmlns="http://tempuri.org/"',
''),

'xmlns="http://yefi.gov.sa/MCS/EltezamDataSchema/xml/schemas/version1.0"',
''),
'xmlns=""',
''),
's:',
''),
'xmlns=""',
''))
XMLT
FROM DUAL) XX,
XMLTABLE (
'Envelope/Body
/SubmitJobInfoResponse/SubmitJobInfoResult/submitJobInfoResponseDetailObject'
PASSING XX.XMLT
COLUMNS REQUESTNUMBER VARCHAR2 (400)
PATH
'RequestNumber');

INSERT
INTO XXCUSTOM.XXX_HR_ELTEZAM_STATUS_TB (WS_NAME,
SUBMITION_DATE,
SOURCEAGENCY,
RESPONSE_BODY,
REQUEST_BODY,
REQUESTNO,
RAISEDBY,
ERRORTYPE,
ERRORTEXT,
ERRORCODE,
EMPLOYEE_NO,
PERSON_ID)
VALUES ('JOBINFO_WS',
SYSDATE,
NULL,
X_CLOB,
SOAP_REQUEST,
L_REQUEST_NUMBER,
NULL,
NULL,
NULL,
HTTP_RESP.STATUS_CODE,
I.EMPLOYEE_NUMBER,
I.PERSON_ID);

COMMIT;
EXCEPTION
WHEN OTHERS
THEN
L_REQUEST_NUMBER := NULL;

SELECT FAULTSTRING || ' - ' || Code


INTO L_FAULTSTRING
FROM (SELECT XMLTYPE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE
(

REGEXP_REPLACE (
(X_CLOB),

'http://schemas.xmlsoap.org/soap/envelope/',
''),

'xmlns="http://tempuri.org/"',
''),

'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"',
''),

'xmlns:xsd="http://www.w3.org/2001/XMLSchema"',
''),
'
xmlns="http://yefi.gov.sa/YEFIErrorStructure/xml/schemas/version2.3"',
''),
'xmlns=""',
''),
's:',
''),
'xmlns=""',
''),
'xmlns="http://yefi.gov.sa/YEFIErrorStructure/xml/schemas/version2.3"',
''))
XMLT
FROM DUAL) XX,
XMLTABLE (
'Envelope/Body
/SubmitJobInfoResponse/SubmitJobInfoResult/ServiceError'
PASSING XX.XMLT
COLUMNS FAULTSTRING VARCHAR2 (4000)
PATH 'ErrorText',
Code VARCHAR2 (4000)
PATH 'Code');

L_ERROR := SQLERRM;

INSERT
INTO XXCUSTOM.XXX_HR_ELTEZAM_STATUS_TB (WS_NAME,
SUBMITION_DATE,
SOURCEAGENCY,
RESPONSE_BODY,
REQUEST_BODY,
REQUESTNO,
RAISEDBY,
ERRORTYPE,
ERRORTEXT,
ERRORCODE,
EMPLOYEE_NO,
PERSON_ID)
VALUES ('JOBINFO_WS',
SYSDATE,
NULL,
X_CLOB,
SOAP_REQUEST,
L_REQUEST_NUMBER,
NULL,
L_FAULTSTRING, --ERRORTYPE
L_FAULTSTRING, --ERRORTEXT
HTTP_RESP.STATUS_CODE,
I.EMPLOYEE_NUMBER,
I.PERSON_ID);
END;
ELSE ----- In case of failure
BEGIN
L_REQUEST_NUMBER := NULL;

SELECT FAULTSTRING
INTO L_FAULTSTRING
FROM (SELECT XMLTYPE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
(X_CLOB),
'http://schemas.xmlsoap.org/soap/envelope/',
''),

'xmlns="http://tempuri.org/"',
''),

'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"',
''),

'xmlns:xsd="http://www.w3.org/2001/XMLSchema"',
''),
'
xmlns="http://yefi.gov.sa/YEFIErrorStructure/xml/schemas/version2.3"',
''),
'xmlns=""',
''),
's:',
''),
'xmlns=""',
''))
XMLT
FROM DUAL) XX,
XMLTABLE (
'Envelope/Body /Fault'
PASSING XX.XMLT
COLUMNS FAULTSTRING VARCHAR2 (1000)
PATH 'faultstring');

INSERT
INTO XXCUSTOM.XXX_HR_ELTEZAM_STATUS_TB (WS_NAME,
SUBMITION_DATE,
SOURCEAGENCY,
RESPONSE_BODY,
REQUEST_BODY,
REQUESTNO,
RAISEDBY,
ERRORTYPE,
ERRORTEXT,
ERRORCODE,
EMPLOYEE_NO,
PERSON_ID)
VALUES ('JOBINFO_WS',
SYSDATE,
NULL,
X_CLOB,
SOAP_REQUEST,
L_REQUEST_NUMBER,
NULL,
L_FAULTSTRING, --ERRORTYPE
L_FAULTSTRING, --ERRORTEXT
HTTP_RESP.STATUS_CODE,
I.EMPLOYEE_NUMBER,
I.PERSON_ID);

COMMIT;
EXCEPTION
WHEN OTHERS
THEN
L_ERROR := SQLERRM;
INSERT INTO XXX_HR_ELTEZAM_STATUS_TB (WS_NAME,
SUBMITION_DATE,
SOURCEAGENCY,
RESPONSE_BODY,
REQUEST_BODY,
REQUESTNO,
RAISEDBY,
ERRORTYPE,
ERRORTEXT,
ERRORCODE,
EMPLOYEE_NO,
PERSON_ID)
VALUES (
'JOBINFO_WS',
SYSDATE,
NULL,
X_CLOB,
SOAP_REQUEST,
L_REQUEST_NUMBER,
NULL,
'Internal Error in Failure Response Query
XML', --ERRORTYPE
L_ERROR, --ERRORTEXT
HTTP_RESP.STATUS_CODE,
I.EMPLOYEE_NUMBER,
I.PERSON_ID);

COMMIT;
END;
END IF;

BEGIN
SELECT REQUESTNO, ERRORTEXT
INTO V_STAUTS, V_ERROR_MSG
FROM XXX_HR_ELTEZAM_STATUS_TB
WHERE EMPLOYEE_NO = I.EMPLOYEE_NUMBER
AND WS_NAME = 'JOBINFO_WS'
AND ROWNUM = 1
AND SUBMITION_DATE =
(SELECT MAX (SUBMITION_DATE)
FROM XXX_HR_ELTEZAM_STATUS_TB
WHERE EMPLOYEE_NO = I.EMPLOYEE_NUMBER
AND WS_NAME = 'JOBINFO_WS');
EXCEPTION
WHEN NO_DATA_FOUND
THEN
V_STAUTS := NULL;
V_ERROR_MSG := NULL;
END;

DBMS_OUTPUT.PUT_LINE (
'EMPLOYEE_NO'
|| I.EMPLOYEE_NUMBER
|| ' v_stauts :'
|| V_STAUTS
|| ' v_error_msg : '
|| V_ERROR_MSG);

BEGIN
UPDATE XXX_HR_ELTEZAM_JOBINFO_TB
SET RequestNo = V_STAUTS, ERROR_MSG = V_ERROR_MSG
WHERE EMPLOYEE_NUMBER = I.EMPLOYEE_NUMBER
AND SUBMITION_DATE =
(SELECT MAX (SUBMITION_DATE)
FROM XXX_HR_ELTEZAM_JOBINFO_TB
WHERE EMPLOYEE_NUMBER = I.EMPLOYEE_NUMBER);

COMMIT;
END;

UTL_HTTP.END_RESPONSE (HTTP_RESP);
UTL_HTTP.DESTROY_REQUEST_CONTEXT (V_REQ_CONTEXT);
END LOOP;
END IF;

COMMIT;
EXCEPTION
WHEN UTL_HTTP.END_OF_BODY
THEN
UTL_HTTP.END_RESPONSE (HTTP_RESP);
UTL_HTTP.DESTROY_REQUEST_CONTEXT (V_REQ_CONTEXT);
WHEN UTL_HTTP.TOO_MANY_REQUESTS
THEN
RAISE_APPLICATION_ERROR (
-20001,
'Request failed exception:' || UTL_HTTP.GET_DETAILED_SQLERRM);
WHEN OTHERS
THEN
NULL;
-- RAISE_APPLICATION_ERROR (
-- -20002,
-- 'Request failed exception:' || UTL_HTTP.GET_DETAILED_SQLERRM);
END XXX_HR_SUBMIT_JOB_INFO;

-- -- PROCEDURE XXX_HR_SUBMIT_EMP_HISTORY (P_PERSON_ID NUMBER)


-- IS
-- V_EMPLOYEE_NUMBER VARCHAR2 (100);
-- V_JOB_NO VARCHAR2 (100);
-- V_JOB_CLASS_CODE VARCHAR2 (100);
-- V_JOB_NAME_CODE VARCHAR2 (100);
-- V_JOB_POSITION_CODE VARCHAR2 (100);
-- V_START_DATE VARCHAR2 (100);
-- V_END_DATE VARCHAR2 (100);
-- V_POS_ORG_ID VARCHAR2 (100);
-- V_ORG_NAME VARCHAR2 (200);
-- V_POSITION_STATUS VARCHAR2 (100);
-- V_EMP_TYPE VARCHAR2 (100);
-- V_RANK_CODE VARCHAR2 (100);
-- V_LOCATION_CODE VARCHAR2 (100);
-- V_TRANSACTION_CODE VARCHAR2 (100);
-- V_VACANT_DATE VARCHAR2 (100);
-- V_LAST_UPDATE_DATE VARCHAR2 (100);
-- V_STAUTS VARCHAR2 (100);
-- V_ERROR_MSG VARCHAR2 (100);
-- V_REQ_CONTEXT UTL_HTTP.REQUEST_CONTEXT_KEY;
-- SOAP_REQUEST VARCHAR2 (32767);
-- HTTP_REQ UTL_HTTP.REQ;
-- HTTP_RESP UTL_HTTP.RESP;
-- L_BLOB BLOB;
-- L_DEST_OFFSET NUMBER := 1;
-- L_SRC_OFFSET NUMBER := 1;
-- L_LANG_CONTEXT NUMBER := 0;
-- L_WARNING NUMBER;
-- T_HTTP_VERSION VARCHAR2 (10) := 'HTTP/1.1';
-- T_CONTENT_TYPE VARCHAR2 (50) := 'text/xml; charset=utf-8';
-- T_URL VARCHAR2 (100); --:= 'https://mcs-
jesb02.mcs.gov.sa/EltezamDataServices/services/EltezamDataService?wsdl';
--
-- X_CLOB CLOB;
-- L_BUFFER VARCHAR2 (32767);
-- X NUMBER;
-- L_MAIN_DATA_VALIDATION NUMBER;
-- L_REQUEST_NUMBER VARCHAR2 (400);
-- L_FAULTSTRING VARCHAR2 (4000);
-- L_ERROR VARCHAR2 (4000);
-- V_ALTER_TXT VARCHAR2 (120)
-- := 'alter session set nls_language = ''ARABIC''';
-- TRANS_END_DATE_TEXT VARCHAR2 (4000);
-- TRANS_OUT_DATE_TEXT VARCHAR2 (4000);
-- BEGIN
-- EXECUTE IMMEDIATE V_ALTER_TXT;
--
-- COLLECT_WS_INFO ('ELTEZAM_EMPLOYEE_HISTORY');
--
-- T_URL := G_DOMAIN_NAME || G_SERVICE_NAME;
--
-- BEGIN
-- BEGIN
-- DELETE FROM XXX_HR_ELTEZAM_HISTORICAL_TB
-- WHERE 1 = 1 AND REQUESTNO IS NULL; -- NEW FIX AMR EL KELANY
--
-- DELETE FROM XXX_HR_ELTEZAM_STATUS_TB
-- WHERE 1 = 1
-- AND WS_NAME = 'EMP_HISTORY_WS'
-- AND REQUESTNO IS NULL; -- NEW FIX AMR EL KELANY
--
-- COMMIT;
-- END;
--
-- INSERT INTO XXX_HR_ELTEZAM_HISTORICAL_TB
-- SELECT EMP_NO,
-- NATIONAL_IDENTIFIER,
-- EMP.JOB_NO,
-- EMP.JOB_CLASS_CODE,
-- EMP.JOB_NAME,
-- TYP.ELTEZAM_ID EMPLOYMENT_TYPE_ID,
-- rc.ELTEZAM_ID RANK_CODE,
-- STEP_ID,
-- TO_CHAR (STEP_DATE,
-- 'DD-MM-RRRR',
-- 'NLS_CALENDAR=''Arabic Hijrah''')
-- STEP_DATE,
-- D.BASIC_SALARY,
-- NVL (EXTRA.DECISIONNUMBER, OUT_NUMBER) DECISIONNUMBER,
-- -- NVL (
-- EXTRA.DECISIONDATE -- ,
-- -- TO_CHAR (TO_DATE
(OUT_DATE, 'RRRR-MM-DD'), 'DD-MM-RRRR')
-- -- )
-- DECISIONDATE,
-- TO_CHAR (FIRST_GRADE_DT,
-- 'DD-MM-RRRR',
-- 'NLS_CALENDAR=''Arabic Hijrah''')
-- GRADE_DATE,
-- (SELECT LOC.ELTEZAM_ID
-- FROM XXX_MAWARED_ELTEZAM_MAP_TB LOC
-- WHERE 1 = 1
-- AND EMP.LOCATION_ID = LOC.EBS_ID
-- AND LOC.MAP_TYPE = 'SA_CITY')
-- LOCATION_ID,
-- (SELECT TRANS.ELTEZAM_ID
-- FROM XXX_MAWARED_ELTEZAM_MAP_TB TRANS
-- WHERE 1 = 1
-- AND D.TRANS_CODE = TRANS.EBS_ID
-- AND TRANS.MAP_TYPE = 'HIST_TRANS_CODE')
-- TRANSACTION_CODE,
-- TRANS_START_DATE TRANSACTION_START_DATE,
-- TRANS_END_DATE TRANSACTION_END_DATE,
-- TO_CHAR (D.SYS_DATE,
-- 'DD-MM-RRRR',
-- 'NLS_CALENDAR=''Arabic Hijrah''')
-- SYS_DATE,
-- NULL,
-- NULL,
-- NULL,
-- NULL,
-- NULL,
-- NULL,
-- NULL,
-- SYSDATE,
-- EMP.PERSON_ID
-- FROM XXCUSTOM.XXX_HR_INT_ASG_DECRESS D,
-- XXCUSTOM.XXX_HR_INT_EMPLOYEE_TB EMP,
-- XXX_MAWARED_ELTEZAM_MAP_TB RC,
-- XXX_MAWARED_ELTEZAM_MAP_TB TYP,
-- (SELECT PERSON_ID,
-- PEI_INFORMATION15 DECISIONNUMBER,
-- TO_CHAR (
-- TO_DATE (PEI_INFORMATION16,
-- 'YYYY/MM/DD HH24:MI:SS'),
-- 'DD-MM-RRRR',
-- 'NLS_CALENDAR=''Arabic Hijrah''')
-- DECISIONDATE
-- FROM PER_PEOPLE_EXTRA_INFO
-- WHERE INFORMATION_TYPE = 'XXX_HIRING_DECISION') EXTRA
-- WHERE 1 = 1
-- AND D.PERSON_ID = EMP.PERSON_ID
-- AND EMP.RANK_ID = RC.EBS_ID
-- AND RC.MAP_TYPE = 'RANK_CODE'
-- AND D.EMP_CAT = TYP.EBS_ID
-- AND TYP.MAP_TYPE = 'EMP_TYPE'
-- AND EMP.PERSON_ID = EXTRA.PERSON_ID(+)
-- -- AND (EMP.PERSON_ID = P_PERSON_ID OR P_PERSON_ID IS NULL)
-- AND EMP_NO || TRANS_START_DATE NOT IN (SELECT
DD.EMPLOYEE_NUMBER
-- ||
DD.TRANSACTION_START_DATE
-- FROM
XXX_HR_ELTEZAM_HISTORICAL_TB DD
-- WHERE 1 = 1
-- AND REQUESTNO
-- IS NOT
NULL);
--
--
-- COMMIT;
-- END;
--
-- DBMS_OUTPUT.put_line ('T_URL ' || T_URL);
--
-- FOR I
-- IN (SELECT EMPLOYEE_NUMBER,
-- NATIONAL_ID,
-- JOB_NO,
-- JOB_CLASS_CODE,
-- JOB_NAME_CODE,
-- SUBSTR (EMPLOYMENT_TYPE_CODE, 1, 7) EMPLOYMENT_TYPE_CODE,
-- RANK_CODE,
-- STEP_ID,
-- STEP_DATE,
-- BASIC_SALARY,
-- DECISTION_NO,
-- DECISION_DATE,
-- GRADE_DATE,
-- LOCATION_CODE,
-- TRANSACTION_CODE,
-- TRANSACTION_START_DATE,
-- TRANSACTION_END_DATE,
-- LAST_UPDATE_DATE,
-- ATTRIBUTE1,
-- ATTRIBUTE2,
-- ATTRIBUTE3,
-- ATTRIBUTE4,
-- ATTRIBUTE5,
-- REQUESTNO,
-- ERROR_MSG,
-- SUBMITION_DATE
-- FROM XXX_HR_ELTEZAM_HISTORICAL_TB
-- WHERE 1 = 1 AND REQUESTNO IS NULL)
-- LOOP
-- IF I.LOCATION_CODE IS NULL OR I.STEP_DATE IS NULL
-- THEN
-- INSERT INTO XXX_HR_ELTEZAM_STATUS_TB (WS_NAME,
-- SUBMITION_DATE,
-- SOURCEAGENCY,
-- RESPONSE_BODY,
-- REQUEST_BODY,
-- REQUESTNO,
-- RAISEDBY,
-- ERRORTYPE,
-- ERRORTEXT,
-- ERRORCODE,
-- EMPLOYEE_NO)
-- VALUES (
-- 'EMP_HISTORY_WS',
-- SYSDATE,
-- NULL,
-- NULL,
-- NULL,
-- NULL,
-- NULL,
-- 'Missing Data',
-- 'Please check the mandatory Data such as
location code and
-- Step Date',
-- '1404',
-- I.EMPLOYEE_NUMBER);
--
-- COMMIT;
--
-- L_MAIN_DATA_VALIDATION := -1;
-- ELSE
-- L_MAIN_DATA_VALIDATION := 1;
--
-- IF I.TRANSACTION_END_DATE IS NOT NULL
-- THEN
-- TRANS_END_DATE_TEXT :=
-- '<TransactionEndDate>'
-- || I.TRANSACTION_END_DATE
-- || '</TransactionEndDate>';
-- ELSE
-- TRANS_END_DATE_TEXT := NULL;
-- END IF;
--
-- IF I.DECISION_DATE IS NOT NULL
-- THEN
-- TRANS_OUT_DATE_TEXT :=
-- '<DecisionDate>' || I.DECISION_DATE || '</DecisionDate>';
-- ELSE
-- TRANS_OUT_DATE_TEXT := NULL;
-- END IF;
-- END IF;
--
-- IF L_MAIN_DATA_VALIDATION = 1
-- THEN
-- SOAP_REQUEST :=
-- '<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:tem="http://tempuri.org/"
xmlns:ver="http://yefi.gov.sa/PersonProfileCommonTypes/xml/schemas/version2.0">
-- <soapenv:Header/>
-- <soapenv:Body>
-- <tem:SubmitEmployeeHistoricalInfo>
-- <!--Optional:-->
-- <tem:employeeHistoricalInfo>
-- <!--Optional:-->
-- <EmployeeID>'
-- || I.EMPLOYEE_NUMBER
-- || '</EmployeeID>
-- <!--Optional:-->
-- <PersonIdentifier>
-- <!--You have a CHOICE of the next 2 items at this level-->
-- <!--Optional:-->
-- <ver:IqamaNumber>'
-- || I.NATIONAL_ID
-- || '</ver:IqamaNumber>
-- <!--Optional:-->
-- <ver:NationalID>'
-- || I.NATIONAL_ID
-- || '</ver:NationalID>
-- </PersonIdentifier>
-- <!--Optional:-->
-- <JobNumber>'
-- || I.JOB_NO
-- || '</JobNumber>
-- <!--Optional:-->
-- <JobClassCode>'
-- || I.JOB_CLASS_CODE
-- || '</JobClassCode>
-- <!--Optional:-->
-- <JobNameCode>'
-- || I.JOB_NAME_CODE
-- || '</JobNameCode>
-- <!--Optional:-->
-- <EmploymentTypeCode>'
-- || I.EMPLOYMENT_TYPE_CODE
-- || '</EmploymentTypeCode>
-- <!--Optional:-->
-- <RankCode>'
-- || I.RANK_CODE
-- || '</RankCode>
-- <StepID>'
-- || I.STEP_ID
-- || '</StepID>
-- <!--Optional:-->
-- <StepDate>'
-- || I.STEP_DATE
-- || '</StepDate>
-- <BasicSalary>'
-- || I.BASIC_SALARY
-- || '</BasicSalary>
-- <!--Optional:-->
-- <DecisionNumber>'
-- || I.DECISTION_NO
-- || '</DecisionNumber>
-- <!--Optional:-->'
-- || TRANS_END_DATE_TEXT
-- || '
-- <!--Optional:-->
-- <GradeDate>'
-- || I.GRADE_DATE
-- || '</GradeDate>
-- <!--Optional:-->
-- <LocationCode>'
-- || I.LOCATION_CODE
-- || '</LocationCode>
-- <!--Optional:-->
-- <TransactionCode>'
-- || I.TRANSACTION_CODE
-- || '</TransactionCode>
-- <!--Optional:-->
-- <TransactionStartDate>'
-- || I.TRANSACTION_START_DATE
-- || '</TransactionStartDate>
-- '
-- || TRANS_END_DATE_TEXT
-- || '
-- <LastUpdateDate>'
-- || I.LAST_UPDATE_DATE
-- || '</LastUpdateDate>
-- </tem:employeeHistoricalInfo>
-- </tem:SubmitEmployeeHistoricalInfo>
-- </soapenv:Body>
--</soapenv:Envelope>';
--
-- UTL_HTTP.SET_TRANSFER_TIMEOUT (999);
-- ----- Wallet Information -------
-- V_REQ_CONTEXT :=
-- UTL_HTTP.CREATE_REQUEST_CONTEXT (
-- WALLET_PATH => G_WALLET_PATH,
-- WALLET_PASSWORD => G_WALLET_PASSWORD);
--
-- /* DBMS_OUTPUT.put_line ('WALLET_PATH ' || G_WALLET_PATH);
-- -- to handel arabic content
-- DBMS_LOB.CREATETEMPORARY (L_BLOB, FALSE, DBMS_LOB.CALL);
-- DBMS_LOB.CONVERTTOBLOB (DEST_LOB => L_BLOB,
-- SRC_CLOB => soap_request,
-- AMOUNT => DBMS_LOB.LOBMAXSIZE,
-- DEST_OFFSET => L_DEST_OFFSET,
-- SRC_OFFSET => L_SRC_OFFSET,
-- BLOB_CSID => NLS_CHARSET_ID
('AL32UTF8'), --AR8ISO8859P6 AL32UTF8 AL16UTF16
-- LANG_CONTEXT => L_LANG_CONTEXT,
-- WARNING => L_WARNING);*/
--
--
-- HTTP_REQ :=
-- UTL_HTTP.BEGIN_REQUEST (URL => T_URL,
-- REQUEST_CONTEXT => V_REQ_CONTEXT,
-- METHOD => 'POST',
-- HTTP_VERSION => 'HTTP/1.1');
--
-- UTL_HTTP.SET_HEADER (HTTP_REQ, 'User-Agent', 'Mozilla/4.0');
-- UTL_HTTP.SET_HEADER (HTTP_REQ, 'Connection', 'Keep-Alive');
-- UTL_HTTP.SET_HEADER (HTTP_REQ,
-- 'Content-Type',
-- 'text/xml;encoding=UTF-8');
--'text/xml;charset=UTF-8');
--
-- /*UTL_HTTP.SET_HEADER (http_req,
-- 'Content-Length',
-- DBMS_LOB.GETLENGTH (L_BLOB));*/
-- UTL_HTTP.set_header (http_req,
-- 'Content-Length',
-- LENGTH (soap_request));
-- UTL_HTTP.set_header (
-- http_req,
-- 'SOAPAction',
--
'"http://tempuri.org/IEltezamDataService/SubmitEmployeeHistoricalInfo"');
--
--
-- UTL_HTTP.WRITE_TEXT (HTTP_REQ, SOAP_REQUEST);
--
-- HTTP_RESP := UTL_HTTP.GET_RESPONSE (HTTP_REQ);
--
-- DBMS_LOB.CREATETEMPORARY (X_CLOB, FALSE);
-- DBMS_LOB.OPEN (X_CLOB, DBMS_LOB.LOB_READWRITE);
--
-- BEGIN
-- LOOP
-- UTL_HTTP.READ_TEXT (HTTP_RESP, L_BUFFER);
-- DBMS_LOB.WRITEAPPEND (X_CLOB, LENGTH (L_BUFFER), L_BUFFER);
-- END LOOP;
-- EXCEPTION
-- WHEN OTHERS
-- THEN
-- IF SQLCODE <> -29266
-- THEN
-- RAISE;
-- END IF;
-- END;
--
--
-- DBMS_OUTPUT.PUT_LINE (
-- 'Response Status: '
-- || HTTP_RESP.STATUS_CODE
-- || ' '
-- || HTTP_RESP.REASON_PHRASE);
--
-- IF (HTTP_RESP.STATUS_CODE = 200)
-- THEN
-- BEGIN
-- SELECT REQUESTNUMBER
-- INTO L_REQUEST_NUMBER
-- FROM (SELECT XMLTYPE (
-- REGEXP_REPLACE (
-- REGEXP_REPLACE (
-- REGEXP_REPLACE (
-- REGEXP_REPLACE (
-- REGEXP_REPLACE (
-- REGEXP_REPLACE (
-- REGEXP_REPLACE
(
--
REGEXP_REPLACE (
--
(X_CLOB),
--
'http://schemas.xmlsoap.org/soap/envelope/',
-- ''),
--
'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"',
-- ''),
--
'xmlns:xsd="http://www.w3.org/2001/XMLSchema"',
-- ''),
--
'xmlns="http://tempuri.org/"',
-- ''),
--
'xmlns="http://yefi.gov.sa/MCS/EltezamDataSchema/xml/schemas/version1.0"',
-- ''),
-- 'xmlns=""',
-- ''),
-- 's:',
-- ''),
-- 'xmlns=""',
-- ''))
-- XMLT
-- FROM DUAL) XX,
-- XMLTABLE (
-- 'Envelope/Body
/SubmitEmployeeHistoricalInfoResponse/SubmitEmployeeHistoricalInfoResult/
submitEmployeeHistoricalInfoResponseDetailObject'
-- PASSING XX.XMLT
-- COLUMNS REQUESTNUMBER VARCHAR2 (400)
-- PATH
'RequestNumber');
--
--
-- INSERT
-- INTO XXCUSTOM.XXX_HR_ELTEZAM_STATUS_TB (WS_NAME,
-- SUBMITION_DATE,
-- SOURCEAGENCY,
-- RESPONSE_BODY,
-- REQUEST_BODY,
-- REQUESTNO,
-- RAISEDBY,
-- ERRORTYPE,
-- ERRORTEXT,
-- ERRORCODE,
-- EMPLOYEE_NO)
-- VALUES ('EMP_HISTORY_WS',
-- SYSDATE,
-- NULL,
-- X_CLOB,
-- SOAP_REQUEST,
-- L_REQUEST_NUMBER,
-- NULL,
-- NULL,
-- NULL,
-- HTTP_RESP.STATUS_CODE,
-- I.EMPLOYEE_NUMBER);
--
-- COMMIT;
-- EXCEPTION
-- WHEN OTHERS
-- THEN
-- L_REQUEST_NUMBER := NULL;
--
-- SELECT FAULTSTRING || ' - ' || Code
-- INTO L_FAULTSTRING
-- FROM (SELECT XMLTYPE (
-- REGEXP_REPLACE (
-- REGEXP_REPLACE (
-- REGEXP_REPLACE (
-- REGEXP_REPLACE (
-- REGEXP_REPLACE (
-- REGEXP_REPLACE (
--
REGEXP_REPLACE (
--
REGEXP_REPLACE (
--
REGEXP_REPLACE (
--
(X_CLOB),
--
'http://schemas.xmlsoap.org/soap/envelope/',
-- ''),
--
'xmlns="http://tempuri.org/"',
-- ''),
--
'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"',
-- ''),
--
'xmlns:xsd="http://www.w3.org/2001/XMLSchema"',
-- ''),
-- '
xmlns="http://yefi.gov.sa/YEFIErrorStructure/xml/schemas/version2.3"',
-- ''),
-- 'xmlns=""',
-- ''),
-- 's:',
-- ''),
-- 'xmlns=""',
-- ''),
--
'xmlns="http://yefi.gov.sa/YEFIErrorStructure/xml/schemas/version2.3"',
-- ''))
-- XMLT
-- FROM DUAL) XX,
-- XMLTABLE (
-- 'Envelope/Body
/SubmitEmployeeHistoricalInfoResponse/SubmitEmployeeHistoricalInfoResult/
ServiceError'
-- PASSING XX.XMLT
-- COLUMNS FAULTSTRING VARCHAR2 (4000)
-- PATH
'ErrorText',
-- Code VARCHAR2 (4000)
-- PATH 'Code');
--
-- L_ERROR := SQLERRM || ' - ' || L_FAULTSTRING;
--
-- INSERT INTO XXX_HR_ELTEZAM_STATUS_TB (WS_NAME,
-- SUBMITION_DATE,
-- SOURCEAGENCY,
-- RESPONSE_BODY,
-- REQUEST_BODY,
-- REQUESTNO,
-- RAISEDBY,
-- ERRORTYPE,
-- ERRORTEXT,
-- ERRORCODE,
-- EMPLOYEE_NO)
-- VALUES ('EMP_HISTORY_WS',
-- SYSDATE,
-- NULL,
-- X_CLOB,
-- SOAP_REQUEST,
-- L_REQUEST_NUMBER,
-- NULL,
-- L_FAULTSTRING, --ERRORTYPE
-- L_FAULTSTRING, --ERRORTEXT
-- HTTP_RESP.STATUS_CODE,
-- I.EMPLOYEE_NUMBER);
-- END;
-- ELSE
-- L_REQUEST_NUMBER := NULL; ----- In case of failure
--
-- BEGIN
-- SELECT FAULTSTRING
-- INTO L_FAULTSTRING
-- FROM (SELECT XMLTYPE (
-- REGEXP_REPLACE (
-- REGEXP_REPLACE (
-- REGEXP_REPLACE (
-- REGEXP_REPLACE (
-- REGEXP_REPLACE (
-- REGEXP_REPLACE (
-- REGEXP_REPLACE (
--
REGEXP_REPLACE (
-- (X_CLOB),
--
'http://schemas.xmlsoap.org/soap/envelope/',
-- ''),
--
'xmlns="http://tempuri.org/"',
-- ''),
--
'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"',
-- ''),
--
'xmlns:xsd="http://www.w3.org/2001/XMLSchema"',
-- ''),
-- '
xmlns="http://yefi.gov.sa/YEFIErrorStructure/xml/schemas/version2.3"',
-- ''),
-- 'xmlns=""',
-- ''),
-- 's:',
-- ''),
-- 'xmlns=""',
-- ''))
-- XMLT
-- FROM DUAL) XX,
-- XMLTABLE (
-- 'Envelope/Body /Fault'
-- PASSING XX.XMLT
-- COLUMNS FAULTSTRING VARCHAR2 (1000)
-- PATH
'faultstring');
--
-- INSERT
-- INTO XXCUSTOM.XXX_HR_ELTEZAM_STATUS_TB (WS_NAME,
-- SUBMITION_DATE,
-- SOURCEAGENCY,
-- RESPONSE_BODY,
-- REQUEST_BODY,
-- REQUESTNO,
-- RAISEDBY,
-- ERRORTYPE,
-- ERRORTEXT,
-- ERRORCODE,
-- EMPLOYEE_NO)
-- VALUES ('EMP_HISTORY_WS',
-- SYSDATE,
-- NULL,
-- X_CLOB,
-- SOAP_REQUEST,
-- L_REQUEST_NUMBER,
-- NULL,
-- L_FAULTSTRING, --ERRORTYPE
-- L_FAULTSTRING, --ERRORTEXT
-- HTTP_RESP.STATUS_CODE,
-- I.EMPLOYEE_NUMBER);
--
-- COMMIT;
-- EXCEPTION
-- WHEN OTHERS
-- THEN
-- L_ERROR :=
-- SQLERRM
-- || ' '
-- || 'Internal Error in Failure Response Query XML';
--
-- INSERT INTO XXX_HR_ELTEZAM_STATUS_TB (WS_NAME,
-- SUBMITION_DATE,
-- SOURCEAGENCY,
-- RESPONSE_BODY,
-- REQUEST_BODY,
-- REQUESTNO,
-- RAISEDBY,
-- ERRORTYPE,
-- ERRORTEXT,
-- ERRORCODE,
-- EMPLOYEE_NO)
-- VALUES (
-- 'JOBINFO_WS',
-- SYSDATE,
-- NULL,
-- X_CLOB,
-- SOAP_REQUEST,
-- L_REQUEST_NUMBER,
-- NULL,
-- 'Internal Error in Failure Response
Query XML', --ERRORTYPE
-- L_ERROR, --ERRORTEXT
-- HTTP_RESP.STATUS_CODE,
-- I.EMPLOYEE_NUMBER);
--
-- COMMIT;
-- END;
-- END IF;
--
-- BEGIN
-- UPDATE XXX_HR_ELTEZAM_HISTORICAL_TB
-- SET RequestNo = L_REQUEST_NUMBER, ERROR_MSG = L_ERROR
-- WHERE EMPLOYEE_NUMBER = I.EMPLOYEE_NUMBER
-- AND SUBMITION_DATE =
-- (SELECT MAX (SUBMITION_DATE)
-- FROM XXX_HR_ELTEZAM_HISTORICAL_TB
-- WHERE EMPLOYEE_NUMBER = I.EMPLOYEE_NUMBER);
--
-- COMMIT;
-- END;
--
-- UTL_HTTP.END_RESPONSE (HTTP_RESP);
-- UTL_HTTP.DESTROY_REQUEST_CONTEXT (V_REQ_CONTEXT);
-- END IF;
-- END LOOP;
--
--
--
-- COMMIT;
-- EXCEPTION
-- WHEN UTL_HTTP.END_OF_BODY
-- THEN
-- UTL_HTTP.END_RESPONSE (HTTP_RESP);
-- UTL_HTTP.DESTROY_REQUEST_CONTEXT (V_REQ_CONTEXT);
-- WHEN UTL_HTTP.TOO_MANY_REQUESTS
-- THEN
-- RAISE_APPLICATION_ERROR (
-- -20001,
-- 'Request failed exception:' || UTL_HTTP.GET_DETAILED_SQLERRM);
-- WHEN OTHERS
-- THEN
-- RAISE_APPLICATION_ERROR (
-- -20002,
-- 'Request failed exception:' || UTL_HTTP.GET_DETAILED_SQLERRM);
-- END XXX_HR_SUBMIT_EMP_HISTORY;
PROCEDURE XXX_HR_SUBMIT_EMP_HISTORY (P_PERSON_ID NUMBER,
P_CONNECTION_TYPE VARCHAR2)
IS
V_EMPLOYEE_NUMBER VARCHAR2 (100);
V_JOB_NO VARCHAR2 (100);
V_JOB_CLASS_CODE VARCHAR2 (100);
V_JOB_NAME_CODE VARCHAR2 (100);
V_JOB_POSITION_CODE VARCHAR2 (100);
V_START_DATE VARCHAR2 (100);
V_END_DATE VARCHAR2 (100);
V_POS_ORG_ID VARCHAR2 (100);
V_ORG_NAME VARCHAR2 (200);
V_POSITION_STATUS VARCHAR2 (100);
V_EMP_TYPE VARCHAR2 (100);
V_RANK_CODE VARCHAR2 (100);
V_LOCATION_CODE VARCHAR2 (100);
V_TRANSACTION_CODE VARCHAR2 (100);
V_VACANT_DATE VARCHAR2 (100);
V_LAST_UPDATE_DATE VARCHAR2 (100);
V_STAUTS VARCHAR2 (100);
V_ERROR_MSG VARCHAR2 (100);
V_REQ_CONTEXT UTL_HTTP.REQUEST_CONTEXT_KEY;
SOAP_REQUEST VARCHAR2 (32767);
HTTP_REQ UTL_HTTP.REQ;
HTTP_RESP UTL_HTTP.RESP;
L_BLOB BLOB;
L_DEST_OFFSET NUMBER := 1;
L_SRC_OFFSET NUMBER := 1;
L_LANG_CONTEXT NUMBER := 0;
L_WARNING NUMBER;
T_HTTP_VERSION VARCHAR2 (10) := 'HTTP/1.1';
T_CONTENT_TYPE VARCHAR2 (50) := 'text/xml; charset=utf-8';
T_URL VARCHAR2 (100); --:= 'https://mcs-
jesb02.mcs.gov.sa/EltezamDataServices/services/EltezamDataService?wsdl';

X_CLOB CLOB;
L_BUFFER VARCHAR2 (32767);
X NUMBER;
L_REQUEST_NUMBER VARCHAR2 (400);
L_FAULTSTRING VARCHAR2 (4000);
L_ERROR VARCHAR2 (4000);
V_ALTER_TXT VARCHAR2 (120)
:= 'alter session set nls_language = ''ARABIC''';
TRANS_END_DATE_TEXT VARCHAR2 (4000);
TRANS_OUT_DATE_TEXT VARCHAR2 (4000);
GRADE_DATE_TEXT VARCHAR2 (4000);

CURSOR MAIN_DATA
IS
SELECT EMPLOYEE_NUMBER,
NATIONAL_ID,
JOB_NO,
JOB_CLASS_CODE,
JOB_NAME_CODE,
EMPLOYMENT_TYPE_CODE,
RANK_CODE,
STEP_ID,
XXX_HR_PACKAGE1.XXX_GREGORIAN_TO_HIJRAH (STEP_DATE,
'DD-MM-RRRR')
STEP_DATE,
BASIC_SALARY,
DECISTION_NO,
XXX_HR_PACKAGE1.XXX_GREGORIAN_TO_HIJRAH (DECISION_DATE,
'DD-MM-RRRR')
DECISION_DATE,
XXX_HR_PACKAGE1.XXX_GREGORIAN_TO_HIJRAH (GRADE_DATE,
'DD-MM-RRRR')
GRADE_DATE,
LOCATION_CODE,
TRANSACTION_CODE,
XXX_HR_PACKAGE1.XXX_GREGORIAN_TO_HIJRAH (
TRANSACTION_START_DATE,
'DD-MM-RRRR')
TRANSACTION_START_DATE,
TRANSACTION_END_DATE,
XXX_HR_PACKAGE1.XXX_GREGORIAN_TO_HIJRAH (LAST_UPDATE_DATE,
'DD-MM-RRRR')
LAST_UPDATE_DATE,
REQUESTNO,
SUBMITION_DATE,
PERSON_ID,
TRANSACTION_ID,
INFORMATION_TYPE,
TRANSACTIONTYPE
FROM XXX_HR_ELTEZAM_HISTORICAL_TB
WHERE 1 = 1
AND TRANSACTIONTYPE IN ('Updated', 'Added')
AND (PERSON_ID = P_PERSON_ID OR P_PERSON_ID IS NULL);

L_MAIN_DATA_VALIDATION NUMBER;
L_ERROR_TEXT VARCHAR2 (4000);
BEGIN
EXECUTE IMMEDIATE V_ALTER_TXT;

COLLECT_WS_INFO ('ELTEZAM_EMPLOYEE_HISTORY');

T_URL := G_DOMAIN_NAME || G_SERVICE_NAME;

MERGE INTO XXX_HR_ELTEZAM_HISTORICAL_TB D


USING (SELECT EMPLOYEE_NUMBER,
NATIONAL_IDENTIFIER NATIONAL_ID,
JOB_NO,
JOB_CLASS_CODE,
JOB_NAME_CODE JOB_NAME_CODE,
(SELECT TYP.ELTEZAM_ID
FROM XXX_MAWARED_ELTEZAM_MAP_TB TYP
WHERE 1 = 1
AND EMPLOYMENT_CATEGORY = TYP.EBS_ID
AND TYP.MAP_TYPE = 'EMP_TYPE')
EMPLOYMENT_TYPE_CODE,
(SELECT RC.ELTEZAM_ID
FROM XXX_MAWARED_ELTEZAM_MAP_TB RC
WHERE 1 = 1
AND RANK_CODE = RC.EBS_ID
AND RC.MAP_TYPE = 'RANK_CODE')
RANK_CODE,
GRADE_STEP STEP_ID,
STEP_DATE,
STEP_SALARY BASIC_SALARY,
DECISION_NUMBER DECISTION_NO,
DECISION_DATE DECISION_DATE,
GRADE_DATE GRADE_DATE,
(SELECT LOC.ELTEZAM_ID
FROM XXX_MAWARED_ELTEZAM_MAP_TB LOC
WHERE 1 = 1
AND LOCATION_CODE = LOC.EBS_ID
AND LOC.MAP_TYPE = 'SA_CITY')
LOCATION_CODE,
(SELECT TRANS.ELTEZAM_ID
FROM XXX_MAWARED_ELTEZAM_MAP_TB TRANS
WHERE 1 = 1
AND TRANS_CODE = TRANS.EBS_ID
AND TRANS.MAP_TYPE = 'HIST_TRANS_CODE')
TRANSACTION_CODE,
TRANS_START_DATE TRANSACTION_START_DATE,
TRANS_END_DATE TRANSACTION_END_DATE,
SYSDATE SYS_DATE,
PERSON_ID,
TRANS_ID TRANSACTION_ID,
TRANS_CODE INFORMATION_TYPE
FROM XXX_HR_ASG_DECRESS_VIEW
WHERE 1 = 1
AND (PERSON_ID = P_PERSON_ID OR P_PERSON_ID IS NULL))
V
ON ( ( D.TRANSACTION_ID = V.TRANSACTION_ID
AND D.INFORMATION_TYPE = V.INFORMATION_TYPE))
WHEN MATCHED
THEN
UPDATE SET
D.EMPLOYEE_NUMBER = V.EMPLOYEE_NUMBER,
D.NATIONAL_ID = V.NATIONAL_ID,
D.JOB_NO = V.JOB_NO,
D.JOB_CLASS_CODE = V.JOB_CLASS_CODE,
D.JOB_NAME_CODE = V.JOB_NAME_CODE,
D.EMPLOYMENT_TYPE_CODE = V.EMPLOYMENT_TYPE_CODE,
D.RANK_CODE = V.RANK_CODE,
D.STEP_ID = V.STEP_ID,
D.TRANSACTIONTYPE = 'Updated',
D.STEP_DATE = V.STEP_DATE,
D.BASIC_SALARY = V.BASIC_SALARY,
D.DECISTION_NO = V.DECISTION_NO,
D.DECISION_DATE = V.DECISION_DATE,
D.GRADE_DATE = V.GRADE_DATE,
D.LOCATION_CODE = V.LOCATION_CODE,
-- D.TRANSACTION_CODE = V.TRANSACTION_CODE,
D.TRANSACTION_START_DATE = V.TRANSACTION_START_DATE,
D.TRANSACTION_END_DATE = V.TRANSACTION_END_DATE,
D.SUBMITION_DATE = SYSDATE,
D.LAST_UPDATE_DATE = SYSDATE,
D.REQUESTNO = NULL,
D.PERSON_ID = V.PERSON_ID
WHERE 1 = 1
AND ( ( D.EMPLOYEE_NUMBER <> V.EMPLOYEE_NUMBER
OR ( D.EMPLOYEE_NUMBER IS NULL
AND V.EMPLOYEE_NUMBER IS NOT NULL)
OR ( V.EMPLOYEE_NUMBER IS NULL
AND D.EMPLOYEE_NUMBER IS NOT NULL))
OR ( D.NATIONAL_ID <> V.NATIONAL_ID
OR ( D.NATIONAL_ID IS NULL
AND V.NATIONAL_ID IS NOT NULL)
OR ( V.NATIONAL_ID IS NULL
AND D.NATIONAL_ID IS NOT NULL))
OR ( D.JOB_NO <> V.JOB_NO
OR (D.JOB_NO IS NULL AND V.JOB_NO IS NOT NULL)
OR (V.JOB_NO IS NULL AND D.JOB_NO IS NOT NULL))
OR ( D.JOB_CLASS_CODE <> V.JOB_CLASS_CODE
OR ( D.JOB_CLASS_CODE IS NULL
AND V.JOB_CLASS_CODE IS NOT NULL)
OR ( V.JOB_CLASS_CODE IS NULL
AND D.JOB_CLASS_CODE IS NOT NULL))
OR ( D.JOB_NAME_CODE <> V.JOB_NAME_CODE
OR ( D.JOB_NAME_CODE IS NULL
AND V.JOB_NAME_CODE IS NOT NULL)
OR ( V.JOB_NAME_CODE IS NULL
AND D.JOB_NAME_CODE IS NOT NULL))
OR ( D.EMPLOYMENT_TYPE_CODE <>
V.EMPLOYMENT_TYPE_CODE
OR ( D.EMPLOYMENT_TYPE_CODE IS NULL
AND V.EMPLOYMENT_TYPE_CODE IS NOT NULL)
OR ( V.EMPLOYMENT_TYPE_CODE IS NULL
AND D.EMPLOYMENT_TYPE_CODE IS NOT NULL))
OR ( D.RANK_CODE <> V.RANK_CODE
OR ( D.RANK_CODE IS NULL
AND V.RANK_CODE IS NOT NULL)
OR ( V.RANK_CODE IS NULL
AND D.RANK_CODE IS NOT NULL))
OR ( D.STEP_ID <> V.STEP_ID
OR ( D.STEP_ID IS NULL
AND V.STEP_ID IS NOT NULL)
OR ( V.STEP_ID IS NULL
AND D.STEP_ID IS NOT NULL))
OR ( D.STEP_DATE <> V.STEP_DATE
OR ( D.STEP_DATE IS NULL
AND V.STEP_DATE IS NOT NULL)
OR ( V.STEP_DATE IS NULL
AND D.STEP_DATE IS NOT NULL))
OR ( D.BASIC_SALARY <> V.BASIC_SALARY
OR ( D.BASIC_SALARY IS NULL
AND V.BASIC_SALARY IS NOT NULL)
OR ( V.BASIC_SALARY IS NULL
AND D.BASIC_SALARY IS NOT NULL))
OR ( D.DECISTION_NO <> V.DECISTION_NO
OR ( D.DECISTION_NO IS NULL
AND V.DECISTION_NO IS NOT NULL)
OR ( V.DECISTION_NO IS NULL
AND D.DECISTION_NO IS NOT NULL))
OR ( D.DECISION_DATE <> V.DECISION_DATE
OR ( D.DECISION_DATE IS NULL
AND V.DECISION_DATE IS NOT NULL)
OR ( V.DECISION_DATE IS NULL
AND D.DECISION_DATE IS NOT NULL))
OR ( D.GRADE_DATE <> V.GRADE_DATE
OR ( D.GRADE_DATE IS NULL
AND V.GRADE_DATE IS NOT NULL)
OR ( V.GRADE_DATE IS NULL
AND D.GRADE_DATE IS NOT NULL))
OR ( D.LOCATION_CODE <> V.LOCATION_CODE
OR ( D.LOCATION_CODE IS NULL
AND V.LOCATION_CODE IS NOT NULL)
OR ( V.LOCATION_CODE IS NULL
AND D.LOCATION_CODE IS NOT NULL))
OR ( D.TRANSACTION_CODE <> V.TRANSACTION_CODE
OR ( D.TRANSACTION_CODE IS NULL
AND V.TRANSACTION_CODE IS NOT NULL)
OR ( V.TRANSACTION_CODE IS NULL
AND D.TRANSACTION_CODE IS NOT NULL))
OR ( D.TRANSACTION_START_DATE <>
V.TRANSACTION_START_DATE
OR ( D.TRANSACTION_START_DATE IS NULL
AND V.TRANSACTION_START_DATE IS NOT NULL)
OR ( V.TRANSACTION_START_DATE IS NULL
AND D.TRANSACTION_START_DATE IS NOT NULL))
OR ( D.TRANSACTION_END_DATE <>
V.TRANSACTION_END_DATE
OR ( D.TRANSACTION_END_DATE IS NULL
AND V.TRANSACTION_END_DATE IS NOT NULL)
OR ( V.TRANSACTION_END_DATE IS NULL
AND D.TRANSACTION_END_DATE IS NOT NULL))
OR ( D.PERSON_ID <> V.PERSON_ID
OR ( D.PERSON_ID IS NULL
AND V.PERSON_ID IS NOT NULL)
OR ( V.PERSON_ID IS NULL
AND D.PERSON_ID IS NOT NULL)))
WHEN NOT MATCHED
THEN
INSERT (EMPLOYEE_NUMBER,
NATIONAL_ID,
JOB_NO,
JOB_CLASS_CODE,
JOB_NAME_CODE,
EMPLOYMENT_TYPE_CODE,
RANK_CODE,
STEP_ID,
STEP_DATE,
BASIC_SALARY,
DECISTION_NO,
DECISION_DATE,
GRADE_DATE,
LOCATION_CODE,
TRANSACTION_CODE,
TRANSACTION_START_DATE,
TRANSACTION_END_DATE,
LAST_UPDATE_DATE,
REQUESTNO,
SUBMITION_DATE,
PERSON_ID,
TRANSACTION_ID,
INFORMATION_TYPE,
TRANSACTIONTYPE)
VALUES (V.EMPLOYEE_NUMBER,
V.NATIONAL_ID,
V.JOB_NO,
V.JOB_CLASS_CODE,
V.JOB_NAME_CODE,
V.EMPLOYMENT_TYPE_CODE,
V.RANK_CODE,
V.STEP_ID,
V.STEP_DATE,
V.BASIC_SALARY,
V.DECISTION_NO,
V.DECISION_DATE,
V.GRADE_DATE,
V.LOCATION_CODE,
V.TRANSACTION_CODE,
V.TRANSACTION_START_DATE,
V.TRANSACTION_END_DATE,
SYSDATE,
NULL,
SYSDATE,
V.PERSON_ID,
V.TRANSACTION_ID,
V.INFORMATION_TYPE,
'Added');
BEGIN
DELETE FROM XXX_HR_ELTEZAM_STATUS_TB
WHERE 1 = 1
AND WS_NAME = 'EMP_HISTORY_WS'
AND (PERSON_ID = P_PERSON_ID OR P_PERSON_ID IS NULL);
END;

COMMIT;

IF P_CONNECTION_TYPE = 'WEB_SERVICE'
THEN
FOR L_HR_ELTEZAM_EMPINFO_TB IN MAIN_DATA
LOOP
BEGIN
L_ERROR_TEXT := NULL;

DBMS_OUTPUT.put_line ('T_URL ' || T_URL);

------------------- VALIDATION OF MISSING DATA RECORD


------------------
IF L_HR_ELTEZAM_EMPINFO_TB.JOB_NO IS NULL
THEN
L_ERROR_TEXT := 'JOB_NO is Missing';
END IF;

---------- new validation -----------------


IF L_HR_ELTEZAM_EMPINFO_TB.JOB_CLASS_CODE IS NULL
THEN
L_ERROR_TEXT :=
'JOB_CLASS_CODE is Missing' || '/' || L_ERROR_TEXT;
END IF;

IF L_HR_ELTEZAM_EMPINFO_TB.JOB_NAME_CODE IS NULL
THEN
L_ERROR_TEXT :=
'JOB_NAME_CODE is Missing' || '/' || L_ERROR_TEXT;
END IF;

IF L_HR_ELTEZAM_EMPINFO_TB.EMPLOYMENT_TYPE_CODE IS NULL
THEN
L_ERROR_TEXT :=
'EMPLOYMENT_TYPE_CODE is Missing' || '/' || L_ERROR_TEXT;
END IF;

IF L_HR_ELTEZAM_EMPINFO_TB.RANK_CODE IS NULL
THEN
L_ERROR_TEXT :=
'RANK_CODE is Missing' || '/' || L_ERROR_TEXT;
END IF;

IF L_HR_ELTEZAM_EMPINFO_TB.STEP_ID IS NULL
THEN
L_ERROR_TEXT := 'STEP_ID is Missing' || '/' || L_ERROR_TEXT;
END IF;

IF L_HR_ELTEZAM_EMPINFO_TB.STEP_DATE IS NULL
THEN
L_ERROR_TEXT :=
'STEP_DATE is Missing' || '/' || L_ERROR_TEXT;
END IF;

IF L_HR_ELTEZAM_EMPINFO_TB.BASIC_SALARY IS NULL
THEN
L_ERROR_TEXT :=
'BASIC_SALARY is Missing' || '/' || L_ERROR_TEXT;
END IF;

IF L_HR_ELTEZAM_EMPINFO_TB.DECISTION_NO IS NULL
THEN
L_ERROR_TEXT :=
'DECISTION_NO is Missing' || '/' || L_ERROR_TEXT;
END IF;

IF L_HR_ELTEZAM_EMPINFO_TB.LOCATION_CODE IS NULL
THEN
L_ERROR_TEXT :=
'LOCATION_CODE is Missing' || '/' || L_ERROR_TEXT;
END IF;

IF L_HR_ELTEZAM_EMPINFO_TB.TRANSACTION_CODE IS NULL
THEN
L_ERROR_TEXT :=
'TRANSACTION_CODE is Missing' || '/' || L_ERROR_TEXT;
END IF;

IF L_HR_ELTEZAM_EMPINFO_TB.TRANSACTION_START_DATE IS NULL
THEN
L_ERROR_TEXT :=
'TRANSACTION_START_DATE is Missing'
|| '/'
|| L_ERROR_TEXT;
END IF;

IF L_ERROR_TEXT IS NOT NULL


THEN
INSERT INTO XXX_HR_ELTEZAM_STATUS_TB (WS_NAME,
SUBMITION_DATE,
SOURCEAGENCY,
RESPONSE_BODY,
REQUEST_BODY,
REQUESTNO,
RAISEDBY,
ERRORTYPE,
ERRORTEXT,
ERRORCODE,
EMPLOYEE_NO,
PERSON_ID)
VALUES ('EMP_HISTORY_WS',
SYSDATE,
NULL,
NULL,
NULL,
NULL,
NULL,
'Missing Data',
L_ERROR_TEXT,
'1404',
L_HR_ELTEZAM_EMPINFO_TB.EMPLOYEE_NUMBER,
L_HR_ELTEZAM_EMPINFO_TB.PERSON_ID);

L_MAIN_DATA_VALIDATION := -1;
ELSE
L_MAIN_DATA_VALIDATION := 1;
END IF;

IF L_MAIN_DATA_VALIDATION = 1
THEN
IF L_HR_ELTEZAM_EMPINFO_TB.TRANSACTION_END_DATE IS NOT NULL
THEN
TRANS_END_DATE_TEXT :=
'<TransactionEndDate>'
|| L_HR_ELTEZAM_EMPINFO_TB.TRANSACTION_END_DATE
|| '</TransactionEndDate>';
ELSE
TRANS_END_DATE_TEXT := NULL;
END IF;

IF L_HR_ELTEZAM_EMPINFO_TB.DECISION_DATE IS NOT NULL


THEN
TRANS_OUT_DATE_TEXT :=
'<DecisionDate>'
|| L_HR_ELTEZAM_EMPINFO_TB.DECISION_DATE
|| '</DecisionDate>';
ELSE
TRANS_OUT_DATE_TEXT := NULL;
END IF;

IF L_HR_ELTEZAM_EMPINFO_TB.TRANSACTION_END_DATE IS NOT NULL


THEN
GRADE_DATE_TEXT :=
'<GradeDate>'
|| L_HR_ELTEZAM_EMPINFO_TB.GRADE_DATE
|| '</GradeDate>';
ELSE
GRADE_DATE_TEXT := NULL;
END IF;

SOAP_REQUEST :=
'<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:tem="http://tempuri.org/"
xmlns:ver="http://yefi.gov.sa/PersonProfileCommonTypes/xml/schemas/version2.0">
<soapenv:Header/>
<soapenv:Body>
<tem:SubmitEmployeeHistoricalInfo>
<!--Optional:-->
<tem:employeeHistoricalInfo>
<!--Optional:-->
<EmployeeID>'
|| L_HR_ELTEZAM_EMPINFO_TB.EMPLOYEE_NUMBER
|| '</EmployeeID>
<!--Optional:-->
<PersonIdentifier>
<!--You have a CHOICE of the next 2 items at this level-->
<!--Optional:-->
<ver:IqamaNumber>'
|| L_HR_ELTEZAM_EMPINFO_TB.NATIONAL_ID
|| '</ver:IqamaNumber>
<!--Optional:-->
<ver:NationalID>'
|| L_HR_ELTEZAM_EMPINFO_TB.NATIONAL_ID
|| '</ver:NationalID>
</PersonIdentifier>
<!--Optional:-->
<JobNumber>'
|| L_HR_ELTEZAM_EMPINFO_TB.JOB_NO
|| '</JobNumber>
<!--Optional:-->
<JobClassCode>'
|| L_HR_ELTEZAM_EMPINFO_TB.JOB_CLASS_CODE
|| '</JobClassCode>
<!--Optional:-->
<JobNameCode>'
|| L_HR_ELTEZAM_EMPINFO_TB.JOB_NAME_CODE
|| '</JobNameCode>
<!--Optional:-->
<EmploymentTypeCode>'
|| L_HR_ELTEZAM_EMPINFO_TB.EMPLOYMENT_TYPE_CODE
|| '</EmploymentTypeCode>
<!--Optional:-->
<RankCode>'
|| L_HR_ELTEZAM_EMPINFO_TB.RANK_CODE
|| '</RankCode>
<StepID>'
|| L_HR_ELTEZAM_EMPINFO_TB.STEP_ID
|| '</StepID>
<!--Optional:-->
<StepDate>'
|| L_HR_ELTEZAM_EMPINFO_TB.STEP_DATE
|| '</StepDate>
<BasicSalary>'
|| L_HR_ELTEZAM_EMPINFO_TB.BASIC_SALARY
|| '</BasicSalary>
<!--Optional:-->
<DecisionNumber>'
|| L_HR_ELTEZAM_EMPINFO_TB.DECISTION_NO
|| '</DecisionNumber>
<!--Optional:-->'
|| TRANS_OUT_DATE_TEXT
|| '
<!--Optional:-->'
|| GRADE_DATE_TEXT
|| '
<!--Optional:-->
<LocationCode>'
|| L_HR_ELTEZAM_EMPINFO_TB.LOCATION_CODE
|| '</LocationCode>
<!--Optional:-->
<TransactionCode>'
|| L_HR_ELTEZAM_EMPINFO_TB.TRANSACTION_CODE
|| '</TransactionCode>
<!--Optional:-->
<TransactionStartDate>'
|| L_HR_ELTEZAM_EMPINFO_TB.TRANSACTION_START_DATE
|| '</TransactionStartDate>
'
|| TRANS_END_DATE_TEXT
|| '
<LastUpdateDate>'
|| L_HR_ELTEZAM_EMPINFO_TB.LAST_UPDATE_DATE
|| '</LastUpdateDate>
</tem:employeeHistoricalInfo>
</tem:SubmitEmployeeHistoricalInfo>
</soapenv:Body>
</soapenv:Envelope>';

UTL_HTTP.SET_TRANSFER_TIMEOUT (999);
----- Wallet Information -------
V_REQ_CONTEXT :=
UTL_HTTP.CREATE_REQUEST_CONTEXT (
WALLET_PATH => G_WALLET_PATH,
WALLET_PASSWORD => G_WALLET_PASSWORD);

/* DBMS_OUTPUT.put_line ('WALLET_PATH ' || G_WALLET_PATH);


-- to handel arabic content
DBMS_LOB.CREATETEMPORARY (L_BLOB, FALSE, DBMS_LOB.CALL);
DBMS_LOB.CONVERTTOBLOB (DEST_LOB => L_BLOB,
SRC_CLOB => soap_request,
AMOUNT => DBMS_LOB.LOBMAXSIZE,
DEST_OFFSET => L_DEST_OFFSET,
SRC_OFFSET => L_SRC_OFFSET,
BLOB_CSID => NLS_CHARSET_ID
('AL32UTF8'), --AR8ISO8859P6 AL32UTF8 AL16UTF16
LANG_CONTEXT => L_LANG_CONTEXT,
WARNING => L_WARNING);*/

HTTP_REQ :=
UTL_HTTP.BEGIN_REQUEST (
URL => T_URL,
REQUEST_CONTEXT => V_REQ_CONTEXT,
METHOD => 'POST',
HTTP_VERSION => 'HTTP/1.1');

UTL_HTTP.SET_HEADER (HTTP_REQ, 'User-Agent', 'Mozilla/4.0');


UTL_HTTP.SET_HEADER (HTTP_REQ, 'Connection', 'Keep-Alive');
UTL_HTTP.SET_HEADER (HTTP_REQ,
'Content-Type',
'text/xml;encoding=UTF-8');
--'text/xml;charset=UTF-8');

/*UTL_HTTP.SET_HEADER (http_req,
'Content-Length',
DBMS_LOB.GETLENGTH (L_BLOB));*/
UTL_HTTP.set_header (http_req,
'Content-Length',
LENGTH (soap_request));
UTL_HTTP.set_header (
http_req,
'SOAPAction',

'"http://tempuri.org/IEltezamDataService/SubmitEmployeeHistoricalInfo"');
UTL_HTTP.WRITE_TEXT (HTTP_REQ, SOAP_REQUEST);

HTTP_RESP := UTL_HTTP.GET_RESPONSE (HTTP_REQ);

DBMS_LOB.CREATETEMPORARY (X_CLOB, FALSE);


DBMS_LOB.OPEN (X_CLOB, DBMS_LOB.LOB_READWRITE);

BEGIN
LOOP
UTL_HTTP.READ_TEXT (HTTP_RESP, L_BUFFER);
DBMS_LOB.WRITEAPPEND (X_CLOB,
LENGTH (L_BUFFER),
L_BUFFER);
END LOOP;
EXCEPTION
WHEN OTHERS
THEN
IF SQLCODE <> -29266
THEN
RAISE;
END IF;
END;

DBMS_OUTPUT.PUT_LINE (
'Response Status: '
|| HTTP_RESP.STATUS_CODE
|| ' '
|| HTTP_RESP.REASON_PHRASE);

IF (HTTP_RESP.STATUS_CODE = 200)
THEN
BEGIN
SELECT REQUESTNUMBER
INTO L_REQUEST_NUMBER
FROM (SELECT XMLTYPE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (

REGEXP_REPLACE (

REGEXP_REPLACE (

(X_CLOB),

'http://schemas.xmlsoap.org/soap/envelope/',
''),

'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"',
''),

'xmlns:xsd="http://www.w3.org/2001/XMLSchema"',
''),
'xmlns="http://tempuri.org/"',
''),

'xmlns="http://yefi.gov.sa/MCS/EltezamDataSchema/xml/schemas/version1.0"',
''),
'xmlns=""',
''),
's:',
''),
'xmlns=""',
''))
XMLT
FROM DUAL) XX,
XMLTABLE (
'Envelope/Body
/SubmitEmployeeHistoricalInfoResponse/SubmitEmployeeHistoricalInfoResult/
submitEmployeeHistoricalInfoResponseDetailObject'
PASSING XX.XMLT
COLUMNS REQUESTNUMBER VARCHAR2 (400)
PATH
'RequestNumber');

INSERT
INTO XXCUSTOM.XXX_HR_ELTEZAM_STATUS_TB (
WS_NAME,
SUBMITION_DATE,
SOURCEAGENCY,
RESPONSE_BODY,
REQUEST_BODY,
REQUESTNO,
RAISEDBY,
ERRORTYPE,
ERRORTEXT,
ERRORCODE,
EMPLOYEE_NO,
PERSON_ID)
VALUES ('EMP_HISTORY_WS',
SYSDATE,
NULL,
X_CLOB,
SOAP_REQUEST,
L_REQUEST_NUMBER,
NULL,
NULL,
NULL,
HTTP_RESP.STATUS_CODE,
L_HR_ELTEZAM_EMPINFO_TB.EMPLOYEE_NUMBER,
L_HR_ELTEZAM_EMPINFO_TB.PERSON_ID);

UPDATE XXX_HR_ELTEZAM_HISTORICAL_TB
SET TRANSACTIONTYPE = 'Transferred'
WHERE 1 = 1
AND EMPLOYEE_NUMBER =
L_HR_ELTEZAM_EMPINFO_TB.EMPLOYEE_NUMBER;

COMMIT;
EXCEPTION
WHEN OTHERS
THEN
BEGIN
L_REQUEST_NUMBER := NULL;

SELECT FAULTSTRING || ' - ' || Code


INTO L_FAULTSTRING
FROM (SELECT XMLTYPE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE
(

REGEXP_REPLACE (

REGEXP_REPLACE (

REGEXP_REPLACE (

REGEXP_REPLACE (

(X_CLOB),

'http://schemas.xmlsoap.org/soap/envelope/',

''),

'xmlns="http://tempuri.org/"',

''),

'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"',
''),

'xmlns:xsd="http://www.w3.org/2001/XMLSchema"',
''),
'
xmlns="http://yefi.gov.sa/YEFIErrorStructure/xml/schemas/version2.3"',
''),
'xmlns=""',
''),
's:',
''),
'xmlns=""',
''),

'xmlns="http://yefi.gov.sa/YEFIErrorStructure/xml/schemas/version2.3"',
''))
XMLT
FROM DUAL) XX,
XMLTABLE (
'Envelope/Body
/SubmitEmployeeHistoricalInfoResponse/SubmitEmployeeHistoricalInfoResult/
ServiceError'
PASSING XX.XMLT
COLUMNS FAULTSTRING VARCHAR2
(4000)
PATH
'ErrorText',
Code VARCHAR2
(4000)
PATH
'Code');
EXCEPTION
WHEN OTHERS
THEN
NULL;
END;

L_ERROR := SQLERRM || ' - ' || L_FAULTSTRING;

INSERT
INTO XXX_HR_ELTEZAM_STATUS_TB (WS_NAME,
SUBMITION_DATE,
SOURCEAGENCY,
RESPONSE_BODY,
REQUEST_BODY,
REQUESTNO,
RAISEDBY,
ERRORTYPE,
ERRORTEXT,
ERRORCODE,
EMPLOYEE_NO,
PERSON_ID)
VALUES ('EMP_HISTORY_WS',
SYSDATE,
NULL,
X_CLOB,
SOAP_REQUEST,
L_REQUEST_NUMBER,
NULL,
L_FAULTSTRING, --ERRORTYPE
L_FAULTSTRING, --ERRORTEXT
HTTP_RESP.STATUS_CODE,
L_HR_ELTEZAM_EMPINFO_TB.EMPLOYEE_NUMBER,
L_HR_ELTEZAM_EMPINFO_TB.PERSON_ID);
END;
ELSE
L_REQUEST_NUMBER := NULL; ----- In case of failure

BEGIN
SELECT FAULTSTRING
INTO L_FAULTSTRING
FROM (SELECT XMLTYPE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE
(

REGEXP_REPLACE (
(X_CLOB),
'http://schemas.xmlsoap.org/soap/envelope/',
''),

'xmlns="http://tempuri.org/"',
''),

'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"',
''),

'xmlns:xsd="http://www.w3.org/2001/XMLSchema"',
''),
'
xmlns="http://yefi.gov.sa/YEFIErrorStructure/xml/schemas/version2.3"',
''),
'xmlns=""',
''),
's:',
''),
'xmlns=""',
''))
XMLT
FROM DUAL) XX,
XMLTABLE (
'Envelope/Body /Fault'
PASSING XX.XMLT
COLUMNS FAULTSTRING VARCHAR2 (1000)
PATH
'faultstring');

INSERT
INTO XXCUSTOM.XXX_HR_ELTEZAM_STATUS_TB (
WS_NAME,
SUBMITION_DATE,
SOURCEAGENCY,
RESPONSE_BODY,
REQUEST_BODY,
REQUESTNO,
RAISEDBY,
ERRORTYPE,
ERRORTEXT,
ERRORCODE,
EMPLOYEE_NO,
PERSON_ID)
VALUES ('EMP_HISTORY_WS',
SYSDATE,
NULL,
X_CLOB,
SOAP_REQUEST,
L_REQUEST_NUMBER,
NULL,
L_FAULTSTRING, --ERRORTYPE
L_FAULTSTRING, --ERRORTEXT
HTTP_RESP.STATUS_CODE,
L_HR_ELTEZAM_EMPINFO_TB.EMPLOYEE_NUMBER,
L_HR_ELTEZAM_EMPINFO_TB.PERSON_ID);

COMMIT;
EXCEPTION
WHEN OTHERS
THEN
L_ERROR :=
SQLERRM
|| ' '
|| 'Internal Error in Failure Response Query XML';

INSERT
INTO XXX_HR_ELTEZAM_STATUS_TB (WS_NAME,
SUBMITION_DATE,
SOURCEAGENCY,
RESPONSE_BODY,
REQUEST_BODY,
REQUESTNO,
RAISEDBY,
ERRORTYPE,
ERRORTEXT,
ERRORCODE,
EMPLOYEE_NO,
PERSON_ID)
VALUES (
'EMP_HISTORY_WS',
SYSDATE,
NULL,
X_CLOB,
SOAP_REQUEST,
L_REQUEST_NUMBER,
NULL,
'Internal Error in Failure Response Query
XML', --ERRORTYPE
L_ERROR, --ERRORTEXT
HTTP_RESP.STATUS_CODE,
L_HR_ELTEZAM_EMPINFO_TB.EMPLOYEE_NUMBER,
L_HR_ELTEZAM_EMPINFO_TB.PERSON_ID);

COMMIT;
END;
END IF;

UTL_HTTP.END_RESPONSE (HTTP_RESP);
UTL_HTTP.DESTROY_REQUEST_CONTEXT (V_REQ_CONTEXT);
END IF;

COMMIT;
EXCEPTION
WHEN UTL_HTTP.END_OF_BODY
THEN
UTL_HTTP.END_RESPONSE (HTTP_RESP);
UTL_HTTP.DESTROY_REQUEST_CONTEXT (V_REQ_CONTEXT);
WHEN UTL_HTTP.TOO_MANY_REQUESTS
THEN
RAISE_APPLICATION_ERROR (
-20001,
'Request failed exception:'
|| UTL_HTTP.GET_DETAILED_SQLERRM);
WHEN OTHERS
THEN
NULL;
RAISE_APPLICATION_ERROR (
-20002,
'Request failed exception:'
|| UTL_HTTP.GET_DETAILED_SQLERRM);
END;
END LOOP;
END IF;
END XXX_HR_SUBMIT_EMP_HISTORY;

----------- XXX_HR_MERGE_STATEMENT Has been created by Amr El Kelany to update


Staging Table and to Catch the New Updates only and Insert of Emp Details

PROCEDURE XXX_HR_MERGE_STATEMENT (ERRBUF OUT NOCOPY VARCHAR2,


RETCODE OUT NOCOPY NUMBER,
P_PERSON_ID NUMBER)
IS
V_ALTER_TXT VARCHAR2 (120)
:= 'alter session set nls_language = ''ARABIC''';
BEGIN
EXECUTE IMMEDIATE V_ALTER_TXT;

MERGE INTO XXX_HR_INT_EMPLOYEE_TB D


USING (SELECT TRANSACTION_CODE,
TERMINATION_REASON_CODE,
TERMINATION_DATE,
SYS_DATE,
STEP_ID,
STEP_DATE,
SEX,
SDTE,
REMAINING_BUS_BALANCE,
REMAINING_ANNUAL_BALANCE,
RELIGION,
nvl(RANK_ID,'R-9999')RANK_ID,
PERSON_ID,
NEXT_PROM_DATE,
NATIONAL_NO,
NATIONALITY_ID,
MINISTRY_HIRE_DATE,
LOCATION_ID,
JOB_ORG_NAME,
JOB_ORG_ID,
JOB_NO,
(CASE
WHEN ASCII (SUBSTR (JOB_NAME, 1, 1)) > 57
THEN
'99'|| SUBSTR (JOB_NAME, 3, 9)

ELSE
JOB_NAME
END ) JOB_NAME,
JOB_CLASS_CODE,
ISACTIVE,
GOV_HIRE_DATE,
FIRST_GRADE_DT,
EMP_STATUS_CODE,
EMPLOYMENT_TYPE_ID,
EMPLOYEE_NUMBER,
EMPLOYEE_GRAND_NAME_AR,
EMPLOYEE_FIRST_NAME_AR,
EMPLOYEE_FATHER_NAME_AR,
EMPLOYEE_FAMILY_NAME_AR,
EMPLOYEE_FIRST_NAME_EN,
EMPLOYEE_FATHER_NAME_EN,
EMPLOYEE_GRAND_NAME_EN,
EMPLOYEE_FAMILY_NAME_EN,
EMAIL,
BLOOD_TYPE,
BIRTH_DATE,
BASIC_SALARY,
ACTUAL_ORG_NAME,
ACTUAL_ORG_ID,
ACTUAL_JOB_CODE,
EMP_HEALTH_STAUTS
FROM XXX_HR_INT_EMPLOYEE_VIEW
WHERE 1 = 1
AND (PERSON_ID = P_PERSON_ID OR P_PERSON_ID IS NULL))
V
ON (D.PERSON_ID = V.PERSON_ID)
WHEN MATCHED
THEN
UPDATE SET
D.TRANSACTION_CODE = V.TRANSACTION_CODE,
D.TERMINATION_REASON_CODE = V.TERMINATION_REASON_CODE,
D.TERMINATION_DATE = V.TERMINATION_DATE,
D.SYS_DATE = V.SYS_DATE,
D.STEP_ID = V.STEP_ID,
D.STEP_DATE = V.STEP_DATE,
D.SEX = V.SEX,
D.SDTE = V.SDTE,
D.REMAINING_BUS_BALANCE = V.REMAINING_BUS_BALANCE,
D.REMAINING_ANNUAL_BALANCE = V.REMAINING_ANNUAL_BALANCE,
D.RELIGION = V.RELIGION,
D.RANK_ID = V.RANK_ID,
D.NEXT_PROM_DATE = V.NEXT_PROM_DATE,
D.NATIONAL_NO = V.NATIONAL_NO,
D.NATIONALITY_ID = V.NATIONALITY_ID,
D.MINISTRY_HIRE_DATE = V.MINISTRY_HIRE_DATE,
D.LOCATION_ID = V.LOCATION_ID,
D.JOB_ORG_NAME = V.JOB_ORG_NAME,
D.JOB_ORG_ID = V.JOB_ORG_ID,
D.JOB_NO = V.JOB_NO,
D.JOB_NAME = V.JOB_NAME,
D.JOB_CLASS_CODE = V.JOB_CLASS_CODE,
D.ISACTIVE = V.ISACTIVE,
D.GOV_HIRE_DATE = V.GOV_HIRE_DATE,
D.FIRST_GRADE_DT = V.FIRST_GRADE_DT,
D.EMP_STATUS_CODE = V.EMP_STATUS_CODE,
D.EMPLOYMENT_TYPE_ID = V.EMPLOYMENT_TYPE_ID,
D.EMPLOYEE_NUMBER = V.EMPLOYEE_NUMBER,
D.EMPLOYEE_GRAND_NAME_AR = V.EMPLOYEE_GRAND_NAME_AR,
D.EMPLOYEE_FIRST_NAME_AR = V.EMPLOYEE_FIRST_NAME_AR,
D.EMPLOYEE_FATHER_NAME_AR = V.EMPLOYEE_FATHER_NAME_AR,
D.EMPLOYEE_FAMILY_NAME_AR = V.EMPLOYEE_FAMILY_NAME_AR,
D.EMPLOYEE_GRAND_NAME_EN = V.EMPLOYEE_GRAND_NAME_EN,
D.EMPLOYEE_FIRST_NAME_EN = V.EMPLOYEE_FIRST_NAME_EN,
D.EMPLOYEE_FATHER_NAME_EN = V.EMPLOYEE_FATHER_NAME_EN,
D.EMPLOYEE_FAMILY_NAME_EN = V.EMPLOYEE_FAMILY_NAME_EN,
D.EMAIL = V.EMAIL,
D.RECORD_STATUS = 'Updated',
D.BLOOD_TYPE = V.BLOOD_TYPE,
D.BIRTH_DATE = V.BIRTH_DATE,
D.BASIC_SALARY = V.BASIC_SALARY,
D.ACTUAL_ORG_NAME = V.ACTUAL_ORG_NAME,
D.ACTUAL_ORG_ID = V.ACTUAL_ORG_ID,
D.ACTUAL_JOB_CODE = V.ACTUAL_JOB_CODE,
D.EMP_HEALTH_STAUTS = V.EMP_HEALTH_STAUTS
WHERE 1 = 1
AND ( ( D.TERMINATION_REASON_CODE <>
V.TERMINATION_REASON_CODE
OR ( D.TERMINATION_REASON_CODE IS NULL
AND V.TERMINATION_REASON_CODE IS NOT NULL)
OR ( V.TERMINATION_REASON_CODE IS NULL
AND D.TERMINATION_REASON_CODE IS NOT NULL))
OR ( D.TERMINATION_DATE <> V.TERMINATION_DATE
OR ( D.TERMINATION_DATE IS NULL
AND V.TERMINATION_DATE IS NOT NULL)
OR ( V.TERMINATION_DATE IS NULL
AND D.TERMINATION_DATE IS NOT NULL))
OR ( D.STEP_ID <> V.STEP_ID
OR ( D.STEP_ID IS NULL
AND V.STEP_ID IS NOT NULL)
OR ( V.STEP_ID IS NULL
AND D.STEP_ID IS NOT NULL))
OR ( D.STEP_DATE <> V.STEP_DATE
OR ( D.STEP_DATE IS NULL
AND V.STEP_DATE IS NOT NULL)
OR ( V.STEP_DATE IS NULL
AND D.STEP_DATE IS NOT NULL))
OR ( D.SEX <> V.SEX
OR (D.SEX IS NULL AND V.SEX IS NOT NULL)
OR (V.SEX IS NULL AND D.SEX IS NOT NULL))
OR ( D.REMAINING_BUS_BALANCE <>
V.REMAINING_BUS_BALANCE
OR ( D.REMAINING_BUS_BALANCE IS NULL
AND V.REMAINING_BUS_BALANCE IS NOT NULL)
OR ( V.REMAINING_BUS_BALANCE IS NULL
AND D.REMAINING_BUS_BALANCE IS NOT NULL))
OR ( D.REMAINING_ANNUAL_BALANCE <>
V.REMAINING_ANNUAL_BALANCE
OR ( D.REMAINING_ANNUAL_BALANCE IS NULL
AND V.REMAINING_ANNUAL_BALANCE
IS NOT NULL)
OR ( V.REMAINING_ANNUAL_BALANCE IS NULL
AND D.REMAINING_ANNUAL_BALANCE
IS NOT NULL))
OR ( D.RELIGION <> V.RELIGION
OR ( D.RELIGION IS NULL
AND V.RELIGION IS NOT NULL)
OR ( V.RELIGION IS NULL
AND D.RELIGION IS NOT NULL))
OR ( D.RANK_ID <> V.RANK_ID
OR ( D.RANK_ID IS NULL
AND V.RANK_ID IS NOT NULL)
OR ( V.RANK_ID IS NULL
AND D.RANK_ID IS NOT NULL))
OR ( D.NEXT_PROM_DATE <> V.NEXT_PROM_DATE
OR ( D.NEXT_PROM_DATE IS NULL
AND V.NEXT_PROM_DATE IS NOT NULL)
OR ( V.NEXT_PROM_DATE IS NULL
AND D.NEXT_PROM_DATE IS NOT NULL))
OR ( D.NATIONAL_NO <> V.NATIONAL_NO
OR ( D.NATIONAL_NO IS NULL
AND V.NATIONAL_NO IS NOT NULL)
OR ( V.NATIONAL_NO IS NULL
AND D.NATIONAL_NO IS NOT NULL))
OR ( D.NATIONALITY_ID <> V.NATIONALITY_ID
OR ( D.NATIONALITY_ID IS NULL
AND V.NATIONALITY_ID IS NOT NULL)
OR ( V.NATIONALITY_ID IS NULL
AND D.NATIONALITY_ID IS NOT NULL))
OR ( D.MINISTRY_HIRE_DATE <>
V.MINISTRY_HIRE_DATE
OR ( D.MINISTRY_HIRE_DATE IS NULL
AND V.MINISTRY_HIRE_DATE IS NOT NULL)
OR ( V.MINISTRY_HIRE_DATE IS NULL
AND D.MINISTRY_HIRE_DATE IS NOT NULL))
OR ( D.LOCATION_ID <> V.LOCATION_ID
OR ( D.LOCATION_ID IS NULL
AND V.LOCATION_ID IS NOT NULL)
OR ( V.LOCATION_ID IS NULL
AND D.LOCATION_ID IS NOT NULL))
OR ( D.JOB_ORG_NAME <> V.JOB_ORG_NAME
OR ( D.JOB_ORG_NAME IS NULL
AND V.JOB_ORG_NAME IS NOT NULL)
OR ( V.JOB_ORG_NAME IS NULL
AND D.JOB_ORG_NAME IS NOT NULL))
OR ( D.JOB_ORG_ID <> V.JOB_ORG_ID
OR ( D.JOB_ORG_ID IS NULL
AND V.JOB_ORG_ID IS NOT NULL)
OR ( V.JOB_ORG_ID IS NULL
AND D.JOB_ORG_ID IS NOT NULL))
OR ( D.JOB_NO <> V.JOB_NO
OR (D.JOB_NO IS NULL AND V.JOB_NO IS NOT NULL)
OR (V.JOB_NO IS NULL AND D.JOB_NO IS NOT NULL))
OR ( D.JOB_NAME <> V.JOB_NAME
OR ( D.JOB_NAME IS NULL
AND V.JOB_NAME IS NOT NULL)
OR ( V.JOB_NAME IS NULL
AND D.JOB_NAME IS NOT NULL))
OR ( D.JOB_CLASS_CODE <> V.JOB_CLASS_CODE
OR ( D.JOB_CLASS_CODE IS NULL
AND V.JOB_CLASS_CODE IS NOT NULL)
OR ( V.JOB_CLASS_CODE IS NULL
AND D.JOB_CLASS_CODE IS NOT NULL))
OR ( D.ISACTIVE <> V.ISACTIVE
OR ( D.ISACTIVE IS NULL
AND V.ISACTIVE IS NOT NULL)
OR ( V.ISACTIVE IS NULL
AND D.ISACTIVE IS NOT NULL))
OR ( D.GOV_HIRE_DATE <> V.GOV_HIRE_DATE
OR ( D.GOV_HIRE_DATE IS NULL
AND V.GOV_HIRE_DATE IS NOT NULL)
OR ( V.GOV_HIRE_DATE IS NULL
AND D.GOV_HIRE_DATE IS NOT NULL))
OR ( D.FIRST_GRADE_DT <> V.FIRST_GRADE_DT
OR ( D.FIRST_GRADE_DT IS NULL
AND V.FIRST_GRADE_DT IS NOT NULL)
OR ( V.FIRST_GRADE_DT IS NULL
AND D.FIRST_GRADE_DT IS NOT NULL))
OR ( D.EMP_STATUS_CODE <> V.EMP_STATUS_CODE
OR ( D.EMP_STATUS_CODE IS NULL
AND V.EMP_STATUS_CODE IS NOT NULL)
OR ( V.EMP_STATUS_CODE IS NULL
AND D.EMP_STATUS_CODE IS NOT NULL))
OR ( D.EMPLOYMENT_TYPE_ID <>
V.EMPLOYMENT_TYPE_ID
OR ( D.EMPLOYMENT_TYPE_ID IS NULL
AND V.EMPLOYMENT_TYPE_ID IS NOT NULL)
OR ( V.EMPLOYMENT_TYPE_ID IS NULL
AND D.EMPLOYMENT_TYPE_ID IS NOT NULL))
OR ( D.EMPLOYEE_NUMBER <> V.EMPLOYEE_NUMBER
OR ( D.EMPLOYEE_NUMBER IS NULL
AND V.EMPLOYEE_NUMBER IS NOT NULL)
OR ( V.EMPLOYEE_NUMBER IS NULL
AND D.EMPLOYEE_NUMBER IS NOT NULL))
OR ( D.EMPLOYEE_GRAND_NAME_AR <>
V.EMPLOYEE_GRAND_NAME_AR
OR ( D.EMPLOYEE_GRAND_NAME_AR IS NULL
AND V.EMPLOYEE_GRAND_NAME_AR IS NOT NULL)
OR ( V.EMPLOYEE_GRAND_NAME_AR IS NULL
AND D.EMPLOYEE_GRAND_NAME_AR IS NOT NULL))
OR ( D.EMPLOYEE_FIRST_NAME_AR <>
V.EMPLOYEE_FIRST_NAME_AR
OR ( D.EMPLOYEE_FIRST_NAME_AR IS NULL
AND V.EMPLOYEE_FIRST_NAME_AR IS NOT NULL)
OR ( V.EMPLOYEE_FIRST_NAME_AR IS NULL
AND D.EMPLOYEE_FIRST_NAME_AR IS NOT NULL))
OR ( D.EMPLOYEE_FATHER_NAME_AR <>
V.EMPLOYEE_FATHER_NAME_AR
OR ( D.EMPLOYEE_FATHER_NAME_AR IS NULL
AND V.EMPLOYEE_FATHER_NAME_AR IS NOT NULL)
OR ( V.EMPLOYEE_FATHER_NAME_AR IS NULL
AND D.EMPLOYEE_FATHER_NAME_AR IS NOT NULL))
OR ( D.EMPLOYEE_FAMILY_NAME_AR <>
V.EMPLOYEE_FAMILY_NAME_AR
OR ( D.EMPLOYEE_FAMILY_NAME_AR IS NULL
AND V.EMPLOYEE_FAMILY_NAME_AR IS NOT NULL)
OR ( V.EMPLOYEE_FAMILY_NAME_AR IS NULL
AND D.EMPLOYEE_FAMILY_NAME_AR IS NOT NULL))
OR ( D.EMPLOYEE_GRAND_NAME_EN <>
V.EMPLOYEE_GRAND_NAME_EN
OR ( D.EMPLOYEE_GRAND_NAME_EN IS NULL
AND V.EMPLOYEE_GRAND_NAME_EN IS NOT NULL)
OR ( V.EMPLOYEE_GRAND_NAME_EN IS NULL
AND D.EMPLOYEE_GRAND_NAME_EN IS NOT NULL))
OR ( D.EMPLOYEE_FIRST_NAME_EN <>
V.EMPLOYEE_FIRST_NAME_EN
OR ( D.EMPLOYEE_FIRST_NAME_EN IS NULL
AND V.EMPLOYEE_FIRST_NAME_EN IS NOT NULL)
OR ( V.EMPLOYEE_FIRST_NAME_EN IS NULL
AND D.EMPLOYEE_FIRST_NAME_EN IS NOT NULL))
OR ( D.EMPLOYEE_FATHER_NAME_EN <>
V.EMPLOYEE_FATHER_NAME_EN
OR ( D.EMPLOYEE_FATHER_NAME_EN IS NULL
AND V.EMPLOYEE_FATHER_NAME_EN IS NOT NULL)
OR ( V.EMPLOYEE_FATHER_NAME_EN IS NULL
AND D.EMPLOYEE_FATHER_NAME_EN IS NOT NULL))
OR ( D.EMPLOYEE_FAMILY_NAME_EN <>
V.EMPLOYEE_FAMILY_NAME_EN
OR ( D.EMPLOYEE_FAMILY_NAME_EN IS NULL
AND V.EMPLOYEE_FAMILY_NAME_EN IS NOT NULL)
OR ( V.EMPLOYEE_FAMILY_NAME_EN IS NULL
AND D.EMPLOYEE_FAMILY_NAME_EN IS NOT NULL))
OR ( D.EMAIL <> V.EMAIL
OR (D.EMAIL IS NULL AND V.EMAIL IS NOT NULL)
OR (V.EMAIL IS NULL AND D.EMAIL IS NOT NULL))
OR ( D.BLOOD_TYPE <> V.BLOOD_TYPE
OR ( D.BLOOD_TYPE IS NULL
AND V.BLOOD_TYPE IS NOT NULL)
OR ( V.BLOOD_TYPE IS NULL
AND D.BLOOD_TYPE IS NOT NULL))
OR ( D.BIRTH_DATE <> V.BIRTH_DATE
OR ( D.BIRTH_DATE IS NULL
AND V.BIRTH_DATE IS NOT NULL)
OR ( V.BIRTH_DATE IS NULL
AND D.BIRTH_DATE IS NOT NULL))
OR ( D.BASIC_SALARY <> V.BASIC_SALARY
OR ( D.BASIC_SALARY IS NULL
AND V.BASIC_SALARY IS NOT NULL)
OR ( V.BASIC_SALARY IS NULL
AND D.BASIC_SALARY IS NOT NULL))
OR ( D.ACTUAL_ORG_NAME <> V.ACTUAL_ORG_NAME
OR ( D.ACTUAL_ORG_NAME IS NULL
AND V.ACTUAL_ORG_NAME IS NOT NULL)
OR ( V.ACTUAL_ORG_NAME IS NULL
AND D.ACTUAL_ORG_NAME IS NOT NULL))
OR ( D.ACTUAL_ORG_ID <> V.ACTUAL_ORG_ID
OR ( D.ACTUAL_ORG_ID IS NULL
AND V.ACTUAL_ORG_ID IS NOT NULL)
OR ( V.ACTUAL_ORG_ID IS NULL
AND D.ACTUAL_ORG_ID IS NOT NULL))
OR ( D.ACTUAL_JOB_CODE <> V.ACTUAL_JOB_CODE
OR ( D.ACTUAL_JOB_CODE IS NULL
AND V.ACTUAL_JOB_CODE IS NOT NULL)
OR ( V.ACTUAL_JOB_CODE IS NULL
AND D.ACTUAL_JOB_CODE IS NOT NULL))
OR ( D.TRANSACTION_CODE <> V.TRANSACTION_CODE
OR ( D.TRANSACTION_CODE IS NULL
AND V.TRANSACTION_CODE IS NOT NULL)
OR ( V.TRANSACTION_CODE IS NULL
AND D.TRANSACTION_CODE IS NOT NULL)))

WHEN NOT MATCHED


THEN
INSERT (D.TRANSACTION_CODE,
D.TERMINATION_REASON_CODE,
D.TERMINATION_DATE,
D.SYS_DATE,
D.STEP_ID,
D.STEP_DATE,
D.SEX,
D.SDTE,
D.REMAINING_BUS_BALANCE,
D.REMAINING_ANNUAL_BALANCE,
D.RELIGION,
D.RANK_ID,
D.PERSON_ID,
D.NEXT_PROM_DATE,
D.NATIONAL_NO,
D.NATIONALITY_ID,
D.MINISTRY_HIRE_DATE,
D.LOCATION_ID,
D.JOB_ORG_NAME,
D.JOB_ORG_ID,
D.JOB_NO,
D.JOB_NAME,
D.JOB_CLASS_CODE,
D.ISACTIVE,
D.GOV_HIRE_DATE,
D.FIRST_GRADE_DT,
D.EMP_STATUS_CODE,
D.EMPLOYMENT_TYPE_ID,
D.EMPLOYEE_NUMBER,
D.EMPLOYEE_GRAND_NAME_AR,
D.EMPLOYEE_FIRST_NAME_AR,
D.EMPLOYEE_FATHER_NAME_AR,
D.EMPLOYEE_FAMILY_NAME_AR,
D.EMPLOYEE_GRAND_NAME_EN,
D.EMPLOYEE_FIRST_NAME_EN,
D.EMPLOYEE_FATHER_NAME_EN,
D.EMPLOYEE_FAMILY_NAME_EN,
D.EMAIL,
D.RECORD_STATUS,
D.BLOOD_TYPE,
D.BIRTH_DATE,
D.BASIC_SALARY,
D.ACTUAL_ORG_NAME,
D.ACTUAL_ORG_ID,
D.ACTUAL_JOB_CODE,
D.EMP_HEALTH_STAUTS
)
VALUES (V.TRANSACTION_CODE,
V.TERMINATION_REASON_CODE,
V.TERMINATION_DATE,
V.SYS_DATE,
V.STEP_ID,
V.STEP_DATE,
V.SEX,
V.SDTE,
V.REMAINING_BUS_BALANCE,
V.REMAINING_ANNUAL_BALANCE,
V.RELIGION,
V.RANK_ID,
V.PERSON_ID,
V.NEXT_PROM_DATE,
V.NATIONAL_NO,
V.NATIONALITY_ID,
V.MINISTRY_HIRE_DATE,
V.LOCATION_ID,
V.JOB_ORG_NAME,
V.JOB_ORG_ID,
V.JOB_NO,
V.JOB_NAME,
V.JOB_CLASS_CODE,
V.ISACTIVE,
V.GOV_HIRE_DATE,
V.FIRST_GRADE_DT,
V.EMP_STATUS_CODE,
V.EMPLOYMENT_TYPE_ID,
V.EMPLOYEE_NUMBER,
V.EMPLOYEE_GRAND_NAME_AR,
V.EMPLOYEE_FIRST_NAME_AR,
V.EMPLOYEE_FATHER_NAME_AR,
V.EMPLOYEE_FAMILY_NAME_AR,
V.EMPLOYEE_GRAND_NAME_EN,
V.EMPLOYEE_FIRST_NAME_EN,
V.EMPLOYEE_FATHER_NAME_EN,
V.EMPLOYEE_FAMILY_NAME_EN,
V.EMAIL,
'Added',
V.BLOOD_TYPE,
V.BIRTH_DATE,
V.BASIC_SALARY,
V.ACTUAL_ORG_NAME,
V.ACTUAL_ORG_ID,
V.ACTUAL_JOB_CODE,
'Other');

COMMIT;
END;

-------------------- CREATED BY AMR EL KELANY ------UPDATED BY OMAR


FAYYAD------------------------------
--------------------------------------------------------------------------
PROCEDURE XXX_HR_SUBMIT_EMP_INFO_M (P_PERSON_ID NUMBER)
IS
V_EMPLOYEE_NUMBER VARCHAR2 (100);
V_JOB_NO VARCHAR2 (100);
V_JOB_CLASS_CODE VARCHAR2 (100);
V_JOB_NAME_CODE VARCHAR2 (100);
V_JOB_POSITION_CODE VARCHAR2 (100);
V_START_DATE VARCHAR2 (100);
V_END_DATE VARCHAR2 (100);
V_POS_ORG_ID VARCHAR2 (100);
V_ORG_NAME VARCHAR2 (200);
V_POSITION_STATUS VARCHAR2 (100);
V_EMP_TYPE VARCHAR2 (100);
V_RANK_CODE VARCHAR2 (100);
V_LOCATION_CODE VARCHAR2 (100);
V_TRANSACTION_CODE VARCHAR2 (100);
V_VACANT_DATE VARCHAR2 (100);
V_LAST_UPDATE_DATE VARCHAR2 (100);
V_STAUTS VARCHAR2 (100);
V_ERROR_MSG VARCHAR2 (100);
V_REQ_CONTEXT UTL_HTTP.REQUEST_CONTEXT_KEY;
SOAP_REQUEST CLOB; --VARCHAR2 (32767);
HTTP_REQ UTL_HTTP.REQ;
HTTP_RESP UTL_HTTP.RESP;
L_BLOB BLOB;
L_DEST_OFFSET NUMBER := 1;
L_SRC_OFFSET NUMBER := 1;
L_LANG_CONTEXT NUMBER := 0;
L_WARNING NUMBER;
T_HTTP_VERSION VARCHAR2 (10) := 'HTTP/1.1';
T_CONTENT_TYPE VARCHAR2 (50) := 'text/xml; charset=utf-8';
T_URL VARCHAR2 (100); --:= 'https://mcs-
jesb02.mcs.gov.sa/EltezamDataServices/services/EltezamDataService?wsdl';
X_CLOB CLOB;
L_BUFFER VARCHAR2 (32767);
X NUMBER;
l_offset NUMBER := 1;
l_amount NUMBER := 2000;
l_count NUMBER := 0;
V_CHECK_LENGTH NUMBER;
l_buffer2 VARCHAR2 (32767);
L_MAIN_DATA_VALIDATION NUMBER;
L_HR_ELTEZAM_EMPINFO_TB XXX_HR_ELTEZAM_EMPINFO_TB%ROWTYPE;
L_TERMINATION_TEXT VARCHAR2 (4000);
L_EMAIL_TEXT VARCHAR2 (4000);
L_PROMOTION_DATE VARCHAR2 (4000);
L_ENG_NAME VARCHAR2 (4000);
L_FAULTSTRING VARCHAR2 (4000);
L_ERROR VARCHAR2 (4000);
L_REQUEST_NUMBER VARCHAR2 (200);
L_ERROR_TEXT VARCHAR2 (4000);

CURSOR MAIN_DATA
IS
SELECT P_HR_ELTEZAM_EMP_INFO.EMPLOYEE_NUMBER,
P_HR_ELTEZAM_EMP_INFO.NATIONAL_NO,
P_HR_ELTEZAM_EMP_INFO.EMPLOYEE_FIRST_NAME_AR,
P_HR_ELTEZAM_EMP_INFO.EMPLOYEE_FATHER_NAME_AR,
P_HR_ELTEZAM_EMP_INFO.EMPLOYEE_GRAND_NAME_AR,
P_HR_ELTEZAM_EMP_INFO.EMPLOYEE_FAMILY_NAME_AR,
P_HR_ELTEZAM_EMP_INFO.EMPLOYEE_FIRST_NAME_EN,
P_HR_ELTEZAM_EMP_INFO.EMPLOYEE_FATHER_NAME_EN,
P_HR_ELTEZAM_EMP_INFO.EMPLOYEE_GRAND_NAME_EN,
P_HR_ELTEZAM_EMP_INFO.EMPLOYEE_FAMILY_NAME_EN,
/*TO_CHAR (P_HR_ELTEZAM_EMP_INFO.BIRTH_DATE,
'DD-MM-RRRR',
'NLS_CALENDAR=''Arabic Hijrah''')*/
P_HR_ELTEZAM_EMP_INFO.BIRTH_DATE BIRTH_DATE,
P_HR_ELTEZAM_EMP_INFO.SEX,
P_HR_ELTEZAM_EMP_INFO.NATIONALITY_ID,
P_HR_ELTEZAM_EMP_INFO.RELIGION,
P_HR_ELTEZAM_EMP_INFO.BLOOD_TYPE,
P_HR_ELTEZAM_EMP_INFO.EMAIL,
P_HR_ELTEZAM_EMP_INFO.EMP_STATUS_CODE,
P_HR_ELTEZAM_EMP_INFO.JOB_NO,
NVL (P_HR_ELTEZAM_EMP_INFO.JOB_CLASS_CODE, '99999')
JOB_CLASS_CODE,
NVL (P_HR_ELTEZAM_EMP_INFO.JOB_NAME, '000000000') JOB_NAME,
SUBSTR (P_HR_ELTEZAM_EMP_INFO.EMPLOYMENT_TYPE_ID, 1, 7)
EMPLOYMENT_TYPE_ID,
P_HR_ELTEZAM_EMP_INFO.RANK_ID,
P_HR_ELTEZAM_EMP_INFO.STEP_ID,
/*TO_CHAR (P_HR_ELTEZAM_EMP_INFO.STEP_DATE,
'DD-MM-RRRR',
'NLS_CALENDAR=''Arabic Hijrah''')*/
P_HR_ELTEZAM_EMP_INFO.STEP_DATE STEP_DATE,
/*TO_CHAR (P_HR_ELTEZAM_EMP_INFO.FIRST_GRADE_DT,
'DD-MM-RRRR',
'NLS_CALENDAR=''Arabic Hijrah''')*/
P_HR_ELTEZAM_EMP_INFO.FIRST_GRADE_DT FIRST_GRADE_DT,
P_HR_ELTEZAM_EMP_INFO.JOB_ORG_ID,
P_HR_ELTEZAM_EMP_INFO.JOB_ORG_NAME,
NVL (P_HR_ELTEZAM_EMP_INFO.BASIC_SALARY, 0) BASIC_SALARY,
P_HR_ELTEZAM_EMP_INFO.ACTUAL_ORG_ID,
P_HR_ELTEZAM_EMP_INFO.ACTUAL_ORG_NAME,
REPLACE (
REPLACE (P_HR_ELTEZAM_EMP_INFO.NEXT_PROM_DATE, '//', NULL),
'/',
'-')
NEXT_PROM_DATE,
/*TO_CHAR (P_HR_ELTEZAM_EMP_INFO.GOV_HIRE_DATE,
'DD-MM-RRRR',
'NLS_CALENDAR=''Arabic Hijrah''')*/
P_HR_ELTEZAM_EMP_INFO.GOV_HIRE_DATE GOV_HIRE_DATE,
P_HR_ELTEZAM_EMP_INFO.LOCATION_ID, --- location code
/*TO_CHAR (P_HR_ELTEZAM_EMP_INFO.MINISTRY_HIRE_DATE,
'DD-MM-RRRR',
'NLS_CALENDAR=''Arabic Hijrah''')*/
P_HR_ELTEZAM_EMP_INFO.MINISTRY_HIRE_DATE MINISTRY_HIRE_DATE,
TRUNC (P_HR_ELTEZAM_EMP_INFO.REMAINING_ANNUAL_BALANCE)
REMAINING_ANNUAL_BALANCE,
TRUNC (P_HR_ELTEZAM_EMP_INFO.REMAINING_BUS_BALANCE)
REMAINING_BUS_BALANCE,
P_HR_ELTEZAM_EMP_INFO.TRANSACTION_CODE,
DECODE (P_HR_ELTEZAM_EMP_INFO.ISACTIVE, 1, 'No', 'Yes')
ISACTIVE,
P_HR_ELTEZAM_EMP_INFO.TERMINATION_REASON_CODE,
/*TO_CHAR (P_HR_ELTEZAM_EMP_INFO.TERMINATION_DATE,
'DD-MM-RRRR',
'NLS_CALENDAR=''Arabic Hijrah''')*/
SUBSTR (P_HR_ELTEZAM_EMP_INFO.TERMINATION_DATE, 1, 8)
TERMINATION_DATE,
/*TO_CHAR (P_HR_ELTEZAM_EMP_INFO.SYS_DATE,
'DD-MM-RRRR',
'NLS_CALENDAR=''Arabic Hijrah''')*/
P_HR_ELTEZAM_EMP_INFO.SYS_DATE SYS_DATE,
P_HR_ELTEZAM_EMP_INFO.SDTE
FROM XXX_HR_ELTEZAM_EMP_INFO_V P_HR_ELTEZAM_EMP_INFO
WHERE 1 = 1
AND RECORD_STATUS IN ('Updated', 'Added')
AND (PERSON_ID = P_PERSON_ID OR P_PERSON_ID IS NULL);
BEGIN
COLLECT_WS_INFO ('ELTEZAM_EMPLOYEE_INFO');
T_URL := G_DOMAIN_NAME || G_SERVICE_NAME;

FOR L_HR_ELTEZAM_EMPINFO_TB IN MAIN_DATA


LOOP
BEGIN
BEGIN
DELETE FROM XXX_HR_ELTEZAM_STATUS_TB
WHERE 1 = 1
AND WS_NAME = 'EMP_INFO_WS'
AND EMPLOYEE_NO =
L_HR_ELTEZAM_EMPINFO_TB.EMPLOYEE_NUMBER;

COMMIT;
END;

L_ERROR_TEXT := NULL;

DBMS_OUTPUT.put_line ('T_URL ' || T_URL);

------------------- VALIDATION OF MISSING DATA RECORD


------------------
IF L_HR_ELTEZAM_EMPINFO_TB.RANK_ID IS NULL
THEN
L_ERROR_TEXT := 'Rank is Missing';
END IF;

IF L_HR_ELTEZAM_EMPINFO_TB.STEP_DATE IS NULL
THEN
L_ERROR_TEXT := 'Step Date is Missing';
END IF;

IF L_HR_ELTEZAM_EMPINFO_TB.FIRST_GRADE_DT IS NULL
THEN
L_ERROR_TEXT := 'First Grade Date is Missing';
END IF;

IF L_HR_ELTEZAM_EMPINFO_TB.EMPLOYMENT_TYPE_ID IS NULL
THEN
L_ERROR_TEXT := 'Employment Type is Missing';
END IF;

IF L_HR_ELTEZAM_EMPINFO_TB.JOB_CLASS_CODE IS NULL
THEN
L_ERROR_TEXT := 'Job Class Code is Missing';
END IF;

IF L_HR_ELTEZAM_EMPINFO_TB.JOB_NO IS NULL
THEN
L_ERROR_TEXT := 'Job Number is Missing';
END IF;

IF L_HR_ELTEZAM_EMPINFO_TB.LOCATION_ID IS NULL
THEN
L_ERROR_TEXT := 'Location is Missing';
END IF;

IF L_HR_ELTEZAM_EMPINFO_TB.TRANSACTION_CODE IS NULL
THEN
L_ERROR_TEXT := 'Transaction Code is Missing';
END IF;

IF L_HR_ELTEZAM_EMPINFO_TB.EMP_STATUS_CODE IS NULL
THEN
L_ERROR_TEXT := 'Employee Status Code is Missing';
END IF;

IF L_ERROR_TEXT IS NOT NULL


THEN
BEGIN
INSERT INTO XXX_HR_ELTEZAM_STATUS_TB (WS_NAME,
SUBMITION_DATE,
SOURCEAGENCY,
RESPONSE_BODY,
REQUEST_BODY,
REQUESTNO,
RAISEDBY,
ERRORTYPE,
ERRORTEXT,
ERRORCODE,
EMPLOYEE_NO)
VALUES ('EMP_INFO_WS',
SYSDATE,
NULL,
NULL,
NULL,
NULL,
NULL,
'Missing Data',
L_ERROR_TEXT,
'1404',
L_HR_ELTEZAM_EMPINFO_TB.EMPLOYEE_NUMBER);
EXCEPTION
WHEN OTHERS
THEN
NULL;
END;

L_MAIN_DATA_VALIDATION := -1;
ELSE
L_MAIN_DATA_VALIDATION := 1;
END IF;

IF L_MAIN_DATA_VALIDATION = 1
THEN
IF L_HR_ELTEZAM_EMPINFO_TB.TERMINATION_REASON_CODE IS NOT NULL
THEN
L_TERMINATION_TEXT :=
'<ver:TerminationInfo>
<ver:TerminationReasonCode>'
|| L_HR_ELTEZAM_EMPINFO_TB.TERMINATION_REASON_CODE
|| '</ver:TerminationReasonCode>
<ver:TerminationDate>'
|| L_HR_ELTEZAM_EMPINFO_TB.TERMINATION_DATE
|| '</ver:TerminationDate></ver:TerminationInfo>';
ELSE
L_TERMINATION_TEXT := NULL;
END IF;

IF L_HR_ELTEZAM_EMPINFO_TB.NEXT_PROM_DATE IS NOT NULL


THEN
L_PROMOTION_DATE :=
'<ver:NextPromotionDate>'
|| L_HR_ELTEZAM_EMPINFO_TB.NEXT_PROM_DATE
|| '</ver:NextPromotionDate>';
ELSE
L_PROMOTION_DATE := NULL;
END IF;

IF L_HR_ELTEZAM_EMPINFO_TB.EMPLOYEE_FIRST_NAME_EN IS NULL
OR L_HR_ELTEZAM_EMPINFO_TB.EMPLOYEE_FATHER_NAME_EN IS NULL
OR L_HR_ELTEZAM_EMPINFO_TB.EMPLOYEE_GRAND_NAME_EN IS NULL
OR L_HR_ELTEZAM_EMPINFO_TB.EMPLOYEE_FAMILY_NAME_EN IS NULL
THEN
L_ENG_NAME := NULL;
ELSIF L_HR_ELTEZAM_EMPINFO_TB.EMPLOYEE_FIRST_NAME_EN
IS NOT NULL
AND L_HR_ELTEZAM_EMPINFO_TB.EMPLOYEE_FATHER_NAME_EN
IS NOT NULL
AND L_HR_ELTEZAM_EMPINFO_TB.EMPLOYEE_GRAND_NAME_EN
IS NOT NULL
AND L_HR_ELTEZAM_EMPINFO_TB.EMPLOYEE_FAMILY_NAME_EN
IS NOT NULL
THEN
L_ENG_NAME :=
'<ver:PersonNameEn>'
|| '<ver:FirstName>'
|| L_HR_ELTEZAM_EMPINFO_TB.EMPLOYEE_FIRST_NAME_EN
|| '</ver:FirstName>
<ver:SecondName>'
|| L_HR_ELTEZAM_EMPINFO_TB.EMPLOYEE_FATHER_NAME_EN
|| '</ver:SecondName>
<ver:ThirdName>'
|| L_HR_ELTEZAM_EMPINFO_TB.EMPLOYEE_GRAND_NAME_EN
|| '</ver:ThirdName>
<ver:LastName>'
|| L_HR_ELTEZAM_EMPINFO_TB.EMPLOYEE_FAMILY_NAME_EN
|| '</ver:LastName>
</ver:PersonNameEn>';
END IF;

IF ( L_HR_ELTEZAM_EMPINFO_TB.EMAIL IS NULL
OR L_HR_ELTEZAM_EMPINFO_TB.EMAIL NOT LIKE '@')
THEN
L_EMAIL_TEXT := NULL;
ELSE
L_EMAIL_TEXT :=
'<ver:EmailAddress>'
|| L_HR_ELTEZAM_EMPINFO_TB.EMAIL
|| '</ver:EmailAddress>';
END IF;

SOAP_REQUEST :=
'<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:tem="http://tempuri.org/"
xmlns:ver="http://yefi.gov.sa/MCS/EltezamDataSchema/xml/schemas/version1.0"
xmlns:ver1="http://yefi.gov.sa/PersonProfileCommonTypes/xml/schemas/version2.0">
<soapenv:Header/>
<soapenv:Body>
<tem:SubmitEmployeeInfo>
<tem:employeeInfo>

<EmployeeInfo>
<ver:EmployeeID>'
|| L_HR_ELTEZAM_EMPINFO_TB.EMPLOYEE_NUMBER
|| '</ver:EmployeeID>
<ver:PersonalInfo>
<ver:PersonIdentifier>
<ver1:IqamaNumber>'
|| L_HR_ELTEZAM_EMPINFO_TB.NATIONAL_NO
|| '</ver1:IqamaNumber>
<ver1:NationalID>'
|| L_HR_ELTEZAM_EMPINFO_TB.NATIONAL_NO
|| '</ver1:NationalID>

</ver:PersonIdentifier>
<ver:PersonNameAr>
<ver:FirstName>'
|| L_HR_ELTEZAM_EMPINFO_TB.EMPLOYEE_FIRST_NAME_AR
|| '</ver:FirstName>
<ver:SecondName>'
|| L_HR_ELTEZAM_EMPINFO_TB.EMPLOYEE_FATHER_NAME_AR
|| '</ver:SecondName>
<ver:ThirdName>'
|| L_HR_ELTEZAM_EMPINFO_TB.EMPLOYEE_GRAND_NAME_AR
|| '</ver:ThirdName>
<ver:LastName>'
|| L_HR_ELTEZAM_EMPINFO_TB.EMPLOYEE_FAMILY_NAME_AR
|| '</ver:LastName>
</ver:PersonNameAr>
'
|| L_ENG_NAME
|| '
<ver:BirthDate>'
|| L_HR_ELTEZAM_EMPINFO_TB.BIRTH_DATE
|| '</ver:BirthDate>
<ver:Gender>'
|| L_HR_ELTEZAM_EMPINFO_TB.SEX
|| '</ver:Gender>
<ver:NationalityCode>'
|| L_HR_ELTEZAM_EMPINFO_TB.NATIONALITY_ID
|| '</ver:NationalityCode>
<ver:Religion>'
|| L_HR_ELTEZAM_EMPINFO_TB.RELIGION
|| '</ver:Religion>
<!--<ver:BloodType>?</ver:BloodType>
-->'
|| L_EMAIL_TEXT
|| '
<ver:MaritalStatus>Single</ver:MaritalStatus>
<ver:Healthstatus>Healthy</ver:Healthstatus>
</ver:PersonalInfo>
<!--Optional:-->
<ver:EmployeeStatusCode>'
|| L_HR_ELTEZAM_EMPINFO_TB.EMP_STATUS_CODE
|| '</ver:EmployeeStatusCode>
<ver:JobInfo>
<ver:JobNumber>'
|| L_HR_ELTEZAM_EMPINFO_TB.JOB_NO
|| '</ver:JobNumber>
<ver:JobClassCode>'
|| L_HR_ELTEZAM_EMPINFO_TB.JOB_CLASS_CODE
|| '</ver:JobClassCode>
<!--Optional:-->
<ver:JobNameCode>'
|| L_HR_ELTEZAM_EMPINFO_TB.JOB_NAME
|| '</ver:JobNameCode>
<!--Optional:-->
<ver:EmploymentTypeCode>'
|| L_HR_ELTEZAM_EMPINFO_TB.EMPLOYMENT_TYPE_ID
|| '</ver:EmploymentTypeCode>
<!--Optional:-->
<ver:RankCode>'
|| L_HR_ELTEZAM_EMPINFO_TB.RANK_ID
|| '</ver:RankCode>
<ver:StepID>'
|| L_HR_ELTEZAM_EMPINFO_TB.STEP_ID
|| '</ver:StepID>
<!--Optional:-->
<ver:StepDate>'
|| L_HR_ELTEZAM_EMPINFO_TB.STEP_DATE
|| '</ver:StepDate>
<!--Optional:-->
<ver:FirstGradeDate>'
|| L_HR_ELTEZAM_EMPINFO_TB.FIRST_GRADE_DT
|| '</ver:FirstGradeDate>
<!--Optional:-->
<ver:ActualJobNameCode>'
|| L_HR_ELTEZAM_EMPINFO_TB.JOB_NAME
|| '</ver:ActualJobNameCode>
<!--Optional:-->
<ver:JobOrganizationID>'
|| L_HR_ELTEZAM_EMPINFO_TB.JOB_ORG_ID
|| '</ver:JobOrganizationID>
<!--Optional:-->
<ver:JobOrganizationName>'
|| L_HR_ELTEZAM_EMPINFO_TB.JOB_ORG_NAME
|| '</ver:JobOrganizationName>
<ver:BasicSalary>'
|| L_HR_ELTEZAM_EMPINFO_TB.BASIC_SALARY
|| '</ver:BasicSalary>
</ver:JobInfo>
<!--Optional:-->
<ver:ActualOrganizationID>'
|| L_HR_ELTEZAM_EMPINFO_TB.ACTUAL_ORG_ID
|| '</ver:ActualOrganizationID>
<!--Optional:-->
<ver:ActualOrganizationName>'
|| L_HR_ELTEZAM_EMPINFO_TB.ACTUAL_ORG_NAME
|| '</ver:ActualOrganizationName>'
|| L_PROMOTION_DATE
|| '
<ver:GovernmentHireDate>'
|| L_HR_ELTEZAM_EMPINFO_TB.GOV_HIRE_DATE
|| '</ver:GovernmentHireDate>
<!--Optional:-->
<ver:LocationCode>'
|| L_HR_ELTEZAM_EMPINFO_TB.LOCATION_ID
|| '</ver:LocationCode>
<!--Optional:-->
<ver:MinistryHireDate>'
|| L_HR_ELTEZAM_EMPINFO_TB.MINISTRY_HIRE_DATE
|| '</ver:MinistryHireDate>
<ver:RemainingAnnualBalance>'
|| L_HR_ELTEZAM_EMPINFO_TB.REMAINING_ANNUAL_BALANCE
|| '</ver:RemainingAnnualBalance>
<ver:RemainingBusinessBalance>'
|| L_HR_ELTEZAM_EMPINFO_TB.REMAINING_BUS_BALANCE
|| '</ver:RemainingBusinessBalance>
<ver:TransactionCode>'
|| L_HR_ELTEZAM_EMPINFO_TB.TRANSACTION_CODE
|| '</ver:TransactionCode>
<ver:IsActive>'
|| L_HR_ELTEZAM_EMPINFO_TB.ISACTIVE
|| '</ver:IsActive>'
|| L_TERMINATION_TEXT
|| '
</EmployeeInfo>
<!--Optional:-->
<LastUpdateDate>'
|| L_HR_ELTEZAM_EMPINFO_TB.SYS_DATE
|| '</LastUpdateDate>
</tem:employeeInfo>
</tem:SubmitEmployeeInfo>
</soapenv:Body>
</soapenv:Envelope>';
L_DEST_OFFSET := 1;
L_SRC_OFFSET := 1;
L_LANG_CONTEXT := 0;
L_WARNING := NULL;
UTL_HTTP.SET_TRANSFER_TIMEOUT (60);
----- Wallet Information -------
V_REQ_CONTEXT :=
UTL_HTTP.CREATE_REQUEST_CONTEXT (
WALLET_PATH => G_WALLET_PATH,
WALLET_PASSWORD => G_WALLET_PASSWORD);
DBMS_OUTPUT.put_line ('WALLET_PATH ' || G_WALLET_PATH);
-- to handel arabic content
DBMS_LOB.CREATETEMPORARY (L_BLOB, FALSE, DBMS_LOB.CALL);
DBMS_LOB.CONVERTTOBLOB (
DEST_LOB => L_BLOB,
SRC_CLOB => soap_request,
AMOUNT => DBMS_LOB.LOBMAXSIZE,
DEST_OFFSET => L_DEST_OFFSET,
SRC_OFFSET => L_SRC_OFFSET,
BLOB_CSID => NLS_CHARSET_ID ('AL32UTF8'), --AR8ISO8859P6
AL32UTF8 AL16UTF16
LANG_CONTEXT => L_LANG_CONTEXT,
WARNING => L_WARNING);
HTTP_REQ :=
UTL_HTTP.BEGIN_REQUEST (URL => T_URL,
REQUEST_CONTEXT => V_REQ_CONTEXT,
METHOD => 'POST',
HTTP_VERSION => 'HTTP/1.1');

UTL_HTTP.SET_HEADER (HTTP_REQ, 'User-Agent', 'Mozilla/4.0');


UTL_HTTP.SET_HEADER (HTTP_REQ, 'Connection', 'Keep-Alive');
UTL_HTTP.SET_HEADER (HTTP_REQ,
'Content-Type',
'text/xml;charset=UTF-8');
--'text/xml;charset=UTF-8'); text/xml;encoding=UTF-8

UTL_HTTP.SET_HEADER (http_req,
'Content-Length',
DBMS_LOB.GETLENGTH (L_BLOB));

UTL_HTTP.set_header (
http_req,
'SOAPAction',
'"http://tempuri.org/IEltezamDataService/SubmitEmployeeInfo"');
--- CHANGE

V_CHECK_LENGTH := DBMS_LOB.GETLENGTH (L_BLOB);

IF V_CHECK_LENGTH > 32767


THEN
DBMS_OUTPUT.PUT_LINE ('LENGTH');
-- UTL_HTTP.SET_TRANSFER_TIMEOUT (999);
UTL_HTTP.SET_HEADER (HTTP_REQ,
'Trasfer-Encoding',
'chunked');
DBMS_LOB.OPEN (L_BLOB, DBMS_LOB.LOB_READWRITE);

BEGIN
WHILE l_offset < V_CHECK_LENGTH
LOOP
DBMS_LOB.READ (L_BLOB,
l_amount,
l_offset,
l_buffer2);
UTL_HTTP.WRITE_RAW (HTTP_REQ, l_buffer2);
l_offset := l_offset + l_amount;
END LOOP;
END;

DBMS_LOB.CLOSE (L_BLOB);
ELSE
DBMS_OUTPUT.PUT_LINE ('ELSE LENGTH');
UTL_HTTP.WRITE_TEXT (R => HTTP_REQ, DATA => SOAP_REQUEST);
END IF;

HTTP_RESP := UTL_HTTP.GET_RESPONSE (HTTP_REQ);


DBMS_LOB.CREATETEMPORARY (X_CLOB, FALSE);
DBMS_LOB.OPEN (X_CLOB, DBMS_LOB.LOB_READWRITE);

BEGIN
LOOP
UTL_HTTP.READ_TEXT (HTTP_RESP, L_BUFFER);
DBMS_LOB.WRITEAPPEND (X_CLOB,
LENGTH (L_BUFFER),
L_BUFFER);
END LOOP;
EXCEPTION
WHEN OTHERS
THEN
IF SQLCODE <> -29266
THEN
RAISE;
END IF;
END;

DBMS_OUTPUT.PUT_LINE (
'Response Status: '
|| HTTP_RESP.STATUS_CODE
|| ' '
|| HTTP_RESP.REASON_PHRASE);

IF (HTTP_RESP.STATUS_CODE = 200)
THEN
BEGIN
SELECT REQUESTNUMBER
INTO L_REQUEST_NUMBER
FROM (SELECT XMLTYPE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (

REGEXP_REPLACE (
(X_CLOB),

'http://schemas.xmlsoap.org/soap/envelope/',
''),

'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"',
''),

'xmlns:xsd="http://www.w3.org/2001/XMLSchema"',
''),

'xmlns="http://tempuri.org/"',
''),

'xmlns="http://yefi.gov.sa/MCS/EltezamDataSchema/xml/schemas/version1.0"',
''),
'xmlns=""',
''),
's:',
''),
'xmlns=""',
''))
XMLT
FROM DUAL) XX,
XMLTABLE (
'Envelope/Body
/SubmitEmployeeInfoResponse/SubmitEmployeeInfoResult/submitEmployeeInfoResponseDeta
ilObject'
PASSING XX.XMLT
COLUMNS REQUESTNUMBER VARCHAR2 (400)
PATH
'RequestNumber');

INSERT
INTO XXCUSTOM.XXX_HR_ELTEZAM_STATUS_TB (WS_NAME,
SUBMITION_DATE,
SOURCEAGENCY,
RESPONSE_BODY,
REQUEST_BODY,
REQUESTNO,
RAISEDBY,
ERRORTYPE,
ERRORTEXT,
ERRORCODE,
EMPLOYEE_NO)
VALUES ('EMP_INFO_WS',
SYSDATE,
NULL,
X_CLOB,
SOAP_REQUEST,
L_REQUEST_NUMBER,
NULL,
NULL,
NULL,
HTTP_RESP.STATUS_CODE,
L_HR_ELTEZAM_EMPINFO_TB.EMPLOYEE_NUMBER);

UPDATE XXX_HR_INT_EMPLOYEE_TB
SET RECORD_STATUS = 'Transferred'
WHERE 1 = 1
AND EMPLOYEE_NUMBER =
L_HR_ELTEZAM_EMPINFO_TB.EMPLOYEE_NUMBER;

COMMIT;
EXCEPTION
WHEN OTHERS
THEN
BEGIN
L_REQUEST_NUMBER := NULL;

SELECT FAULTSTRING || ' - ' || Code


INTO L_FAULTSTRING
FROM (SELECT XMLTYPE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE
(

REGEXP_REPLACE (

REGEXP_REPLACE (

REGEXP_REPLACE (

(X_CLOB),

'http://schemas.xmlsoap.org/soap/envelope/',

''),

'xmlns="http://tempuri.org/"',
''),

'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"',
''),

'xmlns:xsd="http://www.w3.org/2001/XMLSchema"',
''),
'
xmlns="http://yefi.gov.sa/YEFIErrorStructure/xml/schemas/version2.3"',
''),
'xmlns=""',
''),
's:',
''),
'xmlns=""',
''),

'xmlns="http://yefi.gov.sa/YEFIErrorStructure/xml/schemas/version2.3"',
''))
XMLT
FROM DUAL) XX,
XMLTABLE (
'Envelope/Body
/SubmitEmployeeInfoResponse/SubmitEmployeeInfoResult/ServiceError'
PASSING XX.XMLT
COLUMNS FAULTSTRING VARCHAR2 (4000)
PATH
'ErrorText',
Code VARCHAR2 (4000)
PATH 'Code');
EXCEPTION
WHEN OTHERS
THEN
NULL;
END;

L_ERROR := SQLERRM;

BEGIN
INSERT
INTO XXCUSTOM.XXX_HR_ELTEZAM_STATUS_TB (
WS_NAME,
SUBMITION_DATE,
SOURCEAGENCY,
RESPONSE_BODY,
REQUEST_BODY,
REQUESTNO,
RAISEDBY,
ERRORTYPE,
ERRORTEXT,
ERRORCODE,
EMPLOYEE_NO)
VALUES ('EMP_INFO_WS',
SYSDATE,
NULL,
X_CLOB,
SOAP_REQUEST,
L_REQUEST_NUMBER,
NULL,
L_FAULTSTRING, --ERRORTYPE
L_FAULTSTRING, --ERRORTEXT
HTTP_RESP.STATUS_CODE,
L_HR_ELTEZAM_EMPINFO_TB.EMPLOYEE_NUMBER);
EXCEPTION
WHEN OTHERS
THEN
NULL;
END;
END;
ELSE ----- In case of failure
BEGIN
L_REQUEST_NUMBER := NULL;

BEGIN
SELECT FAULTSTRING
INTO L_FAULTSTRING
FROM (SELECT XMLTYPE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE
(

REGEXP_REPLACE (
(X_CLOB),

'http://schemas.xmlsoap.org/soap/envelope/',
''),

'xmlns="http://tempuri.org/"',
''),

'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"',
''),

'xmlns:xsd="http://www.w3.org/2001/XMLSchema"',
''),
'
xmlns="http://yefi.gov.sa/YEFIErrorStructure/xml/schemas/version2.3"',
''),
'xmlns=""',
''),
's:',
''),
'xmlns=""',
''))
XMLT
FROM DUAL) XX,
XMLTABLE (
'Envelope/Body /Fault'
PASSING XX.XMLT
COLUMNS FAULTSTRING VARCHAR2 (1000)
PATH
'faultstring');
EXCEPTION
WHEN OTHERS
THEN
NULL;
END;

INSERT
INTO XXCUSTOM.XXX_HR_ELTEZAM_STATUS_TB (WS_NAME,
SUBMITION_DATE,
SOURCEAGENCY,
RESPONSE_BODY,
REQUEST_BODY,
REQUESTNO,
RAISEDBY,
ERRORTYPE,
ERRORTEXT,
ERRORCODE,
EMPLOYEE_NO)
VALUES ('EMP_INFO_WS',
SYSDATE,
NULL,
X_CLOB,
SOAP_REQUEST,
L_REQUEST_NUMBER,
NULL,
L_FAULTSTRING, --ERRORTYPE
L_FAULTSTRING, --ERRORTEXT
HTTP_RESP.STATUS_CODE,
L_HR_ELTEZAM_EMPINFO_TB.EMPLOYEE_NUMBER);

COMMIT;
EXCEPTION
WHEN OTHERS
THEN
L_ERROR := SQLERRM;

BEGIN
INSERT
INTO XXX_HR_ELTEZAM_STATUS_TB (WS_NAME,
SUBMITION_DATE,
SOURCEAGENCY,
RESPONSE_BODY,
REQUEST_BODY,
REQUESTNO,
RAISEDBY,
ERRORTYPE,
ERRORTEXT,
ERRORCODE,
EMPLOYEE_NO)
VALUES (
'EMP_INFO_WS',
SYSDATE,
NULL,
X_CLOB,
SOAP_REQUEST,
L_REQUEST_NUMBER,
NULL,
'Internal Error in Failure Response Query
XML', --ERRORTYPE
L_ERROR, --ERRORTEXT
HTTP_RESP.STATUS_CODE,
L_HR_ELTEZAM_EMPINFO_TB.EMPLOYEE_NUMBER);

COMMIT;
EXCEPTION
WHEN OTHERS
THEN
NULL;
END;
END;
END IF;

UTL_HTTP.END_RESPONSE (HTTP_RESP);
UTL_HTTP.DESTROY_REQUEST_CONTEXT (V_REQ_CONTEXT);
END IF;

COMMIT;
EXCEPTION
WHEN UTL_HTTP.END_OF_BODY
THEN
UTL_HTTP.END_RESPONSE (HTTP_RESP);
UTL_HTTP.DESTROY_REQUEST_CONTEXT (V_REQ_CONTEXT);
WHEN UTL_HTTP.TOO_MANY_REQUESTS
THEN
RAISE_APPLICATION_ERROR (
-20001,
'Request failed exception:'
|| UTL_HTTP.GET_DETAILED_SQLERRM);
WHEN OTHERS
THEN
NULL;
RAISE_APPLICATION_ERROR (
-20002,
'Request failed exception:'
|| UTL_HTTP.GET_DETAILED_SQLERRM);
END;
END LOOP;
EXCEPTION
WHEN OTHERS
THEN
NULL;
END XXX_HR_SUBMIT_EMP_INFO_M;

-------------- CREATED BY AMR EL KELANY XXX_HR_PAYSLIP ----UPDATED BY OMAR


FAYYAD------------------

PROCEDURE XXX_HR_PAYSLIP (
ERRBUF OUT NOCOPY VARCHAR2,
RETCODE OUT NOCOPY NUMBER,
P_PERSON_ID XXX_HR_ELTEZAM_PAYSLIP_TB.PERSON_ID%TYPE,
P_RUN_RESULT_ID XXX_HR_ELTEZAM_PAYSLIP_TB.RUN_RESULT_ID
%TYPE,
P_CONNECTION_TYPE VARCHAR2)
IS
V_REQ_CONTEXT UTL_HTTP.REQUEST_CONTEXT_KEY;
SOAP_REQUEST VARCHAR2 (32767);
HTTP_REQ UTL_HTTP.REQ;
HTTP_RESP UTL_HTTP.RESP;
L_BLOB BLOB;
L_DEST_OFFSET NUMBER := 1;
L_SRC_OFFSET NUMBER := 1;
L_LANG_CONTEXT NUMBER := 0;
L_WARNING NUMBER;
T_HTTP_VERSION VARCHAR2 (10) := 'HTTP/1.1';
T_CONTENT_TYPE VARCHAR2 (50) := 'text/xml; charset=utf-8';
T_URL VARCHAR2 (100);
X_CLOB CLOB;
L_BUFFER VARCHAR2 (32767);
HTTP_RESP_REQ_NUMBER VARCHAR2 (400);
HTTP_RESP_RAISEDBY VARCHAR2 (400);
HTTP_RESP_SOURCE VARCHAR2 (400);
HTTP_RESP_CODE VARCHAR2 (400);
HTTP_ERRORTYPE VARCHAR2 (400);
TTP_ERRORTEXT VARCHAR2 (4000);
L_ERROR VARCHAR2 (4000);
L_RUN NUMBER;
V_CHECK_LENGTH NUMBER;
L_OFFSET NUMBER := 1;
L_AMOUNT NUMBER := 2000;
L_BUFFER2 VARCHAR2 (32767);

CURSOR MAIN_DATA
IS
SELECT *
FROM XXX_HR_ELTEZAM_PAYSLIP_TB
WHERE 1 = 1
AND REQUEST_NUMBER IS NULL
AND (PERSON_ID = P_PERSON_ID OR P_PERSON_ID IS NULL)
AND ( RUN_RESULT_ID = P_RUN_RESULT_ID
OR P_RUN_RESULT_ID IS NULL);
BEGIN
COLLECT_WS_INFO ('ELTEZAM_PAYSLIP_INFO');

T_URL := G_DOMAIN_NAME || G_SERVICE_NAME;

DBMS_OUTPUT.put_line ('T_URL ' || T_URL);

MERGE INTO XXX_HR_ELTEZAM_PAYSLIP_TB D


USING (SELECT *
FROM XXX_HR_INT_SALARIES_VIEW
WHERE 1 = 1
AND (PERSON_ID = P_PERSON_ID OR P_PERSON_ID IS NULL))
V
ON (D.RUN_RESULT_ID = V.RUN_RESULT_ID)
WHEN MATCHED
THEN
UPDATE SET
D.RANKCODE = V.RANKCODE,
D.PERSON_ID = V.PERSON_ID,
D.PERSONIDENTIFIER = V.PERSONIDENTIFIER,
D.PAYROLL_ID = V.PAYROLL_ID,
D.PAIDDATE = V.PAIDDATE,
D.NETPAY = V.NETPAY,
D.HIJRIYEAR = V.HIJRIYEAR,
D.HIJRIMONTH = V.HIJRIMONTH,
D.CREATION_DATE = SYSDATE,
D.GREGORIANYEAR = V.GREGORIANYEAR,
D.GREGORIANMONTH = V.GREGORIANMONTH,
D.EMPLOYMENTTYPECODE = V.EMPLOYMENTTYPECODE,
D.EMPLOYEENAME = V.EMPLOYEENAME,
D.EMPLOYEEID = V.EMPLOYEEID,
D.ELEMENTCODE = V.ELEMENTCODE,
D.ELEMENTCLASSIFICATION = V.ELEMENTCLASSIFICATION,
D.CONSOLIDATIONSETID = V.CONSOLIDATIONSETID,
D.ASSIGNMENT_ID = V.ASSIGNMENT_ID,
D.AMOUNT = V.AMOUNT,
D.REQUEST_NUMBER = NULL
WHERE 1 = 1
AND ( ( D.RANKCODE <> V.RANKCODE
OR ( D.RANKCODE IS NULL
AND V.RANKCODE IS NOT NULL)
OR ( V.RANKCODE IS NULL
AND D.RANKCODE IS NOT NULL))
OR ( D.PERSON_ID <> V.PERSON_ID
OR ( D.PERSON_ID IS NULL
AND V.PERSON_ID IS NOT NULL)
OR ( V.PERSON_ID IS NULL
AND D.PERSON_ID IS NOT NULL))
OR ( D.PERSONIDENTIFIER <> V.PERSONIDENTIFIER
OR ( D.PERSONIDENTIFIER IS NULL
AND V.PERSONIDENTIFIER IS NOT NULL)
OR ( V.PERSONIDENTIFIER IS NULL
AND D.PERSONIDENTIFIER IS NOT NULL))
OR ( D.PAYROLL_ID <> V.PAYROLL_ID
OR ( D.PAYROLL_ID IS NULL
AND V.PAYROLL_ID IS NOT NULL)
OR ( V.PAYROLL_ID IS NULL
AND D.PAYROLL_ID IS NOT NULL))
OR ( D.PAIDDATE <> V.PAIDDATE
OR ( D.PAIDDATE IS NULL
AND V.PAIDDATE IS NOT NULL)
OR ( V.PAIDDATE IS NULL
AND D.PAIDDATE IS NOT NULL))
OR ( D.NETPAY <> V.NETPAY
OR (D.NETPAY IS NULL AND V.NETPAY IS NOT NULL)
OR (V.NETPAY IS NULL AND D.NETPAY IS NOT NULL))
OR ( D.HIJRIYEAR <> V.HIJRIYEAR
OR ( D.HIJRIYEAR IS NULL
AND V.HIJRIYEAR IS NOT NULL)
OR ( V.HIJRIYEAR IS NULL
AND D.HIJRIYEAR IS NOT NULL))
OR ( D.HIJRIMONTH <> V.HIJRIMONTH
OR ( D.HIJRIMONTH IS NULL
AND V.HIJRIMONTH IS NOT NULL)
OR ( V.HIJRIMONTH IS NULL
AND D.HIJRIMONTH IS NOT NULL))
OR ( D.GREGORIANYEAR <> V.GREGORIANYEAR
OR ( D.GREGORIANYEAR IS NULL
AND V.GREGORIANYEAR IS NOT NULL)
OR ( V.GREGORIANYEAR IS NULL
AND D.GREGORIANYEAR IS NOT NULL))
OR ( D.GREGORIANMONTH <> V.GREGORIANMONTH
OR ( D.GREGORIANMONTH IS NULL
AND V.GREGORIANMONTH IS NOT NULL)
OR ( V.GREGORIANMONTH IS NULL
AND D.GREGORIANMONTH IS NOT NULL))
OR ( D.EMPLOYMENTTYPECODE <>
V.EMPLOYMENTTYPECODE
OR ( D.EMPLOYMENTTYPECODE IS NULL
AND V.EMPLOYMENTTYPECODE IS NOT NULL)
OR ( V.EMPLOYMENTTYPECODE IS NULL
AND D.EMPLOYMENTTYPECODE IS NOT NULL))
OR ( D.EMPLOYEENAME <> V.EMPLOYEENAME
OR ( D.EMPLOYEENAME IS NULL
AND V.EMPLOYEENAME IS NOT NULL)
OR ( V.EMPLOYEENAME IS NULL
AND D.EMPLOYEENAME IS NOT NULL))
OR ( D.EMPLOYEEID <> V.EMPLOYEEID
OR ( D.EMPLOYEEID IS NULL
AND V.EMPLOYEEID IS NOT NULL)
OR ( V.EMPLOYEEID IS NULL
AND D.EMPLOYEEID IS NOT NULL))
OR ( D.ELEMENTCODE <> V.ELEMENTCODE
OR ( D.ELEMENTCODE IS NULL
AND V.ELEMENTCODE IS NOT NULL)
OR ( V.ELEMENTCODE IS NULL
AND D.ELEMENTCODE IS NOT NULL))
OR ( D.ELEMENTCLASSIFICATION <>
V.ELEMENTCLASSIFICATION
OR ( D.ELEMENTCLASSIFICATION IS NULL
AND V.ELEMENTCLASSIFICATION IS NOT NULL)
OR ( V.ELEMENTCLASSIFICATION IS NULL
AND D.ELEMENTCLASSIFICATION IS NOT NULL))
OR ( D.CONSOLIDATIONSETID <>
V.CONSOLIDATIONSETID
OR ( D.CONSOLIDATIONSETID IS NULL
AND V.CONSOLIDATIONSETID IS NOT NULL)
OR ( V.CONSOLIDATIONSETID IS NULL
AND D.CONSOLIDATIONSETID IS NOT NULL))
OR ( D.ASSIGNMENT_ID <> V.ASSIGNMENT_ID
OR ( D.ASSIGNMENT_ID IS NULL
AND V.ASSIGNMENT_ID IS NOT NULL)
OR ( V.ASSIGNMENT_ID IS NULL
AND D.ASSIGNMENT_ID IS NOT NULL))
OR ( D.AMOUNT <> V.AMOUNT
OR (D.AMOUNT IS NULL AND V.AMOUNT IS NOT NULL)
OR (V.AMOUNT IS NULL AND D.AMOUNT IS NOT NULL)))
WHEN NOT MATCHED
THEN
INSERT (STEPID,
RUN_RESULT_ID,
RESPONSE_BODY,
REQUEST_NUMBER,
REQUEST_BODY,
RANKCODE,
RAISEDBY,
PERSON_ID,
PERSONIDENTIFIER,
PAYROLL_ID,
PAIDDATE,
NETPAY,
HIJRIYEAR,
HIJRIMONTH,
GREGORIANYEAR,
GREGORIANMONTH,
ERRORTYPE,
ERRORTEXT,
ERRORCODE,
EMPLOYMENTTYPECODE,
EMPLOYEENAME,
EMPLOYEEID,
ELEMENTCODE,
ELEMENTCLASSIFICATION,
CREATION_DATE,
CONSOLIDATIONSETID,
ASSIGNMENT_ID,
AMOUNT)
VALUES (V.STEPID,
V.RUN_RESULT_ID,
NULL,
NULL,
NULL,
V.RANKCODE,
NULL,
V.PERSON_ID,
V.PERSONIDENTIFIER,
V.PAYROLL_ID,
V.PAIDDATE,
V.NETPAY,
V.HIJRIYEAR,
V.HIJRIMONTH,
V.GREGORIANYEAR,
V.GREGORIANMONTH,
NULL,
NULL,
NULL,
V.EMPLOYMENTTYPECODE,
V.EMPLOYEENAME,
V.EMPLOYEEID,
V.ELEMENTCODE,
V.ELEMENTCLASSIFICATION,
SYSDATE,
V.CONSOLIDATIONSETID,
V.ASSIGNMENT_ID,
V.AMOUNT);

COMMIT;

IF P_CONNECTION_TYPE = 'WEB_SERVICE'
THEN
FOR I IN MAIN_DATA
LOOP
SOAP_REQUEST :=
'<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:tem="http://tempuri.org/"
xmlns:ver="http://yefi.gov.sa/PersonProfileCommonTypes/xml/schemas/version2.0"
xmlns:ver1="http://yefi.gov.sa/MCS/EltezamDataSchema/xml/schemas/version1.0">
<soapenv:Header/>
<soapenv:Body>
<tem:SubmitEmployeePayslipInfo>
<!--Optional:-->
<tem:employeePayslipInfo>
<!--Optional:-->
<EmployeeID>'
|| I.EMPLOYEEID
|| '</EmployeeID>
<!--Optional:-->
<PersonIdentifier>
<!--You have a CHOICE of the next 2 items at this level-->
<!--Optional:-->
<ver:IqamaNumber>'
|| I.PERSONIDENTIFIER
|| '</ver:IqamaNumber>
<!--Optional:-->
<ver:NationalID>'
|| I.PERSONIDENTIFIER
|| '</ver:NationalID>
</PersonIdentifier>
<!--Optional:-->
<EmployeeName>'
|| I.EMPLOYEENAME
|| '</EmployeeName>
<!--Optional:-->
<EmployeeJobInfo>
<!--Optional:-->
<ver1:EmploymentTypeCode>'
|| I.EMPLOYMENTTYPECODE
|| '</ver1:EmploymentTypeCode>
<!--Optional:-->
<ver1:RankCode>'
|| I.RANKCODE
|| '</ver1:RankCode>
<ver1:StepID>'
|| I.StepID
|| '</ver1:StepID>
</EmployeeJobInfo>
<!--Optional:-->
<PayslipList>
<!--Zero or more repetitions:-->
<ver1:Payslip>
<!--Optional:-->
<ver1:ConsolidationSetID>'
|| I.CONSOLIDATIONSETID
|| '</ver1:ConsolidationSetID>
<!--Optional:-->
<ver1:ElementCode>'
|| I.ELEMENTCODE
|| '</ver1:ElementCode>
<ver1:Amount>'
|| I.AMOUNT
|| '</ver1:Amount>
<ver1:ElementClassification>'
|| I.ELEMENTCLASSIFICATION
|| '</ver1:ElementClassification>
</ver1:Payslip>
</PayslipList>
<NetPay>'
|| I.NETPAY
|| '</NetPay>
<!--Optional:-->
<HijriMonth>'
|| I.HIJRIMONTH
|| '</HijriMonth>
<!--Optional:-->
<GregorianMonth>'
|| I.GREGORIANMONTH
|| '</GregorianMonth>
<!--Optional:-->
<HijriYear>'
|| I.HIJRIYEAR
|| '</HijriYear>
<!--Optional:-->
<GregorianYear>'
|| I.GREGORIANYEAR
|| '</GregorianYear>
<!--Optional:-->
<PaidDate>'
|| I.PAIDDATE
|| '</PaidDate>
</tem:employeePayslipInfo>
</tem:SubmitEmployeePayslipInfo>
</soapenv:Body>
</soapenv:Envelope>';

L_DEST_OFFSET := 1;
L_SRC_OFFSET := 1;
L_LANG_CONTEXT := 0;
L_WARNING := NULL;
DBMS_OUTPUT.put_line (TO_CHAR (SYSDATE, 'DD/MM/YYYY HH24:MI:SS'));
DBMS_OUTPUT.put_line (
L_DEST_OFFSET
|| ','
|| L_SRC_OFFSET
|| ','
|| L_LANG_CONTEXT
|| ','
|| L_WARNING);

UTL_HTTP.SET_TRANSFER_TIMEOUT (60);
----- Wallet Information -------
V_REQ_CONTEXT :=
UTL_HTTP.CREATE_REQUEST_CONTEXT (
WALLET_PATH => G_WALLET_PATH,
WALLET_PASSWORD => G_WALLET_PASSWORD);

---------------------- arabic------------------------------
DBMS_LOB.CREATETEMPORARY (L_BLOB, FALSE, DBMS_LOB.CALL);
DBMS_LOB.CONVERTTOBLOB (
DEST_LOB => L_BLOB,
SRC_CLOB => SOAP_REQUEST,
AMOUNT => DBMS_LOB.LOBMAXSIZE,
DEST_OFFSET => L_DEST_OFFSET,
SRC_OFFSET => L_SRC_OFFSET,
BLOB_CSID => NLS_CHARSET_ID ('AL32UTF8'), --AR8ISO8859P6
AL32UTF8 AL16UTF16
LANG_CONTEXT => L_LANG_CONTEXT,
WARNING => L_WARNING);
----------------------end arabic--------------------------
HTTP_REQ :=
UTL_HTTP.BEGIN_REQUEST (URL => T_URL,
REQUEST_CONTEXT => V_REQ_CONTEXT,
METHOD => 'POST',
HTTP_VERSION => 'HTTP/1.1');

DBMS_OUTPUT.put_line (TO_CHAR (SYSDATE, 'DD/MM/YYYY HH24:MI:SS'));


UTL_HTTP.SET_HEADER (HTTP_REQ, 'User-Agent', 'Mozilla/4.0');
UTL_HTTP.SET_HEADER (HTTP_REQ, 'Connection', 'Keep-Alive');
-------------------- arabic------------------------------
UTL_HTTP.SET_HEADER (HTTP_REQ,
'Content-Type',
'text/xml;charset=UTF-8');

UTL_HTTP.SET_HEADER (http_req,
'Content-Length',
DBMS_LOB.GETLENGTH (L_BLOB));

------------------end arabic--------------------------
UTL_HTTP.SET_HEADER (
HTTP_REQ,
'SOAPAction',

'"http://tempuri.org/IEltezamDataService/SubmitEmployeePayslipInfo"');

-------------------- arabic------------------------------
IF V_CHECK_LENGTH > 32767
THEN
UTL_HTTP.SET_TRANSFER_TIMEOUT (999);
UTL_HTTP.SET_HEADER (HTTP_REQ, 'Trasfer-Encoding', 'chunked');
DBMS_LOB.OPEN (L_BLOB, DBMS_LOB.LOB_READWRITE);

BEGIN
WHILE L_OFFSET < V_CHECK_LENGTH
LOOP
DBMS_LOB.READ (L_BLOB,
L_AMOUNT,
L_OFFSET,
L_BUFFER2);
UTL_HTTP.WRITE_RAW (HTTP_REQ, L_BUFFER2);
L_OFFSET := L_OFFSET + L_AMOUNT;
END LOOP;
END;

DBMS_LOB.CLOSE (L_BLOB);
ELSE
UTL_HTTP.WRITE_TEXT (R => HTTP_REQ, DATA => SOAP_REQUEST);
END IF;

------------------end arabic--------------------------

HTTP_RESP := UTL_HTTP.GET_RESPONSE (HTTP_REQ);

DBMS_LOB.CREATETEMPORARY (X_CLOB, FALSE);


DBMS_LOB.OPEN (X_CLOB, DBMS_LOB.LOB_READWRITE);

BEGIN
LOOP
UTL_HTTP.READ_TEXT (HTTP_RESP, L_BUFFER);
DBMS_LOB.WRITEAPPEND (X_CLOB, LENGTH (L_BUFFER), L_BUFFER);
END LOOP;
EXCEPTION
WHEN OTHERS
THEN
IF SQLCODE <> -29266
THEN
RAISE;
END IF;
END;

L_RUN := I.RUN_RESULT_ID;
DBMS_OUTPUT.put_line (L_RUN);

IF (HTTP_RESP.STATUS_CODE = 200)
THEN
BEGIN
SELECT REQUESTNUMBER
INTO HTTP_RESP_REQ_NUMBER
FROM (SELECT XMLTYPE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
(X_CLOB),

'http://schemas.xmlsoap.org/soap/envelope/',
''),

'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"',
''),

'xmlns:xsd="http://www.w3.org/2001/XMLSchema"',
''),

'xmlns="http://tempuri.org/"',
''),

'xmlns="http://yefi.gov.sa/MCS/EltezamDataSchema/xml/schemas/version1.0"',
''),
'xmlns=""',
''),
's:',
''),
'xmlns=""',
''))
XMLT
FROM DUAL) XX,
XMLTABLE (
'Envelope/Body
/SubmitEmployeePayslipInfoResponse/SubmitEmployeePayslipInfoResult/
submitEmployeePayslipInfoResponseDetailObject'
PASSING XX.XMLT
COLUMNS REQUESTNUMBER VARCHAR2 (400)
PATH
'RequestNumber');

UPDATE XXX_HR_ELTEZAM_PAYSLIP_TB
SET REQUEST_BODY = SOAP_REQUEST,
RESPONSE_BODY = X_CLOB,
ERRORTYPE = NULL,
ERRORTEXT = NULL,
ERRORCODE = HTTP_RESP.STATUS_CODE,
REQUEST_NUMBER = HTTP_RESP_REQ_NUMBER,
CREATION_DATE = SYSDATE
WHERE 1 = 1 AND RUN_RESULT_ID = I.RUN_RESULT_ID;
EXCEPTION
WHEN OTHERS
THEN
SELECT FAULTSTRING || ' - ' || Code
INTO TTP_ERRORTEXT
FROM (SELECT XMLTYPE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE
(

REGEXP_REPLACE (
(X_CLOB),

'http://schemas.xmlsoap.org/soap/envelope/',
''),

'xmlns="http://tempuri.org/"',
''),

'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"',
''),

'xmlns:xsd="http://www.w3.org/2001/XMLSchema"',
''),
'
xmlns="http://yefi.gov.sa/YEFIErrorStructure/xml/schemas/version2.3"',
''),
'xmlns=""',
''),
's:',
''),
'xmlns=""',
''),

'xmlns="http://yefi.gov.sa/YEFIErrorStructure/xml/schemas/version2.3"',
''))
XMLT
FROM DUAL) XX,
XMLTABLE (
'Envelope/Body
/SubmitEmployeePayslipInfoResponse/SubmitEmployeePayslipInfoResult/ServiceError'
PASSING XX.XMLT
COLUMNS FAULTSTRING VARCHAR2 (4000)
PATH 'ErrorText',
Code VARCHAR2 (4000)
PATH 'Code');

L_ERROR := SQLERRM;

UPDATE XXX_HR_ELTEZAM_PAYSLIP_TB
SET REQUEST_BODY = SOAP_REQUEST,
RESPONSE_BODY = X_CLOB,
ERRORTYPE = NULL,
ERRORTEXT = TTP_ERRORTEXT,
ERRORCODE = HTTP_RESP.STATUS_CODE,
CREATION_DATE = SYSDATE
WHERE 1 = 1 AND RUN_RESULT_ID = I.RUN_RESULT_ID;
END;
ELSE
BEGIN
SELECT FAULTSTRING
INTO TTP_ERRORTEXT
FROM (SELECT XMLTYPE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
(X_CLOB),

'http://schemas.xmlsoap.org/soap/envelope/',
''),

'xmlns="http://tempuri.org/"',
''),

'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"',
''),

'xmlns:xsd="http://www.w3.org/2001/XMLSchema"',
''),
'
xmlns="http://yefi.gov.sa/YEFIErrorStructure/xml/schemas/version2.3"',
''),
'xmlns=""',
''),
's:',
''),
'xmlns=""',
''))
XMLT
FROM DUAL) XX,
XMLTABLE (
'Envelope/Body /Fault'
PASSING XX.XMLT
COLUMNS FAULTSTRING VARCHAR2 (1000)
PATH 'faultstring');

UPDATE XXX_HR_ELTEZAM_PAYSLIP_TB
SET REQUEST_BODY = SOAP_REQUEST,
RESPONSE_BODY = X_CLOB,
ERRORTYPE = NULL,
ERRORTEXT = TTP_ERRORTEXT,
ERRORCODE = HTTP_RESP.STATUS_CODE,
REQUEST_NUMBER = NULL,
CREATION_DATE = SYSDATE
WHERE 1 = 1 AND RUN_RESULT_ID = I.RUN_RESULT_ID;
EXCEPTION
WHEN OTHERS
THEN
L_ERROR := SQLERRM;

UPDATE XXX_HR_ELTEZAM_PAYSLIP_TB
SET REQUEST_BODY = SOAP_REQUEST,
RESPONSE_BODY = X_CLOB,
ERRORTYPE =
'Internal Error in Failure Response Query XML',
ERRORTEXT = L_ERROR,
ERRORCODE = HTTP_RESP.STATUS_CODE,
CREATION_DATE = SYSDATE
WHERE 1 = 1 AND RUN_RESULT_ID = I.RUN_RESULT_ID;
END;
END IF;

UTL_HTTP.END_RESPONSE (HTTP_RESP);
UTL_HTTP.DESTROY_REQUEST_CONTEXT (V_REQ_CONTEXT);
DBMS_OUTPUT.put_line (TO_CHAR (SYSDATE, 'DD/MM/YYYY HH24:MI:SS'));
COMMIT;
END LOOP;
END IF;
EXCEPTION
WHEN UTL_HTTP.END_OF_BODY
THEN
L_ERROR := SQLERRM;

UPDATE XXX_HR_ELTEZAM_PAYSLIP_TB
SET REQUEST_BODY = SOAP_REQUEST,
RESPONSE_BODY = X_CLOB,
ERRORTYPE = HTTP_ERRORTYPE || 'END_OF_BODY',
ERRORTEXT = L_ERROR || ' / ' || TTP_ERRORTEXT,
ERRORCODE = HTTP_RESP.STATUS_CODE,
CREATION_DATE = SYSDATE
WHERE 1 = 1 AND RUN_RESULT_ID = L_RUN;

COMMIT;

UTL_HTTP.END_RESPONSE (HTTP_RESP);
UTL_HTTP.DESTROY_REQUEST_CONTEXT (V_REQ_CONTEXT);
WHEN UTL_HTTP.TOO_MANY_REQUESTS
THEN
L_ERROR := SQLERRM;

UPDATE XXX_HR_ELTEZAM_PAYSLIP_TB
SET REQUEST_BODY = SOAP_REQUEST,
RESPONSE_BODY = X_CLOB,
ERRORTYPE = HTTP_ERRORTYPE || 'TOO_MANY_REQUESTS',
ERRORTEXT = L_ERROR || ' / ' || TTP_ERRORTEXT,
ERRORCODE = HTTP_RESP.STATUS_CODE,
CREATION_DATE = SYSDATE
WHERE 1 = 1 AND RUN_RESULT_ID = L_RUN;
COMMIT;
RAISE_APPLICATION_ERROR (
-20001,
'Request failed exception:' || UTL_HTTP.GET_DETAILED_SQLERRM);
WHEN OTHERS
THEN
L_ERROR := SQLERRM;
DBMS_OUTPUT.put_line ('OTHERS' || L_ERROR);

UPDATE XXX_HR_ELTEZAM_PAYSLIP_TB
SET REQUEST_BODY = SOAP_REQUEST,
RESPONSE_BODY = X_CLOB,
ERRORTYPE = HTTP_ERRORTYPE || 'OTHERS',
ERRORTEXT = L_ERROR || ' / ' || TTP_ERRORTEXT,
ERRORCODE = HTTP_RESP.STATUS_CODE,
CREATION_DATE = SYSDATE
WHERE 1 = 1 AND RUN_RESULT_ID = L_RUN;

COMMIT;
RAISE_APPLICATION_ERROR (
-20002,
'Request failed exception:' || UTL_HTTP.GET_DETAILED_SQLERRM);
END XXX_HR_PAYSLIP;

-------------- CREATED BY AMR EL KELANY XXX_HR_QUALIFICATION ---UPDATED BY


OMAR FAYYAD-------------------

PROCEDURE XXX_HR_QUALIFICATION (
ERRBUF OUT NOCOPY VARCHAR2,
RETCODE OUT NOCOPY NUMBER,
P_PERSON_ID NUMBER,
P_QUALIFICATIONID XXX_HR_ELTEZAM_QUALIFIC_TB.QUALIFICATIONID
%TYPE,
P_CONNECTION_TYPE VARCHAR2)
IS
V_REQ_CONTEXT UTL_HTTP.REQUEST_CONTEXT_KEY;
SOAP_REQUEST VARCHAR2 (32767);
HTTP_REQ UTL_HTTP.REQ;
HTTP_RESP UTL_HTTP.RESP;
L_BLOB BLOB;
L_DEST_OFFSET NUMBER := 1;
L_SRC_OFFSET NUMBER := 1;
L_LANG_CONTEXT NUMBER := 0;
L_WARNING NUMBER;
T_HTTP_VERSION VARCHAR2 (10) := 'HTTP/1.1';
T_CONTENT_TYPE VARCHAR2 (50) := 'text/xml; charset=utf-8';
T_URL VARCHAR2 (100);
X_CLOB CLOB;
L_BUFFER VARCHAR2 (32767);
HTTP_RESP_REQ_NUMBER VARCHAR2 (400);
HTTP_RESP_RAISEDBY VARCHAR2 (400);
HTTP_RESP_SOURCE VARCHAR2 (400);
HTTP_RESP_CODE VARCHAR2 (400);
HTTP_ERRORTYPE VARCHAR2 (400);
TTP_ERRORTEXT VARCHAR2 (4000);
L_ERROR VARCHAR2 (4000);
L_RUN NUMBER;
V_CHECK_LENGTH NUMBER;
L_OFFSET NUMBER := 1;
L_AMOUNT NUMBER := 2000;
L_BUFFER2 VARCHAR2 (32767);

CURSOR MAIN_DATA
IS
SELECT *
FROM XXX_HR_ELTEZAM_QUALIFIC_TB
WHERE 1 = 1
AND REQUEST_NUMBER IS NULL
AND ( QUALIFICATIONID = P_QUALIFICATIONID
OR P_QUALIFICATIONID IS NULL)
AND (PERSON_ID = P_PERSON_ID OR P_PERSON_ID IS NULL);
BEGIN
COLLECT_WS_INFO ('ELTEZAM_QUALIFICATION_INFO');

T_URL := G_DOMAIN_NAME || G_SERVICE_NAME;

DBMS_OUTPUT.put_line ('T_URL ' || T_URL);

MERGE INTO XXX_HR_ELTEZAM_QUALIFIC_TB D


USING (SELECT QUALIFICATION_ID QUALIFICATIONID,
NVL (
(SELECT LX.ELTEZAM_ID
FROM XXX_MAWARED_ELTEZAM_MAP_TB LX
WHERE 1 = 1
AND MAP_TYPE = 'QUALIF_TYPE'
AND LX.EBS_ID = QLF_TYPE),
9999)
QUALIFICATIONCODE,
REPLACE (QLF_MAJOR, '-', NULL) MAJORCODE,
90 UNIVERSITYCODE,
ESTABLISHMENT_NAME UNIVERSITYNAME,
CITY_NAME CITYNAME,
(SELECT LX.ELTEZAM_ID
FROM XXX_MAWARED_ELTEZAM_MAP_TB LX
WHERE 1 = 1
AND MAP_TYPE = 'SA_COUNTRY'
AND LX.EBS_ID = COUNTRY_CODE)
COUNTRYCODE,
NVL (
(SELECT LX.ELTEZAM_ID
FROM XXX_MAWARED_ELTEZAM_MAP_TB LX
WHERE 1 = 1
AND MAP_TYPE = 'QUALIF_GRADE_TYPE'
AND LX.EBS_ID = TITLE),
'‫)'لن يحدد‬
GRADE,
GROUP_RANKING SCORE,
9 SCOREOUTOF,
NULL TRANSACTIONTYPE,
GRADUATION_DATE GRADUATIONDATE,
(SELECT MEANING
FROM FND_LOOKUP_VALUES
WHERE LOOKUP_TYPE = 'PER_SUBJECT_STATUSES'
AND LOOKUP_CODE = QUA.QLF_STATUS
AND LANGUAGE = 'US')
QUALIFICATIONSTATUS,
NATIONAL_IDENTIFIER NATIONALID,
PERSON_ID
FROM XXX_HR_INT_QUALIFICATIONS QUA
WHERE 1 = 1
AND (PERSON_ID = P_PERSON_ID OR P_PERSON_ID IS NULL))
V
ON (D.QUALIFICATIONID = V.QUALIFICATIONID)
WHEN MATCHED
THEN
UPDATE SET
D.MAJORCODE = V.MAJORCODE,
D.UNIVERSITYCODE = V.UNIVERSITYCODE,
D.UNIVERSITYNAME = V.UNIVERSITYNAME,
D.CITYNAME = V.CITYNAME,
D.COUNTRYCODE = V.COUNTRYCODE,
D.GRADE = V.GRADE,
D.SCORE = V.SCORE,
D.SCOREOUTOF = V.SCOREOUTOF,
D.TRANSACTIONTYPE = 'Update',
D.GRADUATIONDATE = V.GRADUATIONDATE,
D.NATIONALID = V.NATIONALID,
D.QUALIFICATIONSTATUS = V.QUALIFICATIONSTATUS,
D.CREATION_DATE = SYSDATE,
D.REQUEST_NUMBER = NULL,
D.PERSON_ID = V.PERSON_ID
WHERE 1 = 1
AND ( ( D.QUALIFICATIONCODE <> V.QUALIFICATIONCODE
OR ( D.QUALIFICATIONCODE IS NULL
AND V.QUALIFICATIONCODE IS NOT NULL)
OR ( V.QUALIFICATIONCODE IS NULL
AND D.QUALIFICATIONCODE IS NOT NULL))
OR ( D.MAJORCODE <> V.MAJORCODE
OR ( D.MAJORCODE IS NULL
AND V.MAJORCODE IS NOT NULL)
OR ( V.MAJORCODE IS NULL
AND D.MAJORCODE IS NOT NULL))
OR ( D.UNIVERSITYCODE <> V.UNIVERSITYCODE
OR ( D.UNIVERSITYCODE IS NULL
AND V.UNIVERSITYCODE IS NOT NULL)
OR ( V.UNIVERSITYCODE IS NULL
AND D.UNIVERSITYCODE IS NOT NULL))
OR ( D.UNIVERSITYNAME <> V.UNIVERSITYNAME
OR ( D.UNIVERSITYNAME IS NULL
AND V.UNIVERSITYNAME IS NOT NULL)
OR ( V.UNIVERSITYNAME IS NULL
AND D.UNIVERSITYNAME IS NOT NULL))
OR ( D.CITYNAME <> V.CITYNAME
OR ( D.CITYNAME IS NULL
AND V.CITYNAME IS NOT NULL)
OR ( V.CITYNAME IS NULL
AND D.CITYNAME IS NOT NULL))
OR ( D.COUNTRYCODE <> V.COUNTRYCODE
OR ( D.COUNTRYCODE IS NULL
AND V.COUNTRYCODE IS NOT NULL)
OR ( V.COUNTRYCODE IS NULL
AND D.COUNTRYCODE IS NOT NULL))
OR ( D.GRADE <> V.GRADE
OR (D.GRADE IS NULL AND V.GRADE IS NOT NULL)
OR (V.GRADE IS NULL AND D.GRADE IS NOT NULL))
OR ( D.SCORE <> V.SCORE
OR (D.SCORE IS NULL AND V.SCORE IS NOT NULL)
OR (V.SCORE IS NULL AND D.SCORE IS NOT NULL))
OR ( D.SCOREOUTOF <> V.SCOREOUTOF
OR ( D.SCOREOUTOF IS NULL
AND V.SCOREOUTOF IS NOT NULL)
OR ( V.SCOREOUTOF IS NULL
AND D.SCOREOUTOF IS NOT NULL))
OR ( D.GRADUATIONDATE <> V.GRADUATIONDATE
OR ( D.GRADUATIONDATE IS NULL
AND V.GRADUATIONDATE IS NOT NULL)
OR ( V.GRADUATIONDATE IS NULL
AND D.GRADUATIONDATE IS NOT NULL))
OR ( D.QUALIFICATIONSTATUS <>
V.QUALIFICATIONSTATUS
OR ( D.QUALIFICATIONSTATUS IS NULL
AND V.QUALIFICATIONSTATUS IS NOT NULL)
OR ( V.QUALIFICATIONSTATUS IS NULL
AND D.QUALIFICATIONSTATUS IS NOT NULL))
OR ( D.NATIONALID <> V.NATIONALID
OR ( D.NATIONALID IS NULL
AND V.NATIONALID IS NOT NULL)
OR ( V.NATIONALID IS NULL
AND D.NATIONALID IS NOT NULL))
OR ( D.PERSON_ID <> V.PERSON_ID
OR ( D.PERSON_ID IS NULL
AND V.PERSON_ID IS NOT NULL)
OR ( V.PERSON_ID IS NULL
AND D.PERSON_ID IS NOT NULL)))
WHEN NOT MATCHED
THEN
INSERT (D.QUALIFICATIONID,
D.QUALIFICATIONCODE,
D.MAJORCODE,
D.UNIVERSITYCODE,
D.UNIVERSITYNAME,
D.CITYNAME,
D.COUNTRYCODE,
D.GRADE,
D.SCORE,
D.SCOREOUTOF,
D.TRANSACTIONTYPE,
D.GRADUATIONDATE,
D.QUALIFICATIONSTATUS,
D.CREATION_DATE,
D.NATIONALID,
D.PERSON_ID)
VALUES (V.QUALIFICATIONID,
V.QUALIFICATIONCODE,
V.MAJORCODE,
V.UNIVERSITYCODE,
V.UNIVERSITYNAME,
V.CITYNAME,
V.COUNTRYCODE,
V.GRADE,
V.SCORE,
V.SCOREOUTOF,
'Add',
V.GRADUATIONDATE,
V.QUALIFICATIONSTATUS,
SYSDATE,
V.NATIONALID,
V.PERSON_ID);

COMMIT;

UPDATE XXX_HR_ELTEZAM_QUALIFIC_TB
SET TRANSACTIONTYPE = 'Delete', REQUEST_NUMBER = NULL
WHERE 1 = 1
AND QUALIFICATIONID NOT IN (SELECT QUALIFICATIONID
FROM XXX_HR_INT_QUALIFICATIONS
WHERE 1 = 1)
AND ( QUALIFICATIONID = P_QUALIFICATIONID
OR P_QUALIFICATIONID IS NULL)
AND (PERSON_ID = P_PERSON_ID OR P_PERSON_ID IS NULL);

COMMIT;

IF P_CONNECTION_TYPE = 'WEB_SERVICE'
THEN
FOR I IN MAIN_DATA
LOOP
SOAP_REQUEST :=
'<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:tem="http://tempuri.org/"
xmlns:ver="http://yefi.gov.sa/PersonProfileCommonTypes/xml/schemas/version2.0"
xmlns:ver1="http://yefi.gov.sa/MCS/EltezamDataSchema/xml/schemas/version1.0">
<soapenv:Header/>
<soapenv:Body>
<tem:SubmitEmployeeQualificationInfo>
<!--Optional:-->
<tem:employeeQualificationInfo>
<!--Optional:-->
<PersonIdentifier>
<!--You have a CHOICE of the next 2 items at this level-->
<!--Optional:-->
<ver:IqamaNumber>'
|| I.NATIONALID
|| '</ver:IqamaNumber>
<!--Optional:-->
<ver:NationalID>'
|| I.NATIONALID
|| '</ver:NationalID>
</PersonIdentifier>
<!--Optional:-->
<QualificationList>
<!--Zero or more repetitions:-->
<ver1:Qualification>
<!--Optional:-->
<ver1:QualificationID>'
|| I.QUALIFICATIONID
|| '</ver1:QualificationID>
<!--Optional:-->
<ver1:QualificationCode>'
|| I.QUALIFICATIONCODE
|| '</ver1:QualificationCode>
<!--Optional:-->
<ver1:MajorCode>'
|| I.MAJORCODE
|| '</ver1:MajorCode>
<!--Optional:-->
<ver1:UniversityCode>'
|| I.UNIVERSITYCODE
|| '</ver1:UniversityCode>
<!--Optional:-->
<ver1:UniversityName>'
|| I.UNIVERSITYNAME
|| '</ver1:UniversityName>
<!--Optional:-->
<ver1:CityName>?</ver1:CityName>
<!--Optional:-->
<ver1:CountryCode>'
|| I.COUNTRYCODE
|| '</ver1:CountryCode>
<!--Optional:-->
<ver1:Grade>'
|| I.GRADE
|| '</ver1:Grade>
<!--Optional:-->
<ver1:Score>'
|| I.SCORE
|| '</ver1:Score>
<!--Optional:-->
<ver1:ScoreOutOf>'
|| I.SCOREOUTOF
|| '</ver1:ScoreOutOf>
<ver1:TransactionType>'
|| I.TRANSACTIONTYPE
|| '</ver1:TransactionType>
<!--Optional:-->
<ver1:GraduationDate>'
|| TO_CHAR (I.GRADUATIONDATE,
'DD-MM-RRRR',
'NLS_CALENDAR=''Arabic Hijrah''')
|| '</ver1:GraduationDate>
<ver1:QualificationStatus>'
|| I.QUALIFICATIONSTATUS
|| '</ver1:QualificationStatus>
</ver1:Qualification>
</QualificationList>
</tem:employeeQualificationInfo>
</tem:SubmitEmployeeQualificationInfo>
</soapenv:Body>
</soapenv:Envelope>';
DBMS_OUTPUT.put_line (SOAP_REQUEST);
L_DEST_OFFSET := 1;
L_SRC_OFFSET := 1;
L_LANG_CONTEXT := 0;
L_WARNING := NULL;
DBMS_OUTPUT.put_line (TO_CHAR (SYSDATE, 'DD/MM/YYYY HH24:MI:SS'));
DBMS_OUTPUT.put_line (
L_DEST_OFFSET
|| ','
|| L_SRC_OFFSET
|| ','
|| L_LANG_CONTEXT
|| ','
|| L_WARNING);

UTL_HTTP.SET_TRANSFER_TIMEOUT (60);
----- Wallet Information -------
V_REQ_CONTEXT :=
UTL_HTTP.CREATE_REQUEST_CONTEXT (
WALLET_PATH => G_WALLET_PATH,
WALLET_PASSWORD => G_WALLET_PASSWORD);

---------------------- arabic------------------------------
DBMS_LOB.CREATETEMPORARY (L_BLOB, FALSE, DBMS_LOB.CALL);
DBMS_LOB.CONVERTTOBLOB (
DEST_LOB => L_BLOB,
SRC_CLOB => SOAP_REQUEST,
AMOUNT => DBMS_LOB.LOBMAXSIZE,
DEST_OFFSET => L_DEST_OFFSET,
SRC_OFFSET => L_SRC_OFFSET,
BLOB_CSID => NLS_CHARSET_ID ('AL32UTF8'), --AR8ISO8859P6
AL32UTF8 AL16UTF16
LANG_CONTEXT => L_LANG_CONTEXT,
WARNING => L_WARNING);
----------------------end arabic--------------------------
HTTP_REQ :=
UTL_HTTP.BEGIN_REQUEST (URL => T_URL,
REQUEST_CONTEXT => V_REQ_CONTEXT,
METHOD => 'POST',
HTTP_VERSION => 'HTTP/1.1');

DBMS_OUTPUT.put_line (TO_CHAR (SYSDATE, 'DD/MM/YYYY HH24:MI:SS'));


UTL_HTTP.SET_HEADER (HTTP_REQ, 'User-Agent', 'Mozilla/4.0');
UTL_HTTP.SET_HEADER (HTTP_REQ, 'Connection', 'Keep-Alive');

-------------------- arabic------------------------------
UTL_HTTP.SET_HEADER (HTTP_REQ,
'Content-Type',
'text/xml;charset=UTF-8');

UTL_HTTP.SET_HEADER (http_req,
'Content-Length',
DBMS_LOB.GETLENGTH (L_BLOB));

------------------end arabic--------------------------
UTL_HTTP.SET_HEADER (
HTTP_REQ,
'SOAPAction',

'"http://tempuri.org/IEltezamDataService/SubmitEmployeeQualificationInfo"');

-------------------- arabic------------------------------
IF V_CHECK_LENGTH > 32767
THEN
UTL_HTTP.SET_TRANSFER_TIMEOUT (999);
UTL_HTTP.SET_HEADER (HTTP_REQ, 'Trasfer-Encoding', 'chunked');
DBMS_LOB.OPEN (L_BLOB, DBMS_LOB.LOB_READWRITE);

BEGIN
WHILE L_OFFSET < V_CHECK_LENGTH
LOOP
DBMS_LOB.READ (L_BLOB,
L_AMOUNT,
L_OFFSET,
L_BUFFER2);
UTL_HTTP.WRITE_RAW (HTTP_REQ, L_BUFFER2);
L_OFFSET := L_OFFSET + L_AMOUNT;
END LOOP;
END;

DBMS_LOB.CLOSE (L_BLOB);
ELSE
UTL_HTTP.WRITE_TEXT (R => HTTP_REQ, DATA => SOAP_REQUEST);
END IF;

------------------end arabic--------------------------

HTTP_RESP := UTL_HTTP.GET_RESPONSE (HTTP_REQ);

DBMS_LOB.CREATETEMPORARY (X_CLOB, FALSE);


DBMS_LOB.OPEN (X_CLOB, DBMS_LOB.LOB_READWRITE);

BEGIN
LOOP
UTL_HTTP.READ_TEXT (HTTP_RESP, L_BUFFER);
DBMS_LOB.WRITEAPPEND (X_CLOB, LENGTH (L_BUFFER), L_BUFFER);
END LOOP;
EXCEPTION
WHEN OTHERS
THEN
IF SQLCODE <> -29266
THEN
RAISE;
END IF;
END;

L_RUN := I.QUALIFICATIONID;
DBMS_OUTPUT.put_line (L_RUN);
DBMS_OUTPUT.put_line (HTTP_RESP.STATUS_CODE);

IF (HTTP_RESP.STATUS_CODE = 200)
THEN
BEGIN
SELECT REQUESTNUMBER
INTO HTTP_RESP_REQ_NUMBER
FROM (SELECT XMLTYPE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
(X_CLOB),

'http://schemas.xmlsoap.org/soap/envelope/',
''),
'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"',
''),

'xmlns:xsd="http://www.w3.org/2001/XMLSchema"',
''),

'xmlns="http://tempuri.org/"',
''),

'xmlns="http://yefi.gov.sa/MCS/EltezamDataSchema/xml/schemas/version1.0"',
''),
'xmlns=""',
''),
's:',
''),
'xmlns=""',
''))
XMLT
FROM DUAL) XX,
XMLTABLE (
'Envelope/Body
/SubmitEmployeeQualificationInfoResponse/SubmitEmployeeQualificationInfoResult/
submitEmployeeQualificationInfoResponseDetailObject'
PASSING XX.XMLT
COLUMNS REQUESTNUMBER VARCHAR2 (400)
PATH
'RequestNumber');

UPDATE XXX_HR_ELTEZAM_QUALIFIC_TB
SET REQUEST_BODY = SOAP_REQUEST,
RESPONSE_BODY = X_CLOB,
ERRORTYPE = NULL,
ERRORTEXT = NULL,
ERRORCODE = HTTP_RESP.STATUS_CODE,
REQUEST_NUMBER = HTTP_RESP_REQ_NUMBER,
CREATION_DATE = SYSDATE
WHERE 1 = 1 AND QUALIFICATIONID = I.QUALIFICATIONID;
EXCEPTION
WHEN OTHERS
THEN
SELECT FAULTSTRING || ' - ' || Code
INTO TTP_ERRORTEXT
FROM (SELECT XMLTYPE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE
(

REGEXP_REPLACE (
(X_CLOB),
'http://schemas.xmlsoap.org/soap/envelope/',
''),

'xmlns="http://tempuri.org/"',
''),

'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"',
''),

'xmlns:xsd="http://www.w3.org/2001/XMLSchema"',
''),
'
xmlns="http://yefi.gov.sa/YEFIErrorStructure/xml/schemas/version2.3"',
''),
'xmlns=""',
''),
's:',
''),
'xmlns=""',
''),

'xmlns="http://yefi.gov.sa/YEFIErrorStructure/xml/schemas/version2.3"',
''))
XMLT
FROM DUAL) XX,
XMLTABLE (
'Envelope/Body
/SubmitEmployeeQualificationInfoResponse/SubmitEmployeeQualificationInfoResult/
ServiceError'
PASSING XX.XMLT
COLUMNS FAULTSTRING VARCHAR2 (4000)
PATH 'ErrorText',
Code VARCHAR2 (4000)
PATH 'Code');

L_ERROR := SQLERRM;

UPDATE XXX_HR_ELTEZAM_QUALIFIC_TB
SET REQUEST_BODY = SOAP_REQUEST,
RESPONSE_BODY = X_CLOB,
ERRORTYPE = NULL,
ERRORTEXT = TTP_ERRORTEXT,
ERRORCODE = HTTP_RESP.STATUS_CODE,
CREATION_DATE = SYSDATE
WHERE 1 = 1 AND QUALIFICATIONID = I.QUALIFICATIONID;
END;
ELSE
BEGIN
SELECT FAULTSTRING
INTO TTP_ERRORTEXT
FROM (SELECT XMLTYPE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
(X_CLOB),

'http://schemas.xmlsoap.org/soap/envelope/',
''),

'xmlns="http://tempuri.org/"',
''),

'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"',
''),

'xmlns:xsd="http://www.w3.org/2001/XMLSchema"',
''),
'
xmlns="http://yefi.gov.sa/YEFIErrorStructure/xml/schemas/version2.3"',
''),
'xmlns=""',
''),
's:',
''),
'xmlns=""',
''))
XMLT
FROM DUAL) XX,
XMLTABLE (
'Envelope/Body /Fault'
PASSING XX.XMLT
COLUMNS FAULTSTRING VARCHAR2 (1000)
PATH 'faultstring');

UPDATE XXX_HR_ELTEZAM_QUALIFIC_TB
SET REQUEST_BODY = SOAP_REQUEST,
RESPONSE_BODY = X_CLOB,
ERRORTYPE = NULL,
ERRORTEXT = TTP_ERRORTEXT,
ERRORCODE = HTTP_RESP.STATUS_CODE,
REQUEST_NUMBER = NULL,
CREATION_DATE = SYSDATE
WHERE 1 = 1 AND QUALIFICATIONID = I.QUALIFICATIONID;
EXCEPTION
WHEN OTHERS
THEN
L_ERROR := SQLERRM;

UPDATE XXX_HR_ELTEZAM_QUALIFIC_TB
SET REQUEST_BODY = SOAP_REQUEST,
RESPONSE_BODY = X_CLOB,
ERRORTYPE =
'Internal Error in Failure Response Query XML',
ERRORTEXT = L_ERROR,
ERRORCODE = HTTP_RESP.STATUS_CODE,
CREATION_DATE = SYSDATE
WHERE 1 = 1 AND QUALIFICATIONID = I.QUALIFICATIONID;
END;
END IF;

UTL_HTTP.END_RESPONSE (HTTP_RESP);
UTL_HTTP.DESTROY_REQUEST_CONTEXT (V_REQ_CONTEXT);
DBMS_OUTPUT.put_line (TO_CHAR (SYSDATE, 'DD/MM/YYYY HH24:MI:SS'));
COMMIT;
END LOOP;
END IF;
EXCEPTION
WHEN UTL_HTTP.END_OF_BODY
THEN
L_ERROR := SQLERRM;

UPDATE XXX_HR_ELTEZAM_QUALIFIC_TB
SET REQUEST_BODY = SOAP_REQUEST,
RESPONSE_BODY = X_CLOB,
ERRORTYPE = HTTP_ERRORTYPE || 'END_OF_BODY',
ERRORTEXT = L_ERROR || ' / ' || TTP_ERRORTEXT,
ERRORCODE = HTTP_RESP.STATUS_CODE,
CREATION_DATE = SYSDATE
WHERE 1 = 1 AND QUALIFICATIONID = L_RUN;

COMMIT;

UTL_HTTP.END_RESPONSE (HTTP_RESP);
UTL_HTTP.DESTROY_REQUEST_CONTEXT (V_REQ_CONTEXT);
WHEN UTL_HTTP.TOO_MANY_REQUESTS
THEN
L_ERROR := SQLERRM;

UPDATE XXX_HR_ELTEZAM_QUALIFIC_TB
SET REQUEST_BODY = SOAP_REQUEST,
RESPONSE_BODY = X_CLOB,
ERRORTYPE = HTTP_ERRORTYPE || 'TOO_MANY_REQUESTS',
ERRORTEXT = L_ERROR || ' / ' || TTP_ERRORTEXT,
ERRORCODE = HTTP_RESP.STATUS_CODE,
CREATION_DATE = SYSDATE
WHERE 1 = 1 AND QUALIFICATIONID = L_RUN;

COMMIT;
RAISE_APPLICATION_ERROR (
-20001,
'Request failed exception:' || UTL_HTTP.GET_DETAILED_SQLERRM);
WHEN OTHERS
THEN
L_ERROR := SQLERRM;
DBMS_OUTPUT.put_line ('OTHERS' || L_ERROR);

UPDATE XXX_HR_ELTEZAM_QUALIFIC_TB
SET REQUEST_BODY = SOAP_REQUEST,
RESPONSE_BODY = X_CLOB,
ERRORTYPE = HTTP_ERRORTYPE || 'OTHERS',
ERRORTEXT = L_ERROR || ' / ' || TTP_ERRORTEXT,
ERRORCODE = HTTP_RESP.STATUS_CODE,
CREATION_DATE = SYSDATE
WHERE 1 = 1 AND QUALIFICATIONID = L_RUN;

COMMIT;
RAISE_APPLICATION_ERROR (
-20002,
'Request failed exception:' || UTL_HTTP.GET_DETAILED_SQLERRM);
END XXX_HR_QUALIFICATION;
-------------- CREATED BY AMR EL KELANY XXX_HR_VACATION --------UPDATED BY
OMAR FAYYAD--------------

PROCEDURE XXX_HR_VACATION (
ERRBUF OUT NOCOPY VARCHAR2,
RETCODE OUT NOCOPY NUMBER,
P_PERSON_ID NUMBER,
P_VACATIONID XXX_HR_ELTEZAM_VACATION_TB.VACATIONID%TYPE,
P_CONNECTION_TYPE VARCHAR2)
IS
V_REQ_CONTEXT UTL_HTTP.REQUEST_CONTEXT_KEY;
SOAP_REQUEST VARCHAR2 (32767);
HTTP_REQ UTL_HTTP.REQ;
HTTP_RESP UTL_HTTP.RESP;
L_BLOB BLOB;
L_DEST_OFFSET NUMBER := 1;
L_SRC_OFFSET NUMBER := 1;
L_LANG_CONTEXT NUMBER := 0;
L_WARNING NUMBER;
T_HTTP_VERSION VARCHAR2 (10) := 'HTTP/1.1';
T_CONTENT_TYPE VARCHAR2 (50) := 'text/xml; charset=utf-8';
T_URL VARCHAR2 (100);
X_CLOB CLOB;
L_BUFFER VARCHAR2 (32767);
HTTP_RESP_REQ_NUMBER VARCHAR2 (400);
HTTP_RESP_RAISEDBY VARCHAR2 (400);
HTTP_RESP_SOURCE VARCHAR2 (400);
HTTP_RESP_CODE VARCHAR2 (400);
HTTP_ERRORTYPE VARCHAR2 (400);
TTP_ERRORTEXT VARCHAR2 (4000);
L_ERROR VARCHAR2 (4000);
L_RUN NUMBER;
V_CHECK_LENGTH NUMBER;
L_OFFSET NUMBER := 1;
L_AMOUNT NUMBER := 2000;
L_BUFFER2 VARCHAR2 (32767);

CURSOR MAIN_DATA
IS
SELECT VACATIONID,
(SELECT LX.ELTEZAM_ID
FROM XXX_MAWARED_ELTEZAM_MAP_TB LX
WHERE 1 = 1
AND MAP_TYPE = 'VAC_CODE'
AND LX.EBS_ID = VACATIONCODE)
VACATIONCODE,
TRANSACTIONTYPE,
TO_CHAR (STARTDATE,
'DD-MM-RRRR',
'NLS_CALENDAR=''Arabic Hijrah''')
STARTDATE,
RESPONSE_BODY,
REQUEST_NUMBER,
REQUEST_BODY,
RAISEDBY,
PERIODDAYS,
NATIONALID,
ERRORTYPE,
ERRORTEXT,
ERRORCODE,
TO_CHAR (ENDDATE,
'DD-MM-RRRR',
'NLS_CALENDAR=''Arabic Hijrah''')
ENDDATE,
DECISIONNUMBER,
TO_CHAR (DECISIONDATE,
'DD-MM-RRRR',
'NLS_CALENDAR=''Arabic Hijrah''')
DECISIONDATE,
CREATION_DATE
FROM XXX_HR_ELTEZAM_VACATION_TB
WHERE 1 = 1
AND REQUEST_NUMBER IS NULL
AND (VACATIONID = P_VACATIONID OR P_VACATIONID IS NULL)
AND (PERSON_ID = P_PERSON_ID OR P_PERSON_ID IS NULL)
AND DECISIONDATE IS NOT NULL;
BEGIN
COLLECT_WS_INFO ('ELTEZAM_VACATION_INFO');

T_URL := G_DOMAIN_NAME || G_SERVICE_NAME;

DBMS_OUTPUT.put_line ('T_URL ' || T_URL);

MERGE INTO XXX_HR_ELTEZAM_VACATION_TB D


USING (SELECT *
FROM XXX_HR_INT_ABSENCES_WS
WHERE 1 = 1
AND (PERSON_ID = P_PERSON_ID OR P_PERSON_ID IS NULL))
V
ON (D.VACATIONID = V.VACATIONID)
WHEN MATCHED
THEN
UPDATE SET
D.NATIONALID = V.NATIONALID,
D.STARTDATE = V.STARTDATE,
D.ENDDATE = V.ENDDATE,
D.PERIODDAYS = V.PERIODDAYS,
D.VACATIONCODE = V.VACATIONCODE,
D.DECISIONNUMBER = V.DECISIONNUMBER,
D.DECISIONDATE = V.DECISIONDATE,
D.TRANSACTIONTYPE = 'Update',
D.CREATION_DATE = SYSDATE,
D.REQUEST_NUMBER = NULL,
D.PERSON_ID = V.PERSON_ID
WHERE 1 = 1
AND ( ( D.NATIONALID <> V.NATIONALID
OR ( D.NATIONALID IS NULL
AND V.NATIONALID IS NOT NULL)
OR ( V.NATIONALID IS NULL
AND D.NATIONALID IS NOT NULL))
OR ( D.STARTDATE <> V.STARTDATE
OR ( D.STARTDATE IS NULL
AND V.STARTDATE IS NOT NULL)
OR ( V.STARTDATE IS NULL
AND D.STARTDATE IS NOT NULL))
OR ( D.ENDDATE <> V.ENDDATE
OR ( D.ENDDATE IS NULL
AND V.ENDDATE IS NOT NULL)
OR ( V.ENDDATE IS NULL
AND D.ENDDATE IS NOT NULL))
OR ( D.PERIODDAYS <> V.PERIODDAYS
OR ( D.PERIODDAYS IS NULL
AND V.PERIODDAYS IS NOT NULL)
OR ( V.PERIODDAYS IS NULL
AND D.PERIODDAYS IS NOT NULL))
OR ( D.VACATIONCODE <> V.VACATIONCODE
OR ( D.VACATIONCODE IS NULL
AND V.VACATIONCODE IS NOT NULL)
OR ( V.VACATIONCODE IS NULL
AND D.VACATIONCODE IS NOT NULL))
OR ( D.DECISIONNUMBER <> V.DECISIONNUMBER
OR ( D.DECISIONNUMBER IS NULL
AND V.DECISIONNUMBER IS NOT NULL)
OR ( V.DECISIONNUMBER IS NULL
AND D.DECISIONNUMBER IS NOT NULL))
OR ( D.DECISIONDATE <> V.DECISIONDATE
OR ( D.DECISIONDATE IS NULL
AND V.DECISIONDATE IS NOT NULL)
OR ( V.DECISIONDATE IS NULL
AND D.DECISIONDATE IS NOT NULL))
OR ( D.PERSON_ID <> V.PERSON_ID
OR ( D.PERSON_ID IS NULL
AND V.PERSON_ID IS NOT NULL)
OR ( V.PERSON_ID IS NULL
AND D.PERSON_ID IS NOT NULL)))
WHEN NOT MATCHED
THEN
INSERT (D.NATIONALID,
D.VACATIONID,
D.STARTDATE,
D.ENDDATE,
D.PERIODDAYS,
D.VACATIONCODE,
D.DECISIONNUMBER,
D.DECISIONDATE,
D.TRANSACTIONTYPE,
D.CREATION_DATE,
D.PERSON_ID)
VALUES (v.NATIONALID,
v.VACATIONID,
v.STARTDATE,
v.ENDDATE,
v.PERIODDAYS,
v.VACATIONCODE,
v.DECISIONNUMBER,
v.DECISIONDATE,
'Add',
SYSDATE,
V.PERSON_ID);

COMMIT;

UPDATE XXX_HR_ELTEZAM_VACATION_TB
SET TRANSACTIONTYPE = 'Delete', REQUEST_NUMBER = NULL
WHERE 1 = 1
AND VACATIONID NOT IN (SELECT VACATIONID
FROM XXX_HR_INT_ABSENCES_WS)
AND (VACATIONID = P_VACATIONID OR P_VACATIONID IS NULL)
AND (PERSON_ID = P_PERSON_ID OR P_PERSON_ID IS NULL);

COMMIT;

IF P_CONNECTION_TYPE = 'WEB_SERVICE'
THEN
FOR I IN MAIN_DATA
LOOP
SOAP_REQUEST :=
'<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:tem="http://tempuri.org/"
xmlns:ver="http://yefi.gov.sa/PersonProfileCommonTypes/xml/schemas/version2.0"
xmlns:ver1="http://yefi.gov.sa/MCS/EltezamDataSchema/xml/schemas/version1.0">
<soapenv:Header/>
<soapenv:Body>
<tem:SubmitEmployeeVacationInfo>
<!--Optional:-->
<tem:employeeVacationInfo>
<!--Optional:-->
<PersonIdentifier>
<!--You have a CHOICE of the next 2 items at this level-->
<!--Optional:-->
<ver:IqamaNumber>'
|| I.NATIONALID
|| '</ver:IqamaNumber>
<!--Optional:-->
<ver:NationalID>'
|| I.NATIONALID
|| '</ver:NationalID>
</PersonIdentifier>
<!--Optional:-->
<VacationList>
<!--Zero or more repetitions:-->
<ver1:Vacation>
<!--Optional:-->
<ver1:VacationID>'
|| I.VACATIONID
|| '</ver1:VacationID>
<!--Optional:-->
<ver1:StartDate>'
|| I.STARTDATE
|| '</ver1:StartDate>
<!--Optional:-->
<ver1:EndDate>'
|| I.ENDDATE
|| '</ver1:EndDate>
<!--Optional:-->
<ver1:Period>'
|| I.PERIODDAYS
|| '</ver1:Period>
<!--Optional:-->
<ver1:VacationCode>'
|| I.VACATIONCODE
|| '</ver1:VacationCode>
<ver1:TransactionType>'
|| I.TRANSACTIONTYPE
|| '</ver1:TransactionType>
<!--Optional:-->
<ver1:DecisionNumber>'
|| I.DECISIONNUMBER
|| '</ver1:DecisionNumber>
<!--Optional:-->
<ver1:DecisionDate>'
|| I.DECISIONDATE
|| '</ver1:DecisionDate>
</ver1:Vacation>
</VacationList>
</tem:employeeVacationInfo>
</tem:SubmitEmployeeVacationInfo>
</soapenv:Body>
</soapenv:Envelope>';
DBMS_OUTPUT.put_line (SOAP_REQUEST);
L_DEST_OFFSET := 1;
L_SRC_OFFSET := 1;
L_LANG_CONTEXT := 0;
L_WARNING := NULL;
DBMS_OUTPUT.put_line (TO_CHAR (SYSDATE, 'DD/MM/YYYY HH24:MI:SS'));
DBMS_OUTPUT.put_line (
L_DEST_OFFSET
|| ','
|| L_SRC_OFFSET
|| ','
|| L_LANG_CONTEXT
|| ','
|| L_WARNING);

UTL_HTTP.SET_TRANSFER_TIMEOUT (60);
----- Wallet Information -------
V_REQ_CONTEXT :=
UTL_HTTP.CREATE_REQUEST_CONTEXT (
WALLET_PATH => G_WALLET_PATH,
WALLET_PASSWORD => G_WALLET_PASSWORD);

---------------------- arabic------------------------------
DBMS_LOB.CREATETEMPORARY (L_BLOB, FALSE, DBMS_LOB.CALL);
DBMS_LOB.CONVERTTOBLOB (
DEST_LOB => L_BLOB,
SRC_CLOB => SOAP_REQUEST,
AMOUNT => DBMS_LOB.LOBMAXSIZE,
DEST_OFFSET => L_DEST_OFFSET,
SRC_OFFSET => L_SRC_OFFSET,
BLOB_CSID => NLS_CHARSET_ID ('AL32UTF8'), --AR8ISO8859P6
AL32UTF8 AL16UTF16
LANG_CONTEXT => L_LANG_CONTEXT,
WARNING => L_WARNING);
----------------------end arabic--------------------------
HTTP_REQ :=
UTL_HTTP.BEGIN_REQUEST (URL => T_URL,
REQUEST_CONTEXT => V_REQ_CONTEXT,
METHOD => 'POST',
HTTP_VERSION => 'HTTP/1.1');

DBMS_OUTPUT.put_line (TO_CHAR (SYSDATE, 'DD/MM/YYYY HH24:MI:SS'));


UTL_HTTP.SET_HEADER (HTTP_REQ, 'User-Agent', 'Mozilla/4.0');
UTL_HTTP.SET_HEADER (HTTP_REQ, 'Connection', 'Keep-Alive');
-------------------- arabic------------------------------
UTL_HTTP.SET_HEADER (HTTP_REQ,
'Content-Type',
'text/xml;charset=UTF-8');

UTL_HTTP.SET_HEADER (http_req,
'Content-Length',
DBMS_LOB.GETLENGTH (L_BLOB));

------------------end arabic--------------------------
UTL_HTTP.SET_HEADER (
HTTP_REQ,
'SOAPAction',

'"http://tempuri.org/IEltezamDataService/SubmitEmployeeVacationInfo"');

-------------------- arabic------------------------------
IF V_CHECK_LENGTH > 32767
THEN
UTL_HTTP.SET_TRANSFER_TIMEOUT (999);
UTL_HTTP.SET_HEADER (HTTP_REQ, 'Trasfer-Encoding', 'chunked');
DBMS_LOB.OPEN (L_BLOB, DBMS_LOB.LOB_READWRITE);

BEGIN
WHILE L_OFFSET < V_CHECK_LENGTH
LOOP
DBMS_LOB.READ (L_BLOB,
L_AMOUNT,
L_OFFSET,
L_BUFFER2);
UTL_HTTP.WRITE_RAW (HTTP_REQ, L_BUFFER2);
L_OFFSET := L_OFFSET + L_AMOUNT;
END LOOP;
END;

DBMS_LOB.CLOSE (L_BLOB);
ELSE
UTL_HTTP.WRITE_TEXT (R => HTTP_REQ, DATA => SOAP_REQUEST);
END IF;

------------------end arabic--------------------------

HTTP_RESP := UTL_HTTP.GET_RESPONSE (HTTP_REQ);

DBMS_LOB.CREATETEMPORARY (X_CLOB, FALSE);


DBMS_LOB.OPEN (X_CLOB, DBMS_LOB.LOB_READWRITE);

BEGIN
LOOP
UTL_HTTP.READ_TEXT (HTTP_RESP, L_BUFFER);
DBMS_LOB.WRITEAPPEND (X_CLOB, LENGTH (L_BUFFER), L_BUFFER);
END LOOP;
EXCEPTION
WHEN OTHERS
THEN
IF SQLCODE <> -29266
THEN
RAISE;
END IF;
END;

L_RUN := I.VACATIONID;
DBMS_OUTPUT.put_line (L_RUN);
DBMS_OUTPUT.put_line (HTTP_RESP.STATUS_CODE);

IF (HTTP_RESP.STATUS_CODE = 200)
THEN
BEGIN
SELECT REQUESTNUMBER
INTO HTTP_RESP_REQ_NUMBER
FROM (SELECT XMLTYPE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
(X_CLOB),

'http://schemas.xmlsoap.org/soap/envelope/',
''),

'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"',
''),

'xmlns:xsd="http://www.w3.org/2001/XMLSchema"',
''),

'xmlns="http://tempuri.org/"',
''),

'xmlns="http://yefi.gov.sa/MCS/EltezamDataSchema/xml/schemas/version1.0"',
''),
'xmlns=""',
''),
's:',
''),
'xmlns=""',
''))
XMLT
FROM DUAL) XX,
XMLTABLE (
'Envelope/Body
/SubmitEmployeeVacationInfoResponse/SubmitEmployeeVacationInfoResult/
submitEmployeeVacationInfoResponseDetailObject'
PASSING XX.XMLT
COLUMNS REQUESTNUMBER VARCHAR2 (400)
PATH
'RequestNumber');

UPDATE XXX_HR_ELTEZAM_VACATION_TB
SET REQUEST_BODY = SOAP_REQUEST,
RESPONSE_BODY = X_CLOB,
ERRORTYPE = NULL,
ERRORTEXT = NULL,
ERRORCODE = HTTP_RESP.STATUS_CODE,
REQUEST_NUMBER = HTTP_RESP_REQ_NUMBER,
CREATION_DATE = SYSDATE
WHERE 1 = 1 AND VACATIONID = I.VACATIONID;
EXCEPTION
WHEN OTHERS
THEN
SELECT FAULTSTRING || ' - ' || Code
INTO TTP_ERRORTEXT
FROM (SELECT XMLTYPE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE
(

REGEXP_REPLACE (
(X_CLOB),

'http://schemas.xmlsoap.org/soap/envelope/',
''),

'xmlns="http://tempuri.org/"',
''),

'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"',
''),

'xmlns:xsd="http://www.w3.org/2001/XMLSchema"',
''),
'
xmlns="http://yefi.gov.sa/YEFIErrorStructure/xml/schemas/version2.3"',
''),
'xmlns=""',
''),
's:',
''),
'xmlns=""',
''),

'xmlns="http://yefi.gov.sa/YEFIErrorStructure/xml/schemas/version2.3"',
''))
XMLT
FROM DUAL) XX,
XMLTABLE (
'Envelope/Body
/SubmitEmployeeVacationInfoResponse/SubmitEmployeeVacationInfoResult/ServiceError'
PASSING XX.XMLT
COLUMNS FAULTSTRING VARCHAR2 (4000)
PATH 'ErrorText',
Code VARCHAR2 (4000)
PATH 'Code');

L_ERROR := SQLERRM;

UPDATE XXX_HR_ELTEZAM_VACATION_TB
SET REQUEST_BODY = SOAP_REQUEST,
RESPONSE_BODY = X_CLOB,
ERRORTYPE = NULL,
ERRORTEXT = TTP_ERRORTEXT,
ERRORCODE = HTTP_RESP.STATUS_CODE,
CREATION_DATE = SYSDATE
WHERE 1 = 1 AND VACATIONID = I.VACATIONID;

L_ERROR := SQLERRM;
END;
ELSE
BEGIN
SELECT FAULTSTRING
INTO TTP_ERRORTEXT
FROM (SELECT XMLTYPE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
(X_CLOB),

'http://schemas.xmlsoap.org/soap/envelope/',
''),

'xmlns="http://tempuri.org/"',
''),

'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"',
''),

'xmlns:xsd="http://www.w3.org/2001/XMLSchema"',
''),
'
xmlns="http://yefi.gov.sa/YEFIErrorStructure/xml/schemas/version2.3"',
''),
'xmlns=""',
''),
's:',
''),
'xmlns=""',
''))
XMLT
FROM DUAL) XX,
XMLTABLE (
'Envelope/Body /Fault'
PASSING XX.XMLT
COLUMNS FAULTSTRING VARCHAR2 (1000)
PATH 'faultstring');

UPDATE XXX_HR_ELTEZAM_VACATION_TB
SET REQUEST_BODY = SOAP_REQUEST,
RESPONSE_BODY = X_CLOB,
ERRORTYPE = NULL,
ERRORTEXT = TTP_ERRORTEXT,
ERRORCODE = HTTP_RESP.STATUS_CODE,
REQUEST_NUMBER = NULL,
CREATION_DATE = SYSDATE
WHERE 1 = 1 AND VACATIONID = I.VACATIONID;
EXCEPTION
WHEN OTHERS
THEN
L_ERROR := SQLERRM;

UPDATE XXX_HR_ELTEZAM_VACATION_TB
SET REQUEST_BODY = SOAP_REQUEST,
RESPONSE_BODY = X_CLOB,
ERRORTYPE =
'Internal Error in Failure Response Query XML',
ERRORTEXT = L_ERROR,
ERRORCODE = HTTP_RESP.STATUS_CODE,
CREATION_DATE = SYSDATE
WHERE 1 = 1 AND VACATIONID = I.VACATIONID;
END;
END IF;

UTL_HTTP.END_RESPONSE (HTTP_RESP);
UTL_HTTP.DESTROY_REQUEST_CONTEXT (V_REQ_CONTEXT);
DBMS_OUTPUT.put_line (TO_CHAR (SYSDATE, 'DD/MM/YYYY HH24:MI:SS'));
COMMIT;
END LOOP;
END IF;
EXCEPTION
WHEN UTL_HTTP.END_OF_BODY
THEN
L_ERROR := SQLERRM;

UPDATE XXX_HR_ELTEZAM_VACATION_TB
SET REQUEST_BODY = SOAP_REQUEST,
RESPONSE_BODY = X_CLOB,
ERRORTYPE = HTTP_ERRORTYPE || 'END_OF_BODY',
ERRORTEXT = L_ERROR || ' / ' || TTP_ERRORTEXT,
ERRORCODE = HTTP_RESP.STATUS_CODE,
CREATION_DATE = SYSDATE
WHERE 1 = 1 AND VACATIONID = L_RUN;

COMMIT;

UTL_HTTP.END_RESPONSE (HTTP_RESP);
UTL_HTTP.DESTROY_REQUEST_CONTEXT (V_REQ_CONTEXT);
WHEN UTL_HTTP.TOO_MANY_REQUESTS
THEN
L_ERROR := SQLERRM;

UPDATE XXX_HR_ELTEZAM_VACATION_TB
SET REQUEST_BODY = SOAP_REQUEST,
RESPONSE_BODY = X_CLOB,
ERRORTYPE = HTTP_ERRORTYPE || 'TOO_MANY_REQUESTS',
ERRORTEXT = L_ERROR || ' / ' || TTP_ERRORTEXT,
ERRORCODE = HTTP_RESP.STATUS_CODE,
CREATION_DATE = SYSDATE
WHERE 1 = 1 AND VACATIONID = L_RUN;

COMMIT;
RAISE_APPLICATION_ERROR (
-20001,
'Request failed exception:' || UTL_HTTP.GET_DETAILED_SQLERRM);
WHEN OTHERS
THEN
L_ERROR := SQLERRM;
DBMS_OUTPUT.put_line ('OTHERS' || L_ERROR);

UPDATE XXX_HR_ELTEZAM_VACATION_TB
SET REQUEST_BODY = SOAP_REQUEST,
RESPONSE_BODY = X_CLOB,
ERRORTYPE = HTTP_ERRORTYPE || 'OTHERS',
ERRORTEXT = L_ERROR || ' / ' || TTP_ERRORTEXT,
ERRORCODE = HTTP_RESP.STATUS_CODE,
CREATION_DATE = SYSDATE
WHERE 1 = 1 AND VACATIONID = L_RUN;

COMMIT;
RAISE_APPLICATION_ERROR (
-20002,
'Request failed exception:' || UTL_HTTP.GET_DETAILED_SQLERRM);
END XXX_HR_VACATION;

-------------- CREATED BY AMR EL KELANY XXX_APPRAISAL ----UPDATED BY OMAR


FAYYAD------------------

PROCEDURE XXX_APPRAISAL (
ERRBUF OUT NOCOPY VARCHAR2,
RETCODE OUT NOCOPY NUMBER,
P_PERSON_ID NUMBER,
P_APPRAISALID XXX_HR_ELTEZAM_APPRAISAL_TB.APPRAISALID
%TYPE,
P_CONNECTION_TYPE VARCHAR2)
IS
V_REQ_CONTEXT UTL_HTTP.REQUEST_CONTEXT_KEY;
SOAP_REQUEST VARCHAR2 (32767);
HTTP_REQ UTL_HTTP.REQ;
HTTP_RESP UTL_HTTP.RESP;
L_BLOB BLOB;
L_DEST_OFFSET NUMBER := 1;
L_SRC_OFFSET NUMBER := 1;
L_LANG_CONTEXT NUMBER := 0;
L_WARNING NUMBER;
T_HTTP_VERSION VARCHAR2 (10) := 'HTTP/1.1';
T_CONTENT_TYPE VARCHAR2 (50) := 'text/xml; charset=utf-8';
T_URL VARCHAR2 (100);
X_CLOB CLOB;
L_BUFFER VARCHAR2 (32767);
HTTP_RESP_REQ_NUMBER VARCHAR2 (400);
HTTP_RESP_RAISEDBY VARCHAR2 (400);
HTTP_RESP_SOURCE VARCHAR2 (400);
HTTP_RESP_CODE VARCHAR2 (400);
HTTP_ERRORTYPE VARCHAR2 (400);
TTP_ERRORTEXT VARCHAR2 (4000);
L_ERROR VARCHAR2 (4000);
L_RUN NUMBER;
V_CHECK_LENGTH NUMBER;
L_OFFSET NUMBER := 1;
L_AMOUNT NUMBER := 2000;
L_BUFFER2 VARCHAR2 (32767);

CURSOR MAIN_DATA
IS
SELECT TRANSACTIONTYPE,
TO_CHAR (STARTDATE,
'DD-MM-RRRR',
'NLS_CALENDAR=''Arabic Hijrah''')
STARTDATE,
RESULT,
RESPONSE_BODY,
REQUEST_NUMBER,
REQUEST_BODY,
RATINGCODE,
RAISEDBY,
PERSON_ID,
NATIONALID,
ERRORTYPE,
ERRORTEXT,
ERRORCODE,
TO_CHAR (ENDDATE,
'DD-MM-RRRR',
'NLS_CALENDAR=''Arabic Hijrah''')
ENDDATE,
EMPLOYEEID,
CREATION_DATE,
APPRAISALTYPECODE,
APPRAISALID
FROM XXCUSTOM.XXX_HR_ELTEZAM_APPRAISAL_TB
WHERE 1 = 1
AND REQUEST_NUMBER IS NULL
AND (APPRAISALID = P_APPRAISALID OR P_APPRAISALID IS NULL)
AND (PERSON_ID = P_PERSON_ID OR P_PERSON_ID IS NULL);
BEGIN
COLLECT_WS_INFO ('ELTEZAM_APPRAISAL_INFO');

T_URL := G_DOMAIN_NAME || G_SERVICE_NAME;

DBMS_OUTPUT.put_line ('T_URL ' || T_URL);

MERGE INTO XXX_HR_ELTEZAM_APPRAISAL_TB D


USING (SELECT *
FROM XXX_HR_INT_APPRAISAL_WS
WHERE 1 = 1
AND (PERSON_ID = P_PERSON_ID OR P_PERSON_ID IS NULL))
V
ON (D.APPRAISALID = V.APPRAISALID)
WHEN MATCHED
THEN
UPDATE SET
D.PERSON_ID = V.PERSON_ID,
D.NATIONALID = V.NATIONALID,
D.STARTDATE = V.STARTDATE,
D.ENDDATE = V.ENDDATE,
D.APPRAISALTYPECODE = V.APPRAISALTYPECODE,
D.RESULT = V.RESULT,
D.RATINGCODE = V.RATINGCODE,
D.EMPLOYEEID = V.EMPLOYEEID,
D.TRANSACTIONTYPE = 'Update',
D.CREATION_DATE = SYSDATE,
D.REQUEST_NUMBER = NULL
WHERE 1 = 1
AND ( ( D.PERSON_ID <> V.PERSON_ID
OR ( D.PERSON_ID IS NULL
AND V.PERSON_ID IS NOT NULL)
OR ( V.PERSON_ID IS NULL
AND D.PERSON_ID IS NOT NULL))
OR ( D.NATIONALID <> V.NATIONALID
OR ( D.NATIONALID IS NULL
AND V.NATIONALID IS NOT NULL)
OR ( V.NATIONALID IS NULL
AND D.NATIONALID IS NOT NULL))
OR ( D.STARTDATE <> V.STARTDATE
OR ( D.STARTDATE IS NULL
AND V.STARTDATE IS NOT NULL)
OR ( V.STARTDATE IS NULL
AND D.STARTDATE IS NOT NULL))
OR ( D.ENDDATE <> V.ENDDATE
OR ( D.ENDDATE IS NULL
AND V.ENDDATE IS NOT NULL)
OR ( V.ENDDATE IS NULL
AND D.ENDDATE IS NOT NULL))
OR ( D.APPRAISALTYPECODE <> V.APPRAISALTYPECODE
OR ( D.APPRAISALTYPECODE IS NULL
AND V.APPRAISALTYPECODE IS NOT NULL)
OR ( V.APPRAISALTYPECODE IS NULL
AND D.APPRAISALTYPECODE IS NOT NULL))
OR ( D.RESULT <> V.RESULT
OR (D.RESULT IS NULL AND V.RESULT IS NOT NULL)
OR (V.RESULT IS NULL AND D.RESULT IS NOT NULL))
OR ( D.RATINGCODE <> V.RATINGCODE
OR ( D.RATINGCODE IS NULL
AND V.RATINGCODE IS NOT NULL)
OR ( V.RATINGCODE IS NULL
AND D.RATINGCODE IS NOT NULL))
OR ( D.EMPLOYEEID <> V.EMPLOYEEID
OR ( D.EMPLOYEEID IS NULL
AND V.EMPLOYEEID IS NOT NULL)
OR ( V.EMPLOYEEID IS NULL
AND D.EMPLOYEEID IS NOT NULL)))
WHEN NOT MATCHED
THEN
INSERT (D.PERSON_ID,
D.APPRAISALID,
D.NATIONALID,
D.STARTDATE,
D.ENDDATE,
D.APPRAISALTYPECODE,
D.RESULT,
D.RATINGCODE,
D.EMPLOYEEID,
D.TRANSACTIONTYPE,
D.CREATION_DATE)
VALUES (v.PERSON_ID,
v.APPRAISALID,
v.NATIONALID,
v.STARTDATE,
v.ENDDATE,
v.APPRAISALTYPECODE,
v.RESULT,
v.RATINGCODE,
v.EMPLOYEEID,
'Add',
SYSDATE);

COMMIT;

UPDATE XXX_HR_ELTEZAM_APPRAISAL_TB
SET TRANSACTIONTYPE = 'Delete', REQUEST_NUMBER = NULL
WHERE 1 = 1
AND APPRAISALID NOT IN (SELECT APPRAISALID
FROM XXX_HR_INT_APPRAISAL_WS
WHERE 1 = 1)
AND (APPRAISALID = P_APPRAISALID OR P_APPRAISALID IS NULL)
AND (PERSON_ID = P_PERSON_ID OR P_PERSON_ID IS NULL);

COMMIT;

IF P_CONNECTION_TYPE = 'WEB_SERVICE'
THEN
FOR I IN MAIN_DATA
LOOP
SOAP_REQUEST :=
'<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:tem="http://tempuri.org/"
xmlns:ver="http://yefi.gov.sa/PersonProfileCommonTypes/xml/schemas/version2.0"
xmlns:ver1="http://yefi.gov.sa/MCS/EltezamDataSchema/xml/schemas/version1.0">
<soapenv:Header/>
<soapenv:Body>
<tem:SubmitEmployeeAppraisalInfo>
<!--Optional:-->
<tem:employeeAppraisalInfo>
<!--Optional:-->
<PersonIdentifier>
<!--You have a CHOICE of the next 2 items at this level-->
<!--Optional:-->
<ver:IqamaNumber>'
|| I.NATIONALID
|| '</ver:IqamaNumber>
<!--Optional:-->
<ver:NationalID>'
|| I.NATIONALID
|| '</ver:NationalID>
</PersonIdentifier>
<!--Optional:-->
<EmployeeID>'
|| I.EMPLOYEEID
|| '</EmployeeID>
<!--Optional:-->
<AppraisalInfo>
<!--Optional:-->
<ver1:AppraisalID>'
|| I.APPRAISALID
|| '</ver1:AppraisalID>
<!--Optional:-->
<ver1:StartDate>'
|| I.STARTDATE
|| '</ver1:StartDate>
<!--Optional:-->
<ver1:EndDate>'
|| I.ENDDATE
|| '</ver1:EndDate>
<ver1:AppraisalTypeCode>'
|| I.APPRAISALTYPECODE
|| '</ver1:AppraisalTypeCode>
<ver1:TransactionType>'
|| I.TRANSACTIONTYPE
|| '</ver1:TransactionType>
<!--Optional:-->
<ver1:Result>'
|| I.RESULT
|| '</ver1:Result>
<ver1:RatingCode>'
|| I.RATINGCODE
|| '</ver1:RatingCode>
</AppraisalInfo>
</tem:employeeAppraisalInfo>
</tem:SubmitEmployeeAppraisalInfo>
</soapenv:Body>
</soapenv:Envelope>';
DBMS_OUTPUT.put_line (SOAP_REQUEST);
L_DEST_OFFSET := 1;
L_SRC_OFFSET := 1;
L_LANG_CONTEXT := 0;
L_WARNING := NULL;
DBMS_OUTPUT.put_line (TO_CHAR (SYSDATE, 'DD/MM/YYYY HH24:MI:SS'));
DBMS_OUTPUT.put_line (
L_DEST_OFFSET
|| ','
|| L_SRC_OFFSET
|| ','
|| L_LANG_CONTEXT
|| ','
|| L_WARNING);

UTL_HTTP.SET_TRANSFER_TIMEOUT (60);
----- Wallet Information -------
V_REQ_CONTEXT :=
UTL_HTTP.CREATE_REQUEST_CONTEXT (
WALLET_PATH => G_WALLET_PATH,
WALLET_PASSWORD => G_WALLET_PASSWORD);

---------------------- arabic------------------------------
DBMS_LOB.CREATETEMPORARY (L_BLOB, FALSE, DBMS_LOB.CALL);
DBMS_LOB.CONVERTTOBLOB (
DEST_LOB => L_BLOB,
SRC_CLOB => SOAP_REQUEST,
AMOUNT => DBMS_LOB.LOBMAXSIZE,
DEST_OFFSET => L_DEST_OFFSET,
SRC_OFFSET => L_SRC_OFFSET,
BLOB_CSID => NLS_CHARSET_ID ('AL32UTF8'), --AR8ISO8859P6
AL32UTF8 AL16UTF16
LANG_CONTEXT => L_LANG_CONTEXT,
WARNING => L_WARNING);
----------------------end arabic--------------------------
HTTP_REQ :=
UTL_HTTP.BEGIN_REQUEST (URL => T_URL,
REQUEST_CONTEXT => V_REQ_CONTEXT,
METHOD => 'POST',
HTTP_VERSION => 'HTTP/1.1');

DBMS_OUTPUT.put_line (TO_CHAR (SYSDATE, 'DD/MM/YYYY HH24:MI:SS'));


UTL_HTTP.SET_HEADER (HTTP_REQ, 'User-Agent', 'Mozilla/4.0');
UTL_HTTP.SET_HEADER (HTTP_REQ, 'Connection', 'Keep-Alive');

-------------------- arabic------------------------------
UTL_HTTP.SET_HEADER (HTTP_REQ,
'Content-Type',
'text/xml;charset=UTF-8');

UTL_HTTP.SET_HEADER (http_req,
'Content-Length',
DBMS_LOB.GETLENGTH (L_BLOB));

------------------end arabic--------------------------
UTL_HTTP.SET_HEADER (
HTTP_REQ,
'SOAPAction',

'"http://tempuri.org/IEltezamDataService/SubmitEmployeeAppraisalInfo"');

-------------------- arabic------------------------------
IF V_CHECK_LENGTH > 32767
THEN
UTL_HTTP.SET_TRANSFER_TIMEOUT (999);
UTL_HTTP.SET_HEADER (HTTP_REQ, 'Trasfer-Encoding', 'chunked');
DBMS_LOB.OPEN (L_BLOB, DBMS_LOB.LOB_READWRITE);

BEGIN
WHILE L_OFFSET < V_CHECK_LENGTH
LOOP
DBMS_LOB.READ (L_BLOB,
L_AMOUNT,
L_OFFSET,
L_BUFFER2);
UTL_HTTP.WRITE_RAW (HTTP_REQ, L_BUFFER2);
L_OFFSET := L_OFFSET + L_AMOUNT;
END LOOP;
END;

DBMS_LOB.CLOSE (L_BLOB);
ELSE
UTL_HTTP.WRITE_TEXT (R => HTTP_REQ, DATA => SOAP_REQUEST);
END IF;

------------------end arabic--------------------------
HTTP_RESP := UTL_HTTP.GET_RESPONSE (HTTP_REQ);

DBMS_LOB.CREATETEMPORARY (X_CLOB, FALSE);


DBMS_LOB.OPEN (X_CLOB, DBMS_LOB.LOB_READWRITE);

BEGIN
LOOP
UTL_HTTP.READ_TEXT (HTTP_RESP, L_BUFFER);
DBMS_LOB.WRITEAPPEND (X_CLOB, LENGTH (L_BUFFER), L_BUFFER);
END LOOP;
EXCEPTION
WHEN OTHERS
THEN
IF SQLCODE <> -29266
THEN
RAISE;
END IF;
END;

L_RUN := I.APPRAISALID;
DBMS_OUTPUT.put_line (L_RUN);
DBMS_OUTPUT.put_line (HTTP_RESP.STATUS_CODE);

IF (HTTP_RESP.STATUS_CODE = 200)
THEN
BEGIN
SELECT REQUESTNUMBER
INTO HTTP_RESP_REQ_NUMBER
FROM (SELECT XMLTYPE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
(X_CLOB),

'http://schemas.xmlsoap.org/soap/envelope/',
''),

'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"',
''),

'xmlns:xsd="http://www.w3.org/2001/XMLSchema"',
''),

'xmlns="http://tempuri.org/"',
''),

'xmlns="http://yefi.gov.sa/MCS/EltezamDataSchema/xml/schemas/version1.0"',
''),
'xmlns=""',
''),
's:',
''),
'xmlns=""',
''))
XMLT
FROM DUAL) XX,
XMLTABLE (
'Envelope/Body
/SubmitEmployeeAppraisalInfoResponse/SubmitEmployeeAppraisalInfoResult/
submitEmployeeAppraisalInfoResponseDetailObject'
PASSING XX.XMLT
COLUMNS REQUESTNUMBER VARCHAR2 (400)
PATH
'RequestNumber');

UPDATE XXX_HR_ELTEZAM_APPRAISAL_TB
SET REQUEST_BODY = SOAP_REQUEST,
RESPONSE_BODY = X_CLOB,
ERRORTYPE = NULL,
ERRORTEXT = NULL,
ERRORCODE = HTTP_RESP.STATUS_CODE,
REQUEST_NUMBER = HTTP_RESP_REQ_NUMBER,
CREATION_DATE = SYSDATE
WHERE 1 = 1 AND APPRAISALID = I.APPRAISALID;
EXCEPTION
WHEN OTHERS
THEN
SELECT FAULTSTRING || ' - ' || Code
INTO TTP_ERRORTEXT
FROM (SELECT XMLTYPE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE
(

REGEXP_REPLACE (
(X_CLOB),

'http://schemas.xmlsoap.org/soap/envelope/',
''),

'xmlns="http://tempuri.org/"',
''),

'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"',
''),

'xmlns:xsd="http://www.w3.org/2001/XMLSchema"',
''),
'
xmlns="http://yefi.gov.sa/YEFIErrorStructure/xml/schemas/version2.3"',
''),
'xmlns=""',
''),
's:',
''),
'xmlns=""',
''),

'xmlns="http://yefi.gov.sa/YEFIErrorStructure/xml/schemas/version2.3"',
''))
XMLT
FROM DUAL) XX,
XMLTABLE (
'Envelope/Body
/SubmitEmployeeAppraisalInfoResponse/SubmitEmployeeAppraisalInfoResult/
ServiceError'
PASSING XX.XMLT
COLUMNS FAULTSTRING VARCHAR2 (4000)
PATH 'ErrorText',
Code VARCHAR2 (4000)
PATH 'Code');

L_ERROR := SQLERRM;

UPDATE XXX_HR_ELTEZAM_APPRAISAL_TB
SET REQUEST_BODY = SOAP_REQUEST,
RESPONSE_BODY = X_CLOB,
ERRORTYPE = NULL,
ERRORTEXT = TTP_ERRORTEXT,
ERRORCODE = HTTP_RESP.STATUS_CODE,
CREATION_DATE = SYSDATE
WHERE 1 = 1 AND APPRAISALID = I.APPRAISALID;
END;
ELSE
BEGIN
SELECT FAULTSTRING
INTO TTP_ERRORTEXT
FROM (SELECT XMLTYPE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
REGEXP_REPLACE (
(X_CLOB),

'http://schemas.xmlsoap.org/soap/envelope/',
''),

'xmlns="http://tempuri.org/"',
''),

'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"',
''),

'xmlns:xsd="http://www.w3.org/2001/XMLSchema"',
''),
'
xmlns="http://yefi.gov.sa/YEFIErrorStructure/xml/schemas/version2.3"',
''),
'xmlns=""',
''),
's:',
''),
'xmlns=""',
''))
XMLT
FROM DUAL) XX,
XMLTABLE (
'Envelope/Body /Fault'
PASSING XX.XMLT
COLUMNS FAULTSTRING VARCHAR2 (1000)
PATH 'faultstring');

UPDATE XXX_HR_ELTEZAM_APPRAISAL_TB
SET REQUEST_BODY = SOAP_REQUEST,
RESPONSE_BODY = X_CLOB,
ERRORTYPE = NULL,
ERRORTEXT = TTP_ERRORTEXT,
ERRORCODE = HTTP_RESP.STATUS_CODE,
REQUEST_NUMBER = NULL,
CREATION_DATE = SYSDATE
WHERE 1 = 1 AND APPRAISALID = I.APPRAISALID;
EXCEPTION
WHEN OTHERS
THEN
L_ERROR := SQLERRM;

UPDATE XXX_HR_ELTEZAM_APPRAISAL_TB
SET REQUEST_BODY = SOAP_REQUEST,
RESPONSE_BODY = X_CLOB,
ERRORTYPE =
'Internal Error in Failure Response Query XML',
ERRORTEXT = L_ERROR,
ERRORCODE = HTTP_RESP.STATUS_CODE,
CREATION_DATE = SYSDATE
WHERE 1 = 1 AND APPRAISALID = I.APPRAISALID;
END;
END IF;

UTL_HTTP.END_RESPONSE (HTTP_RESP);
UTL_HTTP.DESTROY_REQUEST_CONTEXT (V_REQ_CONTEXT);
DBMS_OUTPUT.put_line (TO_CHAR (SYSDATE, 'DD/MM/YYYY HH24:MI:SS'));
COMMIT;
END LOOP;
END IF;
EXCEPTION
WHEN UTL_HTTP.END_OF_BODY
THEN
L_ERROR := SQLERRM;

UPDATE XXX_HR_ELTEZAM_APPRAISAL_TB
SET REQUEST_BODY = SOAP_REQUEST,
RESPONSE_BODY = X_CLOB,
ERRORTYPE = HTTP_ERRORTYPE || 'END_OF_BODY',
ERRORTEXT = L_ERROR || ' / ' || TTP_ERRORTEXT,
ERRORCODE = HTTP_RESP.STATUS_CODE,
CREATION_DATE = SYSDATE
WHERE 1 = 1 AND APPRAISALID = L_RUN;

COMMIT;

UTL_HTTP.END_RESPONSE (HTTP_RESP);
UTL_HTTP.DESTROY_REQUEST_CONTEXT (V_REQ_CONTEXT);
WHEN UTL_HTTP.TOO_MANY_REQUESTS
THEN
L_ERROR := SQLERRM;

UPDATE XXX_HR_ELTEZAM_APPRAISAL_TB
SET REQUEST_BODY = SOAP_REQUEST,
RESPONSE_BODY = X_CLOB,
ERRORTYPE = HTTP_ERRORTYPE || 'TOO_MANY_REQUESTS',
ERRORTEXT = L_ERROR || ' / ' || TTP_ERRORTEXT,
ERRORCODE = HTTP_RESP.STATUS_CODE,
CREATION_DATE = SYSDATE
WHERE 1 = 1 AND APPRAISALID = L_RUN;

COMMIT;
RAISE_APPLICATION_ERROR (
-20001,
'Request failed exception:' || UTL_HTTP.GET_DETAILED_SQLERRM);
WHEN OTHERS
THEN
L_ERROR := SQLERRM;
DBMS_OUTPUT.put_line ('OTHERS' || L_ERROR);

UPDATE XXX_HR_ELTEZAM_APPRAISAL_TB
SET REQUEST_BODY = SOAP_REQUEST,
RESPONSE_BODY = X_CLOB,
ERRORTYPE = HTTP_ERRORTYPE || 'OTHERS',
ERRORTEXT = L_ERROR || ' / ' || TTP_ERRORTEXT,
ERRORCODE = HTTP_RESP.STATUS_CODE,
CREATION_DATE = SYSDATE
WHERE 1 = 1 AND APPRAISALID = L_RUN;

COMMIT;
RAISE_APPLICATION_ERROR (
-20002,
'Request failed exception:' || UTL_HTTP.GET_DETAILED_SQLERRM);
END XXX_APPRAISAL;
END XXX_HR_ELTEZAM_WS_PKG;
/

You might also like