Add processing to make it clearer which application build has been produced and to link the schema with the correct application (AssociateSchema.sql, SetSubstitution.sql, bulk_load.sql and InstallMIP.cmd)

Changes to schema: METERS now have 'MESC_CODE'. Associated changes in the bulk_load routines and initial changes to mip_quotation.pck (needs confirmation testing).

git-svn-id: http://locode01.ad.dom/svn/WEBMIP/trunk@3830 248e525c-4dfb-0310-94bc-949c084e9493
This commit is contained in:
hardya
2008-03-04 12:03:03 +00:00
parent bb5a22951a
commit dbcb349c45
14 changed files with 250 additions and 81 deletions

View File

@@ -331,6 +331,7 @@ CREATE OR REPLACE PACKAGE BODY mip_quotation IS
,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
l_enqu_id enquiries.id%TYPE;
BEGIN
add_quote_event(p_qute_id => p_qute_id
,p_qust_code => 'SELECTED'
@@ -355,6 +356,13 @@ CREATE OR REPLACE PACKAGE BODY mip_quotation IS
,p_event_date => p_event_date);
END LOOP;
SELECT enqu_id
INTO l_enqu_id
FROM quotes
WHERE id = p_qute_id;
email_agent_aq_available(l_enqu_id);
END select_quote;
PROCEDURE lapse_quotes_job IS
@@ -467,8 +475,6 @@ CREATE OR REPLACE PACKAGE BODY mip_quotation IS
IF l_qute_type = 'MQ' THEN
email_agent_mq_available(l_enqu_id);
ELSE
email_agent_aq_available(l_enqu_id);
END IF;
END make_quote_available;
@@ -514,6 +520,8 @@ CREATE OR REPLACE PACKAGE BODY mip_quotation IS
RETURN l_value;
EXCEPTION
WHEN no_data_found THEN
pl('SYSTEM_CONFIGURATION ERROR - PARAMETER ''' || p_parameter ||
''' NOT FOUND');
RETURN 'SYSTEM_CONFIGURATION ERROR - PARAMETER ''' || p_parameter || ''' NOT FOUND';
END get_system_configuration_value;
@@ -536,6 +544,12 @@ CREATE OR REPLACE PACKAGE BODY mip_quotation IS
RETURN get_system_configuration_value('EMAIL_ADDRESS_SUPPORT');
END get_support_recipient;
FUNCTION get_internal_user_recipient RETURN system_configuration.VALUE%TYPE IS
BEGIN
RETURN get_system_configuration_value('EMAIL_ADDRESS_INTERNAL_USER');
END get_internal_user_recipient;
FUNCTION get_system_name RETURN system_configuration.VALUE%TYPE IS
BEGIN
@@ -915,6 +929,9 @@ RECEIVED AT THIS ADDRESS CANNOT BE RESPONDED TO.');
close_body;
BEGIN
pl('email_to_agent:l_email_recipient=' || l_email_recipient || ':' ||
'l_email_subject=' || l_email_subject);
mip_email.send_email_clob(p_recipient => l_email_recipient
,p_body => g_email_plain_body
,p_body_html => g_email_html_body
@@ -929,7 +946,7 @@ RECEIVED AT THIS ADDRESS CANNOT BE RESPONDED TO.');
PROCEDURE email_to_internal_users(p_enqu_id IN enquiries.id%TYPE
,p_email_reason IN t_email_reason) IS
l_email_subject VARCHAR2(240);
l_email_recipient VARCHAR2(240);
l_email_recipient VARCHAR2(240) := get_internal_user_recipient;
l_qute_id quotes.id%TYPE;
BEGIN
pl('email_internal_users:entry:p_enqu_id=' || p_enqu_id ||
@@ -988,6 +1005,8 @@ RECEIVED AT THIS ADDRESS CANNOT BE RESPONDED TO.');
END IF;
close_body;
BEGIN
pl('email_to_internal_users:l_email_recipient=' || l_email_recipient || ':' ||
'l_email_subject=' || l_email_subject);
mip_email.send_email_clob(p_recipient => l_email_recipient
,p_body => g_email_plain_body
,p_body_html => g_email_html_body
@@ -1124,8 +1143,8 @@ RECEIVED AT THIS ADDRESS CANNOT BE RESPONDED TO.');
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);
/*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
@@ -1156,19 +1175,19 @@ RECEIVED AT THIS ADDRESS CANNOT BE RESPONDED TO.');
,p_field_name IN VARCHAR2) RETURN VARCHAR2 IS
l_error_message validation_results.error_message%TYPE;
BEGIN
pl('validation_result enqu_id=' || p_enqu_id || ', field_name=' ||
p_field_name);
/* 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);
/*pl('returning ' || l_error_message);*/
RETURN l_error_message;
EXCEPTION
WHEN no_data_found THEN
pl('Nothing found');
/* pl('Nothing found');*/
RETURN NULL;
WHEN OTHERS THEN
pl('validation_result:' || SQLERRM);
@@ -1243,6 +1262,41 @@ RECEIVED AT THIS ADDRESS CANNOT BE RESPONDED TO.');
p_qmax);
END get_u_meter_size;
FUNCTION get_qmax_from_mesc(p_mesc_code IN meter_size_codes.code%TYPE)
RETURN meter_size_codes.qmax%TYPE IS
l_qmax meter_size_codes.qmax%TYPE;
BEGIN
SELECT qmax
INTO l_qmax
FROM meter_size_codes
WHERE code = p_mesc_code;
RETURN l_qmax;
EXCEPTION
WHEN no_data_found THEN
cout_err.report_and_stop(p_exception_message => 'Unable to find Qmax for Meter Size Code of ' ||
p_mesc_code);
END get_qmax_from_mesc;
FUNCTION get_next_u_meter_size(p_existing_mesc_code IN meter_size_codes.code%TYPE)
RETURN meter_size_codes.code%TYPE IS
l_mesc_code meter_size_codes.code%TYPE;
BEGIN
SELECT next_mesc_code
INTO l_mesc_code
FROM (SELECT code AS existing_mesc
,lead(code) over(ORDER BY qmax) AS next_mesc_code
FROM meter_size_codes
WHERE code LIKE 'U%')
WHERE existing_mesc = p_existing_mesc_code;
RETURN l_mesc_code;
EXCEPTION
WHEN no_data_found THEN
RETURN NULL;
END get_next_u_meter_size;
FUNCTION valid_meter_size_upgrade(p_existing_meter_size_code IN meter_size_codes.code%TYPE
,p_required_meter_size_code IN meter_size_codes.code%TYPE)
RETURN BOOLEAN IS
@@ -1258,7 +1312,8 @@ RECEIVED AT THIS ADDRESS CANNOT BE RESPONDED TO.');
INTO l_dummy
FROM (SELECT code AS existing_mesc
,lead(code) over(ORDER BY qmax) AS required_mesc
FROM meter_size_codes)
FROM meter_size_codes
WHERE code LIKE 'U%')
WHERE existing_mesc = p_existing_meter_size_code
AND required_mesc = p_required_meter_size_code;
RETURN TRUE;
@@ -1269,6 +1324,7 @@ RECEIVED AT THIS ADDRESS CANNOT BE RESPONDED TO.');
PROCEDURE survey_required(p_enqu IN t_enqu
,p_manual_or_automatic_quote IN OUT t_manual_or_automatic_quote) IS
l_svcpt_code service_pressure_types.code%TYPE;
l_existing_meter_size_code meter_size_codes.code%TYPE;
l_required_meter_size_code meter_size_codes.code%TYPE;
BEGIN
@@ -1276,8 +1332,9 @@ RECEIVED AT THIS ADDRESS CANNOT BE RESPONDED TO.');
-- Low Pressure Rules
-- Site survey required for:
-- Relocation
-- Exchange where upgrade is greater than 1 'U' size
-- Alteration
-- Exchange of non-MP meter
-- Exchange of MP where upgrade is greater than 1 'U' size
IF p_enqu.enty_code = 'ALTERATION' THEN
p_manual_or_automatic_quote := gc_manual_quote;
@@ -1286,26 +1343,43 @@ RECEIVED AT THIS ADDRESS CANNOT BE RESPONDED TO.');
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
l_required_meter_size_code := get_u_meter_size(p_enqu.qmax);
END IF;
IF NOT
valid_meter_size_upgrade(p_existing_meter_size_code => l_existing_meter_size_code
,p_required_meter_size_code => l_required_meter_size_code) THEN
SELECT svcpt_code
INTO l_svcpt_code
FROM service_pressures
WHERE code = p_enqu.required_svcp_code;
IF l_svcpt_code <> 'MP' THEN
p_manual_or_automatic_quote := gc_manual_quote;
add_quote_reason(p_enqu.id
,'Site Survey is required for exchange of meter from size ' ||
l_existing_meter_size_code || ' to ' ||
l_required_meter_size_code || '.');
END IF;
-- END IF; -- svcpt_code = 'LP'
,'Site Survey is required for exchange of an existing non-MP meter.');
ELSE
-- Exchange, MP
IF p_enqu.existing_mety_code <> 'DIAPHRAGM' THEN
p_manual_or_automatic_quote := gc_manual_quote;
add_quote_reason(p_enqu.id
,'Site Survey is required for exchange of an existing non-diaphragm meter.');
ELSE
-- Exchange, MP, Diaphragm
l_existing_meter_size_code := p_enqu.existing_mesc_code;
IF p_enqu.existing_mesc_code IS NULL THEN
l_existing_meter_size_code := get_u_meter_size(p_enqu.qmax);
END IF;
l_required_meter_size_code := p_enqu.required_mesc_code;
IF l_required_meter_size_code IS NULL THEN
l_required_meter_size_code := get_u_meter_size(p_enqu.qmax);
END IF;
IF NOT
valid_meter_size_upgrade(p_existing_meter_size_code => l_existing_meter_size_code
,p_required_meter_size_code => l_required_meter_size_code) THEN
p_manual_or_automatic_quote := gc_manual_quote;
add_quote_reason(p_enqu.id
,'Site Survey is required for exchange of diaphragm meter from size ' ||
l_existing_meter_size_code || ' to ' ||
l_required_meter_size_code || '.');
END IF;
END IF; -- DIAPHRAGM
END IF; -- svcpt_code <> 'MP'
END IF; -- EXCHANGE
END survey_required;
@@ -1749,6 +1823,8 @@ RECEIVED AT THIS ADDRESS CANNOT BE RESPONDED TO.');
l_qute_id quotes.id%TYPE;
l_additional_costs t_rec_additional_costs;
l_quote_document VARCHAR2(240);
l_required_mesc_code meter_size_codes.code%TYPE;
l_required_qmax meter_size_codes.qmax%TYPE;
BEGIN
pl('produce_module_quotes');
cout_assert.istrue(p_enqu.enty_code IN ('INSTALL', 'STD INSTALL',
@@ -1764,7 +1840,9 @@ RECEIVED AT THIS ADDRESS CANNOT BE RESPONDED TO.');
add_quote_reason(p_enqu.id
,p_reason => 'Attempting an automatic installation quote for ' ||
p_enqu.id || '.' || ' Required SVCP ' ||
p_enqu.required_svcp_code || ', QMAX=' ||
p_enqu.required_svcp_code ||
', REQUESTED_MESC_CODE=' ||
p_enqu.required_mesc_code || ', QMAX=' ||
p_enqu.qmax || ', Outlet Pressure=' ||
p_enqu.required_metering_pressure || '.'
,p_internal_or_external => gc_internal_reason);
@@ -1772,7 +1850,9 @@ RECEIVED AT THIS ADDRESS CANNOT BE RESPONDED TO.');
add_quote_reason(p_enqu.id
,p_reason => 'Attempting an automatic exchange quote for ' ||
p_enqu.id || '.' || ' Required SVCP ' ||
p_enqu.required_svcp_code || ', QMAX=' ||
p_enqu.required_svcp_code ||
', REQUESTED_MESC_CODE=' ||
p_enqu.required_mesc_code || ', QMAX=' ||
p_enqu.qmax || ', Outlet Pressure=' ||
p_enqu.required_metering_pressure || '.' ||
'Existing meter was a ' ||
@@ -1783,7 +1863,9 @@ RECEIVED AT THIS ADDRESS CANNOT BE RESPONDED TO.');
add_quote_reason(p_enqu.id
,p_reason => 'Attempting an automatic change capacity quote for ' ||
p_enqu.id || '.' || ' Required SVCP ' ||
p_enqu.required_svcp_code || ', QMAX=' ||
p_enqu.required_svcp_code ||
', REQUESTED_MESC_CODE=' ||
p_enqu.required_mesc_code || ', QMAX=' ||
p_enqu.qmax || ', Outlet Pressure=' ||
p_enqu.required_metering_pressure || '.' ||
'Existing meter was a ' ||
@@ -1792,6 +1874,20 @@ RECEIVED AT THIS ADDRESS CANNOT BE RESPONDED TO.');
,p_internal_or_external => gc_internal_reason);
END IF;
IF p_enqu.required_mesc_code IS NOT NULL THEN
l_required_qmax := get_qmax_from_mesc(p_enqu.required_mesc_code);
ELSE
l_required_qmax := p_enqu.qmax;
END IF;
IF p_enqu.enty_code = 'EXCHANGE' THEN
IF p_enqu.existing_mesc_code IS NULL THEN
l_required_mesc_code := get_next_u_meter_size(get_u_meter_size(l_required_qmax));
ELSE
l_required_mesc_code := get_next_u_meter_size(p_enqu.existing_mesc_code);
END IF;
END IF;
FOR l_rec_module IN (SELECT modu.code AS modu_code
,modu.selling_price AS modu_selling_price
,modu.cost_price AS modu_cost_price
@@ -1812,6 +1908,7 @@ RECEIVED AT THIS ADDRESS CANNOT BE RESPONDED TO.');
,metr.qnom
,metr.qmax AS metr_qmax
,metr.qmin
,metr.mesc_code
,metr.mety_code
,NULL AS laco_mety_code
,NULL AS laco_svcpt_code
@@ -1880,12 +1977,16 @@ RECEIVED AT THIS ADDRESS CANNOT BE RESPONDED TO.');
,metr.qmin
,metr.qnom
,metr.mety_code
,metr.mesc_code
FROM meters metr) metr
WHERE modu.svcp_code = p_enqu.required_svcp_code
AND modu.outlet_pressure =
p_enqu.required_metering_pressure
AND metr.code = modu.metr_code
AND modu.qmax >= p_enqu.qmax) LOOP
AND (p_enqu.enty_code <> 'EXCHANGE' OR
(p_enqu.enty_code = 'EXCHANGE' AND
metr.mesc_code = l_required_mesc_code))
AND modu.qmax >= l_required_qmax) LOOP
l_this_is_automatic_quote := TRUE;
add_quote_reason(p_enqu.id
,p_reason => 'Considering module : ' ||
@@ -1923,7 +2024,7 @@ RECEIVED AT THIS ADDRESS CANNOT BE RESPONDED TO.');
l_additional_costs := get_laco(p_enty_code => p_enqu.enty_code
,p_regi_code => l_regi_code
,p_mety_code => l_rec_module.mety_code
,p_mesc_code => p_enqu.required_mesc_code
,p_mesc_code => l_rec_module.mesc_code
,p_svcp_code => p_enqu.required_svcp_code);
l_rec_module.laco_svcpt_code := l_additional_costs.svcpt_code;
l_rec_module.laco_selling_price := l_additional_costs.selling_price;
@@ -2369,6 +2470,7 @@ RECEIVED AT THIS ADDRESS CANNOT BE RESPONDED TO.');
l_qute_id quotes.id%TYPE;
l_labour_costs t_rec_additional_costs;
l_quote_document VARCHAR2(240);
l_existing_mesc_code meter_size_codes.code%TYPE;
BEGIN
pl('produce_labour_only_quotes');
cout_assert.istrue(p_enqu.enty_code IN
@@ -2393,6 +2495,11 @@ RECEIVED AT THIS ADDRESS CANNOT BE RESPONDED TO.');
l_this_is_automatic_quote := TRUE;
l_existing_mesc_code := p_enqu.required_mesc_code;
IF l_existing_mesc_code IS NULL THEN
l_existing_mesc_code := get_u_meter_size(p_enqu.qmax);
END IF;
l_labour_costs := get_laco(p_enty_code => p_enqu.enty_code
,p_regi_code => l_regi_code
,p_mety_code => p_enqu.existing_mety_code
@@ -2458,7 +2565,7 @@ RECEIVED AT THIS ADDRESS CANNOT BE RESPONDED TO.');
,l_qute_id
,p_enqu.enty_code
,l_labour_costs.svcpt_code
,p_enqu.existing_mesc_code
,l_existing_mesc_code
,p_enqu.existing_mety_code
,l_labour_costs.cost_price
,l_labour_costs.selling_price