MIP_ENQUIRY.pck - address back-end of #439.
mip_quotation.pck - address back-end of #442. mip_security.pck - track CGI environment variables as part of #454. mip_quotation.pck - store files with the correct flow_id; git-svn-id: http://locode01.ad.dom/svn/WEBMIP/trunk@4733 248e525c-4dfb-0310-94bc-949c084e9493
This commit is contained in:
@@ -15,7 +15,6 @@ CREATE OR REPLACE PACKAGE mip_enquiry IS
|
|||||||
,required_mesc_code meters.mesc_code%TYPE);
|
,required_mesc_code meters.mesc_code%TYPE);
|
||||||
|
|
||||||
-- Public function and procedure declarations
|
-- Public function and procedure declarations
|
||||||
FUNCTION delete_enquiry(p_enquiryid IN NUMBER) RETURN BOOLEAN;
|
|
||||||
FUNCTION can_enquiry_be_deleted(p_enquiryid IN NUMBER) RETURN BOOLEAN;
|
FUNCTION can_enquiry_be_deleted(p_enquiryid IN NUMBER) RETURN BOOLEAN;
|
||||||
|
|
||||||
FUNCTION get_enquiry_status(p_enquiryid IN NUMBER) RETURN VARCHAR2;
|
FUNCTION get_enquiry_status(p_enquiryid IN NUMBER) RETURN VARCHAR2;
|
||||||
@@ -73,6 +72,26 @@ CREATE OR REPLACE PACKAGE mip_enquiry IS
|
|||||||
,p_existing_mesc_code meters.mesc_code%TYPE
|
,p_existing_mesc_code meters.mesc_code%TYPE
|
||||||
,p_required_mesc_code meters.mesc_code%TYPE
|
,p_required_mesc_code meters.mesc_code%TYPE
|
||||||
,p_existing_metr_code meters.code%TYPE) RETURN BOOLEAN;
|
,p_existing_metr_code meters.code%TYPE) RETURN BOOLEAN;
|
||||||
|
|
||||||
|
/*
|
||||||
|
FUNCTION delete_enquiry
|
||||||
|
- This function returns the deletion status of the enquiry provided
|
||||||
|
%param p_enqu_id id of the enquiry to be deleted
|
||||||
|
%param p_message reason for not deleting enquiry
|
||||||
|
%return boolean
|
||||||
|
{*} TRUE - all quotes have been deleted
|
||||||
|
{*} FALSE or UNKNOWN - quotes have not been deleted
|
||||||
|
*/
|
||||||
|
FUNCTION delete_enquiry(p_enqu_id IN enquiries.id%TYPE
|
||||||
|
,p_message OUT VARCHAR2) RETURN BOOLEAN;
|
||||||
|
|
||||||
|
/*
|
||||||
|
FUNCTION delete_enquiry
|
||||||
|
- This function returns the deletion status of the enquiry provided
|
||||||
|
%param p_enqu_id id of the enquiry to be deleted
|
||||||
|
%return reason for not deleting enquiry or NULL
|
||||||
|
*/
|
||||||
|
FUNCTION delete_enquiry(p_enqu_id IN enquiries.id%TYPE) RETURN VARCHAR2;
|
||||||
END mip_enquiry;
|
END mip_enquiry;
|
||||||
/
|
/
|
||||||
CREATE OR REPLACE PACKAGE BODY mip_enquiry IS
|
CREATE OR REPLACE PACKAGE BODY mip_enquiry IS
|
||||||
@@ -87,66 +106,8 @@ CREATE OR REPLACE PACKAGE BODY mip_enquiry IS
|
|||||||
,p_in => p_in);
|
,p_in => p_in);
|
||||||
/* $END*/
|
/* $END*/
|
||||||
END pl;
|
END pl;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
FUNCTION delete_enquiry
|
|
||||||
- This function returns the status of the enquiry provided
|
|
||||||
%param p_enquiryid - the enquiry we want to delete.
|
|
||||||
%return boolean - whether the enquiry was deleted or not
|
|
||||||
*/
|
|
||||||
FUNCTION delete_enquiry(p_enquiryid IN NUMBER) RETURN BOOLEAN AS
|
|
||||||
l_uri documents.uri%TYPE;
|
|
||||||
l_doc_id documents.id%TYPE;
|
|
||||||
l_count NUMBER := 0;
|
|
||||||
CURSOR c_get_doc_id(cp_enq_id NUMBER) IS
|
|
||||||
SELECT id
|
|
||||||
FROM document_roles
|
|
||||||
WHERE enqu_id = cp_enq_id;
|
|
||||||
CURSOR c_get_uri(cp_id NUMBER) IS
|
|
||||||
SELECT uri
|
|
||||||
FROM documents
|
|
||||||
WHERE id = cp_id;
|
|
||||||
CURSOR c_get_document_files(cp_enq_id NUMBER) IS
|
|
||||||
SELECT documents.uri
|
|
||||||
FROM documents
|
|
||||||
,document_roles
|
|
||||||
WHERE document_roles.enqu_id = cp_enq_id
|
|
||||||
AND documents.id = document_roles.docu_id;
|
|
||||||
BEGIN
|
|
||||||
--select count(*) into l_count from quotes where quotes.enqu_id=p_enquiryid;
|
|
||||||
--if l_count > 0 then
|
|
||||||
-- return false;
|
|
||||||
--end if;
|
|
||||||
IF NOT c_get_doc_id%ISOPEN THEN
|
|
||||||
OPEN c_get_doc_id(p_enquiryid);
|
|
||||||
END IF;
|
|
||||||
FETCH c_get_doc_id
|
|
||||||
INTO l_doc_id;
|
|
||||||
CLOSE c_get_doc_id;
|
|
||||||
|
|
||||||
IF NOT c_get_uri%ISOPEN THEN
|
|
||||||
OPEN c_get_uri(l_doc_id);
|
|
||||||
END IF;
|
|
||||||
FETCH c_get_uri
|
|
||||||
INTO l_uri;
|
|
||||||
CLOSE c_get_uri;
|
|
||||||
|
|
||||||
DELETE enquiry_roles
|
|
||||||
WHERE enquiry_roles.enqu_id = p_enquiryid;
|
|
||||||
DELETE enquiry_events
|
|
||||||
WHERE enquiry_events.enqu_id = p_enquiryid;
|
|
||||||
FOR doc_rec IN c_get_document_files(p_enquiryid) LOOP
|
|
||||||
DELETE wwv_flow_files
|
|
||||||
WHERE wwv_flow_files.NAME = doc_rec.uri;
|
|
||||||
END LOOP;
|
|
||||||
DELETE document_roles
|
|
||||||
WHERE document_roles.enqu_id = p_enquiryid;
|
|
||||||
DELETE documents
|
|
||||||
WHERE documents.id = l_doc_id;
|
|
||||||
DELETE enquiries
|
|
||||||
WHERE enquiries.id = p_enquiryid;
|
|
||||||
RETURN TRUE;
|
|
||||||
END delete_enquiry;
|
|
||||||
/*
|
|
||||||
FUNCTION can_enquiry_be_deleted
|
FUNCTION can_enquiry_be_deleted
|
||||||
- This function returns the status of the enquiry provided
|
- This function returns the status of the enquiry provided
|
||||||
- and associated quotes to see if it can be deleted
|
- and associated quotes to see if it can be deleted
|
||||||
@@ -156,14 +117,13 @@ CREATE OR REPLACE PACKAGE BODY mip_enquiry IS
|
|||||||
FUNCTION can_enquiry_be_deleted(p_enquiryid IN NUMBER) RETURN BOOLEAN AS
|
FUNCTION can_enquiry_be_deleted(p_enquiryid IN NUMBER) RETURN BOOLEAN AS
|
||||||
-- cursor to get the current enquiry
|
-- cursor to get the current enquiry
|
||||||
CURSOR c_check_all_quotes(cp_enqu_id NUMBER) IS
|
CURSOR c_check_all_quotes(cp_enqu_id NUMBER) IS
|
||||||
select count(qute_id)
|
SELECT COUNT(qute_id)
|
||||||
from v_current_quote_status
|
FROM v_current_quote_status
|
||||||
where QUTE_ID in
|
WHERE qute_id IN (SELECT id
|
||||||
(SELECT ID
|
FROM quotes
|
||||||
FROM quotes
|
WHERE enqu_id = cp_enqu_id)
|
||||||
WHERE enqu_id = cp_enqu_id)
|
AND qust_code IN ('SELECTED', 'ACCEPTED');
|
||||||
and QUST_CODE in ('SELECTED','ACCEPTED');
|
l_quotes_cannot_del NUMBER := 0;
|
||||||
l_quotes_cannot_del number := 0;
|
|
||||||
BEGIN
|
BEGIN
|
||||||
IF NOT c_check_all_quotes%ISOPEN THEN
|
IF NOT c_check_all_quotes%ISOPEN THEN
|
||||||
OPEN c_check_all_quotes(p_enquiryid);
|
OPEN c_check_all_quotes(p_enquiryid);
|
||||||
@@ -172,12 +132,67 @@ CREATE OR REPLACE PACKAGE BODY mip_enquiry IS
|
|||||||
FETCH c_check_all_quotes
|
FETCH c_check_all_quotes
|
||||||
INTO l_quotes_cannot_del;
|
INTO l_quotes_cannot_del;
|
||||||
CLOSE c_check_all_quotes;
|
CLOSE c_check_all_quotes;
|
||||||
if l_quotes_cannot_del > 0 then
|
IF l_quotes_cannot_del > 0 THEN
|
||||||
return false;
|
RETURN FALSE;
|
||||||
else
|
ELSE
|
||||||
return true;
|
RETURN TRUE;
|
||||||
end if;
|
END IF;
|
||||||
END can_enquiry_be_deleted;
|
END can_enquiry_be_deleted;
|
||||||
|
|
||||||
|
/*
|
||||||
|
FUNCTION delete_enquiry
|
||||||
|
- This function returns the status of the enquiry provided
|
||||||
|
%param p_enquiryid - the enquiry we want to delete.
|
||||||
|
%return boolean - whether the enquiry was deleted or not
|
||||||
|
*/
|
||||||
|
FUNCTION delete_enquiry(p_enqu_id IN enquiries.id%TYPE
|
||||||
|
,p_message OUT VARCHAR2) RETURN BOOLEAN IS
|
||||||
|
l_enquiry_deleted BOOLEAN := TRUE;
|
||||||
|
BEGIN
|
||||||
|
pl('delete_enquiry:entry:' || p_enqu_id
|
||||||
|
,$$PLSQL_LINE);
|
||||||
|
--
|
||||||
|
-- attempt to delete all associated quotes
|
||||||
|
--
|
||||||
|
IF NOT
|
||||||
|
mip_quotation.delete_quotes_for_enquiry(p_enqu_id => p_enqu_id
|
||||||
|
,p_message => p_message) THEN
|
||||||
|
-- unable to delete quotations
|
||||||
|
l_enquiry_deleted := FALSE;
|
||||||
|
ELSE
|
||||||
|
--
|
||||||
|
-- delete all associations with this enquiry
|
||||||
|
--
|
||||||
|
|
||||||
|
DELETE FROM quote_reasoning
|
||||||
|
WHERE enqu_id = p_enqu_id;
|
||||||
|
|
||||||
|
DELETE FROM enquiry_events
|
||||||
|
WHERE enqu_id = p_enqu_id;
|
||||||
|
|
||||||
|
DELETE FROM enquiry_roles
|
||||||
|
WHERE enqu_id = p_enqu_id;
|
||||||
|
|
||||||
|
DELETE FROM enquiries
|
||||||
|
WHERE id = p_enqu_id;
|
||||||
|
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
RETURN(l_enquiry_deleted = TRUE);
|
||||||
|
END delete_enquiry;
|
||||||
|
|
||||||
|
FUNCTION delete_enquiry(p_enqu_id IN enquiries.id%TYPE) RETURN VARCHAR2 IS
|
||||||
|
l_message VARCHAR2(240);
|
||||||
|
l_dummy BOOLEAN;
|
||||||
|
BEGIN
|
||||||
|
pl('delete_enquiry(msg):entry:' || p_enqu_id);
|
||||||
|
|
||||||
|
l_dummy := delete_enquiry(p_enqu_id => p_enqu_id
|
||||||
|
,p_message => l_message);
|
||||||
|
|
||||||
|
pl('delete_enquiry(msg):exit:' || l_message);
|
||||||
|
RETURN(l_message);
|
||||||
|
END delete_enquiry;
|
||||||
/*
|
/*
|
||||||
FUNCTION get_enquiry_status
|
FUNCTION get_enquiry_status
|
||||||
- This function returns the status of the enquiry provided
|
- This function returns the status of the enquiry provided
|
||||||
@@ -242,7 +257,9 @@ CREATE OR REPLACE PACKAGE BODY mip_enquiry IS
|
|||||||
,p_partyid IN NUMBER
|
,p_partyid IN NUMBER
|
||||||
,p_rolecode IN VARCHAR2) RETURN BOOLEAN AS
|
,p_rolecode IN VARCHAR2) RETURN BOOLEAN AS
|
||||||
BEGIN
|
BEGIN
|
||||||
pl('set_enquiry_role:entry:'||p_enquiryid||':'||p_partyid||':'||p_rolecode,$$plsql_line);
|
pl('set_enquiry_role:entry:' || p_enquiryid || ':' || p_partyid || ':' ||
|
||||||
|
p_rolecode
|
||||||
|
,$$PLSQL_LINE);
|
||||||
INSERT INTO enquiry_roles
|
INSERT INTO enquiry_roles
|
||||||
(enqu_id
|
(enqu_id
|
||||||
,prty_id
|
,prty_id
|
||||||
@@ -254,12 +271,14 @@ CREATE OR REPLACE PACKAGE BODY mip_enquiry IS
|
|||||||
,SYSDATE
|
,SYSDATE
|
||||||
,p_rolecode);
|
,p_rolecode);
|
||||||
|
|
||||||
pl('set_enquiry_role:exit',$$plsql_line);
|
pl('set_enquiry_role:exit'
|
||||||
|
,$$PLSQL_LINE);
|
||||||
RETURN TRUE;
|
RETURN TRUE;
|
||||||
--
|
--
|
||||||
EXCEPTION
|
EXCEPTION
|
||||||
WHEN OTHERS THEN
|
WHEN OTHERS THEN
|
||||||
pl('set_enquiry_role:EXCEPTION:'||SQLERRM,$$plsql_line);
|
pl('set_enquiry_role:EXCEPTION:' || SQLERRM
|
||||||
|
,$$PLSQL_LINE);
|
||||||
RAISE;
|
RAISE;
|
||||||
END set_enquiry_role;
|
END set_enquiry_role;
|
||||||
--
|
--
|
||||||
@@ -278,8 +297,10 @@ CREATE OR REPLACE PACKAGE BODY mip_enquiry IS
|
|||||||
,p_rolecode IN VARCHAR2
|
,p_rolecode IN VARCHAR2
|
||||||
,p_description IN VARCHAR2) RETURN BOOLEAN AS
|
,p_description IN VARCHAR2) RETURN BOOLEAN AS
|
||||||
BEGIN
|
BEGIN
|
||||||
pl('set_enquiry_role:entry:'||p_enquiryid||':'||p_partyid||':'||p_rolecode||':'||p_description,$$plsql_line);
|
pl('set_enquiry_role:entry:' || p_enquiryid || ':' || p_partyid || ':' ||
|
||||||
|
p_rolecode || ':' || p_description
|
||||||
|
,$$PLSQL_LINE);
|
||||||
|
|
||||||
INSERT INTO enquiry_roles
|
INSERT INTO enquiry_roles
|
||||||
(enqu_id
|
(enqu_id
|
||||||
,prty_id
|
,prty_id
|
||||||
@@ -293,13 +314,15 @@ CREATE OR REPLACE PACKAGE BODY mip_enquiry IS
|
|||||||
,p_rolecode
|
,p_rolecode
|
||||||
,p_description);
|
,p_description);
|
||||||
|
|
||||||
pl('set_enquiry_role:exit',$$plsql_line);
|
pl('set_enquiry_role:exit'
|
||||||
|
,$$PLSQL_LINE);
|
||||||
|
|
||||||
RETURN TRUE;
|
RETURN TRUE;
|
||||||
--
|
--
|
||||||
EXCEPTION
|
EXCEPTION
|
||||||
WHEN OTHERS THEN
|
WHEN OTHERS THEN
|
||||||
pl('set_enquiry_role:EXCEPTION:'||SQLERRM,$$plsql_line);
|
pl('set_enquiry_role:EXCEPTION:' || SQLERRM
|
||||||
|
,$$PLSQL_LINE);
|
||||||
RAISE;
|
RAISE;
|
||||||
END set_enquiry_role;
|
END set_enquiry_role;
|
||||||
--
|
--
|
||||||
@@ -584,8 +607,10 @@ CREATE OR REPLACE PACKAGE BODY mip_enquiry IS
|
|||||||
l_dummy NUMBER;
|
l_dummy NUMBER;
|
||||||
BEGIN
|
BEGIN
|
||||||
|
|
||||||
pl('show_qmax:entry:'||p_enty_code||':'||p_existing_metr_code||':'||p_existing_mesc_code||':'||p_required_mesc_code,$$PLSQL_LINE);
|
pl('show_qmax:entry:' || p_enty_code || ':' || p_existing_metr_code || ':' ||
|
||||||
|
p_existing_mesc_code || ':' || p_required_mesc_code
|
||||||
|
,$$PLSQL_LINE);
|
||||||
|
|
||||||
BEGIN
|
BEGIN
|
||||||
SELECT NULL
|
SELECT NULL
|
||||||
INTO l_dummy
|
INTO l_dummy
|
||||||
@@ -599,7 +624,8 @@ CREATE OR REPLACE PACKAGE BODY mip_enquiry IS
|
|||||||
l_return := TRUE;
|
l_return := TRUE;
|
||||||
EXCEPTION
|
EXCEPTION
|
||||||
WHEN no_data_found THEN
|
WHEN no_data_found THEN
|
||||||
pl('show_qmax:QMAX IS HIDDEN',$$PLSQL_LINE);
|
pl('show_qmax:QMAX IS HIDDEN'
|
||||||
|
,$$PLSQL_LINE);
|
||||||
l_return := FALSE;
|
l_return := FALSE;
|
||||||
END;
|
END;
|
||||||
|
|
||||||
@@ -617,14 +643,16 @@ CREATE OR REPLACE PACKAGE BODY mip_enquiry IS
|
|||||||
l_required_mesc_enquiry := TRUE;
|
l_required_mesc_enquiry := TRUE;
|
||||||
EXCEPTION
|
EXCEPTION
|
||||||
WHEN no_data_found THEN
|
WHEN no_data_found THEN
|
||||||
pl('show_qmax:NOT A REQUIRED MESC ENQUIRY',$$PLSQL_LINE);
|
pl('show_qmax:NOT A REQUIRED MESC ENQUIRY'
|
||||||
|
,$$PLSQL_LINE);
|
||||||
l_required_mesc_enquiry := FALSE;
|
l_required_mesc_enquiry := FALSE;
|
||||||
END;
|
END;
|
||||||
|
|
||||||
IF l_required_mesc_enquiry
|
IF l_required_mesc_enquiry
|
||||||
AND (nvl(p_required_mesc_code
|
AND (nvl(p_required_mesc_code
|
||||||
,'OTHER') <> 'OTHER') THEN
|
,'OTHER') <> 'OTHER') THEN
|
||||||
pl('show_qmax:REQUIRED MESC NOT OTHER',$$PLSQL_LINE);
|
pl('show_qmax:REQUIRED MESC NOT OTHER'
|
||||||
|
,$$PLSQL_LINE);
|
||||||
l_return := FALSE;
|
l_return := FALSE;
|
||||||
ELSE
|
ELSE
|
||||||
BEGIN
|
BEGIN
|
||||||
@@ -639,7 +667,8 @@ CREATE OR REPLACE PACKAGE BODY mip_enquiry IS
|
|||||||
l_existing_mesc_enquiry := TRUE;
|
l_existing_mesc_enquiry := TRUE;
|
||||||
EXCEPTION
|
EXCEPTION
|
||||||
WHEN no_data_found THEN
|
WHEN no_data_found THEN
|
||||||
pl('show_qmax:NOT EXISTING MESC ENQUIRY',$$PLSQL_LINE);
|
pl('show_qmax:NOT EXISTING MESC ENQUIRY'
|
||||||
|
,$$PLSQL_LINE);
|
||||||
l_existing_mesc_enquiry := FALSE;
|
l_existing_mesc_enquiry := FALSE;
|
||||||
END;
|
END;
|
||||||
|
|
||||||
@@ -650,13 +679,16 @@ CREATE OR REPLACE PACKAGE BODY mip_enquiry IS
|
|||||||
,'OTHER') = 'OTHER' AND
|
,'OTHER') = 'OTHER' AND
|
||||||
nvl(p_existing_mesc_code
|
nvl(p_existing_mesc_code
|
||||||
,'OTHER') <> 'OTHER')) THEN
|
,'OTHER') <> 'OTHER')) THEN
|
||||||
pl('show_qmax:EXISTING METR OR MESC NOT OTHER',$$PLSQL_LINE);
|
pl('show_qmax:EXISTING METR OR MESC NOT OTHER'
|
||||||
|
,$$PLSQL_LINE);
|
||||||
l_return := FALSE;
|
l_return := FALSE;
|
||||||
END IF;
|
END IF;
|
||||||
END IF;
|
END IF;
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
pl('show_qmax:exit:'||CASE l_return WHEN TRUE THEN 'TRUE' ELSE 'FALSE' END,$$PLSQL_LINE);
|
pl('show_qmax:exit:' || CASE l_return WHEN TRUE THEN 'TRUE' ELSE
|
||||||
|
'FALSE' END
|
||||||
|
,$$PLSQL_LINE);
|
||||||
RETURN l_return;
|
RETURN l_return;
|
||||||
|
|
||||||
END show_qmax;
|
END show_qmax;
|
||||||
|
|||||||
@@ -4,6 +4,8 @@ CREATE OR REPLACE PACKAGE mip_quotation IS
|
|||||||
-- Created : 15/11/2007 11:27:58
|
-- Created : 15/11/2007 11:27:58
|
||||||
-- Purpose : Handle life-cycle of quotations
|
-- Purpose : Handle life-cycle of quotations
|
||||||
|
|
||||||
|
TYPE t_tab_messages IS TABLE OF VARCHAR2(240);
|
||||||
|
|
||||||
/** Determines whether the given enquiry is ready to quote for
|
/** Determines whether the given enquiry is ready to quote for
|
||||||
i.e. have all the mandatory fields been completed
|
i.e. have all the mandatory fields been completed
|
||||||
|
|
||||||
@@ -116,6 +118,32 @@ CREATE OR REPLACE PACKAGE mip_quotation IS
|
|||||||
|
|
||||||
PROCEDURE lapse_quotes_job;
|
PROCEDURE lapse_quotes_job;
|
||||||
|
|
||||||
|
/** Delete a quote
|
||||||
|
%param p_qute_id id of the quote to be deleted
|
||||||
|
%param p_message reason for not deleting quote
|
||||||
|
%return boolean
|
||||||
|
{*} TRUE - quote has been deleted
|
||||||
|
{*} FALSE or UNKNOWN - quote has not been deleted
|
||||||
|
*/
|
||||||
|
FUNCTION delete_quote(p_qute_id IN quotes.id%TYPE
|
||||||
|
,p_message OUT VARCHAR2) RETURN BOOLEAN;
|
||||||
|
|
||||||
|
/** Delete a quote
|
||||||
|
%param p_qute_id id of the quote to be deleted
|
||||||
|
%return reason for not deleting quote
|
||||||
|
*/
|
||||||
|
FUNCTION delete_quote(p_qute_id IN quotes.id%TYPE) RETURN VARCHAR2;
|
||||||
|
|
||||||
|
/** Delete all quotes associated with an enquiry
|
||||||
|
%param p_enqu_id id of the quote to be deleted
|
||||||
|
%param p_message reason for not deleting quote
|
||||||
|
%return boolean
|
||||||
|
{*} TRUE - all quotes have been deleted
|
||||||
|
{*} FALSE or UNKNOWN - quotes have not been deleted
|
||||||
|
*/
|
||||||
|
FUNCTION delete_quotes_for_enquiry(p_enqu_id IN enquiries.id%TYPE
|
||||||
|
,p_message OUT VARCHAR2) RETURN BOOLEAN;
|
||||||
|
|
||||||
/** Return a message if the Tripartite agreement is broached
|
/** Return a message if the Tripartite agreement is broached
|
||||||
%param p_rec record containing enquiry details to be checked
|
%param p_rec record containing enquiry details to be checked
|
||||||
%return message is the agreement was broached
|
%return message is the agreement was broached
|
||||||
@@ -194,6 +222,33 @@ CREATE OR REPLACE PACKAGE BODY mip_quotation IS
|
|||||||
/* $END*/
|
/* $END*/
|
||||||
END pl;
|
END pl;
|
||||||
|
|
||||||
|
PROCEDURE add_quote_reason(p_enqu_id IN enquiries.id%TYPE
|
||||||
|
,p_reason IN VARCHAR2 --quote_reasoning.reason%TYPE
|
||||||
|
,p_internal_or_external IN quote_reasoning.internal_or_external%TYPE) IS
|
||||||
|
BEGIN
|
||||||
|
pl('add_quote_reason:' || p_enqu_id || ':' || p_reason
|
||||||
|
,$$PLSQL_LINE);
|
||||||
|
BEGIN
|
||||||
|
INSERT INTO quote_reasoning
|
||||||
|
(enqu_id
|
||||||
|
,reason
|
||||||
|
,internal_or_external
|
||||||
|
,id)
|
||||||
|
VALUES
|
||||||
|
(p_enqu_id
|
||||||
|
,substr(p_reason
|
||||||
|
,1
|
||||||
|
,239)
|
||||||
|
,p_internal_or_external
|
||||||
|
,qure_seq.NEXTVAL);
|
||||||
|
EXCEPTION
|
||||||
|
WHEN OTHERS THEN
|
||||||
|
pl('add_quote_reason:' || SQLERRM
|
||||||
|
,$$PLSQL_LINE);
|
||||||
|
RAISE;
|
||||||
|
END;
|
||||||
|
END add_quote_reason;
|
||||||
|
|
||||||
PROCEDURE add_quote_event(p_qute_id IN quotes.id%TYPE
|
PROCEDURE add_quote_event(p_qute_id IN quotes.id%TYPE
|
||||||
,p_qust_code quote_statuses.code%TYPE
|
,p_qust_code quote_statuses.code%TYPE
|
||||||
,p_description quote_events.description%TYPE DEFAULT NULL
|
,p_description quote_events.description%TYPE DEFAULT NULL
|
||||||
@@ -380,6 +435,150 @@ CREATE OR REPLACE PACKAGE BODY mip_quotation IS
|
|||||||
|
|
||||||
END select_quote;
|
END select_quote;
|
||||||
|
|
||||||
|
FUNCTION delete_quote(p_qute_id IN quotes.id%TYPE
|
||||||
|
,p_message OUT VARCHAR2) RETURN BOOLEAN IS
|
||||||
|
l_qust_code quote_statuses.code%TYPE;
|
||||||
|
l_quote_deleted BOOLEAN;
|
||||||
|
l_enqu_id enquiries.id%TYPE;
|
||||||
|
TYPE t_rowid IS TABLE OF ROWID;
|
||||||
|
l_rowid t_rowid := t_rowid();
|
||||||
|
BEGIN
|
||||||
|
pl('delete_quote:entry:' || p_qute_id
|
||||||
|
,$$PLSQL_LINE);
|
||||||
|
|
||||||
|
BEGIN
|
||||||
|
SELECT enqu_id
|
||||||
|
INTO l_enqu_id
|
||||||
|
FROM quotes
|
||||||
|
WHERE id = p_qute_id;
|
||||||
|
EXCEPTION
|
||||||
|
WHEN no_data_found THEN
|
||||||
|
NULL;
|
||||||
|
END;
|
||||||
|
|
||||||
|
cout_assert.isnotnull(p_value => l_enqu_id
|
||||||
|
,p_message => 'Unable to find quote ' || p_qute_id);
|
||||||
|
|
||||||
|
SELECT qust_code
|
||||||
|
INTO l_qust_code
|
||||||
|
FROM v_current_quote_status
|
||||||
|
WHERE qute_id = p_qute_id;
|
||||||
|
|
||||||
|
IF l_qust_code IN ('SELECTED', 'ACCEPTED') THEN
|
||||||
|
l_quote_deleted := FALSE;
|
||||||
|
p_message := 'Unable to delete quote ' || p_qute_id ||
|
||||||
|
' as it has a status of ' || initcap(l_qust_code);
|
||||||
|
ELSE
|
||||||
|
--
|
||||||
|
-- delete all associations with this quote
|
||||||
|
--
|
||||||
|
|
||||||
|
DELETE FROM quote_events
|
||||||
|
WHERE qute_id = p_qute_id;
|
||||||
|
|
||||||
|
DELETE FROM apex_application_files aaf
|
||||||
|
WHERE aaf.NAME IN (SELECT uri
|
||||||
|
FROM documents docu
|
||||||
|
,document_roles doro
|
||||||
|
WHERE doro.qute_id = p_qute_id
|
||||||
|
AND doro.docu_id = docu.id
|
||||||
|
AND docu.docu_type = 'INDO');
|
||||||
|
|
||||||
|
DELETE FROM document_events doev
|
||||||
|
WHERE doev.docu_id IN
|
||||||
|
(SELECT docu_id
|
||||||
|
FROM document_roles doro
|
||||||
|
WHERE doro.qute_id = p_qute_id);
|
||||||
|
|
||||||
|
-- document roles knows which files should be deleted
|
||||||
|
-- through a FK
|
||||||
|
-- 1. Gather the rowids of the documents first,
|
||||||
|
-- 2. Remove the document role
|
||||||
|
-- 3. Remove the associated document
|
||||||
|
SELECT ROWID BULK COLLECT
|
||||||
|
INTO l_rowid
|
||||||
|
FROM documents
|
||||||
|
WHERE id IN (SELECT docu_id
|
||||||
|
FROM document_roles
|
||||||
|
WHERE qute_id = p_qute_id);
|
||||||
|
|
||||||
|
DELETE FROM document_roles doro
|
||||||
|
WHERE doro.qute_id = p_qute_id;
|
||||||
|
|
||||||
|
FORALL l_idx IN INDICES OF l_rowid
|
||||||
|
DELETE FROM documents
|
||||||
|
WHERE ROWID = l_rowid(l_idx);
|
||||||
|
|
||||||
|
DELETE FROM quote_items
|
||||||
|
WHERE qute_id = p_qute_id;
|
||||||
|
|
||||||
|
DELETE FROM quote_roles
|
||||||
|
WHERE qute_id = p_qute_id;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- record that the quote was deleted
|
||||||
|
--
|
||||||
|
add_quote_reason(p_enqu_id => l_enqu_id
|
||||||
|
,p_reason => 'QUOTE ' || p_qute_id ||
|
||||||
|
' DELETED BY REQUEST'
|
||||||
|
,p_internal_or_external => gc_internal_reason);
|
||||||
|
|
||||||
|
--
|
||||||
|
-- delete the quote itself
|
||||||
|
--
|
||||||
|
DELETE FROM quotes
|
||||||
|
WHERE id = p_qute_id;
|
||||||
|
l_quote_deleted := TRUE;
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
pl('delete_quote:exit:' || p_qute_id || ':' || CASE l_quote_deleted WHEN TRUE THEN
|
||||||
|
'TRUE' ELSE 'FALSE' END
|
||||||
|
,$$PLSQL_LINE);
|
||||||
|
|
||||||
|
RETURN(l_quote_deleted = TRUE);
|
||||||
|
EXCEPTION
|
||||||
|
WHEN OTHERS THEN
|
||||||
|
cout_err.report_and_stop;
|
||||||
|
END delete_quote;
|
||||||
|
|
||||||
|
FUNCTION delete_quote(p_qute_id IN quotes.id%TYPE) RETURN VARCHAR2 IS
|
||||||
|
l_dummy BOOLEAN;
|
||||||
|
l_message VARCHAR2(240);
|
||||||
|
BEGIN
|
||||||
|
pl('delete_quote(msg):entry:' || p_qute_id);
|
||||||
|
|
||||||
|
l_dummy := delete_quote(p_qute_id => p_qute_id
|
||||||
|
,p_message => l_message);
|
||||||
|
|
||||||
|
pl('delete_quote(msg):exit:' || l_message);
|
||||||
|
RETURN(l_message);
|
||||||
|
|
||||||
|
END delete_quote;
|
||||||
|
|
||||||
|
FUNCTION delete_quotes_for_enquiry(p_enqu_id IN enquiries.id%TYPE
|
||||||
|
,p_message OUT VARCHAR2) RETURN BOOLEAN IS
|
||||||
|
l_quotes_deleted BOOLEAN := TRUE;
|
||||||
|
BEGIN
|
||||||
|
pl('delete_quotes_for_enquiry:entry:' || p_enqu_id
|
||||||
|
,$$PLSQL_LINE);
|
||||||
|
|
||||||
|
FOR l_quote IN (SELECT id
|
||||||
|
FROM quotes
|
||||||
|
WHERE enqu_id = p_enqu_id) LOOP
|
||||||
|
IF NOT delete_quote(p_qute_id => l_quote.id
|
||||||
|
,p_message => p_message) THEN
|
||||||
|
l_quotes_deleted := FALSE;
|
||||||
|
EXIT;
|
||||||
|
END IF;
|
||||||
|
END LOOP;
|
||||||
|
|
||||||
|
pl('delete_quotes_for_enquiry:' || CASE l_quotes_deleted WHEN TRUE THEN
|
||||||
|
'TRUE' ELSE 'FALSE' END
|
||||||
|
,$$PLSQL_LINE);
|
||||||
|
|
||||||
|
RETURN(l_quotes_deleted = TRUE);
|
||||||
|
END delete_quotes_for_enquiry;
|
||||||
|
|
||||||
PROCEDURE lapse_quotes_job IS
|
PROCEDURE lapse_quotes_job IS
|
||||||
l_current_date DATE := trunc(SYSDATE);
|
l_current_date DATE := trunc(SYSDATE);
|
||||||
BEGIN
|
BEGIN
|
||||||
@@ -1335,33 +1534,6 @@ RECEIVED AT THIS ADDRESS CANNOT BE RESPONDED TO.');
|
|||||||
|
|
||||||
END return_mandatory_messages;
|
END return_mandatory_messages;
|
||||||
|
|
||||||
PROCEDURE add_quote_reason(p_enqu_id IN enquiries.id%TYPE
|
|
||||||
,p_reason IN VARCHAR2 --quote_reasoning.reason%TYPE
|
|
||||||
,p_internal_or_external IN quote_reasoning.internal_or_external%TYPE) IS
|
|
||||||
BEGIN
|
|
||||||
pl('add_quote_reason:' || p_enqu_id || ':' || p_reason
|
|
||||||
,$$PLSQL_LINE);
|
|
||||||
BEGIN
|
|
||||||
INSERT INTO quote_reasoning
|
|
||||||
(enqu_id
|
|
||||||
,reason
|
|
||||||
,internal_or_external
|
|
||||||
,id)
|
|
||||||
VALUES
|
|
||||||
(p_enqu_id
|
|
||||||
,substr(p_reason
|
|
||||||
,1
|
|
||||||
,239)
|
|
||||||
,p_internal_or_external
|
|
||||||
,qure_seq.NEXTVAL);
|
|
||||||
EXCEPTION
|
|
||||||
WHEN OTHERS THEN
|
|
||||||
pl('add_quote_reason:' || SQLERRM
|
|
||||||
,$$PLSQL_LINE);
|
|
||||||
RAISE;
|
|
||||||
END;
|
|
||||||
END add_quote_reason;
|
|
||||||
|
|
||||||
FUNCTION get_u_meter_size(p_qmax IN NUMBER)
|
FUNCTION get_u_meter_size(p_qmax IN NUMBER)
|
||||||
RETURN meter_size_codes.code%TYPE IS
|
RETURN meter_size_codes.code%TYPE IS
|
||||||
l_meter_size_code meter_size_codes.code%TYPE;
|
l_meter_size_code meter_size_codes.code%TYPE;
|
||||||
|
|||||||
@@ -1447,7 +1447,7 @@ CREATE OR REPLACE PACKAGE BODY mip_quotation_document IS
|
|||||||
plpdf.SendDoc(l_blob);
|
plpdf.SendDoc(l_blob);
|
||||||
--punt the created pdf into the APEX files table
|
--punt the created pdf into the APEX files table
|
||||||
insert into wwv_flow_files( name, title, mime_type, flow_id, doc_size ,description, blob_content )
|
insert into wwv_flow_files( name, title, mime_type, flow_id, doc_size ,description, blob_content )
|
||||||
values ( sys_guid()||'/quote_'||p_quote_data.quote_ref||'.pdf', 'Quotation - '||p_quote_data.quote_ref, 'application/pdf', 190, DBMS_LOB.GETLENGTH(l_blob),'this is an auto generated quotation from mip_quotation_document.generate_detailed_quote for quotation '||p_quote_data.quote_ref, l_blob)
|
values ( sys_guid()||'/quote_'||p_quote_data.quote_ref||'.pdf', 'Quotation - '||p_quote_data.quote_ref, 'application/pdf', apex_application.g_flow_id, DBMS_LOB.GETLENGTH(l_blob),'this is an auto generated quotation from mip_quotation_document.generate_detailed_quote for quotation '||p_quote_data.quote_ref, l_blob)
|
||||||
returning name into l_pdf_name;
|
returning name into l_pdf_name;
|
||||||
--set up the file associations within our documents tables
|
--set up the file associations within our documents tables
|
||||||
l_success:= mip_files.set_file_association(l_pdf_name,
|
l_success:= mip_files.set_file_association(l_pdf_name,
|
||||||
|
|||||||
@@ -16,11 +16,11 @@ CREATE OR REPLACE PACKAGE mip_security AS
|
|||||||
,p_session_id IN VARCHAR2
|
,p_session_id IN VARCHAR2
|
||||||
,p_flow_page IN VARCHAR2);
|
,p_flow_page IN VARCHAR2);
|
||||||
|
|
||||||
/** Generate a hash from the given username and password
|
/** Generate a hash from the given username and password
|
||||||
|
|
||||||
The system does not record users passwords 'in the plain', instead we
|
The system does not record users passwords 'in the plain', instead we
|
||||||
recordThe resultant hash is recorded as the username 'password hash'
|
recordThe resultant hash is recorded as the username 'password hash'
|
||||||
*/
|
*/
|
||||||
FUNCTION get_hash(p_username IN VARCHAR2
|
FUNCTION get_hash(p_username IN VARCHAR2
|
||||||
,p_password IN VARCHAR2) RETURN VARCHAR2;
|
,p_password IN VARCHAR2) RETURN VARCHAR2;
|
||||||
|
|
||||||
@@ -54,15 +54,16 @@ recordThe resultant hash is recorded as the username 'password hash'
|
|||||||
/*
|
/*
|
||||||
creates a new password for another user
|
creates a new password for another user
|
||||||
*/
|
*/
|
||||||
PROCEDURE other_user_password(p_prty_id IN number,
|
PROCEDURE other_user_password(p_prty_id IN NUMBER
|
||||||
p_username IN VARCHAR2,
|
,p_username IN VARCHAR2
|
||||||
p_password IN VARCHAR2);
|
,p_password IN VARCHAR2);
|
||||||
--
|
--
|
||||||
|
|
||||||
FUNCTION get_user_status(p_username IN VARCHAR2) RETURN VARCHAR2;
|
FUNCTION get_user_status(p_username IN VARCHAR2) RETURN VARCHAR2;
|
||||||
/** Updates the user status
|
/** Updates the user status
|
||||||
*/
|
*/
|
||||||
PROCEDURE set_user_status(p_username IN VARCHAR2, p_status IN VARCHAR2);
|
PROCEDURE set_user_status(p_username IN VARCHAR2
|
||||||
|
,p_status IN VARCHAR2);
|
||||||
--
|
--
|
||||||
|
|
||||||
/** Authorize access to the given page
|
/** Authorize access to the given page
|
||||||
@@ -97,12 +98,22 @@ recordThe resultant hash is recorded as the username 'password hash'
|
|||||||
,p_component_name IN apex_authorization.component_name%TYPE
|
,p_component_name IN apex_authorization.component_name%TYPE
|
||||||
,p_privilege IN apex_authorization.privilege%TYPE DEFAULT 'A')
|
,p_privilege IN apex_authorization.privilege%TYPE DEFAULT 'A')
|
||||||
RETURN BOOLEAN;
|
RETURN BOOLEAN;
|
||||||
|
|
||||||
|
|
||||||
END mip_security;
|
END mip_security;
|
||||||
/
|
/
|
||||||
CREATE OR REPLACE PACKAGE BODY mip_security AS
|
CREATE OR REPLACE PACKAGE BODY mip_security AS
|
||||||
|
|
||||||
|
PROCEDURE pl(p_in VARCHAR2
|
||||||
|
,p_line IN NUMBER DEFAULT NULL) IS
|
||||||
|
BEGIN
|
||||||
|
NULL;
|
||||||
|
/* $IF mip_debug_constants.debugging OR mip_debug_constants.security
|
||||||
|
$THEN*/
|
||||||
|
mip_debug.pl(p_unit => $$PLSQL_UNIT
|
||||||
|
,p_line => p_line
|
||||||
|
,p_in => p_in);
|
||||||
|
/* $END*/
|
||||||
|
END pl;
|
||||||
/*
|
/*
|
||||||
returns the current status of the user
|
returns the current status of the user
|
||||||
*/
|
*/
|
||||||
@@ -124,44 +135,52 @@ CREATE OR REPLACE PACKAGE BODY mip_security AS
|
|||||||
--
|
--
|
||||||
|
|
||||||
/** Updates the user status
|
/** Updates the user status
|
||||||
*/
|
*/
|
||||||
PROCEDURE set_user_status(p_username IN VARCHAR2, p_status IN VARCHAR2) IS
|
PROCEDURE set_user_status(p_username IN VARCHAR2
|
||||||
|
,p_status IN VARCHAR2) IS
|
||||||
BEGIN
|
BEGIN
|
||||||
UPDATE parties prty
|
UPDATE parties prty
|
||||||
SET prty.status = upper(p_status)
|
SET prty.status = upper(p_status)
|
||||||
WHERE upper(prty.username) = upper(p_username);
|
WHERE upper(prty.username) = upper(p_username);
|
||||||
|
|
||||||
END;
|
|
||||||
|
|
||||||
PROCEDURE update_status_on_login(p_uname IN VARCHAR2, p_password IN VARCHAR2) IS
|
END;
|
||||||
l_password_days NUMBER;
|
|
||||||
|
PROCEDURE update_status_on_login(p_uname IN VARCHAR2
|
||||||
|
,p_password IN VARCHAR2) IS
|
||||||
|
l_password_days NUMBER;
|
||||||
l_password_created_on DATE;
|
l_password_created_on DATE;
|
||||||
BEGIN
|
BEGIN
|
||||||
-- check that the account is still valid (password etc.).
|
-- check that the account is still valid (password etc.).
|
||||||
l_password_created_on := mip_parties.get_user_password_created(p_uname, p_password);
|
l_password_created_on := mip_parties.get_user_password_created(p_uname
|
||||||
|
,p_password);
|
||||||
--
|
--
|
||||||
l_password_days := to_date(SYSDATE,'dd/mm/rrrr') - to_date(l_password_created_on,'dd/mm/rrrr');
|
l_password_days := to_date(SYSDATE
|
||||||
|
,'dd/mm/rrrr') -
|
||||||
|
to_date(l_password_created_on
|
||||||
|
,'dd/mm/rrrr');
|
||||||
-- check the user's password/account has not expired
|
-- check the user's password/account has not expired
|
||||||
IF NOT l_password_days
|
IF NOT
|
||||||
< to_number(cout_system_configuration.get_configuration_item(p_parameter => 'USER_ACCOUNT_LOCK')) THEN
|
l_password_days <
|
||||||
-- user account has expired, set the user account to locked and continue on our journey
|
to_number(cout_system_configuration.get_configuration_item(p_parameter => 'USER_ACCOUNT_LOCK')) THEN
|
||||||
set_user_status(p_username => p_uname
|
-- user account has expired, set the user account to locked and continue on our journey
|
||||||
,p_status => 'LOCKED');
|
set_user_status(p_username => p_uname
|
||||||
|
,p_status => 'LOCKED');
|
||||||
ELSIF NOT l_password_days
|
|
||||||
< to_number(cout_system_configuration.get_configuration_item(p_parameter => 'PASSWORD_EXPIRY_LIMIT')) THEN
|
ELSIF NOT
|
||||||
-- user password has expired, set the user account to expired and continue on our journey
|
l_password_days <
|
||||||
set_user_status(p_username => p_uname
|
to_number(cout_system_configuration.get_configuration_item(p_parameter => 'PASSWORD_EXPIRY_LIMIT')) THEN
|
||||||
,p_status => 'EXPIRED');
|
-- user password has expired, set the user account to expired and continue on our journey
|
||||||
|
set_user_status(p_username => p_uname
|
||||||
END IF;
|
,p_status => 'EXPIRED');
|
||||||
--
|
|
||||||
EXCEPTION
|
END IF;
|
||||||
WHEN no_data_found THEN
|
--
|
||||||
NULL; -- no password/user exists to update the status of.
|
EXCEPTION
|
||||||
END update_status_on_login;
|
WHEN no_data_found THEN
|
||||||
--
|
NULL; -- no password/user exists to update the status of.
|
||||||
|
END update_status_on_login;
|
||||||
|
--
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Logs the user into the system and registers with APEX.
|
Logs the user into the system and registers with APEX.
|
||||||
|
|
||||||
@@ -173,31 +192,103 @@ CREATE OR REPLACE PACKAGE BODY mip_security AS
|
|||||||
,p_password IN VARCHAR2
|
,p_password IN VARCHAR2
|
||||||
,p_session_id IN VARCHAR2
|
,p_session_id IN VARCHAR2
|
||||||
,p_flow_page IN VARCHAR2) IS
|
,p_flow_page IN VARCHAR2) IS
|
||||||
|
|
||||||
BEGIN
|
BEGIN
|
||||||
|
pl('login:entry:' || p_uname || ':' || p_session_id || ':' ||
|
||||||
|
p_flow_page
|
||||||
|
,$$PLSQL_LINE);
|
||||||
|
pl(owa_util.get_cgi_env('PLSQL_GATEWAY')
|
||||||
|
,$$PLSQL_LINE);
|
||||||
|
pl(owa_util.get_cgi_env('GATEWAY_IVERSION')
|
||||||
|
,$$PLSQL_LINE);
|
||||||
|
pl(owa_util.get_cgi_env('SERVER_SOFTWARE')
|
||||||
|
,$$PLSQL_LINE);
|
||||||
|
pl(owa_util.get_cgi_env('GATEWAY_INTERFACE')
|
||||||
|
,$$PLSQL_LINE);
|
||||||
|
pl(owa_util.get_cgi_env('SERVER_PORT')
|
||||||
|
,$$PLSQL_LINE);
|
||||||
|
pl(owa_util.get_cgi_env('SERVER_NAME')
|
||||||
|
,$$PLSQL_LINE);
|
||||||
|
pl(owa_util.get_cgi_env('REQUEST_METHOD')
|
||||||
|
,$$PLSQL_LINE);
|
||||||
|
pl(owa_util.get_cgi_env('PATH_INFO')
|
||||||
|
,$$PLSQL_LINE);
|
||||||
|
pl(owa_util.get_cgi_env('SCRIPT_NAME')
|
||||||
|
,$$PLSQL_LINE);
|
||||||
|
pl(owa_util.get_cgi_env('REMOTE_ADDR')
|
||||||
|
,$$PLSQL_LINE);
|
||||||
|
pl(owa_util.get_cgi_env('SERVER_PROTOCOL')
|
||||||
|
,$$PLSQL_LINE);
|
||||||
|
pl(owa_util.get_cgi_env('REQUEST_PROTOCOL')
|
||||||
|
,$$PLSQL_LINE);
|
||||||
|
pl(owa_util.get_cgi_env('REMOTE_USER')
|
||||||
|
,$$PLSQL_LINE);
|
||||||
|
pl(owa_util.get_cgi_env('HTTP_USER_AGENT')
|
||||||
|
,$$PLSQL_LINE);
|
||||||
|
pl(owa_util.get_cgi_env('HTTP_HOST')
|
||||||
|
,$$PLSQL_LINE);
|
||||||
|
pl(owa_util.get_cgi_env('HTTP_ACCEPT')
|
||||||
|
,$$PLSQL_LINE);
|
||||||
|
pl(owa_util.get_cgi_env('HTTP_ACCEPT_ENCODING')
|
||||||
|
,$$PLSQL_LINE);
|
||||||
|
pl(owa_util.get_cgi_env('HTTP_ACCEPT_LANGUAGE')
|
||||||
|
,$$PLSQL_LINE);
|
||||||
|
pl(owa_util.get_cgi_env('HTTP_ACCEPT_CHARSET')
|
||||||
|
,$$PLSQL_LINE);
|
||||||
|
pl(owa_util.get_cgi_env('HTTP_ORACLE_ECID')
|
||||||
|
,$$PLSQL_LINE);
|
||||||
|
pl(owa_util.get_cgi_env('HTTP_AUTHORIZATION')
|
||||||
|
,$$PLSQL_LINE);
|
||||||
|
pl(owa_util.get_cgi_env('WEB_AUTHENT_PREFIX')
|
||||||
|
,$$PLSQL_LINE);
|
||||||
|
pl(owa_util.get_cgi_env('DAD_NAME')
|
||||||
|
,$$PLSQL_LINE);
|
||||||
|
pl(owa_util.get_cgi_env('DOC_ACCESS_PATH')
|
||||||
|
,$$PLSQL_LINE);
|
||||||
|
pl(owa_util.get_cgi_env('DOCUMENT_TABLE')
|
||||||
|
,$$PLSQL_LINE);
|
||||||
|
pl(owa_util.get_cgi_env('PATH_ALIAS')
|
||||||
|
,$$PLSQL_LINE);
|
||||||
|
pl(owa_util.get_cgi_env('REQUEST_CHARSET')
|
||||||
|
,$$PLSQL_LINE);
|
||||||
|
pl(owa_util.get_cgi_env('REQUEST_IANA_CHARSET')
|
||||||
|
,$$PLSQL_LINE);
|
||||||
|
pl(owa_util.get_cgi_env('SCRIPT_PREFIX')
|
||||||
|
,$$PLSQL_LINE);
|
||||||
|
pl(owa_util.get_cgi_env('HTTP_COOKIE')
|
||||||
|
,$$PLSQL_LINE);
|
||||||
|
|
||||||
-- check that the account is still valid (password etc.).
|
-- check that the account is still valid (password etc.).
|
||||||
update_status_on_login(p_uname, p_password);
|
update_status_on_login(p_uname
|
||||||
|
,p_password);
|
||||||
|
|
||||||
--
|
--
|
||||||
IF get_user_status(p_uname) = 'OPEN' THEN
|
IF get_user_status(p_uname) = 'OPEN' THEN
|
||||||
|
pl('login:exit:OPEN'
|
||||||
|
,$$PLSQL_LINE);
|
||||||
-- log in and flow to the requested page
|
-- log in and flow to the requested page
|
||||||
wwv_flow_custom_auth_std.login(p_uname => p_uname
|
wwv_flow_custom_auth_std.login(p_uname => p_uname
|
||||||
,p_password => p_password
|
,p_password => p_password
|
||||||
,p_session_id => p_session_id
|
,p_session_id => p_session_id
|
||||||
,p_flow_page => p_flow_page);
|
,p_flow_page => p_flow_page);
|
||||||
ELSIF get_user_status(p_uname) = 'EXPIRED' THEN
|
ELSIF get_user_status(p_uname) = 'EXPIRED' THEN
|
||||||
|
pl('login:exit:EXPIRED'
|
||||||
|
,$$PLSQL_LINE);
|
||||||
-- we need to update the password
|
-- we need to update the password
|
||||||
wwv_flow_custom_auth_std.login(p_uname => p_uname
|
wwv_flow_custom_auth_std.login(p_uname => p_uname
|
||||||
,p_password => p_password
|
,p_password => p_password
|
||||||
,p_session_id => p_session_id
|
,p_session_id => p_session_id
|
||||||
,p_flow_page => v('APP_ID') || ':102');
|
,p_flow_page => v('APP_ID') || ':102');
|
||||||
ELSE
|
ELSE
|
||||||
|
pl('login:exit:LOGOUT'
|
||||||
|
,$$PLSQL_LINE);
|
||||||
-- user password has been locked. Log them off and tell them
|
-- user password has been locked. Log them off and tell them
|
||||||
wwv_flow_custom_auth_std.logout(p_this_flow => v('APP_ID')
|
wwv_flow_custom_auth_std.logout(p_this_flow => v('APP_ID')
|
||||||
,p_next_flow_page_sess => v('APP_ID') ||
|
,p_next_flow_page_sess => v('APP_ID') ||
|
||||||
':501');
|
':501');
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
|
pl('login:exit:UNEXPECTED');
|
||||||
END login;
|
END login;
|
||||||
|
|
||||||
/** Produce a 'password hash' from the given username and password
|
/** Produce a 'password hash' from the given username and password
|
||||||
@@ -234,8 +325,6 @@ CREATE OR REPLACE PACKAGE BODY mip_security AS
|
|||||||
AND pwd.password_hash = get_hash(p_username
|
AND pwd.password_hash = get_hash(p_username
|
||||||
,p_password);
|
,p_password);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
RETURN TRUE;
|
RETURN TRUE;
|
||||||
EXCEPTION
|
EXCEPTION
|
||||||
WHEN no_data_found THEN
|
WHEN no_data_found THEN
|
||||||
@@ -337,44 +426,44 @@ CREATE OR REPLACE PACKAGE BODY mip_security AS
|
|||||||
END IF;
|
END IF;
|
||||||
-- added block around this to catch no data.
|
-- added block around this to catch no data.
|
||||||
BEGIN
|
BEGIN
|
||||||
SELECT access_allowed
|
SELECT access_allowed
|
||||||
INTO l_access_allowed
|
INTO l_access_allowed
|
||||||
FROM (SELECT auth.component_name
|
FROM (SELECT auth.component_name
|
||||||
,auth.rt_code
|
,auth.rt_code
|
||||||
,parl.rt_code
|
,parl.rt_code
|
||||||
,CASE
|
,CASE
|
||||||
WHEN auth.rt_code IS NULL THEN
|
WHEN auth.rt_code IS NULL THEN
|
||||||
'YES'
|
'YES'
|
||||||
WHEN auth.rt_code = parl.rt_code THEN
|
WHEN auth.rt_code = parl.rt_code THEN
|
||||||
'YES'
|
'YES'
|
||||||
ELSE
|
ELSE
|
||||||
'NO'
|
'NO'
|
||||||
END access_allowed
|
END access_allowed
|
||||||
FROM (SELECT prty.username
|
FROM (SELECT prty.username
|
||||||
,rt_code
|
,rt_code
|
||||||
FROM parties prty
|
FROM parties prty
|
||||||
,party_roles parl
|
,party_roles parl
|
||||||
WHERE parl.prty_id = prty.id
|
WHERE parl.prty_id = prty.id
|
||||||
AND upper(prty.username) = upper(p_app_user)) parl
|
AND upper(prty.username) = upper(p_app_user)) parl
|
||||||
,apex_authorization auth
|
,apex_authorization auth
|
||||||
WHERE (auth.privilege = p_privilege OR
|
WHERE (auth.privilege = p_privilege OR
|
||||||
auth.privilege IS NULL AND p_privilege IS NULL)
|
auth.privilege IS NULL AND p_privilege IS NULL)
|
||||||
AND auth.rt_code = parl.rt_code(+)
|
AND auth.rt_code = parl.rt_code(+)
|
||||||
AND auth.component_name = p_component_name
|
AND auth.component_name = p_component_name
|
||||||
AND auth.component_type = p_component_type
|
AND auth.component_type = p_component_type
|
||||||
ORDER BY parl.rt_code)
|
ORDER BY parl.rt_code)
|
||||||
WHERE rownum < 2;
|
WHERE rownum < 2;
|
||||||
|
|
||||||
IF nvl(l_access_allowed
|
IF nvl(l_access_allowed
|
||||||
,'NO') = 'YES' THEN
|
,'NO') = 'YES' THEN
|
||||||
RETURN TRUE;
|
RETURN TRUE;
|
||||||
ELSE
|
ELSE
|
||||||
RETURN FALSE;
|
RETURN FALSE;
|
||||||
END IF;
|
END IF;
|
||||||
EXCEPTION
|
EXCEPTION
|
||||||
WHEN no_data_found THEN
|
WHEN no_data_found THEN
|
||||||
RETURN FALSE;
|
RETURN FALSE;
|
||||||
END;
|
END;
|
||||||
END authorization;
|
END authorization;
|
||||||
|
|
||||||
/** Checks for authorization to access the given page
|
/** Checks for authorization to access the given page
|
||||||
@@ -507,13 +596,13 @@ CREATE OR REPLACE PACKAGE BODY mip_security AS
|
|||||||
,SQLERRM);
|
,SQLERRM);
|
||||||
END new_password;
|
END new_password;
|
||||||
--
|
--
|
||||||
|
|
||||||
/*
|
/*
|
||||||
creates a new password for another user
|
creates a new password for another user
|
||||||
*/
|
*/
|
||||||
PROCEDURE other_user_password(p_prty_id IN number,
|
PROCEDURE other_user_password(p_prty_id IN NUMBER
|
||||||
p_username IN VARCHAR2,
|
,p_username IN VARCHAR2
|
||||||
p_password IN VARCHAR2) IS
|
,p_password IN VARCHAR2) IS
|
||||||
BEGIN
|
BEGIN
|
||||||
INSERT INTO passwords
|
INSERT INTO passwords
|
||||||
(prty_id
|
(prty_id
|
||||||
@@ -526,14 +615,14 @@ CREATE OR REPLACE PACKAGE BODY mip_security AS
|
|||||||
,p_password)
|
,p_password)
|
||||||
,SYSDATE
|
,SYSDATE
|
||||||
,NULL);
|
,NULL);
|
||||||
|
|
||||||
EXCEPTION
|
EXCEPTION
|
||||||
WHEN OTHERS THEN
|
WHEN OTHERS THEN
|
||||||
raise_application_error(-20002
|
raise_application_error(-20002
|
||||||
,SQLERRM);
|
,SQLERRM);
|
||||||
END other_user_password;
|
END other_user_password;
|
||||||
--
|
--
|
||||||
|
|
||||||
--
|
--
|
||||||
PROCEDURE redirect_on_expired_account(p_username IN VARCHAR2) IS
|
PROCEDURE redirect_on_expired_account(p_username IN VARCHAR2) IS
|
||||||
BEGIN
|
BEGIN
|
||||||
|
|||||||
Reference in New Issue
Block a user