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:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user