diff --git a/Modules/MIP_ENQUIRY.pck b/Modules/MIP_ENQUIRY.pck index 56d2401..dc4e8eb 100644 --- a/Modules/MIP_ENQUIRY.pck +++ b/Modules/MIP_ENQUIRY.pck @@ -176,6 +176,8 @@ CREATE OR REPLACE PACKAGE BODY mip_enquiry IS FUNCTION delete_enquiry(p_enqu_id IN enquiries.id%TYPE ,p_message OUT VARCHAR2) RETURN BOOLEAN IS l_enquiry_deleted BOOLEAN := TRUE; + TYPE t_rowid IS TABLE OF ROWID; + l_rowid t_rowid := t_rowid(); BEGIN pl('delete_enquiry:entry:' || p_enqu_id ,$$PLSQL_LINE); @@ -192,6 +194,39 @@ CREATE OR REPLACE PACKAGE BODY mip_enquiry IS -- delete all associations with this enquiry -- + DELETE FROM apex_application_files aaf + WHERE aaf.NAME IN (SELECT uri + FROM documents docu + ,document_roles doro + WHERE doro.enqu_id = p_enqu_id + AND doro.docu_id = docu.id + AND docu.docu_type = 'INDO'); + + DELETE FROM document_events doev + WHERE doev.docu_id IN + (SELECT docu_id + FROM document_roles doro + WHERE doro.enqu_id = p_enqu_id); + + -- document roles knows which files should be deleted + -- through a FK + -- 1. Gather the rowids of the documents first, + -- 2. Remove the document role + -- 3. Remove the associated document + SELECT ROWID BULK COLLECT + INTO l_rowid + FROM documents + WHERE id IN (SELECT docu_id + FROM document_roles + WHERE enqu_id = p_enqu_id); + + DELETE FROM document_roles doro + WHERE doro.enqu_id = p_enqu_id; + + FORALL l_idx IN INDICES OF l_rowid + DELETE FROM documents + WHERE ROWID = l_rowid(l_idx); + DELETE FROM quote_reasoning WHERE enqu_id = p_enqu_id; @@ -639,61 +674,61 @@ CREATE OR REPLACE PACKAGE BODY mip_enquiry IS p_existing_mesc_code || ':' || p_required_mesc_code ,$$PLSQL_LINE); - IF p_enty_code IS NOT NULL THEN - -- is Qmax set to be hidden? - BEGIN - SELECT NULL - INTO l_dummy - FROM data_item_roles - WHERE enty_code = p_enty_code - AND field_name = 'QMAX' - AND substr(condition - ,1 - ,1) <> 'H'; - - l_return := TRUE; - EXCEPTION - WHEN no_data_found THEN - pl('show_qmax:QMAX IS HIDDEN' - ,$$PLSQL_LINE); - l_return := FALSE; - END; - - IF l_return THEN - IF p_enty_code IN - ('OFMAT', 'REMOVE', 'STD REMOVE', 'ADVERSARIAL', 'ADDON') THEN - l_existing_qmax := TRUE; - ELSE - l_required_qmax := TRUE; - END IF; - - IF l_existing_qmax THEN - IF (nvl(p_existing_metr_code - ,'OTHER') <> 'OTHER') THEN - pl('show_qmax:EXISTING_METR_CODE SPECIFIED'); - l_return := FALSE; - ELSIF - - (nvl(p_existing_metr_code - ,'OTHER') = 'OTHER' AND - nvl(p_existing_mesc_code - ,'OTHER') <> 'OTHER') THEN - pl('show_qmax:EXISTING_MESC SPECIFIED' + IF p_enty_code IS NOT NULL THEN + -- is Qmax set to be hidden? + BEGIN + SELECT NULL + INTO l_dummy + FROM data_item_roles + WHERE enty_code = p_enty_code + AND field_name = 'QMAX' + AND substr(condition + ,1 + ,1) <> 'H'; + + l_return := TRUE; + EXCEPTION + WHEN no_data_found THEN + pl('show_qmax:QMAX IS HIDDEN' ,$$PLSQL_LINE); l_return := FALSE; + END; + + IF l_return THEN + IF p_enty_code IN + ('OFMAT', 'REMOVE', 'STD REMOVE', 'ADVERSARIAL', 'ADDON') THEN + l_existing_qmax := TRUE; + ELSE + l_required_qmax := TRUE; + END IF; + + IF l_existing_qmax THEN + IF (nvl(p_existing_metr_code + ,'OTHER') <> 'OTHER') THEN + pl('show_qmax:EXISTING_METR_CODE SPECIFIED'); + l_return := FALSE; + ELSIF + + (nvl(p_existing_metr_code + ,'OTHER') = 'OTHER' AND + nvl(p_existing_mesc_code + ,'OTHER') <> 'OTHER') THEN + pl('show_qmax:EXISTING_MESC SPECIFIED' + ,$$PLSQL_LINE); + l_return := FALSE; + END IF; + END IF; + + IF l_required_qmax + AND (nvl(p_required_mesc_code + ,'OTHER') <> 'OTHER') THEN + pl('show_qmax:REQUIRED_MESC SPECIFIED' + ,$$PLSQL_LINE); + l_return := FALSE; + END IF; END IF; - - IF l_required_qmax - AND (nvl(p_required_mesc_code - ,'OTHER') <> 'OTHER') THEN - pl('show_qmax:REQUIRED_MESC SPECIFIED' - ,$$PLSQL_LINE); - l_return := FALSE; - - END IF; END IF; -END IF; pl('show_qmax:exit:' || CASE l_return WHEN TRUE THEN 'TRUE' ELSE 'FALSE' END