From f8bd5c3f3e68cd8a052dde3d0679431a5662119f Mon Sep 17 00:00:00 2001 From: Maykel Geerdink Date: Tue, 5 Mar 2019 14:27:26 +0000 Subject: [PATCH] NYBU#55434: Flexkenmerken per artikelregel. svn path=/Database/trunk/; revision=41321 --- FAC/FAC_PAC.SRC | 2 + FAC/FAC_PACX.SRC | 69 ++++++++++++++++- RES/RES_PAC.SRC | 169 ++++++++++++++++------------------------- RES/RES_SEQ.SRC | 1 + RES/RES_TAB.SRC | 31 +++++++- RES/RES_TRI.SRC | 190 ++++++++++++++++++++++++++++++++++++++++++----- _UP/DB35to36.src | 65 ++++++++++++++++ 7 files changed, 400 insertions(+), 127 deletions(-) diff --git a/FAC/FAC_PAC.SRC b/FAC/FAC_PAC.SRC index 6ae1df2f..73932000 100644 --- a/FAC/FAC_PAC.SRC +++ b/FAC/FAC_PAC.SRC @@ -1096,6 +1096,8 @@ CREATE OR REPLACE PACKAGE BODY fac AS DELETE FROM res_kenmerkwaarde; + DELETE FROM res_kenmerkartikel; + DELETE FROM res_alg_ruimte; DELETE FROM res_ruimte_opstelling; diff --git a/FAC/FAC_PACX.SRC b/FAC/FAC_PACX.SRC index 8b9daaf5..42524846 100644 --- a/FAC/FAC_PACX.SRC +++ b/FAC/FAC_PACX.SRC @@ -3742,7 +3742,7 @@ AS LOOP createopentag ('note'); createxmltagvalue ('key', rec1.mld_melding_note_key); - createxmltagvalue ('flag', rec1.mld_melding_note_flag); + createxmltagvalue ('flag', BITAND(rec1.mld_melding_note_flag, 191)); -- reset de hier irrelevante 64-bit om compatibel te blijven mydatetochar ('aanmaak', rec1.mld_melding_note_aanmaak); createxmltagvalue ('omschrijving', rec1.mld_melding_note_omschrijving); @@ -7058,6 +7058,72 @@ AS END LOOP; END; + PROCEDURE create_res_kenmerken_rsv_art (p_key IN NUMBER) + AS + CURSOR c1 + IS + SELECT k.res_kenmerk_key, + lcl.x ('res_srtkenmerk_omschrijving', s.res_srtkenmerk_key, res_srtkenmerk_omschrijving) res_srtkenmerk_omschrijving, + s.res_srtkenmerk_kenmerktype, + s.fac_kenmerkdomein_key, + s.res_srtkenmerk_lengte, + s.res_srtkenmerk_dec, + s.res_srtkenmerk_nmin, + s.res_srtkenmerk_nmax, + k.res_kenmerk_default, + NVL (k.res_kenmerk_volgnummer, 0) volgnummer, + lcl.x ('res_srtkenmerk_dimensie', + s.res_srtkenmerk_key, + res_srtkenmerk_dimensie) + dimensie, + lcl.x ('res_kenmerk_hint', + k.res_kenmerk_key, + res_kenmerk_hint) + hint, + v.res_kenmerkartikel_waarde + FROM res_kenmerk k, + res_srtkenmerk s, + res_rsv_artikel a, + (SELECT v.res_kenmerk_key, v.res_kenmerkartikel_waarde + FROM res_kenmerkartikel v + WHERE v.res_rsv_artikel_key = p_key + AND v.res_kenmerkartikel_verwijder IS NULL) v + WHERE k.res_artikel_key = a.res_artikel_key + AND a.res_rsv_artikel_key = p_key + AND k.res_activiteit_key IS NULL + AND k.res_kenmerk_verwijder IS NULL + AND k.res_srtkenmerk_key = s.res_srtkenmerk_key + AND v.res_kenmerk_key(+) = k.res_kenmerk_key + ORDER BY k.res_kenmerk_volgnummer; + + v_kenmerk_waarde res_kenmerkartikel.res_kenmerkartikel_waarde%TYPE; + BEGIN + FOR rec1 IN c1 + LOOP + v_kenmerk_waarde := + find_kenmerk_waarde (rec1.res_kenmerkartikel_waarde, + rec1.res_kenmerk_default, + rec1.res_srtkenmerk_kenmerktype, + rec1.fac_kenmerkdomein_key, + rec1.res_srtkenmerk_nmin, + rec1.res_srtkenmerk_nmax); + + createxmltagvalueattributes ('kenmerk', + 'naam', + rec1.res_srtkenmerk_omschrijving, + 'type', + rec1.res_srtkenmerk_kenmerktype, + 'volgnummer', + rec1.volgnummer, + 'key', + rec1.res_kenmerk_key, + 'dimensie', + rec1.dimensie, + rec1.fac_kenmerkdomein_key, + v_kenmerk_waarde); + END LOOP; + END; + PROCEDURE create_res_ruimte_node (p_opstelkey IN NUMBER) AS v_bezoekers res_ruimte_opstelling.res_ruimte_opstel_bezoekers%TYPE; @@ -7421,6 +7487,7 @@ AS createxmltagvalue ('prijs', v_prijs); mydatetochar ('aanmaak', v_aanmaak); mydatetochar ('verwijder', v_verwijder); + create_res_kenmerken_rsv_art (p_key); createclosetag ('rsv_artikel'); END; diff --git a/RES/RES_PAC.SRC b/RES/RES_PAC.SRC index 39e80bb2..344a2f5e 100644 --- a/RES/RES_PAC.SRC +++ b/RES/RES_PAC.SRC @@ -368,6 +368,64 @@ AS + (ra.res_rsv_artikel_levering - TRUNC (ra.res_rsv_artikel_levering)) BETWEEN new_ruimte_van AND new_ruimte_tot AND ra.res_rsv_ruimte_key = prsv_ruimte_key_from; END; + -- Kenmerken ook kopieren. + IF BITAND (flags, 1024) = 1024 + THEN + -- Verwijder eerst de oude niet-file kenmerken + -- Artikel kenmerken. + DELETE FROM res_kenmerkartikel + WHERE res_rsv_artikel_key = (SELECT res_rsv_artikel_key FROM res_rsv_artikel WHERE res_rsv_ruimte_key = prsv_ruimte_key_to) + AND res_kenmerk_key IN + (SELECT k.res_kenmerk_key + FROM res_kenmerkartikel w, res_kenmerk k, res_srtkenmerk sk + WHERE w.res_kenmerk_key = k.res_kenmerk_key + AND k.res_srtkenmerk_key = sk.res_srtkenmerk_key + AND w.res_rsv_artikel_key = (SELECT res_rsv_artikel_key FROM res_rsv_artikel WHERE res_rsv_ruimte_key = prsv_ruimte_key_to) + AND sk.res_srtkenmerk_kenmerktype NOT IN ('F', 'M', 'E')); + -- + -- Artikel kenmerken. + INSERT INTO res_kenmerkartikel (res_rsv_artikel_key, res_kenmerk_key, res_kenmerkartikel_waarde) + SELECT a.res_rsv_artikel_key, + k.res_kenmerk_key, + waarde_from.res_kenmerkartikel_waarde + FROM res_srtkenmerk t, + res_kenmerk k, + res_srtkenmerk s, + res_rsv_ruimte r, + res_rsv_artikel a, + (SELECT w1.res_kenmerkartikel_waarde, + k1.res_kenmerk_groep, + k1.res_srtkenmerk_key, + k1.res_artikel_key, + k1.res_kenmerk_key + FROM res_kenmerkartikel w1, + res_kenmerk k1, + res_srtkenmerk s1, + res_rsv_ruimte r1, + res_rsv_artikel a1 + WHERE w1.res_kenmerk_key = k1.res_kenmerk_key + AND k1.res_srtkenmerk_key = s1.res_srtkenmerk_key + AND k1.res_artikel_key = a1.res_artikel_key + AND k1.res_activiteit_key IS NULL + AND w1.res_rsv_artikel_key = a1.res_rsv_artikel_key + AND a1.res_rsv_ruimte_key = r1.res_rsv_ruimte_key + AND w1.res_kenmerkartikel_verwijder IS NULL + AND s1.res_srtkenmerk_kenmerktype NOT IN ('F', 'M', 'E') + AND r1.res_rsv_ruimte_key = prsv_ruimte_key_from + ) waarde_from + WHERE k.res_artikel_key = a.res_artikel_key + AND a.res_rsv_ruimte_key = r.res_rsv_ruimte_key + AND k.res_kenmerk_niveau = 'D' + AND k.res_kenmerk_volgnummer < 900 + AND k.res_kenmerk_verwijder IS NULL + AND k.res_srtkenmerk_key = t.res_srtkenmerk_key + AND t.res_srtkenmerk_verwijder IS NULL + AND k.res_srtkenmerk_key = s.res_srtkenmerk_key + AND s.res_srtkenmerk_kenmerktype NOT IN ('F', 'M', 'E') + AND waarde_from.res_srtkenmerk_key = k.res_srtkenmerk_key + AND waarde_from.res_kenmerk_groep = k.res_kenmerk_groep + AND r.res_rsv_ruimte_key = prsv_ruimte_key_to; + END IF; END IF; -- 512 Bezoekers IF BITAND (flags, 512) = 512 @@ -391,16 +449,6 @@ AS AND k.res_srtkenmerk_key = sk.res_srtkenmerk_key AND w.res_rsv_ruimte_key = prsv_ruimte_key_to AND sk.res_srtkenmerk_kenmerktype NOT IN ('F', 'M', 'E')); - -- Artikel kenmerken. - DELETE FROM res_kenmerkartikel - WHERE res_rsv_ruimte_key = prsv_ruimte_key_to - AND res_kenmerk_key IN - (SELECT k.res_kenmerk_key - FROM res_kenmerkartikel w, res_kenmerk k, res_srtkenmerk sk - WHERE w.res_kenmerk_key = k.res_kenmerk_key - AND k.res_srtkenmerk_key = sk.res_srtkenmerk_key - AND w.res_rsv_ruimte_key = prsv_ruimte_key_to - AND sk.res_srtkenmerk_kenmerktype NOT IN ('F', 'M', 'E')); -- -- Ruimte kenmerken. INSERT INTO res_kenmerkwaarde (res_rsv_ruimte_key, res_kenmerk_key, res_kenmerkreservering_waarde) @@ -423,7 +471,8 @@ AS WHERE w1.res_kenmerk_key = k1.res_kenmerk_key AND k1.res_srtkenmerk_key = s1.res_srtkenmerk_key AND k1.res_activiteit_key = r1.res_activiteit_key - and w1.res_rsv_ruimte_key = r1.res_rsv_ruimte_key + AND k1.res_artikel_key IS NULL + AND w1.res_rsv_ruimte_key = r1.res_rsv_ruimte_key AND w1.res_kenmerkwaarde_verwijder IS NULL AND s1.res_srtkenmerk_kenmerktype NOT IN ('F', 'M', 'E') AND r1.res_rsv_ruimte_key = prsv_ruimte_key_from @@ -439,43 +488,6 @@ AS AND waarde_from.res_srtkenmerk_key = k.res_srtkenmerk_key AND waarde_from.res_kenmerk_groep = k.res_kenmerk_groep AND r.res_rsv_ruimte_key = prsv_ruimte_key_to; - -- Artikel kenmerken. - INSERT INTO res_kenmerkartikel (res_rsv_ruimte_key, res_kenmerk_key, res_kenmerkartikel_waarde) - SELECT prsv_ruimte_key_to - , k.res_kenmerk_key - , waarde_from.res_kenmerkartikel_waarde - FROM res_srtkenmerk t - , res_kenmerk k - , res_srtkenmerk s - , res_rsv_ruimte r - , ( SELECT w1.res_kenmerkartikel_waarde - , k1.res_kenmerk_groep - , k1.res_srtkenmerk_key - , k1.res_activiteit_key - , k1.res_kenmerk_key - FROM res_kenmerkartikel w1 - , res_kenmerk k1 - , res_srtkenmerk s1 - , res_rsv_ruimte r1 - WHERE w1.res_kenmerk_key = k1.res_kenmerk_key - AND k1.res_srtkenmerk_key = s1.res_srtkenmerk_key - AND k1.res_activiteit_key = r1.res_activiteit_key - and w1.res_rsv_ruimte_key = r1.res_rsv_ruimte_key - AND w1.res_kenmerkartikel_verwijder IS NULL - AND s1.res_srtkenmerk_kenmerktype NOT IN ('F', 'M', 'E') - AND r1.res_rsv_ruimte_key = prsv_ruimte_key_from - ) waarde_from - WHERE k.res_activiteit_key = r.res_activiteit_key - AND k.res_kenmerk_niveau = 'D' - AND k.res_kenmerk_volgnummer < 900 - AND k.res_kenmerk_verwijder IS NULL - AND k.res_srtkenmerk_key = t.res_srtkenmerk_key - AND t.res_srtkenmerk_verwijder IS NULL - AND k.res_srtkenmerk_key = s.res_srtkenmerk_key - AND s.res_srtkenmerk_kenmerktype NOT IN ('F', 'M', 'E') - AND waarde_from.res_srtkenmerk_key = k.res_srtkenmerk_key - AND waarde_from.res_kenmerk_groep = k.res_kenmerk_groep - AND r.res_rsv_ruimte_key = prsv_ruimte_key_to; END IF; -- Opmerking en/of Flexkenmerken (2 en/of 1024) aanpassen als de setting "res_copy_to_bez" dit aangeeft IF (BITAND (flags, 2) = 2 OR BITAND (flags, 1024) = 1024) AND BITAND(pres_copy_to_bez, 4) = 4 @@ -983,7 +995,7 @@ AS newtot res_rsv_ruimte.res_rsv_ruimte_tot%TYPE; BEGIN SELECT res_rsv_ruimte_van, res_rsv_ruimte_tot - INTO newvan,newtot + INTO newvan, newtot FROM res_rsv_ruimte WHERE res_rsv_ruimte_key = prsv_ruimte_key; IF oldvan <> newvan OR oldtot <> newtot @@ -1067,7 +1079,6 @@ AS locatiekey alg_locatie.alg_locatie_key%TYPE; oldloc bez_afspraak.alg_locatie_key%TYPE; waarde res_kenmerkwaarde.res_kenmerkreservering_waarde%TYPE; - artwaarde res_kenmerkartikel.res_kenmerkartikel_waarde%TYPE; bezremark VARCHAR2(2100); -- bez_afspraak.bez_afspraak_opmerking%TYPE is te kort lremarkfilled BOOLEAN; @@ -1088,27 +1099,7 @@ AS AND k.res_srtkenmerk_key = t.res_srtkenmerk_key AND k.res_kenmerk_verwijder IS NULL AND t.res_srtkenmerk_verwijder IS NULL - AND v.res_rsv_ruimte_key = prsv_ruimte_key - ORDER BY k.res_kenmerk_volgnummer - , UPPER(lcl.x ('t.res_srtkenmerk_omschrijving', t.res_srtkenmerk_key, res_srtkenmerk_omschrijving)); - - CURSOR ckenmerkart - IS - SELECT k.res_kenmerk_key - , t.res_srtkenmerk_kenmerktype - , t.res_srtkenmerk_nmin nmin - , t.res_srtkenmerk_nmax nmax - , t.fac_kenmerkdomein_key - , k.res_kenmerk_volgnummer - , t.res_srtkenmerk_omschrijving - , v.res_kenmerkartikel_waarde - FROM res_srtkenmerk t - , res_kenmerk k - , res_kenmerkartikel v - WHERE v.res_kenmerk_key = k.res_kenmerk_key - AND k.res_srtkenmerk_key = t.res_srtkenmerk_key - AND k.res_kenmerk_verwijder IS NULL - AND t.res_srtkenmerk_verwijder IS NULL + AND k.res_kenmerk_niveau = 'A' AND v.res_rsv_ruimte_key = prsv_ruimte_key ORDER BY k.res_kenmerk_volgnummer , UPPER(lcl.x ('t.res_srtkenmerk_omschrijving', t.res_srtkenmerk_key, res_srtkenmerk_omschrijving)); @@ -1210,42 +1201,6 @@ AS END IF; END IF; END LOOP; - - FOR cka IN ckenmerkart - LOOP - artwaarde := cka.res_kenmerkartikel_waarde; - IF artwaarde IS NOT NULL AND artwaarde <> '-1' - -- gevuld - THEN - IF cka.res_srtkenmerk_kenmerktype IN ('N', 'B') AND cka.nmin = 0 AND cka.nmax = 1 - -- checkbox - THEN - IF artwaarde = '0' - THEN - artwaarde := lcl.l ('lcl_check_0'); - ELSIF artwaarde = '1' - THEN - artwaarde := lcl.l ('lcl_check_1'); - END IF; - ELSIF cka.res_srtkenmerk_kenmerktype = 'R' OR cka.res_srtkenmerk_kenmerktype = 'S' - -- referentie - THEN - artwaarde := flx.getdomeinwaarde (cka.fac_kenmerkdomein_key, TO_NUMBER (artwaarde)); - END IF; - -- In het zeldzame geval dat de tekst te lang zou worden slaan we sommige - -- kenmerken gewoon silent over. Niet ideaal maar toch vrij theoretisch - IF (COALESCE(LENGTH(bezremark),0) + LENGTH(cka.res_srtkenmerk_omschrijving) + LENGTH(artwaarde) < 3990) - THEN - IF lremarkfilled - THEN - bezremark := bezremark || CHR(10) || cka.res_srtkenmerk_omschrijving || ': ' || artwaarde; - ELSE - bezremark := cka.res_srtkenmerk_omschrijving || ': ' || artwaarde; - lremarkfilled := TRUE; - END IF; - END IF; - END IF; - END LOOP; END IF; END IF; diff --git a/RES/RES_SEQ.SRC b/RES/RES_SEQ.SRC index 1f56642e..70efa9a2 100644 --- a/RES/RES_SEQ.SRC +++ b/RES/RES_SEQ.SRC @@ -23,6 +23,7 @@ CREATE SEQUENCE res_s_res_rsv_ruimte_key MINVALUE 1; CREATE SEQUENCE res_s_res_srtkenmerk_key MINVALUE 1; CREATE SEQUENCE res_s_res_kenmerk_key MINVALUE 1; CREATE SEQUENCE res_s_res_kenmerkwaarde_key MINVALUE 1; +CREATE SEQUENCE res_s_res_kenmerkartikel_key MINVALUE 1; CREATE SEQUENCE res_s_res_srtartikel_og_key MINVALUE 1; CREATE SEQUENCE res_s_res_disc_params_key MINVALUE 1; CREATE SEQUENCE res_s_res_activiteitdisc_key MINVALUE 1; diff --git a/RES/RES_TAB.SRC b/RES/RES_TAB.SRC index cdf783c7..18380c3d 100644 --- a/RES/RES_TAB.SRC +++ b/RES/RES_TAB.SRC @@ -708,8 +708,11 @@ CREATE_TABLE(res_kenmerk, 0) NUMBER(10) , res_activiteit_key NUMBER(10) -, res_kenmerk_niveau +, res_artikel_key + NUMBER(10) +, res_kenmerk_niveau /* "A"=Activiteit of "D"=Discipline/Catalogus artikel */ VARCHAR2(1) + DEFAULT 'A' , res_kenmerk_toonbaar NUMBER(1) , res_kenmerk_uniek @@ -737,9 +740,10 @@ CREATE_TABLE(res_kenmerk, 0) , CONSTRAINT res_r_res_srtkenmerk_key1 CHECK(res_srtkenmerk_key IS NOT NULL) , CONSTRAINT res_r_res_srtkenmerk_key2 FOREIGN KEY(res_srtkenmerk_key) REFERENCES res_srtkenmerk(res_srtkenmerk_key) , CONSTRAINT res_c_res_kenmerk_niveau1 CHECK(res_kenmerk_niveau IS NOT NULL) -, CONSTRAINT res_c_res_kenmerk_niveau2 CHECK(res_kenmerk_niveau IN ('A')) +, CONSTRAINT res_c_res_kenmerk_niveau2 CHECK(res_kenmerk_niveau IN ('A', 'D')) /* Activiteit of Discipline/Catalogus artikel */ , CONSTRAINT res_c_res_kenmerk_aanmaak CHECK(res_kenmerk_aanmaak IS NOT NULL) , CONSTRAINT res_r_res_activiteit_key FOREIGN KEY(res_activiteit_key) REFERENCES res_activiteit(res_activiteit_key) +, CONSTRAINT res_r_res_artikel_key FOREIGN KEY(res_artikel_key) REFERENCES res_artikel(res_artikel_key) , CONSTRAINT res_u_res_kenmerk UNIQUE(res_activiteit_key, res_srtkenmerk_key, res_kenmerk_groep, res_kenmerk_verwijder) ); @@ -766,6 +770,29 @@ CREATE_TABLE(res_kenmerkwaarde, 0) , CONSTRAINT res_u_res_kenmerkwaarde UNIQUE(res_rsv_ruimte_key, res_kenmerk_key, res_kenmerkwaarde_verwijder) ); +CREATE_TABLE(res_kenmerkartikel, 0) +( res_kenmerkartikel_key + NUMBER(10) + CONSTRAINT res_k_res_kenmerkartikel_key PRIMARY KEY +, res_rsv_artikel_key + NUMBER(10) +, res_kenmerk_key + NUMBER(10) +, res_kenmerkartikel_waarde + VARCHAR2(4000) +, res_kenmerkartikel_aanmaak + DATE + DEFAULT SYSDATE +, res_kenmerkartikel_verwijder + DATE + DEFAULT NULLDATUM +, CONSTRAINT res_r_res_rsv_artikel_key CHECK(res_rsv_artikel_key IS NOT NULL) +, CONSTRAINT res_r_res_kenmerk_key2 CHECK(res_kenmerk_key IS NOT NULL) +, CONSTRAINT res_r_res_rsv_artikel_key2 FOREIGN KEY(res_rsv_artikel_key) REFERENCES res_rsv_artikel(res_rsv_artikel_key) ON DELETE CASCADE +, CONSTRAINT res_c_res_kenmerkartikel_aanm CHECK(res_kenmerkartikel_aanmaak IS NOT NULL) +, CONSTRAINT res_u_res_kenmerkartikel UNIQUE(res_rsv_artikel_key, res_kenmerk_key, res_kenmerkartikel_verwijder) +); + CREATE_TABLE(res_srtartikel_onrgoed, 0) ( res_srtartikel_onrgoed_key NUMBER(10) diff --git a/RES/RES_TRI.SRC b/RES/RES_TRI.SRC index 1f19996d..d7f8aec1 100644 --- a/RES/RES_TRI.SRC +++ b/RES/RES_TRI.SRC @@ -299,14 +299,24 @@ BEGIN Dummy CHAR; BEGIN SELECT 'X' - INTO Dummy - FROM res_kenmerkwaarde - WHERE FAC.SAFE_TO_NUMBER(res_kenmerkreservering_waarde) < :new.res_srtkenmerk_nmin - AND res_kenmerk_key IN - (SELECT res_kenmerk_key - FROM res_kenmerk - WHERE res_srtkenmerk_key = :old.res_srtkenmerk_key - ); + INTO Dummy + FROM (SELECT 'X' + FROM res_kenmerkwaarde + WHERE FAC.SAFE_TO_NUMBER(res_kenmerkreservering_waarde) < :new.res_srtkenmerk_nmin + AND res_kenmerk_key IN + (SELECT res_kenmerk_key + FROM res_kenmerk + WHERE res_srtkenmerk_key = :old.res_srtkenmerk_key + ) + UNION + SELECT 'X' + FROM res_kenmerkartikel + WHERE FAC.SAFE_TO_NUMBER(res_kenmerkartikel_waarde) < :new.res_srtkenmerk_nmin + AND res_kenmerk_key IN + (SELECT res_kenmerk_key + FROM res_kenmerk + WHERE res_srtkenmerk_key = :old.res_srtkenmerk_key + )); raise_application_error(-20000, 'res_C_res_SRTKENMERK_MIN'); EXCEPTION WHEN NO_DATA_FOUND @@ -323,14 +333,24 @@ BEGIN Dummy CHAR; BEGIN SELECT 'X' - INTO Dummy - FROM res_kenmerkwaarde - WHERE FAC.SAFE_TO_NUMBER(res_kenmerkreservering_waarde) > :new.res_srtkenmerk_nmax - AND res_kenmerk_key IN - (SELECT res_kenmerk_key - FROM res_kenmerk - WHERE res_srtkenmerk_key = :old.res_srtkenmerk_key - ); + INTO Dummy + FROM (SELECT 'X' + FROM res_kenmerkwaarde + WHERE FAC.SAFE_TO_NUMBER(res_kenmerkreservering_waarde) > :new.res_srtkenmerk_nmax + AND res_kenmerk_key IN + (SELECT res_kenmerk_key + FROM res_kenmerk + WHERE res_srtkenmerk_key = :old.res_srtkenmerk_key + ) + UNION + SELECT 'X' + FROM res_kenmerkartikel + WHERE FAC.SAFE_TO_NUMBER(res_kenmerkartikel_waarde) > :new.res_srtkenmerk_nmax + AND res_kenmerk_key IN + (SELECT res_kenmerk_key + FROM res_kenmerk + WHERE res_srtkenmerk_key = :old.res_srtkenmerk_key + )); raise_application_error(-20000, 'res_C_res_SRTKENMERK_MAX'); EXCEPTION WHEN NO_DATA_FOUND @@ -408,7 +428,8 @@ BEGIN kenmerkverplicht FROM res_srtkenmerk res_sk, res_kenmerk res_k WHERE res_sk.res_srtkenmerk_key = res_k.res_srtkenmerk_key - AND res_k.res_kenmerk_key = :new.res_kenmerk_key; + AND res_k.res_kenmerk_niveau = 'A' + AND res_k.res_kenmerk_key = :new.res_kenmerk_key; -- -- Controleer eerst of het verplichte veld ingevuld is. @@ -501,6 +522,141 @@ BEGIN END; / +CREATE_TRIGGER(res_t_res_kenmerkartikel_b_iu) +BEFORE INSERT OR UPDATE ON res_kenmerkartikel +FOR EACH ROW +BEGIN + -- Controleer eerst of de ingevulde waarde goed is. + -- + IF :new.res_kenmerkartikel_waarde <> :old.res_kenmerkartikel_waarde + OR:old.res_kenmerkartikel_waarde IS NULL + OR:new.res_kenmerkartikel_waarde IS NULL + THEN + DECLARE + srtkenmerkomschr res_srtkenmerk.res_srtkenmerk_omschrijving%TYPE; + srtkenmerktype res_srtkenmerk.res_srtkenmerk_kenmerktype%TYPE; + srtkenmerklengte res_srtkenmerk.res_srtkenmerk_lengte%TYPE; + srtkenmerkdec res_srtkenmerk.res_srtkenmerk_dec%TYPE; + srtkenmerknmin res_srtkenmerk.res_srtkenmerk_nmin%TYPE; + srtkenmerknmax res_srtkenmerk.res_srtkenmerk_nmax%TYPE; + kenmerkverplicht res_kenmerk.res_kenmerk_verplicht%TYPE; + numberwaarde NUMBER (25, 5); + formatmask VARCHAR2 (60); + kenmerkreswaarde res_kenmerkartikel.res_kenmerkartikel_waarde%TYPE; + BEGIN + kenmerkreswaarde := :new.res_kenmerkartikel_waarde; + + -- + SELECT res_sk.res_srtkenmerk_omschrijving, + res_sk.res_srtkenmerk_kenmerktype, + res_sk.res_srtkenmerk_lengte, + res_sk.res_srtkenmerk_dec, + res_sk.res_srtkenmerk_nmin, + res_sk.res_srtkenmerk_nmax, + res_k.res_kenmerk_verplicht + INTO srtkenmerkomschr, + srtkenmerktype, + srtkenmerklengte, + srtkenmerkdec, + srtkenmerknmin, + srtkenmerknmax, + kenmerkverplicht + FROM res_srtkenmerk res_sk, res_kenmerk res_k + WHERE res_sk.res_srtkenmerk_key = res_k.res_srtkenmerk_key + AND res_k.res_kenmerk_niveau = 'D' + AND res_k.res_kenmerk_key = :new.res_kenmerk_key; + + -- + -- Controleer eerst of het verplichte veld ingevuld is. + -- + IF kenmerkverplicht IS NOT NULL AND kenmerkreswaarde IS NULL + THEN + raise_application_error (-20004, 'res_m244,' || srtkenmerkomschr); + -- + -- Kijk welk KenmerkType gebruikt wordt. + -- Aan de hand daarvan moet een controle uitgevoerd worden. + -- + ELSIF srtkenmerktype = 'C' + THEN + -- CHAR + -- Controleer of de lengte te groot of goed is. + IF LENGTH (kenmerkreswaarde) > srtkenmerklengte + THEN + raise_application_error ( + -20004, + 'res_m245,' || srtkenmerkomschr || ',' || TO_CHAR (srtkenmerklengte)); + END IF; + ELSIF srtkenmerktype IN ('N', 'B') + THEN + -- NUMBER + -- Controleer of er een numerieke waarde ingevuld is. + IF srtkenmerkdec IS NULL OR srtkenmerkdec = 0 + THEN + formatmask := RPAD ('9', srtkenmerklengte, '9'); + ELSE + formatmask := + RPAD ('9', srtkenmerklengte - srtkenmerkdec, '9') + || 'D' + || RPAD ('9', srtkenmerkdec, '9'); + END IF; + + -- + BEGIN + numberwaarde := TO_NUMBER (kenmerkreswaarde); + EXCEPTION + WHEN OTHERS + THEN + formatmask := REPLACE (formatmask, '9', '#'); + formatmask := REPLACE (formatmask, '0', '#'); + formatmask := REPLACE (formatmask, 'D', '.'); + raise_application_error ( + -20004, + 'res_m246,' || srtkenmerkomschr || ',' || formatmask); + END; + + -- Controleer of de waarde binnen NMin en NMax ligt. + IF (srtkenmerknmin IS NOT NULL AND numberwaarde < srtkenmerknmin) + OR (srtkenmerknmax IS NOT NULL AND numberwaarde > srtkenmerknmax) + THEN + raise_application_error ( + -20004, + 'res_m247,' + || srtkenmerkomschr + || ',' + || TO_CHAR (srtkenmerknmin) + || ',' + || TO_CHAR (srtkenmerknmax)); + ELSE + -- Controleer of de waarde aan het formaat voldoet. + kenmerkreswaarde := LTRIM (TO_CHAR (numberwaarde, formatmask)); + + IF INSTR (kenmerkreswaarde, '#') <> 0 + THEN + formatmask := REPLACE (formatmask, '9', '#'); + formatmask := REPLACE (formatmask, '0', '#'); + formatmask := REPLACE (formatmask, 'D', '.'); + raise_application_error ( + -20004, + 'res_m246,' || srtkenmerkomschr || ',' || formatmask); + END IF; + END IF; + + -- Zet de geconverteerde waarde terug. + :new.res_kenmerkartikel_waarde := kenmerkreswaarde; + ELSIF srtkenmerktype = 'D' + THEN + -- DATUM + kenmerkreswaarde := TO_CHAR (TO_DATE (kenmerkreswaarde, 'DD-MM-YY'), 'DD-MM-YYYY'); + -- Zet de geconverteerde waarde terug. + :new.res_kenmerkartikel_waarde := kenmerkreswaarde; + END IF; + END; + + UPDATE_PRIMARY_KEY(res_kenmerkartikel_key, res_s_res_kenmerkartikel_key); + END IF; +END; +/ + CREATE_TRIGGER(res_t_res_srtartikel_og_B_IU) BEFORE INSERT OR UPDATE ON res_srtartikel_onrgoed FOR EACH ROW diff --git a/_UP/DB35to36.src b/_UP/DB35to36.src index 4950f9cf..f2a8e5a3 100644 --- a/_UP/DB35to36.src +++ b/_UP/DB35to36.src @@ -272,6 +272,12 @@ UPDATE fac_setting /////////////////////////////////////////////////////////////////////////////////////////// NYBU#56537 ALTER TABLE cnt_disc_params ADD cnt_disc_params_binding NUMBER(3) DEFAULT (3) NOT NULL; +/////////////////////////////////////////////////////////////////////////////////////////// YKPN#55980 +ALTER TABLE FIN_FACTUUR + ADD cnt_contract_plaats_key + NUMBER(10) + CONSTRAINT fin_r_fin_factuur8 REFERENCES cnt_contract_plaats(cnt_contract_plaats_key); + /////////////////////////////////////////////////////////////////////////////////////////// RWSN#55076 ALTER TABLE fac_nieuws ADD fac_groep_key @@ -485,11 +491,70 @@ UPDATE mld_melding ALTER TRIGGER mld_t_mld_melding_B_IU ENABLE; +INSERT INTO fac_setting (fac_setting_module, + fac_setting_name, + fac_setting_description, + fac_setting_pvalue) + VALUES('MLD', + 'mld_melding_actiecode', + 'Dummy', + CASE WHEN fac.getSetting('mld_flag_on_fenote') > 0 OR fac.getSetting('mld_flag_on_fenote') > 0 THEN 1 ELSE NULL END); + +DEF_FAC_SRTNOT('MLDA2B', 0, 'lcl_noti_MLDA2B', 'mld/mld_melding.asp?urole=bo&mld_key=', '0', 'melding', 10); +DEF_FAC_SRTNOT('MLDA2M', 0, 'lcl_noti_MLDA2M', 'mld/mld_melding.asp?urole=fe&mld_key=', '0', 'melding', 10); + /////////////////////////////////////////////////////////////////////////////////////////// FCLT#56113 ALTER TABLE mld_melding ADD mld_melding_externsyncdate /* voor koppelingen met externe systemen */ DATE; +/////////////////////////////////////////////////////////////////////////////////////////// NYBU#55434 +ALTER TABLE res_kenmerk + DROP CONSTRAINT res_c_res_kenmerk_niveau2; + +ALTER TABLE res_kenmerk + ADD CONSTRAINT res_c_res_kenmerk_niveau2 CHECK(res_kenmerk_niveau IN ('A', 'D')); /* Activiteit of Discipline/Catalogus */ + +ALTER TABLE res_kenmerk + MODIFY res_kenmerk_niveau DEFAULT 'A'; + +ALTER TABLE res_kenmerk + ADD res_artikel_key + NUMBER(10) + CONSTRAINT res_r_res_artikel_key REFERENCES res_artikel(res_artikel_key); + +CREATE SEQUENCE res_s_res_kenmerkartikel_key MINVALUE 1; + +CREATE_TABLE(res_kenmerkartikel, 0) +( res_kenmerkartikel_key + NUMBER(10) + CONSTRAINT res_k_res_kenmerkartikel_key PRIMARY KEY +, res_rsv_artikel_key + NUMBER(10) +, res_kenmerk_key + NUMBER(10) +, res_kenmerkartikel_waarde + VARCHAR2(4000) +, res_kenmerkartikel_aanmaak + DATE + DEFAULT SYSDATE +, res_kenmerkartikel_verwijder + DATE + DEFAULT NULLDATUM +, CONSTRAINT res_r_res_rsv_artikel_key CHECK(res_rsv_artikel_key IS NOT NULL) +, CONSTRAINT res_r_res_kenmerk_key2 CHECK(res_kenmerk_key IS NOT NULL) +, CONSTRAINT res_r_res_rsv_artikel_key2 FOREIGN KEY(res_rsv_artikel_key) REFERENCES res_rsv_artikel(res_rsv_artikel_key) ON DELETE CASCADE +, CONSTRAINT res_c_res_kenmerkartikel_aanm CHECK(res_kenmerkartikel_aanmaak IS NOT NULL) +, CONSTRAINT res_u_res_kenmerkartikel UNIQUE(res_rsv_artikel_key, res_kenmerk_key, res_kenmerkartikel_verwijder) +); + +/////////////////////////////////////////////////////////////////////////////////////////// MNNL#55706 +ALTER TABLE mld_workflowstep ADD + mld_workflowstep_eindtype + NUMBER(2) + DEFAULT 0 + NOT_NULL(mld_workflowstep_eindtype, mld_c_mld_workflowstep_eindtype); + /////////////////////////////////////////////////////////////////////////////////////////// XXXX#nnnnn ///////////////////////////////////////////////////////////////////////////////////////////