Add calc_meter_reqs to mip_quotation.pck.

Ensure that all calls to add_quote_reason use correct parameters (mip_quotation.pck).

Change grant from 'CREATE ANY VIEW' to 'CREATE VIEW' in InstallMIP.sql following problems installing 'supporting objects' into MIP_TEST.


git-svn-id: http://locode01.ad.dom/svn/WEBMIP/trunk@3989 248e525c-4dfb-0310-94bc-949c084e9493
This commit is contained in:
hardya
2008-03-13 18:36:18 +00:00
parent c94f48c9f2
commit 24c31ebc45
3 changed files with 221 additions and 77 deletions

View File

@@ -6,8 +6,17 @@ CREATE OR REPLACE PACKAGE mip_enquiry IS
-- Updates : 21 November 2007 - MM - added copy_enquiry function
--
TYPE t_rec_meter_reqs IS RECORD(
existing_metr_code meters.code%TYPE
,qmax meters.qmax%TYPE
,existing_mesc_code meters.mesc_code%TYPE
,existing_mety_code meters.mety_code%TYPE
,existing_prty_id meters.prty_id%TYPE
,required_mesc_code meters.mesc_code%TYPE
);
-- Public function and procedure declarations
FUNCTION delete_enquiry(p_enquiryid IN NUMBER) RETURN BOOLEAN;
FUNCTION delete_enquiry(p_enquiryid IN NUMBER) RETURN BOOLEAN;
FUNCTION get_enquiry_status(p_enquiryid IN NUMBER) RETURN VARCHAR2;
FUNCTION get_enquiry_role(p_enquiryid IN NUMBER
@@ -50,9 +59,28 @@ CREATE OR REPLACE PACKAGE mip_enquiry IS
,p_enqu_supp parties.id%TYPE) RETURN VARCHAR2;
--
FUNCTION calc_meter_reqs(p_enty_code enquiry_types.code%TYPE
,p_existing_mesc_code meters.mesc_code%TYPE
,p_required_mesc_code meters.mesc_code%TYPE
,p_existing_metr_code meters.code%TYPE
,p_existing_mety_code meters.mety_code%TYPE
,p_qmax meters.qmax%TYPE)
RETURN t_rec_meter_reqs;
END mip_enquiry;
/
CREATE OR REPLACE PACKAGE BODY mip_enquiry IS
PROCEDURE pl(p_in VARCHAR2
,p_line IN NUMBER DEFAULT NULL) IS
BEGIN
NULL;
/* $IF mip_debug_constants.debugging OR mip_debug_constants.enquiry
$THEN*/
mip_debug.pl(p_unit => $$PLSQL_UNIT
,p_line => p_line
,p_in => p_in);
/* $END*/
END pl;
/*
FUNCTION delete_enquiry
- This function returns the status of the enquiry provided
@@ -60,23 +88,24 @@ CREATE OR REPLACE PACKAGE BODY mip_enquiry IS
%return boolean - whether the enquiry was deleted or not
*/
FUNCTION delete_enquiry(p_enquiryid IN NUMBER) RETURN BOOLEAN AS
l_uri documents.uri%type;
l_doc_id documents.id%type;
l_count number := 0;
CURSOR c_get_doc_id(cp_enq_id number) is
select id
from document_roles
where enqu_id=cp_enq_id;
CURSOR c_get_uri(cp_id number) is
select uri
from documents
where id=cp_id;
CURSOR c_get_document_files(cp_enq_id number) is
select documents.uri
from documents,document_roles
where document_roles.enqu_id = cp_enq_id
and documents.id = document_roles.docu_id;
begin
l_uri documents.uri%TYPE;
l_doc_id documents.id%TYPE;
l_count NUMBER := 0;
CURSOR c_get_doc_id(cp_enq_id NUMBER) IS
SELECT id
FROM document_roles
WHERE enqu_id = cp_enq_id;
CURSOR c_get_uri(cp_id NUMBER) IS
SELECT uri
FROM documents
WHERE id = cp_id;
CURSOR c_get_document_files(cp_enq_id NUMBER) IS
SELECT documents.uri
FROM documents
,document_roles
WHERE document_roles.enqu_id = cp_enq_id
AND documents.id = document_roles.docu_id;
BEGIN
--select count(*) into l_count from quotes where quotes.enqu_id=p_enquiryid;
--if l_count > 0 then
-- return false;
@@ -87,23 +116,29 @@ CREATE OR REPLACE PACKAGE BODY mip_enquiry IS
FETCH c_get_doc_id
INTO l_doc_id;
CLOSE c_get_doc_id;
IF NOT c_get_uri%ISOPEN THEN
OPEN c_get_uri(l_doc_id);
END IF;
FETCH c_get_uri
INTO l_uri;
CLOSE c_get_uri;
delete enquiry_roles where enquiry_roles.enqu_id = p_enquiryid;
delete enquiry_events where enquiry_events.enqu_id = p_enquiryid;
DELETE enquiry_roles
WHERE enquiry_roles.enqu_id = p_enquiryid;
DELETE enquiry_events
WHERE enquiry_events.enqu_id = p_enquiryid;
FOR doc_rec IN c_get_document_files(p_enquiryid) LOOP
delete wwv_flow_files where wwv_flow_files.name = doc_rec.uri;
end loop;
delete document_roles where document_roles.enqu_id = p_enquiryid;
delete documents where documents.id = l_doc_id;
delete enquiries where enquiries.id = p_enquiryid;
return true;
DELETE wwv_flow_files
WHERE wwv_flow_files.NAME = doc_rec.uri;
END LOOP;
DELETE document_roles
WHERE document_roles.enqu_id = p_enquiryid;
DELETE documents
WHERE documents.id = l_doc_id;
DELETE enquiries
WHERE enquiries.id = p_enquiryid;
RETURN TRUE;
END delete_enquiry;
/*
FUNCTION get_enquiry_status
@@ -112,21 +147,22 @@ CREATE OR REPLACE PACKAGE BODY mip_enquiry IS
%return varchar2 - the current status of the enquiry
*/
FUNCTION get_enquiry_status(p_enquiryid IN NUMBER) RETURN VARCHAR2 AS
-- cursor to get the current enquiry
CURSOR c_get_enquiry_status(cp_enqu_id number) IS
SELECT enst_code
FROM v_current_enquiry_status
WHERE enqu_id=cp_enqu_id;
l_enqu_status varchar2(80);
-- cursor to get the current enquiry
CURSOR c_get_enquiry_status(cp_enqu_id NUMBER) IS
SELECT enst_code
FROM v_current_enquiry_status
WHERE enqu_id = cp_enqu_id;
l_enqu_status VARCHAR2(80);
BEGIN
IF NOT c_get_enquiry_status%ISOPEN THEN
OPEN c_get_enquiry_status(p_enquiryid);
END IF;
FETCH c_get_enquiry_status
INTO l_enqu_status;
CLOSE c_get_enquiry_status;
return nvl(l_enqu_status,'');
RETURN nvl(l_enqu_status
,'');
END get_enquiry_status;
/*
FUNCTION get_enquiry_role
@@ -138,21 +174,23 @@ CREATE OR REPLACE PACKAGE BODY mip_enquiry IS
*/
FUNCTION get_enquiry_role(p_enquiryid IN NUMBER
,p_rolecode IN VARCHAR2) RETURN NUMBER AS
-- cursor to get the current enquiry
CURSOR c_get_enquiry_role(cp_enqu_id number, cp_rolecode VARCHAR2) IS
SELECT prty_id
FROM v_latest_rt_code_for_enro
WHERE rt_code=cp_rolecode and enqu_id=cp_enqu_id;
l_enqu_role_row number;
-- cursor to get the current enquiry
CURSOR c_get_enquiry_role(cp_enqu_id NUMBER, cp_rolecode VARCHAR2) IS
SELECT prty_id
FROM v_latest_rt_code_for_enro
WHERE rt_code = cp_rolecode
AND enqu_id = cp_enqu_id;
l_enqu_role_row NUMBER;
BEGIN
IF NOT c_get_enquiry_role%ISOPEN THEN
OPEN c_get_enquiry_role(p_enquiryid, p_rolecode);
OPEN c_get_enquiry_role(p_enquiryid
,p_rolecode);
END IF;
FETCH c_get_enquiry_role
INTO l_enqu_role_row;
CLOSE c_get_enquiry_role;
return l_enqu_role_row;
RETURN l_enqu_role_row;
END get_enquiry_role;
/*
FUNCTION set_enquiry_role
@@ -242,7 +280,7 @@ CREATE OR REPLACE PACKAGE BODY mip_enquiry IS
(p_enquiryid
,SYSDATE
,p_eventcode
,enev_seq.nextval);
,enev_seq.NEXTVAL);
RETURN TRUE;
--
@@ -383,6 +421,113 @@ CREATE OR REPLACE PACKAGE BODY mip_enquiry IS
RETURN SQLERRM;
END copy_enquiry;
--
FUNCTION calc_meter_reqs(p_enty_code enquiry_types.code%TYPE
,p_existing_mesc_code meters.mesc_code%TYPE
,p_required_mesc_code meters.mesc_code%TYPE
,p_existing_metr_code meters.code%TYPE
,p_existing_mety_code meters.mety_code%TYPE
,p_qmax meters.qmax%TYPE)
RETURN t_rec_meter_reqs IS
l_dummy NUMBER;
l_existing_meter_enquiry BOOLEAN;
l_required_meter_enquiry BOOLEAN;
l_rec_meter_reqs t_rec_meter_reqs;
BEGIN
pl('calc_meter_reqs:entry:' || p_enty_code || ':' ||
p_existing_mesc_code || ':' || p_required_mesc_code || ':' ||
p_existing_metr_code || ':' || p_qmax);
-- is the enquiry one that uses an existing meter?
BEGIN
SELECT 1
INTO l_dummy
FROM data_item_roles
WHERE field_name = 'EXISTING_METR_CODE'
AND condition <> 'H'
AND enty_code = p_enty_code;
l_existing_meter_enquiry := TRUE;
EXCEPTION
WHEN no_data_found THEN
l_existing_meter_enquiry := FALSE;
END;
BEGIN
SELECT 1
INTO l_dummy
FROM data_item_roles
WHERE field_name = 'QMAX'
AND condition <> 'H'
AND enty_code = p_enty_code;
l_required_meter_enquiry := TRUE;
EXCEPTION
WHEN no_data_found THEN
l_required_meter_enquiry := FALSE;
END;
-- Consider existing meter
IF NOT l_existing_meter_enquiry THEN
l_rec_meter_reqs.existing_metr_code := NULL;
l_rec_meter_reqs.existing_mesc_code := NULL;
l_rec_meter_reqs.existing_mety_code := NULL;
ELSE
-- Existing Meter Query
-- if we have an existing meter model use the associated details
IF nvl(p_existing_metr_code
,'OTHER') <> 'OTHER' THEN
SELECT code
,CASE substr(mesc_code
,1
,1)
WHEN 'U' THEN
mesc_code
ELSE
'OTHER'
END
,mety_code
,prty_id
INTO l_rec_meter_reqs.existing_metr_code
,l_rec_meter_reqs.existing_mesc_code
,l_rec_meter_reqs.existing_mety_code
,l_rec_meter_reqs.existing_prty_id
FROM meters
WHERE code = p_existing_metr_code;
ELSE
-- we don't have real model details, chose the 'OTHER' meter
SELECT prty_id
INTO l_rec_meter_reqs.existing_prty_id
FROM meters
WHERE code = 'OTHER';
l_rec_meter_reqs.existing_metr_code := 'OTHER';
l_rec_meter_reqs.existing_mety_code := p_existing_mety_code;
l_rec_meter_reqs.existing_mesc_code := p_existing_mesc_code;
END IF;
END IF;
-- consider required meter
IF NOT l_required_meter_enquiry THEN
l_rec_meter_reqs.qmax := NULL;
l_rec_meter_reqs.required_mesc_code := NULL;
l_rec_meter_reqs.required_mesc_code := p_required_mesc_code;
ELSE
IF nvl(l_rec_meter_reqs.required_mesc_code
,'OTHER') <> 'OTHER' THEN
l_rec_meter_reqs.qmax := round(mip_quotation.get_qmax_from_mesc(p_mesc_code => l_rec_meter_reqs.required_mesc_code)
,3);
ELSE
l_rec_meter_reqs.required_mesc_code := nvl(p_required_mesc_code
,'OTHER');
l_rec_meter_reqs.qmax := p_qmax;
END IF;
END IF;
pl('calc_meter_reqs:exit:' || l_rec_meter_reqs.existing_mesc_code || ':' ||
l_rec_meter_reqs.required_mesc_code || ':' ||
l_rec_meter_reqs.existing_metr_code || ':' || l_rec_meter_reqs.qmax);
RETURN l_rec_meter_reqs;
END calc_meter_reqs;
END mip_enquiry;
/