diff --git a/PNBR/pnbr.sql b/PNBR/pnbr.sql index 71163690c..4b1403e00 100644 --- a/PNBR/pnbr.sql +++ b/PNBR/pnbr.sql @@ -146,6 +146,12 @@ AS p_kenmerkdomein_key NUMBER, p_kenmerk_waarde VARCHAR2) RETURN VARCHAR2; + + PROCEDURE set_kenmerk(p_module IN VARCHAR2, + p_kenmerk_key IN NUMBER, + p_link_key IN NUMBER, + p_kenmerk_waarde IN VARCHAR2, + p_history IN NUMBER); END; / @@ -488,6 +494,346 @@ AS v_kenmerk_waarde); END; +PROCEDURE set_kenmerk(p_module IN VARCHAR2, + p_kenmerk_key IN NUMBER, + p_link_key IN NUMBER, + p_kenmerk_waarde IN VARCHAR2, + p_history IN NUMBER) + AS + v_count NUMBER; + v_niveau VARCHAR2 (1); + BEGIN + CASE p_module + WHEN 'PRS' + THEN + -- niveau van prs_kenmerk ophalen, omdat deze ook in prs_kenmerklink wordt + -- opgeslagen (da's dus redundant..?) + SELECT prs_kenmerk_niveau + INTO v_niveau + FROM prs_kenmerk + WHERE prs_kenmerk_key = p_kenmerk_key; + + SELECT COUNT ( * ) + INTO v_count + FROM prs_kenmerklink + WHERE prs_link_key = p_link_key + AND prs_kenmerk_key = p_kenmerk_key + AND prs_kenmerklink_verwijder IS NULL; + + IF v_count = 1 + THEN + IF p_kenmerk_waarde IS NULL + THEN + DELETE prs_kenmerklink + WHERE prs_link_key = p_link_key + AND prs_kenmerk_key = p_kenmerk_key + AND prs_kenmerklink_verwijder IS NULL; + ELSE + UPDATE prs_kenmerklink + SET prs_kenmerklink_waarde = p_kenmerk_waarde + WHERE prs_link_key = p_link_key + AND prs_kenmerk_key = p_kenmerk_key + AND prs_kenmerklink_verwijder IS NULL; + END IF; + ELSE + IF p_kenmerk_key IS NOT NULL AND p_kenmerk_waarde IS NOT NULL + THEN + INSERT INTO prs_kenmerklink (prs_kenmerk_key, + prs_link_key, + prs_kenmerklink_niveau, + prs_kenmerklink_waarde) + VALUES (p_kenmerk_key, + p_link_key, + v_niveau, + p_kenmerk_waarde); + END IF; + END IF; + + WHEN 'ALG' + THEN + -- niveau van prs_kenmerk ophalen, omdat deze ook in prs_kenmerklink wordt + -- opgeslagen (da's dus redundant..?) + SELECT alg_kenmerk_niveau + INTO v_niveau + FROM alg_kenmerk + WHERE alg_kenmerk_key = p_kenmerk_key; + + SELECT COUNT ( * ) + INTO v_count + FROM alg_onrgoedkenmerk + WHERE alg_onrgoed_key = p_link_key + AND alg_kenmerk_key = p_kenmerk_key + AND alg_onrgoedkenmerk_verwijder IS NULL; + + IF v_count = 1 + THEN + IF p_kenmerk_waarde IS NULL + THEN + DELETE alg_onrgoedkenmerk + WHERE alg_onrgoed_key = p_link_key + AND alg_kenmerk_key = p_kenmerk_key + AND alg_onrgoedkenmerk_verwijder IS NULL; + ELSE + UPDATE alg_onrgoedkenmerk + SET alg_onrgoedkenmerk_waarde = p_kenmerk_waarde + WHERE alg_onrgoed_key = p_link_key + AND alg_kenmerk_key = p_kenmerk_key + AND alg_onrgoedkenmerk_verwijder IS NULL; + END IF; + ELSE + IF p_kenmerk_key IS NOT NULL AND p_kenmerk_waarde IS NOT NULL + THEN + INSERT INTO alg_onrgoedkenmerk (alg_kenmerk_key, + alg_onrgoed_key, + alg_onrgoed_niveau, + alg_onrgoedkenmerk_waarde) + VALUES (p_kenmerk_key, + p_link_key, + v_niveau, + p_kenmerk_waarde); + END IF; + END IF; + + WHEN 'BEZ' + THEN + + SELECT COUNT ( * ) + INTO v_count + FROM bez_kenmerkwaarde + WHERE bez_bezoekers_key = p_link_key + AND bez_kenmerk_key = p_kenmerk_key + AND bez_kenmerkwaarde_verwijder IS NULL; + + IF v_count = 1 + THEN + IF p_kenmerk_waarde IS NULL + THEN + DELETE bez_kenmerkwaarde + WHERE bez_bezoekers_key = p_link_key + AND bez_kenmerk_key = p_kenmerk_key + AND bez_kenmerkwaarde_verwijder IS NULL; + ELSE + UPDATE bez_kenmerkwaarde + SET bez_kenmerkwaarde_waarde = p_kenmerk_waarde + WHERE bez_bezoekers_key = p_link_key + AND bez_kenmerk_key = p_kenmerk_key + AND bez_kenmerkwaarde_verwijder IS NULL; + END IF; + ELSE + IF p_kenmerk_key IS NOT NULL AND p_kenmerk_waarde IS NOT NULL + THEN + INSERT INTO bez_kenmerkwaarde (bez_kenmerk_key, + bez_bezoekers_key, + bez_kenmerkwaarde_waarde) + VALUES (p_kenmerk_key, + p_link_key, + p_kenmerk_waarde); + END IF; + END IF; + + WHEN 'MLD' + THEN + -- melding- of opdrachtkenmerk? + SELECT mld_kenmerk_niveau + INTO v_niveau + FROM mld_kenmerk + WHERE mld_kenmerk_key = p_kenmerk_key; + + CASE v_niveau + WHEN 'O' + THEN + SELECT COUNT ( * ) + INTO v_count + FROM mld_kenmerkopdr + WHERE mld_opdr_key = p_link_key + AND mld_kenmerk_key = p_kenmerk_key + AND mld_kenmerkopdr_verwijder IS NULL; + + IF v_count = 1 + THEN + IF p_kenmerk_waarde IS NULL + THEN + DELETE mld_kenmerkopdr + WHERE mld_opdr_key = p_link_key + AND mld_kenmerk_key = p_kenmerk_key + AND mld_kenmerkopdr_verwijder IS NULL; + ELSE + UPDATE mld_kenmerkopdr + SET mld_kenmerkopdr_waarde = p_kenmerk_waarde + WHERE mld_opdr_key = p_link_key + AND mld_kenmerk_key = p_kenmerk_key + AND mld_kenmerkopdr_verwijder IS NULL; + END IF; + ELSE + IF p_kenmerk_key IS NOT NULL AND p_kenmerk_waarde IS NOT NULL + THEN + INSERT INTO mld_kenmerkopdr (mld_kenmerk_key, + mld_opdr_key, + mld_kenmerkopdr_waarde) + VALUES (p_kenmerk_key, + p_link_key, + p_kenmerk_waarde); + END IF; + END IF; + WHEN 'S' + THEN + SELECT COUNT ( * ) + INTO v_count + FROM mld_kenmerkmelding + WHERE mld_melding_key = p_link_key + AND mld_kenmerk_key = p_kenmerk_key + AND mld_kenmerkmelding_verwijder IS NULL; + + IF v_count = 1 + THEN + IF p_kenmerk_waarde IS NULL + THEN + DELETE mld_kenmerkmelding + WHERE mld_melding_key = p_link_key + AND mld_kenmerk_key = p_kenmerk_key + AND mld_kenmerkmelding_verwijder IS NULL; + ELSE + UPDATE mld_kenmerkmelding + SET mld_kenmerkmelding_waarde = p_kenmerk_waarde + WHERE mld_melding_key = p_link_key + AND mld_kenmerk_key = p_kenmerk_key + AND mld_kenmerkmelding_verwijder IS NULL; + END IF; + ELSE + IF p_kenmerk_key IS NOT NULL AND p_kenmerk_waarde IS NOT NULL + THEN + INSERT INTO mld_kenmerkmelding (mld_kenmerk_key, + mld_melding_key, + mld_kenmerkmelding_waarde) + VALUES (p_kenmerk_key, + p_link_key, + p_kenmerk_waarde); + END IF; + END IF; + END CASE; + + WHEN 'FIN' + THEN + -- niveau van prs_kenmerk ophalen, omdat deze ook in prs_kenmerklink wordt + -- opgeslagen (da's dus redundant..?) + SELECT fin_kenmerk_type + INTO v_niveau + FROM fin_kenmerk + WHERE fin_kenmerk_key = p_kenmerk_key; + + + IF v_niveau = 'F' + THEN + SELECT COUNT ( * ) + INTO v_count + FROM fin_kenmerkfactuur + WHERE fin_factuur_key = p_link_key + AND fin_kenmerk_key = p_kenmerk_key + AND fin_kenmerkfactuur_verwijder IS NULL; + + IF v_count = 1 + THEN + IF p_kenmerk_waarde IS NULL + THEN + DELETE fin_kenmerkfactuur + WHERE fin_factuur_key = p_link_key + AND fin_kenmerk_key = p_kenmerk_key + AND fin_kenmerkfactuur_verwijder IS NULL; + ELSE + UPDATE fin_kenmerkfactuur + SET fin_kenmerkfactuur_waarde = p_kenmerk_waarde + WHERE fin_factuur_key = p_link_key + AND fin_kenmerk_key = p_kenmerk_key + AND fin_kenmerkfactuur_verwijder IS NULL; + END IF; + ELSE + IF p_kenmerk_key IS NOT NULL AND p_kenmerk_waarde IS NOT NULL + THEN + INSERT INTO fin_kenmerkfactuur (fin_kenmerk_key, + fin_factuur_key, + fin_kenmerkfactuur_waarde) + VALUES (p_kenmerk_key, + p_link_key, + p_kenmerk_waarde); + END IF; + END IF; + ELSE + -- Kenmerk bij factuurregel + SELECT COUNT ( * ) + INTO v_count + FROM fin_kenmerkfactregel + WHERE fin_factuurregel_key = p_link_key + AND fin_kenmerk_key = p_kenmerk_key + AND fin_kenmerkfactregel_verwijder IS NULL; + + IF v_count = 1 + THEN + IF p_kenmerk_waarde IS NULL + THEN + DELETE fin_kenmerkfactregel + WHERE fin_factuurregel_key = p_link_key + AND fin_kenmerk_key = p_kenmerk_key + AND fin_kenmerkfactregel_verwijder IS NULL; + ELSE + UPDATE fin_kenmerkfactregel + SET fin_kenmerkfactregel_waarde = p_kenmerk_waarde + WHERE fin_factuurregel_key = p_link_key + AND fin_kenmerk_key = p_kenmerk_key + AND fin_kenmerkfactregel_verwijder IS NULL; + END IF; + ELSE + IF p_kenmerk_key IS NOT NULL AND p_kenmerk_waarde IS NOT NULL + THEN + INSERT INTO fin_kenmerkfactregel (fin_kenmerk_key, + fin_factuurregel_key, + fin_kenmerkfactregel_waarde) + VALUES (p_kenmerk_key, + p_link_key, + p_kenmerk_waarde); + END IF; + END IF; + + END IF; + + WHEN 'RES' + THEN + -- res_rsv_ruimte kenmerk + SELECT COUNT ( * ) + INTO v_count + FROM res_kenmerkwaarde + WHERE res_rsv_ruimte_key = p_link_key + AND res_kenmerk_key = p_kenmerk_key + AND res_kenmerkwaarde_verwijder IS NULL; + + IF v_count = 1 + THEN + IF p_kenmerk_waarde IS NULL + THEN + DELETE res_kenmerkwaarde + WHERE res_rsv_ruimte_key = p_link_key + AND res_kenmerk_key = p_kenmerk_key + AND res_kenmerkwaarde_verwijder IS NULL; + ELSE + UPDATE res_kenmerkwaarde + SET res_kenmerkreservering_waarde = p_kenmerk_waarde + WHERE res_rsv_ruimte_key = p_link_key + AND res_kenmerk_key = p_kenmerk_key + AND res_kenmerkwaarde_verwijder IS NULL; + END IF; + ELSE + IF p_kenmerk_key IS NOT NULL AND p_kenmerk_waarde IS NOT NULL + THEN + INSERT INTO res_kenmerkwaarde (res_kenmerk_key, + res_rsv_ruimte_key, + res_kenmerkreservering_waarde) + VALUES (p_kenmerk_key, + p_link_key, + p_kenmerk_waarde); + END IF; + END IF; + END CASE; + END; + FUNCTION get_kenmerkwaarde (p_kenmerk_type VARCHAR2, p_kenmerkdomein_key NUMBER,