From 592816e58136890be871f0af28d23d9800756dd5 Mon Sep 17 00:00:00 2001 From: Erik Groener Date: Fri, 4 Apr 2025 08:10:12 +0000 Subject: [PATCH] BAMG#85636 Uitbreiding BAMG#83299 met diverse verlengingstermijnen Wijziging van tabel cnt_verlengschema: Geen einddatum meer opslaan maar wel een volgnummer en primary key svn path=/Database/trunk/; revision=68658 --- CNT/CNT_PAC.SRC | 58 ++++++++++++++++++++++++++++++++---------------- CNT/CNT_SEQ.SRC | 1 + CNT/CNT_TAB.SRC | 7 ++++-- CNT/CNT_TRI.SRC | 8 +++++++ _UP/DB50to51.src | 10 ++++++--- 5 files changed, 60 insertions(+), 24 deletions(-) diff --git a/CNT/CNT_PAC.SRC b/CNT/CNT_PAC.SRC index eb695bbb..f210186c 100644 --- a/CNT/CNT_PAC.SRC +++ b/CNT/CNT_PAC.SRC @@ -6,6 +6,7 @@ CREATE OR REPLACE PACKAGE cnt AS PROCEDURE setcontractstatus (pcontractkey IN NUMBER, pstatus IN NUMBER, puserkey IN NUMBER); + FUNCTION getVerlengschemaEinddatum(startdatum IN DATE, cnt_key IN NUMBER, volgnr IN NUMBER) RETURN DATE; FUNCTION cnt_getTermijndatum (pdate IN DATE, ptermijn_key IN NUMBER, prichting IN NUMBER) RETURN DATE; FUNCTION termijnjaarfactor (ptermijn_key IN NUMBER) RETURN NUMBER; FUNCTION cnt_getOpzegdatum (pcnt_contract_key IN NUMBER) RETURN DATE; @@ -100,6 +101,27 @@ CREATE OR REPLACE PACKAGE BODY cnt AS END IF; END; + -- Bepaal de einddatum na x iteraties van het verlengschema vanaf een startdatum. + FUNCTION getVerlengschemaEinddatum(startdatum IN DATE, cnt_key IN NUMBER, volgnr IN NUMBER) RETURN DATE + IS + CURSOR c_verleng + IS + SELECT cnt_verlengschema_volgnr + , cnt_verlengschema_verlengtermijn + FROM cnt_verlengschema + WHERE cnt_verlengschema_volgnr <= volgnr + AND cnt_contract_key = cnt_key; + + einddatum DATE := startdatum; + BEGIN + FOR c IN c_verleng + LOOP + einddatum := cnt.cnt_getTermijndatum(einddatum, c.cnt_verlengschema_verlengtermijn, 1); + END LOOP; + + RETURN einddatum; + END; + -- Deze functie bepaalt de datum door het termijn (ptermijn_key) van de datum (pdate) in mindering te brengen. -- Indien de 29, 30 of 31 datum niet in de betreffende maand voorkomt wordt de eerste van de volgende maand genomen. -- prichting geeft aan of ten opzichte van pdate achteruit (-1) of vooruit (1, of anders) moet worden gerekend. @@ -271,9 +293,9 @@ CREATE OR REPLACE PACKAGE BODY cnt AS AND cn.cnt_contract_verwijder IS NULL ); - tracking VARCHAR2(4000); - next_termijn cnt_termijn.cnt_termijn_key%TYPE; - next_einddatum cnt_contract.cnt_contract_looptijd_tot%TYPE; + tracking VARCHAR2(4000); + verlengschema_key cnt_verlengschema.cnt_verlengschema_key%TYPE; + next_termijn cnt_termijn.cnt_termijn_key%TYPE; BEGIN FOR cnt_verloopt IN c_verleng LOOP @@ -287,24 +309,22 @@ CREATE OR REPLACE PACKAGE BODY cnt AS ); fac.trackaction ('CNTUPD', cnt_verloopt.cnt_contract_key, NULL, NULL, tracking); -- Heeft dit automatisch verlengbaar contract een verlengschema? - -- Dan volgende verlengtermijn uit verlengschema naar het veld verlengtermijn verplaatsen. BEGIN - SELECT a.cnt_verlengschema_verlengtermijn - , a.cnt_verlengschema_einddatum - INTO next_termijn - , next_einddatum - FROM cnt_verlengschema a - WHERE a.cnt_verlengschema_einddatum = - (SELECT MIN(b.cnt_verlengschema_einddatum) - FROM cnt_verlengschema b - WHERE b.cnt_contract_key = cnt_verloopt.cnt_contract_key - AND b.cnt_verlengschema_einddatum > cnt_verloopt.dtnieuw - ) - AND a.cnt_contract_key = cnt_verloopt.cnt_contract_key; - - UPDATE cnt_contract - SET cnt_contract_verleng_termijn = next_termijn + SELECT MIN(cnt_verlengschema_key) + INTO verlengschema_key + FROM cnt_verlengschema WHERE cnt_contract_key = cnt_verloopt.cnt_contract_key; + -- Dan eerstvolgende verlengtermijn uit verlengschema naar het veld verlengtermijn in contract kopieren... + UPDATE cnt_contract + SET cnt_contract_verleng_termijn = (SELECT cnt_verlengschema_verlengtermijn + FROM cnt_verlengschema + WHERE cnt_verlengschema_key = verlengschema_key + ) + WHERE cnt_contract_key = cnt_verloopt.cnt_contract_key; + -- ...en deze verlengtermijn uit het verlengschema verwijderen. + DELETE + FROM cnt_verlengschema + WHERE cnt_verlengschema_key = verlengschema_key; EXCEPTION WHEN NO_DATA_FOUND THEN NULL; -- Laat laatste verlengtermijn staan als er geen volgende in het schema gevonden kan worden. diff --git a/CNT/CNT_SEQ.SRC b/CNT/CNT_SEQ.SRC index 47342eeb..a5f2016c 100644 --- a/CNT/CNT_SEQ.SRC +++ b/CNT/CNT_SEQ.SRC @@ -18,6 +18,7 @@ CREATE SEQUENCE cnt_s_cnt_kenmerkcontract_key MINVALUE 1; CREATE SEQUENCE cnt_s_cnt_contract_note_key MINVALUE 1; CREATE SEQUENCE cnt_s_cnt_factuurschema_key MINVALUE 1; +CREATE SEQUENCE cnt_s_cnt_verlengschema_key MINVALUE 1; REGISTERONCE('$Id$') diff --git a/CNT/CNT_TAB.SRC b/CNT/CNT_TAB.SRC index 76ffd136..d2b56eb1 100644 --- a/CNT/CNT_TAB.SRC +++ b/CNT/CNT_TAB.SRC @@ -456,11 +456,14 @@ CREATE_TABLE(cnt_factuurschema , 0) CREATE_TABLE(cnt_verlengschema, 0) ( + cnt_verlengschema_key + NUMBER(10) + PRIMARY KEY, cnt_contract_key NUMBER(10) CONSTRAINT cnt_r_cnt_contract_key2 REFERENCES cnt_contract(cnt_contract_key), - cnt_verlengschema_einddatum - DATE, + cnt_verlengschema_volgnr + NUMBER(2), cnt_verlengschema_verlengtermijn NUMBER(10) CONSTRAINT cnt_r_cnt_termijn_key6 REFERENCES cnt_termijn(cnt_termijn_key) diff --git a/CNT/CNT_TRI.SRC b/CNT/CNT_TRI.SRC index 1d929080..5697ee8c 100644 --- a/CNT/CNT_TRI.SRC +++ b/CNT/CNT_TRI.SRC @@ -357,6 +357,14 @@ BEGIN END; / +CREATE OR REPLACE TRIGGER cnt_t_cnt_verlengschema_B_I +BEFORE INSERT ON cnt_verlengschema +FOR EACH ROW +BEGIN + UPDATE_PRIMARY_KEY(cnt_verlengschema_key,cnt_s_cnt_verlengschema_key); +END; +/ + REGISTERRUN('$Id$') #endif // CNT diff --git a/_UP/DB50to51.src b/_UP/DB50to51.src index ca53174d..8c180968 100644 --- a/_UP/DB50to51.src +++ b/_UP/DB50to51.src @@ -31,18 +31,22 @@ ALTER TABLE fac_imp_cnt , ruimtecode VARCHAR2 (20) ); -/////////////////////////////////////////////////////////////////////////////////////////// FCLT#00000 +/////////////////////////////////////////////////////////////////////////////////////////// BAMG#85636 CREATE TABLE cnt_verlengschema ( + cnt_verlengschema_key + NUMBER(10) + PRIMARY KEY, cnt_contract_key NUMBER(10) CONSTRAINT cnt_r_cnt_contract_key2 REFERENCES cnt_contract(cnt_contract_key), - cnt_verlengschema_einddatum - DATE, + cnt_verlengschema_volgnr + NUMBER(2), cnt_verlengschema_verlengtermijn NUMBER(10) CONSTRAINT cnt_r_cnt_termijn_key6 REFERENCES cnt_termijn(cnt_termijn_key) ); +CREATE SEQUENCE cnt_s_cnt_verlengschema_key MINVALUE 1; CREATE INDEX cnt_i_cnt_verlengschema ON cnt_verlengschema(cnt_contract_key); /////////////////////////////////////////////////////////////////////////////////////////// FCLT#00000