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
This commit is contained in:
Erik Groener
2025-04-04 08:10:12 +00:00
parent d438d679e4
commit 592816e581
5 changed files with 60 additions and 24 deletions

View File

@@ -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.

View File

@@ -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$')

View File

@@ -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)

View File

@@ -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

View File

@@ -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