BULK LOAD - added support drawings, bases and housings
QUOTATION - moved costing of labour outside of main query, provide more details on failure to produce automatic quote. git-svn-id: http://locode01.ad.dom/svn/WEBMIP/trunk@3206 248e525c-4dfb-0310-94bc-949c084e9493
This commit is contained in:
@@ -47,14 +47,42 @@ CREATE OR REPLACE PACKAGE BODY mip_quotation IS
|
||||
|
||||
TYPE t_rec_additional_costs IS RECORD(
|
||||
adit_code additional_items.code%TYPE
|
||||
,svcpt_code service_pressure_types.code%TYPE
|
||||
,lead_time additional_items.lead_time%TYPE
|
||||
,selling_price costs.selling_price%TYPE
|
||||
,cost_price costs.cost_price%TYPE
|
||||
,delivery_cost costs.delivery_cost%TYPE);
|
||||
|
||||
PROCEDURE request_manual_quote(p_id IN enquiries.id%TYPE) IS
|
||||
PROCEDURE request_manual_quote(p_enqu_id IN enquiries.id%TYPE) IS
|
||||
l_qute_id quotes.id%TYPE;
|
||||
BEGIN
|
||||
NULL;
|
||||
INSERT INTO quotes
|
||||
(id
|
||||
,qute_type
|
||||
,enqu_id
|
||||
,valid_from
|
||||
,valid_until
|
||||
,created_on
|
||||
,created_by)
|
||||
VALUES
|
||||
(qute_seq.NEXTVAL
|
||||
,'MQ' -- manual quote
|
||||
,p_enqu_id
|
||||
,trunc(SYSDATE)
|
||||
,trunc(SYSDATE + 90)
|
||||
,SYSDATE
|
||||
,USER)
|
||||
RETURNING id INTO l_qute_id;
|
||||
|
||||
INSERT INTO quote_events
|
||||
(event_date
|
||||
,qust_code
|
||||
,qute_id)
|
||||
VALUES
|
||||
(SYSDATE
|
||||
,'INP' -- In Progress
|
||||
,l_qute_id);
|
||||
|
||||
END request_manual_quote;
|
||||
|
||||
PROCEDURE ready_for_quote(p_id IN enquiries.id%TYPE
|
||||
@@ -228,6 +256,12 @@ CREATE OR REPLACE PACKAGE BODY mip_quotation IS
|
||||
add_quote_reason(p_enqu.id
|
||||
,'Unable to determine pricing region for given installation postcode.');
|
||||
END IF;
|
||||
|
||||
IF p_manual_or_automatic_quote = g_manual_quote THEN
|
||||
add_quote_reason(p_enqu.id
|
||||
,'- Manual quote required.'
|
||||
,g_internal_reason);
|
||||
END IF;
|
||||
END manual_or_automatic_quote;
|
||||
|
||||
FUNCTION get_housing(p_hou_code IN modules.hou_code%TYPE
|
||||
@@ -244,7 +278,10 @@ CREATE OR REPLACE PACKAGE BODY mip_quotation IS
|
||||
FROM (SELECT selling_price
|
||||
,cost_price
|
||||
,delivery_cost
|
||||
FROM (SELECT row_number() over(PARTITION BY hou_code ORDER BY(decode(regi_code, p_regi_code, 1, 999))) AS accuracy
|
||||
FROM (SELECT decode(regi_code
|
||||
,p_regi_code
|
||||
,1
|
||||
,999) AS accuracy
|
||||
,hou_code
|
||||
,selling_price
|
||||
,cost_price
|
||||
@@ -254,9 +291,9 @@ CREATE OR REPLACE PACKAGE BODY mip_quotation IS
|
||||
WHERE hou_code = p_hou_code
|
||||
AND SYSDATE BETWEEN cost.effective_from AND
|
||||
cost.effective_to
|
||||
AND regi_code = p_regi_code
|
||||
OR regi_code IS NULL)
|
||||
WHERE accuracy <= 1);
|
||||
AND (regi_code = p_regi_code OR regi_code IS NULL)
|
||||
ORDER BY 1)
|
||||
WHERE rownum < 2);
|
||||
|
||||
RETURN l_rec_costs;
|
||||
EXCEPTION
|
||||
@@ -278,7 +315,10 @@ CREATE OR REPLACE PACKAGE BODY mip_quotation IS
|
||||
FROM (SELECT selling_price
|
||||
,cost_price
|
||||
,delivery_cost
|
||||
FROM (SELECT row_number() over(PARTITION BY bas_code ORDER BY(decode(regi_code, p_regi_code, 1, 999))) AS accuracy
|
||||
FROM (SELECT decode(regi_code
|
||||
,p_regi_code
|
||||
,1
|
||||
,999) AS accuracy
|
||||
,bas_code
|
||||
,selling_price
|
||||
,cost_price
|
||||
@@ -288,9 +328,9 @@ CREATE OR REPLACE PACKAGE BODY mip_quotation IS
|
||||
WHERE bas_code = p_bas_code
|
||||
AND SYSDATE BETWEEN cost.effective_from AND
|
||||
cost.effective_to
|
||||
AND regi_code = p_regi_code
|
||||
OR regi_code IS NULL)
|
||||
WHERE accuracy <= 1);
|
||||
AND (regi_code = p_regi_code OR regi_code IS NULL)
|
||||
ORDER BY 1)
|
||||
WHERE rownum < 2);
|
||||
|
||||
RETURN l_rec_costs;
|
||||
|
||||
@@ -319,7 +359,10 @@ CREATE OR REPLACE PACKAGE BODY mip_quotation IS
|
||||
,cost_price
|
||||
,delivery_cost
|
||||
,adit_code
|
||||
FROM (SELECT row_number() over(PARTITION BY adit_code ORDER BY(decode(regi_code, p_regi_code, 1, 999))) AS accuracy
|
||||
FROM (SELECT decode(regi_code
|
||||
,p_regi_code
|
||||
,1
|
||||
,999) AS accuracy
|
||||
,adit_code
|
||||
,selling_price
|
||||
,cost_price
|
||||
@@ -329,9 +372,9 @@ CREATE OR REPLACE PACKAGE BODY mip_quotation IS
|
||||
WHERE adit_code = p_adit_code
|
||||
AND SYSDATE BETWEEN cost.effective_from AND
|
||||
cost.effective_to
|
||||
AND regi_code = p_regi_code
|
||||
OR regi_code IS NULL)
|
||||
WHERE accuracy <= 1) cost
|
||||
AND (regi_code = p_regi_code OR regi_code IS NULL)
|
||||
ORDER BY 1)
|
||||
WHERE rownum < 2) cost
|
||||
WHERE adit.code = cost.adit_code
|
||||
AND adit.code = p_adit_code;
|
||||
|
||||
@@ -342,6 +385,56 @@ CREATE OR REPLACE PACKAGE BODY mip_quotation IS
|
||||
RETURN l_rec_costs;
|
||||
END get_aico;
|
||||
|
||||
FUNCTION get_laco(p_enty_code IN enquiry_types.code%TYPE
|
||||
,p_regi_code IN regions.code%TYPE
|
||||
,p_mety_code IN meter_types.code%TYPE
|
||||
,p_mesc_code IN meter_size_codes.code%TYPE DEFAULT NULL
|
||||
,p_svcp_code IN service_pressures.code%TYPE DEFAULT NULL)
|
||||
RETURN t_rec_additional_costs IS
|
||||
l_rec_costs t_rec_additional_costs;
|
||||
BEGIN
|
||||
SELECT selling_price
|
||||
,cost_price
|
||||
,delivery_cost
|
||||
,svcpt_code
|
||||
INTO l_rec_costs.selling_price
|
||||
,l_rec_costs.cost_price
|
||||
,l_rec_costs.delivery_cost
|
||||
,l_rec_costs.svcpt_code
|
||||
FROM (SELECT decode(regi_code
|
||||
,p_regi_code
|
||||
,1
|
||||
,999) AS accuracy
|
||||
,enty_code
|
||||
,mety_code
|
||||
,cost.svcpt_code
|
||||
,mesc_code
|
||||
,selling_price
|
||||
,cost_price
|
||||
,delivery_cost
|
||||
,cost.ROWID
|
||||
,svcp.code AS svcp_code
|
||||
FROM v_laco cost
|
||||
,service_pressures svcp
|
||||
WHERE SYSDATE BETWEEN cost.effective_from AND cost.effective_to
|
||||
AND (regi_code = p_regi_code OR regi_code IS NULL)
|
||||
AND cost.svcpt_code = svcp.svcpt_code
|
||||
AND enty_code = p_enty_code
|
||||
AND mety_code = p_mety_code
|
||||
AND ((svcp.code = p_svcp_code) OR
|
||||
(svcp.code IS NULL AND p_svcp_code IS NULL))
|
||||
AND ((mesc_code = p_mesc_code) OR
|
||||
(mesc_code IS NULL AND p_mesc_code IS NULL))
|
||||
ORDER BY 1)
|
||||
WHERE rownum < 2;
|
||||
|
||||
RETURN l_rec_costs;
|
||||
|
||||
EXCEPTION
|
||||
WHEN no_data_found THEN
|
||||
RETURN l_rec_costs;
|
||||
END get_laco;
|
||||
|
||||
PROCEDURE produce_install_quotes(p_enqu IN t_enqu
|
||||
,p_manual_or_automatic_quote IN OUT t_manual_or_automatic_quote) IS
|
||||
l_produced_automatic_quote BOOLEAN;
|
||||
@@ -372,6 +465,8 @@ CREATE OR REPLACE PACKAGE BODY mip_quotation IS
|
||||
,modu.delivery_cost AS modu_delivery_cost
|
||||
,modu.lead_time AS modu_lead_time
|
||||
,modu.hou_code AS hou_code
|
||||
,modu.inlet_orientation AS modu_inlet_orientation
|
||||
,modu.outlet_orientation AS modu_outlet_orientation
|
||||
,NULL AS hou_selling_price
|
||||
,NULL AS hou_cost_price
|
||||
,NULL AS hou_delivery_cost
|
||||
@@ -387,13 +482,12 @@ CREATE OR REPLACE PACKAGE BODY mip_quotation IS
|
||||
,metr.cost_price AS metr_cost_price
|
||||
,metr.delivery_cost AS metr_delivery_cost
|
||||
,metr.mety_code
|
||||
,laco.mety_code AS laco_mety_code
|
||||
,laco.svcp_code AS laco_svcp_code
|
||||
,laco.svcpt_code AS laco_svcpt_code
|
||||
,laco.mesc_code AS laco_mesc_code
|
||||
,laco.selling_price /*NULL*/ AS laco_selling_price
|
||||
,laco.cost_price /*NULL*/ AS laco_cost_price
|
||||
,laco.delivery_cost /*NULL*/ AS laco_delivery_cost
|
||||
,NULL AS laco_mety_code
|
||||
,NULL AS laco_svcpt_code
|
||||
,NULL AS laco_mesc_code
|
||||
,NULL AS laco_selling_price
|
||||
,NULL AS laco_cost_price
|
||||
,NULL AS laco_delivery_cost
|
||||
,NULL AS amr_cost_id
|
||||
,NULL AS amr_selling_price
|
||||
,NULL AS amr_cost_price
|
||||
@@ -420,11 +514,15 @@ CREATE OR REPLACE PACKAGE BODY mip_quotation IS
|
||||
,modu.bas_code
|
||||
,svcp_code
|
||||
,outlet_pressure
|
||||
,cnor_i.description AS inlet_orientation
|
||||
,cnor_o.description AS outlet_orientation
|
||||
,selling_price
|
||||
,cost_price
|
||||
,delivery_cost
|
||||
,lead_time
|
||||
FROM modules modu
|
||||
,connection_orientations cnor_i
|
||||
,connection_orientations cnor_o
|
||||
,(SELECT modu_code
|
||||
,selling_price
|
||||
,cost_price
|
||||
@@ -436,53 +534,16 @@ CREATE OR REPLACE PACKAGE BODY mip_quotation IS
|
||||
,delivery_cost
|
||||
,ROWID
|
||||
FROM v_moco cost
|
||||
WHERE SYSDATE BETWEEN
|
||||
cost.effective_from AND
|
||||
cost.effective_to
|
||||
AND regi_code =
|
||||
l_regi_code
|
||||
OR regi_code IS NULL)
|
||||
WHERE accuracy <= 1) cost
|
||||
WHERE modu.code = cost.modu_code(+)) modu
|
||||
,(SELECT enty_code
|
||||
,mety_code
|
||||
,svcpt_code
|
||||
,mesc_code
|
||||
,svcp_code
|
||||
,selling_price
|
||||
,cost_price
|
||||
,delivery_cost
|
||||
FROM enquiry_types enty
|
||||
,(SELECT enty_code
|
||||
,mety_code
|
||||
,svcpt_code
|
||||
,mesc_code
|
||||
,svcp_code
|
||||
,selling_price
|
||||
,cost_price
|
||||
,delivery_cost
|
||||
FROM (SELECT row_number() over(PARTITION BY enty_code, mety_code, cost.svcpt_code, mesc_code ORDER BY(decode(regi_code, l_regi_code, 1, 999))) AS accuracy
|
||||
,enty_code
|
||||
,mety_code
|
||||
,cost.svcpt_code
|
||||
,mesc_code
|
||||
,selling_price
|
||||
,cost_price
|
||||
,delivery_cost
|
||||
,cost.ROWID
|
||||
,svcp.code AS svcp_code
|
||||
FROM v_laco cost
|
||||
,service_pressures svcp
|
||||
WHERE SYSDATE BETWEEN
|
||||
cost.effective_from AND
|
||||
cost.effective_to
|
||||
AND (regi_code =
|
||||
l_regi_code OR
|
||||
regi_code IS NULL)
|
||||
AND cost.svcpt_code =
|
||||
svcp.svcpt_code(+))
|
||||
regi_code IS NULL))
|
||||
WHERE accuracy <= 1) cost
|
||||
WHERE enty.code = cost.enty_code(+)) laco
|
||||
WHERE modu.code = cost.modu_code(+)
|
||||
AND modu.inlet_cnor_code = cnor_i.code
|
||||
AND modu.outlet_cnor_code = cnor_o.code) modu
|
||||
,(SELECT metr.code
|
||||
,metr.qmax
|
||||
,metr.qmin
|
||||
@@ -506,9 +567,9 @@ CREATE OR REPLACE PACKAGE BODY mip_quotation IS
|
||||
WHERE SYSDATE BETWEEN
|
||||
cost.effective_from AND
|
||||
cost.effective_to
|
||||
AND regi_code =
|
||||
l_regi_code
|
||||
OR regi_code IS NULL)
|
||||
AND (regi_code =
|
||||
l_regi_code OR
|
||||
regi_code IS NULL))
|
||||
WHERE accuracy <= 1) cost
|
||||
WHERE metr.code = cost.metr_code(+)) metr
|
||||
WHERE modu.svcp_code = p_enqu.required_svcp_code
|
||||
@@ -516,16 +577,7 @@ CREATE OR REPLACE PACKAGE BODY mip_quotation IS
|
||||
p_enqu.required_metering_pressure
|
||||
AND metr.code = modu.metr_code
|
||||
AND metr.qmax >= p_enqu.qmax
|
||||
AND (laco.enty_code = p_enqu.enty_code AND
|
||||
laco.mety_code = metr.mety_code AND
|
||||
((laco.svcp_code =
|
||||
p_enqu.required_svcp_code) OR
|
||||
(laco.svcp_code IS NULL AND
|
||||
p_enqu.required_svcp_code IS NULL)) AND
|
||||
((laco.mesc_code =
|
||||
p_enqu.required_mesc_code) OR
|
||||
(laco.mesc_code IS NULL AND
|
||||
p_enqu.required_mesc_code IS NULL)))) LOOP
|
||||
) LOOP
|
||||
l_this_is_automatic_quote := TRUE;
|
||||
add_quote_reason(p_enqu.id
|
||||
,p_reason => 'Considering module : ' ||
|
||||
@@ -551,11 +603,27 @@ CREATE OR REPLACE PACKAGE BODY mip_quotation IS
|
||||
,p_internal_or_external => g_internal_reason);
|
||||
END IF;
|
||||
|
||||
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_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;
|
||||
l_rec_module.laco_cost_price := l_additional_costs.cost_price;
|
||||
l_rec_module.laco_delivery_cost := l_additional_costs.delivery_cost;
|
||||
IF l_rec_module.laco_selling_price IS NULL THEN
|
||||
l_this_is_automatic_quote := FALSE;
|
||||
add_quote_reason(p_enqu.id
|
||||
,p_reason => 'Unable to find Labour Cost (selling price) for enquiry type ' ||
|
||||
p_enqu.enty_code || CASE l_regi_code WHEN NULL THEN '' ELSE ' for region code ' || l_regi_code END || '.'
|
||||
,p_reason => 'Unable to find Labour Cost (selling price) for this Enquiry Type Code: ' ||
|
||||
p_enqu.enty_code ||
|
||||
', Meter Type Code:' ||
|
||||
l_rec_module.mety_code ||
|
||||
', Meter Size Code:' ||
|
||||
p_enqu.required_mesc_code ||
|
||||
', Service Pressure Code:' ||
|
||||
p_enqu.required_svcp_code || CASE
|
||||
l_regi_code WHEN NULL THEN '' ELSE ' for region code ' || l_regi_code END || '.'
|
||||
|
||||
,p_internal_or_external => g_internal_reason);
|
||||
END IF;
|
||||
@@ -720,23 +788,6 @@ CREATE OR REPLACE PACKAGE BODY mip_quotation IS
|
||||
,'INP' -- In Progress
|
||||
,l_qute_id);
|
||||
|
||||
INSERT INTO quote_items
|
||||
(id
|
||||
,qute_id
|
||||
,modu_code
|
||||
,cost_price
|
||||
,selling_price
|
||||
,delivery_price
|
||||
,quit_type)
|
||||
VALUES
|
||||
(quit_seq.NEXTVAL
|
||||
,l_qute_id
|
||||
,l_rec_module.modu_code
|
||||
,l_rec_module.modu_cost_price
|
||||
,l_rec_module.modu_selling_price
|
||||
,l_rec_module.modu_delivery_cost
|
||||
,'MQI');
|
||||
|
||||
INSERT INTO quote_items
|
||||
(id
|
||||
,qute_id
|
||||
@@ -760,6 +811,29 @@ CREATE OR REPLACE PACKAGE BODY mip_quotation IS
|
||||
,l_rec_module.laco_delivery_cost
|
||||
,'LQI');
|
||||
|
||||
INSERT INTO quote_items
|
||||
(id
|
||||
,qute_id
|
||||
,modu_code
|
||||
,qmax
|
||||
,inlet_orientation
|
||||
,outlet_orientation
|
||||
,cost_price
|
||||
,selling_price
|
||||
,delivery_price
|
||||
,quit_type)
|
||||
VALUES
|
||||
(quit_seq.NEXTVAL
|
||||
,l_qute_id
|
||||
,l_rec_module.modu_code
|
||||
,l_rec_module.qmax
|
||||
,l_rec_module.modu_inlet_orientation
|
||||
,l_rec_module.modu_outlet_orientation
|
||||
,l_rec_module.modu_cost_price
|
||||
,l_rec_module.modu_selling_price
|
||||
,l_rec_module.modu_delivery_cost
|
||||
,'MQI');
|
||||
|
||||
IF p_enqu.housing_required = 'YES' THEN
|
||||
INSERT INTO quote_items
|
||||
(id
|
||||
@@ -883,13 +957,13 @@ CREATE OR REPLACE PACKAGE BODY mip_quotation IS
|
||||
,'AQI');
|
||||
|
||||
-- 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;
|
||||
|
||||
/*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 || '.'
|
||||
@@ -909,41 +983,16 @@ CREATE OR REPLACE PACKAGE BODY mip_quotation IS
|
||||
END LOOP;
|
||||
|
||||
IF l_produced_automatic_quote THEN
|
||||
p_manual_or_automatic_quote := g_automatic_quote;
|
||||
add_quote_reason(p_enqu_id => p_enqu.id
|
||||
,p_reason => '-- Produced an automatic quote.'
|
||||
,p_internal_or_external => g_internal_reason);
|
||||
ELSE
|
||||
p_manual_or_automatic_quote := g_manual_quote;
|
||||
add_quote_reason(p_enqu_id => p_enqu.id
|
||||
,p_reason => '-- Manual quote required.'
|
||||
,p_reason => '-- Automatic quote failed - Manual quote required.'
|
||||
,p_internal_or_external => g_internal_reason);
|
||||
|
||||
INSERT INTO quotes
|
||||
(id
|
||||
,qute_type
|
||||
,enqu_id
|
||||
,valid_from
|
||||
,valid_until
|
||||
,created_on
|
||||
,created_by)
|
||||
VALUES
|
||||
(qute_seq.NEXTVAL
|
||||
,'MQ' -- manual quote
|
||||
,p_enqu.id
|
||||
,trunc(SYSDATE)
|
||||
,trunc(SYSDATE + 90)
|
||||
,SYSDATE
|
||||
,USER)
|
||||
RETURNING id INTO l_qute_id;
|
||||
|
||||
INSERT INTO quote_events
|
||||
(event_date
|
||||
,qust_code
|
||||
,qute_id)
|
||||
VALUES
|
||||
(SYSDATE
|
||||
,'INP' -- In Progress
|
||||
,l_qute_id);
|
||||
|
||||
END IF;
|
||||
|
||||
END produce_install_quotes;
|
||||
@@ -981,20 +1030,20 @@ CREATE OR REPLACE PACKAGE BODY mip_quotation IS
|
||||
,p_manual_or_automatic_quote => l_manual_or_automatic_quote);
|
||||
|
||||
IF l_manual_or_automatic_quote = g_manual_quote THEN
|
||||
request_manual_quote(p_id => l_enqu.id);
|
||||
request_manual_quote(p_enqu_id => l_enqu.id);
|
||||
ELSE
|
||||
produce_automatic_quotes(p_enqu => l_enqu
|
||||
,p_manual_or_automatic_quote => l_manual_or_automatic_quote);
|
||||
IF l_manual_or_automatic_quote = g_manual_quote THEN
|
||||
request_manual_quote(p_id => l_enqu.id);
|
||||
request_manual_quote(p_enqu_id => l_enqu.id);
|
||||
END IF;
|
||||
|
||||
--
|
||||
END IF; -- manual or automatic quote
|
||||
|
||||
EXCEPTION
|
||||
/* EXCEPTION
|
||||
WHEN OTHERS THEN
|
||||
cout_err.report_and_stop;
|
||||
cout_err.report_and_stop;*/
|
||||
END produce_quotes;
|
||||
|
||||
BEGIN
|
||||
|
||||
Reference in New Issue
Block a user