diff --git a/Modules/mip_quotation.pck b/Modules/mip_quotation.pck index 3cb8b71..40e5b4d 100644 --- a/Modules/mip_quotation.pck +++ b/Modules/mip_quotation.pck @@ -2151,6 +2151,30 @@ RECEIVED AT THIS ADDRESS CANNOT BE RESPONDED TO.'); RETURN l_rec_costs; END get_laco; + FUNCTION get_svcpt_for_svcp(p_svcp_code IN service_pressures.code%TYPE) + RETURN service_pressure_types.code%TYPE IS + l_svcpt_code service_pressure_types.code%TYPE; + BEGIN + pl('get_svcpt_for_svcp:entry:p_svcp_code=' || p_svcp_code + ,$$PLSQL_LINE); + + BEGIN + SELECT svcpt_code + INTO l_svcpt_code + FROM service_pressures + WHERE code = p_svcp_code; + EXCEPTION + WHEN no_data_found THEN + l_svcpt_code := NULL; + END; + + pl('get_svcpt_for_svcp:exit:' || l_svcpt_code + ,$$PLSQL_LINE); + + RETURN l_svcpt_code; + + END get_svcpt_for_svcp; + FUNCTION get_lead_time(p_enty_code enquiry_types.code%TYPE ,p_mety_code meter_types.code%TYPE ,p_svcp_code service_pressures.code%TYPE @@ -2885,7 +2909,8 @@ RECEIVED AT THIS ADDRESS CANNOT BE RESPONDED TO.'); ,p_rfq_prty_id => p_rfq_prty_id ,p_owner_prty_id => p_owner_prty_id ,p_manual_or_automatic_quote => p_manual_or_automatic_quote); - + pl('produce_exchange_quotes:exit' + ,$$PLSQL_LINE); END produce_exchange_quotes; PROCEDURE produce_change_capacity_quotes(p_enqu IN t_enqu @@ -2909,6 +2934,8 @@ RECEIVED AT THIS ADDRESS CANNOT BE RESPONDED TO.'); ,p_owner_prty_id => p_owner_prty_id ,p_manual_or_automatic_quote => p_manual_or_automatic_quote); + pl('produce_change_capacity_quotes:exit' + ,$$PLSQL_LINE); END produce_change_capacity_quotes; PROCEDURE produce_labour_only_quotes(p_enqu IN t_enqu @@ -3100,6 +3127,9 @@ RECEIVED AT THIS ADDRESS CANNOT BE RESPONDED TO.'); END IF; + pl('produce_labour_only_quotes:exit' + ,$$PLSQL_LINE); + END produce_labour_only_quotes; PROCEDURE produce_removal_quotes(p_enqu IN t_enqu @@ -3107,6 +3137,9 @@ RECEIVED AT THIS ADDRESS CANNOT BE RESPONDED TO.'); ,p_owner_prty_id IN parties.id%TYPE DEFAULT NULL ,p_manual_or_automatic_quote IN OUT t_manual_or_automatic_quote) IS BEGIN + pl('produce_removal_quotes:entry' + ,$$PLSQL_LINE); + cout_assert.istrue(p_enqu.enty_code IN ('REMOVE', 'STD REMOVE', 'ADVERSARIAL') ,'Attempted to produce a removal quote for enquiry of type ' || @@ -3115,6 +3148,8 @@ RECEIVED AT THIS ADDRESS CANNOT BE RESPONDED TO.'); ,p_rfq_prty_id => p_rfq_prty_id ,p_owner_prty_id => p_owner_prty_id ,p_manual_or_automatic_quote => p_manual_or_automatic_quote); + pl('produce_removal_quotes:exit' + ,$$PLSQL_LINE); END produce_removal_quotes; PROCEDURE produce_ofmat_quotes(p_enqu IN t_enqu @@ -3122,6 +3157,8 @@ RECEIVED AT THIS ADDRESS CANNOT BE RESPONDED TO.'); ,p_owner_prty_id IN parties.id%TYPE DEFAULT NULL ,p_manual_or_automatic_quote IN OUT t_manual_or_automatic_quote) IS BEGIN + pl('produce_ofmat_quotes:entry' + ,$$PLSQL_LINE); cout_assert.istrue(p_enqu.enty_code IN ('OFMAT') ,'Attempted to produce an OFMAT quote for enquiry of type ' || p_enqu.enty_code); @@ -3131,6 +3168,8 @@ RECEIVED AT THIS ADDRESS CANNOT BE RESPONDED TO.'); ,p_owner_prty_id => p_owner_prty_id ,p_manual_or_automatic_quote => p_manual_or_automatic_quote); + pl('produce_ofmat_quotes:exit' + ,$$PLSQL_LINE); END produce_ofmat_quotes; PROCEDURE produce_alteration_quotes(p_enqu IN t_enqu @@ -3138,6 +3177,8 @@ RECEIVED AT THIS ADDRESS CANNOT BE RESPONDED TO.'); ,p_owner_prty_id IN parties.id%TYPE DEFAULT NULL ,p_manual_or_automatic_quote IN OUT t_manual_or_automatic_quote) IS BEGIN + pl('produce_alteration_quotes:entry' + ,$$PLSQL_LINE); cout_assert.istrue(p_enqu.enty_code IN ('ALTERATION') ,'Attempted to produce an ALTERATION quote for enquiry of type ' || p_enqu.enty_code); @@ -3147,6 +3188,8 @@ RECEIVED AT THIS ADDRESS CANNOT BE RESPONDED TO.'); ,p_owner_prty_id => p_owner_prty_id ,p_manual_or_automatic_quote => p_manual_or_automatic_quote); + pl('produce_alteration_quotes:exit' + ,$$PLSQL_LINE); END produce_alteration_quotes; PROCEDURE produce_addon_quotes(p_enqu IN t_enqu @@ -3157,13 +3200,14 @@ RECEIVED AT THIS ADDRESS CANNOT BE RESPONDED TO.'); l_this_is_automatic_quote BOOLEAN; l_regi_code regions.code%TYPE := mip_regions.get_region_for_postcode(p_enqu.install_postcode); l_qute_id quotes.id%TYPE; + l_svcpt_code service_pressure_types.code%TYPE; l_lifting_gear_costs t_rec_additional_costs; l_amr_costs t_rec_additional_costs; l_ems_costs t_rec_additional_costs; l_bypass_costs t_rec_additional_costs; l_quote_document VARCHAR2(240); BEGIN - pl('produce_addon_quotes' + pl('produce_addon_quotes:entry' ,$$PLSQL_LINE); cout_assert.istrue(p_enqu.enty_code IN ('ADDON') @@ -3235,21 +3279,26 @@ RECEIVED AT THIS ADDRESS CANNOT BE RESPONDED TO.'); END IF; END IF; - /* Always get costs for LIFTING GEAR */ - l_lifting_gear_costs := get_aico(p_adit_code => 'LIFTING GEAR' - ,p_regi_code => l_regi_code); - IF l_lifting_gear_costs.selling_price IS NULL THEN - l_this_is_automatic_quote := FALSE; - add_quote_reason(p_enqu.id - ,p_reason => 'Unable to find selling price for LIFTING GEAR.' - ,p_internal_or_external => gc_internal_reason); - END IF; - IF l_lifting_gear_costs.lead_time IS NULL THEN - l_this_is_automatic_quote := FALSE; - add_quote_reason(p_enqu.id - ,p_reason => 'Unable to find lead time for LIFTING GEAR.' - ,p_internal_or_external => gc_internal_reason); + l_svcpt_code := get_svcpt_for_svcp(p_enqu.required_svcp_code); + + /* Lifting gear required UNLESS LP Diaphragm */ + IF NOT (p_enqu.existing_mety_code = 'DIAPHRAGM' AND l_svcpt_code = 'LP') THEN + l_lifting_gear_costs := get_aico(p_adit_code => 'LIFTING GEAR' + ,p_regi_code => l_regi_code); + IF l_lifting_gear_costs.selling_price IS NULL THEN + l_this_is_automatic_quote := FALSE; + add_quote_reason(p_enqu.id + ,p_reason => 'Unable to find selling price for LIFTING GEAR.' + ,p_internal_or_external => gc_internal_reason); + END IF; + IF l_lifting_gear_costs.lead_time IS NULL THEN + l_this_is_automatic_quote := FALSE; + add_quote_reason(p_enqu.id + ,p_reason => 'Unable to find lead time for LIFTING GEAR.' + ,p_internal_or_external => gc_internal_reason); + END IF; + END IF; IF l_this_is_automatic_quote THEN @@ -3267,7 +3316,9 @@ RECEIVED AT THIS ADDRESS CANNOT BE RESPONDED TO.'); INSERT INTO quote_items (id ,qute_id - ,bas_code + ,enty_code + ,mety_code + ,adit_code ,cost_price ,selling_price ,delivery_price @@ -3275,6 +3326,8 @@ RECEIVED AT THIS ADDRESS CANNOT BE RESPONDED TO.'); VALUES (quit_seq.NEXTVAL ,l_qute_id + ,p_enqu.enty_code + ,p_enqu.existing_mety_code ,l_amr_costs.adit_code ,l_amr_costs.cost_price ,l_amr_costs.selling_price @@ -3286,6 +3339,8 @@ RECEIVED AT THIS ADDRESS CANNOT BE RESPONDED TO.'); INSERT INTO quote_items (id ,qute_id + ,enty_code + ,mety_code ,adit_code ,cost_price ,selling_price @@ -3295,6 +3350,8 @@ RECEIVED AT THIS ADDRESS CANNOT BE RESPONDED TO.'); VALUES (quit_seq.NEXTVAL ,l_qute_id + ,p_enqu.enty_code + ,p_enqu.existing_mety_code ,l_ems_costs.adit_code ,l_ems_costs.cost_price ,l_ems_costs.selling_price @@ -3307,6 +3364,8 @@ RECEIVED AT THIS ADDRESS CANNOT BE RESPONDED TO.'); INSERT INTO quote_items (id ,qute_id + ,enty_code + ,mety_code ,adit_code ,cost_price ,selling_price @@ -3316,6 +3375,8 @@ RECEIVED AT THIS ADDRESS CANNOT BE RESPONDED TO.'); VALUES (quit_seq.NEXTVAL ,l_qute_id + ,p_enqu.enty_code + ,p_enqu.existing_mety_code ,l_ems_costs.adit_code ,l_ems_costs.cost_price ,l_ems_costs.selling_price @@ -3324,35 +3385,30 @@ RECEIVED AT THIS ADDRESS CANNOT BE RESPONDED TO.'); ,'AQI'); END IF; - /* Always include LIFTING GEAR */ - - INSERT INTO quote_items - (id - ,qute_id - ,adit_code - ,cost_price - ,selling_price - ,delivery_price - ,lead_time - ,quit_type) - VALUES - (quit_seq.NEXTVAL - ,l_qute_id - ,l_lifting_gear_costs.adit_code - ,l_lifting_gear_costs.cost_price - ,l_lifting_gear_costs.selling_price - ,l_lifting_gear_costs.delivery_cost - ,l_lifting_gear_costs.lead_time - ,'AQI'); + IF l_lifting_gear_costs.selling_price IS NOT NULL THEN + INSERT INTO quote_items + (id + ,qute_id + ,adit_code + ,cost_price + ,selling_price + ,delivery_price + ,lead_time + ,quit_type) + VALUES + (quit_seq.NEXTVAL + ,l_qute_id + ,l_lifting_gear_costs.adit_code + ,l_lifting_gear_costs.cost_price + ,l_lifting_gear_costs.selling_price + ,l_lifting_gear_costs.delivery_cost + ,l_lifting_gear_costs.lead_time + ,'AQI'); + END IF; -- Generate the quote PDF - /*BEGIN*/ l_quote_document := mip_quotation_document.generate_quote_pdf(p_quote_id => l_qute_id); - /* EXCEPTION - WHEN OTHERS THEN - cout_err.report_and_stop; - END; - */ + add_quote_reason(p_enqu_id => p_enqu.id ,p_reason => 'Produced Quote Document ' || l_quote_document || '.' @@ -3375,6 +3431,8 @@ RECEIVED AT THIS ADDRESS CANNOT BE RESPONDED TO.'); END IF; + pl('produce_addon_quotes:exit' + ,$$PLSQL_LINE); END produce_addon_quotes; PROCEDURE produce_automatic_quotes(p_enqu IN t_enqu @@ -3382,7 +3440,7 @@ RECEIVED AT THIS ADDRESS CANNOT BE RESPONDED TO.'); ,p_owner_prty_id IN parties.id%TYPE DEFAULT NULL ,p_manual_or_automatic_quote IN OUT t_manual_or_automatic_quote) IS BEGIN - pl('produce_automatic_quotes' + pl('produce_automatic_quotes:entry' ,$$PLSQL_LINE); cout_assert.istrue(p_manual_or_automatic_quote = gc_automatic_quote @@ -3413,6 +3471,11 @@ RECEIVED AT THIS ADDRESS CANNOT BE RESPONDED TO.'); ,p_rfq_prty_id => p_rfq_prty_id ,p_owner_prty_id => p_owner_prty_id ,p_manual_or_automatic_quote => p_manual_or_automatic_quote); + ELSIF p_enqu.enty_code IN ('ADDON') THEN + produce_addon_quotes(p_enqu => p_enqu + ,p_rfq_prty_id => p_rfq_prty_id + ,p_owner_prty_id => p_owner_prty_id + ,p_manual_or_automatic_quote => p_manual_or_automatic_quote); ELSE cout_err.report_and_stop(p_exception_message => 'Attempted to produce automatic quote for unexpected enquiry type of ' || p_enqu.enty_code);