DatabaseItemToFunctionalSpecificationReference.xls - renamed METY_CODE to EXISTING_METY_CODE, included DISPLAY_SEQUENCE to be used in the generation of emails, etc.

Minor internal changes to operation of cout_assert.pck and cout_err.pck.
mip_quotation.pck - made validation routines open to external processes. Added enquiry entry details to manual quotes.

Schema - Removed data_items table and amended data_item_roles to support display_sequence requirements.



git-svn-id: http://locode01.ad.dom/svn/WEBMIP/trunk@3407 248e525c-4dfb-0310-94bc-949c084e9493
This commit is contained in:
hardya
2008-01-28 18:41:24 +00:00
parent 34575be877
commit db78bf5c4c
11 changed files with 394 additions and 197 deletions

View File

@@ -6,6 +6,8 @@ CREATE OR REPLACE PACKAGE cout_assert IS
SUBTYPE g_t_substitution_list IS cout_err.g_t_substitution_list;
c_empty_substitution_list g_t_substitution_list;
g_default_exception_number NUMBER := -20000;
/**
Asserts whether the given p_condition is true
@@ -20,7 +22,7 @@ CREATE OR REPLACE PACKAGE cout_assert IS
PROCEDURE istrue(p_condition IN BOOLEAN
,p_message IN VARCHAR2
,p_raise_exception IN BOOLEAN := TRUE
,p_exception IN NUMBER := -6502
,p_exception IN NUMBER := g_default_exception_number
,p_substitution_list IN g_t_substitution_list := c_empty_substitution_list
,p_helper_call_level IN NUMBER := 1);
/**
@@ -35,7 +37,7 @@ CREATE OR REPLACE PACKAGE cout_assert IS
PROCEDURE isnotnull(p_value IN VARCHAR2
,p_message IN VARCHAR2
,p_raise_exception IN BOOLEAN := TRUE
,p_exception IN NUMBER := -6502
,p_exception IN NUMBER := g_default_exception_number
,p_substitution_list IN g_t_substitution_list := c_empty_substitution_list);
/**
Asserts whether the given p_value IS NOT NULL
@@ -48,7 +50,7 @@ CREATE OR REPLACE PACKAGE cout_assert IS
PROCEDURE isnotnull(p_value IN DATE
,p_message IN VARCHAR2
,p_raise_exception IN BOOLEAN := TRUE
,p_exception IN NUMBER := -6502
,p_exception IN NUMBER := g_default_exception_number
,p_substitution_list IN g_t_substitution_list := c_empty_substitution_list);
/**
Asserts whether the given p_value IS NOT NULL
@@ -61,7 +63,7 @@ CREATE OR REPLACE PACKAGE cout_assert IS
PROCEDURE isnotnull(p_value IN NUMBER
,p_message IN VARCHAR2
,p_raise_exception IN BOOLEAN := TRUE
,p_exception IN NUMBER := -6502
,p_exception IN NUMBER := g_default_exception_number
,p_substitution_list IN g_t_substitution_list := c_empty_substitution_list);
/**
Asserts whether the given p_value IS NOT NULL
@@ -74,7 +76,7 @@ CREATE OR REPLACE PACKAGE cout_assert IS
PROCEDURE isnotnull(p_value IN BOOLEAN
,p_message IN VARCHAR2
,p_raise_exception IN BOOLEAN := TRUE
,p_exception IN NUMBER := -6502
,p_exception IN NUMBER := g_default_exception_number
,p_substitution_list IN g_t_substitution_list := c_empty_substitution_list);
END cout_assert;
/
@@ -82,7 +84,7 @@ CREATE OR REPLACE PACKAGE BODY cout_assert IS
g_header CONSTANT VARCHAR2(160) := '$Header: /Isle Of Grain/database/PLSQL/cout_assert.pck 1 7/01/05 12:54 Gilberta $';
g_revision CONSTANT VARCHAR2(160) := '$Revision: 1 $';
PROCEDURE pl(p_msg VARCHAR2) IS
l_start NUMBER := 1;
l_len CONSTANT NUMBER := 255;
@@ -98,7 +100,7 @@ CREATE OR REPLACE PACKAGE BODY cout_assert IS
PROCEDURE istrue(p_condition IN BOOLEAN
,p_message IN VARCHAR2
,p_raise_exception IN BOOLEAN := TRUE
,p_exception IN NUMBER := -6502
,p_exception IN NUMBER := g_default_exception_number
,p_substitution_list IN g_t_substitution_list := c_empty_substitution_list
,p_helper_call_level IN NUMBER := 1) IS
BEGIN
@@ -124,7 +126,7 @@ CREATE OR REPLACE PACKAGE BODY cout_assert IS
PROCEDURE isnotnull(p_value IN VARCHAR2
,p_message IN VARCHAR2
,p_raise_exception IN BOOLEAN := TRUE
,p_exception IN NUMBER := -6502
,p_exception IN NUMBER := g_default_exception_number
,p_substitution_list IN g_t_substitution_list := c_empty_substitution_list) IS
BEGIN
istrue(p_value IS NOT NULL
@@ -138,7 +140,7 @@ CREATE OR REPLACE PACKAGE BODY cout_assert IS
PROCEDURE isnotnull(p_value IN DATE
,p_message IN VARCHAR2
,p_raise_exception IN BOOLEAN := TRUE
,p_exception IN NUMBER := -6502
,p_exception IN NUMBER := g_default_exception_number
,p_substitution_list IN g_t_substitution_list := c_empty_substitution_list) IS
BEGIN
istrue(p_value IS NOT NULL
@@ -152,7 +154,7 @@ CREATE OR REPLACE PACKAGE BODY cout_assert IS
PROCEDURE isnotnull(p_value IN NUMBER
,p_message IN VARCHAR2
,p_raise_exception IN BOOLEAN := TRUE
,p_exception IN NUMBER := -6502
,p_exception IN NUMBER := g_default_exception_number
,p_substitution_list IN g_t_substitution_list := c_empty_substitution_list) IS
BEGIN
istrue(p_value IS NOT NULL
@@ -166,7 +168,7 @@ CREATE OR REPLACE PACKAGE BODY cout_assert IS
PROCEDURE isnotnull(p_value IN BOOLEAN
,p_message IN VARCHAR2
,p_raise_exception IN BOOLEAN := TRUE
,p_exception IN NUMBER := -6502
,p_exception IN NUMBER := g_default_exception_number
,p_substitution_list IN g_t_substitution_list := c_empty_substitution_list) IS
BEGIN
istrue(p_value IS NOT NULL

View File

@@ -246,7 +246,7 @@ CREATE OR REPLACE PACKAGE BODY cout_err IS
BEGIN
IF p_exception_number BETWEEN - 20999 AND - 20000 THEN
IF p_exception_number BETWEEN - 20999 AND - 20001 THEN
--
-- application error, see if we have a matching EXCEPTION_MESSAGE
--

View File

@@ -15,17 +15,6 @@ CREATE OR REPLACE PROCEDURE gen_mandatory IS
BEGIN
DELETE FROM data_item_roles;
DELETE FROM data_items;
INSERT INTO data_items
(field_name
,table_name
,description)
(SELECT DISTINCT field_name
,'ENQUIRIES' as table_name
,description
FROM ext_dataitem_roles
WHERE field_name IS NOT NULL);
FOR l_enty IN (SELECT code
FROM enquiry_types) LOOP
@@ -37,13 +26,15 @@ BEGIN
add_sql(l_sql
,' (ENTY_CODE');
add_sql(l_sql
,' ,DI_FIELD_NAME');
,' ,FIELD_NAME');
add_sql(l_sql
,' ,DI_TABLE_NAME');
,' ,TABLE_NAME');
add_sql(l_sql
,' ,CONDITION');
add_sql(l_sql
,' ,DESCRIPTION');
add_sql(l_sql
,' ,DISPLAY_SEQUENCE');
add_sql(l_sql
,' )');
add_sql(l_sql
@@ -51,15 +42,17 @@ BEGIN
add_sql(l_sql
,'SELECT ''' || l_enty.code || '''');
add_sql(l_sql
,' ,''ENQUIRIES'' as field_name');
,' ,field_name');
add_sql(l_sql
,' ,table_name');
,' ,''ENQUIRIES'' as table_name');
add_sql(l_sql
,' ,diri.' || REPLACE(l_enty.code
,' '
,'_'));
add_sql(l_sql
,' ,diri.description');
add_sql(l_sql
,' ,diri.display_sequence');
add_sql(l_sql
,' FROM ext_dataitem_roles diri');
add_sql(l_sql
@@ -89,7 +82,7 @@ BEGIN
END;
END LOOP;
FOR l_tables IN (SELECT DISTINCT di_table_name AS table_name
FOR l_tables IN (SELECT DISTINCT table_name AS table_name
FROM data_item_roles) LOOP
-- create a package, named MIP_'table'_HELPER
-- include functions:
@@ -125,9 +118,24 @@ BEGIN
add_sql(l_sql
,' ');
add_sql(l_sql
,' SUBTYPE T_REC_' || l_tables.table_name || ' IS ' ||
l_tables.table_name || '%ROWTYPE;');
add_sql(l_sql
,' ');
--
-- CHECK_MANDATORY
--
add_sql(l_sql
,'FUNCTION check_mandatory (p_rec in T_REC_' ||
l_tables.table_name);
add_sql(l_sql
,' ,p_mandatory_checks OUT MIP_MANDATORY.T_MANDATORY_CHECKS)');
add_sql(l_sql
,' RETURN BOOLEAN;');
add_sql(l_sql
,' ');
add_sql(l_sql
,'FUNCTION check_mandatory (');
@@ -151,6 +159,7 @@ BEGIN
,' RETURN BOOLEAN;');
add_sql(l_sql
,' ');
--
-- GET_FIELD_LIST
--
@@ -225,6 +234,79 @@ BEGIN
--
-- CHECK_MANDATORY
--
add_sql(l_sql
,'FUNCTION check_mandatory (p_rec in T_REC_' ||
l_tables.table_name);
add_sql(l_sql
,' ,p_mandatory_checks OUT MIP_MANDATORY.T_MANDATORY_CHECKS)');
add_sql(l_sql
,' RETURN BOOLEAN');
add_sql(l_sql
,'IS');
add_sql(l_sql
,' l_mandatory_checks MIP_MANDATORY.T_MANDATORY_CHECKS;');
add_sql(l_sql
,' l_return BOOLEAN;');
add_sql(l_sql
,' ');
add_sql(l_sql
,'BEGIN');
add_sql(l_sql
,' cout_assert.isnotnull(p_rec.id,''NULL enquiry id'');');
add_sql(l_sql
,' cout_assert.isnotnull(p_rec.enty_code,''NULL enquiry ENTY_CODE'');');
FOR l_checks IN (SELECT field_name
,condition
,enty_code
,error_message
FROM data_item_roles) LOOP
IF l_checks.condition = 'M' THEN
add_sql(l_sql
,' IF p_rec.ENTY_CODE = ''' || l_checks.enty_code ||
''' AND p_rec.' || l_checks.field_name ||
' IS NULL THEN');
add_sql(l_sql
,' MIP_MANDATORY.add_error(P_mandatory_checks=>l_mandatory_checks, P_field_name=>''' ||
l_checks.field_name || ''' ,p_error_message=>''' ||
nvl(l_checks.error_message
,'Mandatory Field') || ''');');
add_sql(l_sql
,' END IF;');
add_sql(l_sql
,' ');
END IF;
END LOOP;
add_sql(l_sql
,' ');
add_sql(l_sql
,' MIP_HELPER_SPECIAL_CASES.table_' || l_tables.table_name ||
'(p_rec => p_rec, p_mandatory_checks=>l_mandatory_checks);');
add_sql(l_sql
,' ');
add_sql(l_sql
,' l_return := NOT(l_mandatory_checks.COUNT > 0);');
add_sql(l_sql
,' P_mandatory_checks := l_mandatory_checks;');
add_sql(l_sql
,' ');
-- return the overall boolean response
add_sql(l_sql
,' RETURN l_return;');
add_sql(l_sql
,'END check_mandatory;');
add_sql(l_sql
,' ');
--
-- Check_mandatory - second version
--
add_sql(l_sql
,'FUNCTION check_mandatory (');
@@ -249,11 +331,7 @@ BEGIN
add_sql(l_sql
,'IS');
add_sql(l_sql
,' l_rec ' || l_tables.table_name || '%ROWTYPE;');
add_sql(l_sql
,' l_mandatory_checks MIP_MANDATORY.T_MANDATORY_CHECKS;');
add_sql(l_sql
,' l_return BOOLEAN;');
,' l_rec T_REC_' || l_tables.table_name || ';');
add_sql(l_sql
,'BEGIN');
@@ -279,53 +357,13 @@ BEGIN
,' ;');
add_sql(l_sql
,' ');
FOR l_checks IN (SELECT di_field_name
,condition
,enty_code
,error_message
FROM data_item_roles) LOOP
IF l_checks.condition = 'M' THEN
add_sql(l_sql
,' IF l_rec.ENTY_CODE = ''' || l_checks.enty_code ||
''' AND l_rec.' || l_checks.di_field_name ||
' IS NULL THEN');
add_sql(l_sql
,' MIP_MANDATORY.add_error(P_mandatory_checks=>l_mandatory_checks, P_field_name=>''' ||
l_checks.di_field_name || ''' ,P_error_message=>''' ||
nvl(l_checks.error_message
,'Mandatory Field') || ''');');
add_sql(l_sql
,' END IF;');
add_sql(l_sql
,' ');
END IF;
END LOOP;
,' RETURN CHECK_MANDATORY(p_rec => l_rec, p_mandatory_checks => p_mandatory_checks);');
add_sql(l_sql
,' ');
add_sql(l_sql,
' MIP_HELPER_SPECIAL_CASES.table_'||l_tables.table_name||'(p_rec => l_rec, p_mandatory_checks=>l_mandatory_checks);');
,' ');
add_sql(l_sql
,' ');
,'END CHECK_MANDATORY;');
add_sql(l_sql
,' l_return := NOT(l_mandatory_checks.COUNT > 0);');
add_sql(l_sql
,' P_mandatory_checks := l_mandatory_checks;');
add_sql(l_sql
,' ');
-- return the overall boolean response
add_sql(l_sql
,' RETURN l_return;');
add_sql(l_sql
,'END check_mandatory;');
add_sql(l_sql
,' ');
,' ');
--
-- GET_FIELD_LIST
--
@@ -345,7 +383,7 @@ BEGIN
,' ');
add_sql(l_sql
,' FOR l_checks IN (SELECT di_field_name');
,' FOR l_checks IN (SELECT field_name');
add_sql(l_sql
,' ,condition');
add_sql(l_sql
@@ -359,7 +397,7 @@ BEGIN
add_sql(l_sql
,' ) LOOP');
add_sql(l_sql
,' MIP_MANDATORY.add_field(P_fields=>l_fields,P_field_name=>l_checks.di_field_name);');
,' MIP_MANDATORY.add_field(p_fields=>l_fields,p_field_name=>l_checks.field_name);');
add_sql(l_sql
,' END LOOP;');

View File

@@ -23,6 +23,22 @@ CREATE OR REPLACE PACKAGE mip_quotation IS
,p_mandatory_checks OUT mip_mandatory.t_mandatory_checks
,p_enquiry_is_ready OUT BOOLEAN);
/** Validate an enquiry row of date for mandatory fields
Store the results for later retrieval (must be same transaction)
%param p_rec enquiry data to be validated
*/
PROCEDURE validate(p_rec IN mip_enquiries_helper.t_rec_enquiries);
/** Retrieve the results of a mandatory field validation for the given field
Must be performed in the same transaction as the validate
%param p_field_name enquiry field who validation message is required
%return validation error message or NULL if validation was successful
*/
FUNCTION validation_result(p_enqu_id IN enquiries.id%TYPE
,p_field_name IN VARCHAR2) RETURN VARCHAR2;
/** Generate quotes in response to a 'request for quote' against an enquiry
%param p_enqu_id the id of the enquiry to be checked
@@ -99,6 +115,7 @@ CREATE OR REPLACE PACKAGE mip_quotation IS
,p_event_date IN DATE DEFAULT SYSDATE);
PROCEDURE lapse_quotes_job;
END mip_quotation;
/
CREATE OR REPLACE PACKAGE BODY mip_quotation IS
@@ -124,7 +141,7 @@ CREATE OR REPLACE PACKAGE BODY mip_quotation IS
g_email_plain_body CLOB;
g_email_html_body CLOB;
gc_newline CONSTANT CHAR(1) DEFAULT chr(13);
gc_newline CONSTANT CHAR(2) DEFAULT chr(10) || chr(13);
TYPE t_rec_additional_costs IS RECORD(
adit_code additional_items.code%TYPE
@@ -189,7 +206,7 @@ CREATE OR REPLACE PACKAGE BODY mip_quotation IS
PROCEDURE accept_quote(p_qute_id IN quotes.id%TYPE
,p_prty_id IN parties.id%TYPE
,p_owner_prty_id IN parties.id%TYPE
,p_owner_prty_id IN parties.id%TYPE DEFAULT NULL
,p_description quote_events.description%TYPE DEFAULT NULL
,p_event_date IN DATE DEFAULT SYSDATE) IS
BEGIN
@@ -618,6 +635,70 @@ RECEIVED AT THIS ADDRESS CANNOT BE RESPONDED TO.');
,'</body></html>');
END close_body;
PROCEDURE produce_enquiry_entry_details(p_enqu_id IN enquiries.id%TYPE) IS
l_enty_code enquiries.enty_code%TYPE;
FUNCTION return_value(p_enqu_id IN enquiries.id%TYPE
,p_field_name IN VARCHAR2) RETURN VARCHAR2 IS
l_sql VARCHAR2(240);
l_cursor_id INTEGER;
l_rows INTEGER;
l_return VARCHAR2(80);
BEGIN
l_cursor_id := dbms_sql.open_cursor;
l_sql := 'select ' || p_field_name ||
' from enquiries where id = :id';
dbms_sql.parse(l_cursor_id
,l_sql
,dbms_sql.native);
dbms_sql.bind_variable(l_cursor_id
,':id'
,p_enqu_id);
dbms_sql.define_column(l_cursor_id
,1
,l_return
,80);
l_rows := dbms_sql.execute_and_fetch(l_cursor_id);
dbms_sql.column_value(l_cursor_id
,1
,l_return);
dbms_sql.close_cursor(l_cursor_id);
RETURN l_return;
END return_value;
BEGIN
pl('produce_enquiry_entry_details');
al(' ');
al(' ');
al(get_system_name ||
' recorded the following details against this enquiry:');
SELECT enty_code
INTO l_enty_code
FROM enquiries
WHERE id = p_enqu_id;
FOR l_rec IN (SELECT dir.field_name
,dir.description
FROM data_item_roles dir
WHERE dir.enty_code = l_enty_code
ORDER BY dir.display_sequence) LOOP
al(l_rec.description || ': ' ||
return_value(p_enqu_id => p_enqu_id
,p_field_name => l_rec.field_name));
END LOOP;
END produce_enquiry_entry_details;
PROCEDURE produce_reasoning_summary(p_enqu_id IN enquiries.id%TYPE) IS
BEGIN
pl('produce_reasoning_summary');
@@ -751,10 +832,15 @@ RECEIVED AT THIS ADDRESS CANNOT BE RESPONDED TO.');
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);
BEGIN
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);
EXCEPTION
WHEN OTHERS THEN
pl('mip_email.send_email_clob returned ' || SQLERRM);
END;
END email_quotes_available;
@@ -762,7 +848,7 @@ RECEIVED AT THIS ADDRESS CANNOT BE RESPONDED TO.');
l_agent_comt_code enquiries.agent_comt_code%TYPE;
l_agent_contact_value enquiries.agent_contact_value%TYPE;
l_email_recipient system_configuration.VALUE%TYPE;
l_email_subject VARCHAR2(80);
l_email_subject VARCHAR2(240);
l_agent_first_name parties.first_name%TYPE;
l_agent_last_name parties.last_name%TYPE;
l_agent_prty_id parties.id%TYPE;
@@ -784,15 +870,26 @@ RECEIVED AT THIS ADDRESS CANNOT BE RESPONDED TO.');
AND enquiry_events.enqu_id = enquiries.id
AND enquiry_events.enst_code = 'SUBMITTED';
l_agent_prty_id := mip_enquiry.get_enquiry_role(p_enquiryid => p_enqu_id
,p_rolecode => 'ENQ OWN');
BEGIN
l_agent_prty_id := mip_enquiry.get_enquiry_role(p_enquiryid => p_enqu_id
,p_rolecode => 'ENQ OWN');
EXCEPTION
WHEN OTHERS THEN
pl('mip_enquiry.get_enquiry_role returned ' || SQLERRM);
RAISE;
END;
SELECT first_name
,last_name
INTO l_agent_first_name
,l_agent_last_name
FROM parties
WHERE id = l_agent_prty_id;
BEGIN
SELECT first_name
,last_name
INTO l_agent_first_name
,l_agent_last_name
FROM parties
WHERE id = l_agent_prty_id;
EXCEPTION
WHEN OTHERS THEN
pl('Error finding agent - prty_id=' || l_agent_prty_id);
END;
IF l_agent_comt_code = 'EMAIL' THEN
l_email_recipient := l_agent_contact_value;
@@ -833,10 +930,16 @@ RECEIVED AT THIS ADDRESS CANNOT BE RESPONDED TO.');
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);
BEGIN
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);
EXCEPTION
WHEN OTHERS THEN
pl('mip_email.send_email_clob returned ' || SQLERRM);
RAISE;
END;
END email_rfq_submitted;
PROCEDURE email_request_for_mq(p_enqu_id IN enquiries.id%TYPE) IS
@@ -868,16 +971,27 @@ RECEIVED AT THIS ADDRESS CANNOT BE RESPONDED TO.');
al(' ');
al('Current Service Level Agreements dictate that a manual quote be provided within 6 days');
al('Data Entered:');
al('Enquiry type: ' || get_enty_description(p_enqu_id));
produce_enquiry_entry_details(p_enqu_id);
produce_reasoning_summary(p_enqu_id);
close_body;
mip_email.send_email_clob(p_recipient => get_manual_quote_recipient
,p_body => g_email_plain_body
,p_body_html => g_email_html_body
,p_subject => l_system_name ||
': Request for a Manual Quote for Enquiry Reference Number: ' ||
p_enqu_id);
BEGIN
mip_email.send_email_clob(p_recipient => get_manual_quote_recipient
,p_body => g_email_plain_body
,p_body_html => g_email_html_body
,p_subject => l_system_name ||
': Request for a Manual Quote for Enquiry Reference Number: ' ||
p_enqu_id);
EXCEPTION
WHEN OTHERS THEN
pl('mip_email.send_email_clob returned ' || SQLERRM);
END;
END email_request_for_mq;
@@ -901,13 +1015,18 @@ RECEIVED AT THIS ADDRESS CANNOT BE RESPONDED TO.');
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 Number: ' ||
p_enqu_id);
BEGIN
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 Number: ' ||
p_enqu_id);
EXCEPTION
WHEN OTHERS THEN
pl('mip_email.send_email_clob returned ' || SQLERRM);
END;
END email_support;
PROCEDURE request_manual_quote(p_enqu_id IN enquiries.id%TYPE
@@ -930,7 +1049,7 @@ RECEIVED AT THIS ADDRESS CANNOT BE RESPONDED TO.');
,p_mandatory_checks OUT mip_mandatory.t_mandatory_checks
,p_enquiry_is_ready OUT BOOLEAN) IS
BEGIN
pl('ready_for_quote(1)');
pl('ready_for_quote(1) - enqu_id=' || p_enqu_id);
p_enquiry_is_ready := mip_enquiries_helper.check_mandatory(p_id => p_enqu_id
,p_mandatory_checks => p_mandatory_checks);
@@ -940,7 +1059,7 @@ RECEIVED AT THIS ADDRESS CANNOT BE RESPONDED TO.');
l_mandatory_checks mip_mandatory.t_mandatory_checks;
l_enquiry_is_ready BOOLEAN;
BEGIN
pl('ready_for_quote(2)');
pl('ready_for_quote(2) - enqu_id=' || p_enqu_id);
ready_for_quote(p_enqu_id => p_enqu_id
,p_mandatory_checks => l_mandatory_checks
@@ -948,6 +1067,61 @@ RECEIVED AT THIS ADDRESS CANNOT BE RESPONDED TO.');
RETURN l_enquiry_is_ready;
END ready_for_quote;
PROCEDURE validate(p_rec IN mip_enquiries_helper.t_rec_enquiries) IS
l_mandatory_checks mip_mandatory.t_mandatory_checks;
l_idx NUMBER;
BEGIN
pl('validate enqu_id=' || p_rec.id || ', enty_code=' ||
p_rec.enty_code);
DELETE FROM validation_results
WHERE enqu_id = p_rec.id;
IF NOT
mip_enquiries_helper.check_mandatory(p_rec => p_rec
,p_mandatory_checks => l_mandatory_checks) THEN
l_idx := l_mandatory_checks.FIRST;
LOOP
EXIT WHEN l_idx IS NULL;
INSERT INTO validation_results
(enqu_id
,field_name
,error_message)
VALUES
(p_rec.id
,l_mandatory_checks(l_idx).field_name
,l_mandatory_checks(l_idx).error_message);
l_idx := l_mandatory_checks.NEXT(l_idx);
END LOOP;
END IF;
EXCEPTION
WHEN OTHERS THEN
pl('validate:' || SQLERRM);
RAISE;
END validate;
FUNCTION validation_result(p_enqu_id IN enquiries.id%TYPE
,p_field_name IN VARCHAR2) RETURN VARCHAR2 IS
l_error_message gtt_mandatory_checks.error_message%TYPE;
BEGIN
pl('validation_result enqu_id=' || p_enqu_id || ', field_name=' ||
p_field_name);
SELECT error_message
INTO l_error_message
FROM validation_results
WHERE field_name = upper(p_field_name)
AND enqu_id = p_enqu_id;
pl('returning ' || l_error_message);
RETURN l_error_message;
EXCEPTION
WHEN no_data_found THEN
pl('Nothing found');
RETURN NULL;
WHEN OTHERS THEN
pl('validation_result:' || SQLERRM);
RAISE;
END validation_result;
FUNCTION return_mandatory_messages(p_enqu_id IN enquiries.id%TYPE)
RETURN VARCHAR2 IS
l_mandatory_messages VARCHAR2(4000);
@@ -1052,17 +1226,19 @@ RECEIVED AT THIS ADDRESS CANNOT BE RESPONDED TO.');
-- Site survey required for:
-- Relocation
-- Exchange where upgrade is greater than 1 'U' size
SELECT svcpt_code
INTO l_svcpt_code
FROM service_pressures
WHERE code = p_enqu.required_svcp_code;
IF l_svcpt_code = 'LP' THEN
IF p_enqu.enty_code = 'ALTERATION' THEN
p_manual_or_automatic_quote := gc_manual_quote;
add_quote_reason(p_enqu.id
,'Site Survey is required for alteration (relocation or reposition) of an existing meter.');
END IF; -- RELOCATE
IF p_enqu.enty_code IN ('EXCHANGE', 'STD EXCHANGE') THEN
IF p_enqu.enty_code = 'ALTERATION' THEN
p_manual_or_automatic_quote := gc_manual_quote;
add_quote_reason(p_enqu.id
,'Site Survey is required for alteration (relocation or reposition) of an existing meter.');
END IF; -- RELOCATE
IF p_enqu.enty_code IN ('EXCHANGE', 'STD EXCHANGE') THEN
-- SELECT svcpt_code
-- INTO l_svcpt_code
-- FROM service_pressures
-- WHERE code = p_enqu.required_svcp_code;
-- IF l_svcpt_code = 'LP' THEN
l_existing_meter_size_code := p_enqu.existing_mesc_code;
l_required_meter_size_code := p_enqu.required_mesc_code;
IF l_required_meter_size_code IS NULL THEN
@@ -1077,8 +1253,9 @@ RECEIVED AT THIS ADDRESS CANNOT BE RESPONDED TO.');
l_existing_meter_size_code || ' to ' ||
l_required_meter_size_code || '.');
END IF;
END IF; -- EXCHANGE
END IF; -- svcpt_code = 'LP'
-- END IF; -- svcpt_code = 'LP'
END IF; -- EXCHANGE
END survey_required;
FUNCTION tripartite_agreement_satisfied(p_enqu_id IN enquiries.id%TYPE)
@@ -2458,6 +2635,10 @@ RECEIVED AT THIS ADDRESS CANNOT BE RESPONDED TO.');
l_enqu t_enqu;
BEGIN
pl('produce_quotes');
IF NOT ready_for_quote(p_enqu_id) THEN
pl('Not all mandatory fields for Enquiry ID=' || p_enqu_id ||
' have been completed');
END IF;
cout_assert.istrue(ready_for_quote(p_enqu_id)
,'Not all mandatory fields for Enquiry ID=' ||
p_enqu_id || ' have been completed');
@@ -2508,6 +2689,6 @@ RECEIVED AT THIS ADDRESS CANNOT BE RESPONDED TO.');
BEGIN
-- Initialization
NULL;
pl('mip_quotation');
END mip_quotation;
/