Seed/enst.ctl - add INVALID status
Documentation/Design/DatabaseItemToFunctionalSpecificationReference.xls - add rule O-M5 Documentation/pldoc - regenerated Modules/mip_helper_special_cases.pck - make reference to Tripartite rule O-M5 (handled by mip_quotation.pck and mip_tripartite.pck Schema - removed DATA_ITEM_ROLES_IMPORT, added views of enquiries and quote statuses git-svn-id: http://locode01.ad.dom/svn/WEBMIP/trunk@3354 248e525c-4dfb-0310-94bc-949c084e9493
This commit is contained in:
@@ -87,7 +87,12 @@ END mip_quotation;
|
||||
/
|
||||
CREATE OR REPLACE PACKAGE BODY mip_quotation IS
|
||||
|
||||
SUBTYPE t_reason IS VARCHAR2(240);
|
||||
PROCEDURE email_aq_generated(p_enqu_id IN enquiries.id%TYPE);
|
||||
PROCEDURE email_quotes_available(p_enqu_id IN enquiries.id%TYPE);
|
||||
PROCEDURE email_request_for_mq(p_enqu_id IN enquiries.id%TYPE);
|
||||
PROCEDURE email_support(p_subject IN VARCHAR2
|
||||
,p_enqu_id IN enquiries.id%TYPE);
|
||||
|
||||
SUBTYPE t_internal_or_external IS VARCHAR2(8);
|
||||
|
||||
gc_internal_reason CONSTANT t_internal_or_external := 'INTERNAL';
|
||||
@@ -280,6 +285,7 @@ CREATE OR REPLACE PACKAGE BODY mip_quotation IS
|
||||
|
||||
PROCEDURE make_quote_available(p_qute_id IN quotes.id%TYPE) IS
|
||||
BEGIN
|
||||
|
||||
INSERT INTO quote_events
|
||||
(event_date
|
||||
,qust_code
|
||||
@@ -288,8 +294,60 @@ CREATE OR REPLACE PACKAGE BODY mip_quotation IS
|
||||
(SYSDATE
|
||||
,'AV' -- Available
|
||||
,p_qute_id);
|
||||
|
||||
END make_quote_available;
|
||||
|
||||
PROCEDURE make_manual_quote_available(p_qute_id IN quotes.id%TYPE) IS
|
||||
l_enqu_id enquiries.id%TYPE;
|
||||
BEGIN
|
||||
make_quote_available(p_qute_id);
|
||||
|
||||
SELECT enqu_id
|
||||
INTO l_enqu_id
|
||||
FROM quotes
|
||||
WHERE id = p_qute_id;
|
||||
|
||||
email_quotes_available(l_enqu_id);
|
||||
|
||||
END make_manual_quote_available;
|
||||
|
||||
PROCEDURE mark_enquiry_submitted(p_enqu_id IN enquiries.id%TYPE) IS
|
||||
BEGIN
|
||||
INSERT INTO enquiry_events
|
||||
(event_date
|
||||
,enst_code
|
||||
,enqu_id)
|
||||
VALUES
|
||||
(SYSDATE
|
||||
,'SUBMITTED'
|
||||
,p_enqu_id);
|
||||
END mark_enquiry_submitted;
|
||||
|
||||
PROCEDURE mark_enquiry_quoted(p_enqu_id IN enquiries.id%TYPE) IS
|
||||
BEGIN
|
||||
INSERT INTO enquiry_events
|
||||
(event_date
|
||||
,enst_code
|
||||
,enqu_id)
|
||||
VALUES
|
||||
(SYSDATE
|
||||
,'QUOTED'
|
||||
,p_enqu_id);
|
||||
|
||||
END mark_enquiry_quoted;
|
||||
|
||||
PROCEDURE mark_enquiry_invalid(p_enqu_id IN enquiries.id%TYPE) IS
|
||||
BEGIN
|
||||
INSERT INTO enquiry_events
|
||||
(event_date
|
||||
,enst_code
|
||||
,enqu_id)
|
||||
VALUES
|
||||
(SYSDATE
|
||||
,'INVALID'
|
||||
,p_enqu_id);
|
||||
END mark_enquiry_invalid;
|
||||
|
||||
FUNCTION get_system_configuration_value(p_parameter IN system_configuration.parameter%TYPE)
|
||||
RETURN system_configuration.VALUE%TYPE IS
|
||||
l_recipient system_configuration.VALUE%TYPE;
|
||||
@@ -315,6 +373,12 @@ CREATE OR REPLACE PACKAGE BODY mip_quotation IS
|
||||
RETURN get_system_configuration_value('EMAIL_ADDRESS_AUTOMATIC_QUOTE');
|
||||
END get_automatic_quote_recipient;
|
||||
|
||||
FUNCTION get_support_recipient RETURN system_configuration.VALUE%TYPE IS
|
||||
BEGIN
|
||||
|
||||
RETURN get_system_configuration_value('EMAIL_ADDRESS_SUPPORT');
|
||||
END get_support_recipient;
|
||||
|
||||
FUNCTION get_system_name RETURN system_configuration.VALUE%TYPE IS
|
||||
BEGIN
|
||||
|
||||
@@ -349,11 +413,19 @@ CREATE OR REPLACE PACKAGE BODY mip_quotation IS
|
||||
|
||||
PROCEDURE open_body IS
|
||||
BEGIN
|
||||
/* IF dbms_lob.ISOPEN(lob_loc => g_email_plain_body) <> 0 THEN
|
||||
dbms_lob.freetemporary(lob_loc => g_email_plain_body);
|
||||
END IF;*/
|
||||
|
||||
dbms_lob.createtemporary(lob_loc => g_email_plain_body
|
||||
,cache => TRUE);
|
||||
dbms_lob.OPEN(lob_loc => g_email_plain_body
|
||||
,open_mode => dbms_lob.lob_readwrite);
|
||||
|
||||
/* IF dbms_lob.ISOPEN(lob_loc => g_email_html_body) <> 0 THEN
|
||||
dbms_lob.freetemporary(lob_loc => g_email_html_body);
|
||||
END IF;*/
|
||||
|
||||
dbms_lob.createtemporary(lob_loc => g_email_html_body
|
||||
,cache => TRUE);
|
||||
dbms_lob.OPEN(lob_loc => g_email_html_body
|
||||
@@ -485,6 +557,80 @@ CREATE OR REPLACE PACKAGE BODY mip_quotation IS
|
||||
p_enqu_id);
|
||||
END email_aq_generated;
|
||||
|
||||
PROCEDURE email_quotes_available(p_enqu_id IN enquiries.id%TYPE) IS
|
||||
l_agent_comt_code enquiries.agent_comt_code%TYPE;
|
||||
l_agent_contact_value enquiries.agent_contact_value%TYPE;
|
||||
l_enqu_id enquiries.id%TYPE;
|
||||
l_email_recipient system_configuration.VALUE%TYPE;
|
||||
l_email_subject VARCHAR2(80);
|
||||
l_agent_first_name parties.first_name%TYPE;
|
||||
l_agent_last_name parties.last_name%TYPE;
|
||||
l_agent_prty_id parties.id%TYPE;
|
||||
BEGIN
|
||||
|
||||
open_body;
|
||||
|
||||
SELECT agent_comt_code
|
||||
,agent_contact_value
|
||||
INTO l_agent_comt_code
|
||||
,l_agent_contact_value
|
||||
FROM enquiries
|
||||
WHERE enquiries.id = p_enqu_id;
|
||||
|
||||
l_agent_prty_id := mip_enquiry.get_enquiry_role(p_enquiryid => p_enqu_id
|
||||
,p_rolecode => 'ENQ OWN');
|
||||
|
||||
SELECT first_name
|
||||
,last_name
|
||||
INTO l_agent_first_name
|
||||
,l_agent_last_name
|
||||
FROM parties
|
||||
WHERE id = l_agent_prty_id;
|
||||
|
||||
IF l_agent_comt_code = 'EMAIL' THEN
|
||||
l_email_recipient := l_agent_contact_value;
|
||||
l_email_subject := get_system_name ||
|
||||
': Notification of availability of automatic quotes for Enquiry reference: ' ||
|
||||
p_enqu_id;
|
||||
al('Enquiry refererence: ' || p_enqu_id || ' (' ||
|
||||
get_enty_description(p_enqu_id) || ')');
|
||||
ELSE
|
||||
l_email_recipient := get_automatic_quote_recipient;
|
||||
l_email_subject := get_system_name ||
|
||||
': Notification of availability of automatic quotes for Enquiry reference: ' ||
|
||||
p_enqu_id || ', Agent requires notification.';
|
||||
|
||||
al('Enquiry refererence: ' || p_enqu_id || ' (' ||
|
||||
get_enty_description(p_enqu_id) || ')');
|
||||
|
||||
al(' ');
|
||||
al('The Agent, ' || l_agent_first_name || ' ' || l_agent_last_name ||
|
||||
' has requested that they be contacted via ' || l_agent_comt_code || '(' ||
|
||||
l_agent_contact_value || ')');
|
||||
al(' ');
|
||||
al('The following quotations are available:');
|
||||
|
||||
FOR l_qute IN (SELECT id
|
||||
FROM quotes
|
||||
,v_quote_details v
|
||||
WHERE enqu_id = p_enqu_id
|
||||
AND v.quote_id = id
|
||||
ORDER BY total_cost) LOOP
|
||||
|
||||
produce_quote_summary(l_qute.id);
|
||||
|
||||
al(' ');
|
||||
END LOOP;
|
||||
|
||||
close_body;
|
||||
|
||||
mip_email.send_email_clob(p_recipient => l_email_recipient
|
||||
,p_body => g_email_plain_body
|
||||
,p_body_html => g_email_html_body
|
||||
,p_subject => l_email_subject);
|
||||
END IF;
|
||||
END email_quotes_available;
|
||||
|
||||
PROCEDURE email_request_for_mq(p_enqu_id IN enquiries.id%TYPE) IS
|
||||
l_system_name system_configuration.VALUE%TYPE := get_system_name;
|
||||
l_quote_row quotes%ROWTYPE;
|
||||
@@ -526,6 +672,33 @@ CREATE OR REPLACE PACKAGE BODY mip_quotation IS
|
||||
|
||||
END email_request_for_mq;
|
||||
|
||||
PROCEDURE email_support(p_subject IN VARCHAR2
|
||||
,p_enqu_id IN enquiries.id%TYPE) IS
|
||||
BEGIN
|
||||
open_body;
|
||||
|
||||
al('MIP_QUOTATION: Enquiry ' || p_enqu_id || ' (' ||
|
||||
get_enty_description(p_enqu_id) || ')' ||
|
||||
' - processing error occurred');
|
||||
|
||||
FOR l_qure IN (SELECT reason
|
||||
FROM quote_reasoning
|
||||
WHERE enqu_id = p_enqu_id
|
||||
ORDER BY id) LOOP
|
||||
al(l_qure.reason);
|
||||
END LOOP;
|
||||
|
||||
close_body;
|
||||
|
||||
mip_email.send_email_clob(p_recipient => get_support_recipient
|
||||
,p_body => g_email_plain_body
|
||||
,p_body_html => g_email_html_body
|
||||
,p_subject => get_system_name || ' : ' ||
|
||||
p_subject ||
|
||||
' : Enquiry reference: ' ||
|
||||
p_enqu_id);
|
||||
END email_support;
|
||||
|
||||
PROCEDURE request_manual_quote(p_enqu_id IN enquiries.id%TYPE
|
||||
,p_rfq_prty_id IN parties.id%TYPE
|
||||
,p_owner_prty_id IN parties.id%TYPE DEFAULT NULL) IS
|
||||
@@ -565,20 +738,24 @@ CREATE OR REPLACE PACKAGE BODY mip_quotation IS
|
||||
l_mandatory_messages VARCHAR2(4000);
|
||||
l_mandatory_checks mip_mandatory.t_mandatory_checks;
|
||||
l_enquiry_is_ready BOOLEAN;
|
||||
l_idx INTEGER;
|
||||
BEGIN
|
||||
|
||||
ready_for_quote(p_enqu_id => p_enqu_id
|
||||
,p_mandatory_checks => l_mandatory_checks
|
||||
,p_enquiry_is_ready => l_enquiry_is_ready);
|
||||
|
||||
FOR l_idx IN l_mandatory_checks.LAST .. l_mandatory_checks.LAST LOOP
|
||||
l_idx := l_mandatory_checks.FIRST;
|
||||
LOOP
|
||||
EXIT WHEN l_idx IS NULL;
|
||||
l_mandatory_messages := l_mandatory_checks(l_idx)
|
||||
.field_name || ':' ||
|
||||
l_mandatory_checks(l_idx).error_message;
|
||||
l_idx := l_mandatory_checks.NEXT(l_idx);
|
||||
END LOOP;
|
||||
|
||||
RETURN nvl(l_mandatory_messages
|
||||
,'All mandatory fields have been completed');
|
||||
RETURN l_mandatory_messages;
|
||||
|
||||
END return_mandatory_messages;
|
||||
|
||||
PROCEDURE add_quote_reason(p_enqu_id IN enquiries.id%TYPE
|
||||
@@ -684,6 +861,37 @@ CREATE OR REPLACE PACKAGE BODY mip_quotation IS
|
||||
END IF; -- svcpt_code = 'LP'
|
||||
END survey_required;
|
||||
|
||||
FUNCTION tripartite_agreement_satisfied(p_enqu_id IN enquiries.id%TYPE)
|
||||
RETURN BOOLEAN IS
|
||||
l_tab_messages mip_tripartite.t_tab_messages;
|
||||
l_valid BOOLEAN;
|
||||
l_idx INTEGER;
|
||||
BEGIN
|
||||
|
||||
l_valid := mip_tripartite.valid_enquiry(p_enqu_id => p_enqu_id
|
||||
,p_tab_messages => l_tab_messages);
|
||||
|
||||
-- processing an enquiry that has not passed the tripartite agreement
|
||||
-- infers a processing error
|
||||
IF NOT l_valid THEN
|
||||
l_idx := l_tab_messages.FIRST;
|
||||
LOOP
|
||||
EXIT WHEN l_idx IS NULL;
|
||||
add_quote_reason(p_enqu_id => p_enqu_id
|
||||
,p_reason => l_tab_messages(l_idx));
|
||||
l_idx := l_tab_messages.NEXT(l_idx);
|
||||
END LOOP;
|
||||
|
||||
mark_enquiry_invalid(p_enqu_id);
|
||||
email_support(p_subject => 'MIP_QUOTATION: Tripartite failure with Enquiry ' ||
|
||||
p_enqu_id
|
||||
,p_enqu_id => p_enqu_id);
|
||||
END IF;
|
||||
|
||||
RETURN l_valid;
|
||||
|
||||
END tripartite_agreement_satisfied;
|
||||
|
||||
PROCEDURE manual_or_automatic_quote(p_enqu IN t_enqu
|
||||
,p_manual_or_automatic_quote OUT t_manual_or_automatic_quote) IS
|
||||
BEGIN
|
||||
@@ -729,7 +937,7 @@ CREATE OR REPLACE PACKAGE BODY mip_quotation IS
|
||||
,'Booster or compressor is present downstream of the meter module.');
|
||||
END IF;
|
||||
|
||||
IF p_enqu.annual_quantity > 732 THEN
|
||||
IF p_enqu.annual_quantity > 732 * 1000 THEN
|
||||
p_manual_or_automatic_quote := gc_manual_quote;
|
||||
add_quote_reason(p_enqu.id
|
||||
,'Required Annual Quantity is in excess of 732MWh.');
|
||||
@@ -1508,7 +1716,7 @@ CREATE OR REPLACE PACKAGE BODY mip_quotation IS
|
||||
add_quote_reason(p_enqu_id => p_enqu.id
|
||||
,p_reason => '-- Produced an automatic quote.'
|
||||
,p_internal_or_external => gc_internal_reason);
|
||||
-- email_aq_generated(p_enqu.id);
|
||||
--email_aq_generated(p_enqu.id);
|
||||
ELSE
|
||||
p_manual_or_automatic_quote := gc_manual_quote;
|
||||
add_quote_reason(p_enqu_id => p_enqu.id
|
||||
@@ -2569,31 +2777,42 @@ CREATE OR REPLACE PACKAGE BODY mip_quotation IS
|
||||
,'Not all mandatory fields for Enquiry ID=' ||
|
||||
p_enqu_id || ' have been completed');
|
||||
|
||||
mark_enquiry_submitted(p_enqu_id);
|
||||
|
||||
SELECT *
|
||||
INTO l_enqu
|
||||
FROM enquiries
|
||||
WHERE id = p_enqu_id;
|
||||
|
||||
manual_or_automatic_quote(p_enqu => l_enqu
|
||||
,p_manual_or_automatic_quote => l_manual_or_automatic_quote);
|
||||
|
||||
IF l_manual_or_automatic_quote = gc_manual_quote THEN
|
||||
request_manual_quote(p_enqu_id => l_enqu.id
|
||||
,p_rfq_prty_id => p_rfq_prty_id
|
||||
,p_owner_prty_id => p_owner_prty_id);
|
||||
ELSE
|
||||
produce_automatic_quotes(p_enqu => l_enqu
|
||||
,p_rfq_prty_id => p_rfq_prty_id
|
||||
,p_owner_prty_id => p_owner_prty_id
|
||||
,p_manual_or_automatic_quote => l_manual_or_automatic_quote);
|
||||
IF tripartite_agreement_satisfied(p_enqu_id) THEN
|
||||
|
||||
manual_or_automatic_quote(p_enqu => l_enqu
|
||||
,p_manual_or_automatic_quote => l_manual_or_automatic_quote);
|
||||
|
||||
IF l_manual_or_automatic_quote = gc_manual_quote THEN
|
||||
request_manual_quote(p_enqu_id => l_enqu.id
|
||||
,p_rfq_prty_id => p_rfq_prty_id
|
||||
,p_owner_prty_id => p_owner_prty_id);
|
||||
END IF;
|
||||
ELSE
|
||||
produce_automatic_quotes(p_enqu => l_enqu
|
||||
,p_rfq_prty_id => p_rfq_prty_id
|
||||
,p_owner_prty_id => p_owner_prty_id
|
||||
,p_manual_or_automatic_quote => l_manual_or_automatic_quote);
|
||||
IF l_manual_or_automatic_quote = gc_automatic_quote THEN
|
||||
email_aq_generated(p_enqu_id);
|
||||
email_quotes_available(p_enqu_id);
|
||||
ELSE
|
||||
request_manual_quote(p_enqu_id => l_enqu.id
|
||||
,p_rfq_prty_id => p_rfq_prty_id
|
||||
,p_owner_prty_id => p_owner_prty_id);
|
||||
END IF;
|
||||
|
||||
--
|
||||
END IF; -- manual or automatic quote
|
||||
|
||||
--
|
||||
END IF; -- manual or automatic quote
|
||||
mark_enquiry_quoted(p_enqu_id);
|
||||
|
||||
END IF; -- tripartite agreement
|
||||
|
||||
/* EXCEPTION
|
||||
WHEN OTHERS THEN
|
||||
|
||||
Reference in New Issue
Block a user