SGGR#78224 Nieuwe versie vs. splitsen

svn path=/Database/trunk/; revision=61733
This commit is contained in:
Erik Groener
2023-09-06 13:03:03 +00:00
parent 7a88d294fc
commit 8f32740f93

View File

@@ -235,15 +235,16 @@ CREATE OR REPLACE PACKAGE BODY cnt AS
PROCEDURE splitscontract (p_key IN NUMBER, p_datum IN DATE, p_user IN NUMBER, p_amount NUMBER)
IS
begin1 DATE;
eind1 DATE;
versie1 cnt_contract.cnt_contract_versie%TYPE;
newkey NUMBER;
nummer1 cnt_contract.cnt_contract_nummer_intern%TYPE;
amount1 cnt_contract.cnt_contract_kosten%TYPE;
srtcontract_type cnt_disc_params.cnt_srtcontract_type%TYPE;
new_status cnt_contract.cnt_contract_status%TYPE;
tracking VARCHAR2 (4000);
begin1 DATE;
eind1 DATE;
versie1 cnt_contract.cnt_contract_versie%TYPE;
newkey NUMBER;
nummer1 cnt_contract.cnt_contract_nummer_intern%TYPE;
amount1 cnt_contract.cnt_contract_kosten%TYPE;
srtcontract_type cnt_disc_params.cnt_srtcontract_type%TYPE;
new_status cnt_contract.cnt_contract_status%TYPE;
tracking VARCHAR2 (4000);
splitsen BOOLEAN := TRUE;
BEGIN
-- Splits het contract met p_key in twee delen: het oude dat eindigt op p_datum - 1,
-- en een nieuwe kopie die begint op die p_datum
@@ -266,15 +267,28 @@ CREATE OR REPLACE PACKAGE BODY cnt AS
FROM cnt_contract c,
cnt_disc_params cdp
WHERE c.ins_discipline_key = cdp.cnt_ins_discipline_key
AND c.cnt_contract_key = p_key
AND c.cnt_contract_looptijd_van < p_datum
AND c.cnt_contract_looptijd_tot > p_datum;
AND c.cnt_contract_key = p_key;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
RETURN;
END;
IF (begin1 < p_datum AND eind1 > p_datum)
THEN
-- Splitsen van contract.
begin1 := p_datum;
eind1 := eind1;
ELSIF (eind1 < p_datum)
THEN
-- Verlengen van contract
begin1 := eind1 + 1;
eind1 := p_datum;
splitsen := FALSE;
ELSE
RETURN;
END IF;
IF (fac.getsetting('cnt_contract_approval') = 1 AND srtcontract_type != 6)
THEN
new_status := 2; -- altijd op nieuw
@@ -293,7 +307,7 @@ CREATE OR REPLACE PACKAGE BODY cnt AS
)
SELECT cnt_contract_nummer,
cnt_contract_omschrijving,
cnt_contract_looptijd_tot,
eind1,
amount1 - COALESCE(p_amount, 0),
cnt_contract_uurloon,
cnt_prs_bedrijf_key,
@@ -310,7 +324,7 @@ CREATE OR REPLACE PACKAGE BODY cnt AS
prs_perslid_key_beh,
prs_afdeling_key_eig,
new_status,
p_datum,
begin1,
prs_kostenplaats_key,
cnt_contract_termijnkosten,
prs_kostensoort_key,
@@ -332,11 +346,19 @@ CREATE OR REPLACE PACKAGE BODY cnt AS
AND cnt_contract_versie = TO_CHAR (versie1 + 1)
AND cnt_contract_verwijder IS NULL;
--- Een versieloos oud contract krijgt expliciet versie 0
UPDATE cnt_contract
SET cnt_contract_looptijd_tot = p_datum - 1,
cnt_contract_versie = versie1,
cnt_contract_kosten = COALESCE(p_amount, cnt_contract_kosten)
WHERE cnt_contract_key = p_key;
--- Looptijd_tot en kosten moteen alleen bij splitsen worden aangepast.
IF splitsen
THEN
UPDATE cnt_contract
SET cnt_contract_looptijd_tot = p_datum - 1,
cnt_contract_versie = versie1,
cnt_contract_kosten = COALESCE(p_amount, cnt_contract_kosten)
WHERE cnt_contract_key = p_key;
ELSE
UPDATE cnt_contract
SET cnt_contract_versie = versie1
WHERE cnt_contract_key = p_key;
END IF;
tracking := lcl.l('lcl_cnt_is_cntupd') || CHR(10) || lcl.l('lcl_cnt_enddate') || ': ' || TO_CHAR(eind1, 'dd-mm-yyyy') || lcl.l('lcl_trackto') || TO_CHAR((p_datum - 1), 'dd-mm-yyyy');
IF (p_amount IS NOT NULL AND p_amount <> amount1)