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:
@@ -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.
|
||||
|
||||
@@ -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$')
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user