577 lines
23 KiB
Plaintext
577 lines
23 KiB
Plaintext
#ifdef CNT
|
|
/*
|
|
* $Revision: 14 $
|
|
* $Modtime: 6-09-10 15:31 $
|
|
*/
|
|
|
|
CREATE OR REPLACE PACKAGE Cnt AS
|
|
FUNCTION cnt_getTermijndatum (pdate IN DATE, ptermijn_key IN NUMBER, prichting IN NUMBER) RETURN DATE;
|
|
FUNCTION cnt_getOpzegdatum (pcnt_contract_key IN NUMBER) RETURN DATE;
|
|
FUNCTION cnt_getRappeldatum (pcnt_contract_key IN NUMBER) RETURN DATE;
|
|
FUNCTION cnt_contract_status (van IN DATE, rappel IN DATE, opzeg IN DATE, tot IN DATE) RETURN NUMBER;
|
|
FUNCTION cnt_contract_items (cntKey IN NUMBER) RETURN VARCHAR2;
|
|
|
|
PROCEDURE cnt_update_kenmerkcontract(p_contract_key IN NUMBER
|
|
,p_kenmerk_key IN NUMBER
|
|
,p_waarde IN VARCHAR2
|
|
,p_historymode IN VARCHAR2
|
|
,p_mselect IN VARCHAR2);
|
|
PROCEDURE cnt_kenmerkcontract_insert(p_contract_key IN NUMBER
|
|
,p_kenmerk_key IN NUMBER
|
|
,p_waarde IN VARCHAR2
|
|
,p_historymode IN VARCHAR2);
|
|
PROCEDURE cnt_kenmerkcontract_delete(p_kenmerkcontract_key IN NUMBER
|
|
,p_historymode IN VARCHAR2);
|
|
PROCEDURE cnt_kenmerkcontract_update(p_kenmerkcontract_key IN NUMBER
|
|
,p_waarde IN VARCHAR2
|
|
,p_historymode IN VARCHAR2);
|
|
PROCEDURE cnt_complete_mutatie(p_mutaite_key IN NUMBER);
|
|
PROCEDURE splitscontract (p_key IN NUMBER, p_datum IN DATE, p_user IN NUMBER);
|
|
FUNCTION getnieuwsteversiekey(p_key IN NUMBER) RETURN NUMBER;
|
|
|
|
PRAGMA RESTRICT_REFERENCES (cnt_contract_items, WNDS, WNPS);
|
|
PRAGMA RESTRICT_REFERENCES (cnt_contract_status, WNDS, WNPS);
|
|
END Cnt;
|
|
/
|
|
|
|
CREATE OR REPLACE PACKAGE BODY Cnt AS
|
|
|
|
-- Deze functie bepaald 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.
|
|
FUNCTION cnt_getTermijndatum (pdate IN DATE, ptermijn_key IN NUMBER, prichting IN NUMBER) RETURN DATE IS
|
|
ptermijn_type VARCHAR2(1);
|
|
ptermijn_aantal NUMBER;
|
|
lrichting NUMBER;
|
|
BEGIN
|
|
IF prichting = -1
|
|
THEN
|
|
lrichting := -1;
|
|
ELSE
|
|
lrichting := 1;
|
|
END IF;
|
|
|
|
-- Bepaal type en aantal periodes
|
|
IF ptermijn_key IS NOT NULL
|
|
THEN
|
|
SELECT cnt_termijn_type,
|
|
cnt_termijn_aantal
|
|
INTO ptermijn_type,
|
|
ptermijn_aantal
|
|
FROM cnt_termijn
|
|
WHERE cnt_termijn_key = ptermijn_key;
|
|
ELSE
|
|
-- Als ptermijn_key leeg/ongedefinieerd, return pdate (ofwel termijn dan impliciet 0 dagen)!
|
|
RETURN pdate;
|
|
END IF;
|
|
|
|
IF ptermijn_type = 'D'
|
|
THEN
|
|
RETURN pdate + (lrichting * ptermijn_aantal);
|
|
ELSIF ptermijn_type = 'W'
|
|
THEN
|
|
RETURN pdate + (lrichting * ptermijn_aantal * 7);
|
|
ELSIF ptermijn_type = 'M'
|
|
THEN
|
|
RETURN fac.addMonths(pdate, lrichting * ptermijn_aantal);
|
|
ELSE
|
|
-- ptermijn_type = 'Y'
|
|
RETURN fac.addMonths(pdate, lrichting * ptermijn_aantal * 12);
|
|
END IF;
|
|
END;
|
|
|
|
FUNCTION cnt_getOpzegdatum (pcnt_contract_key IN NUMBER) RETURN DATE IS
|
|
plooptijd_tot DATE;
|
|
popzegtermijn NUMBER;
|
|
BEGIN
|
|
SELECT cnt_contract_looptijd_tot,
|
|
cnt_contract_opzegtermijn
|
|
INTO plooptijd_tot,
|
|
popzegtermijn
|
|
FROM cnt_contract
|
|
WHERE cnt_contract_key = pcnt_contract_key;
|
|
RETURN cnt_getTermijndatum (plooptijd_tot, popzegtermijn, -1);
|
|
END;
|
|
|
|
FUNCTION cnt_getRappeldatum (pcnt_contract_key IN NUMBER) RETURN DATE IS
|
|
plooptijd_tot DATE;
|
|
prappeltermijn NUMBER;
|
|
popzegtermijn NUMBER;
|
|
BEGIN
|
|
SELECT cnt_contract_looptijd_tot,
|
|
cnt_contract_rappeltermijn,
|
|
cnt_contract_opzegtermijn
|
|
INTO plooptijd_tot,
|
|
prappeltermijn,
|
|
popzegtermijn
|
|
FROM cnt_contract
|
|
WHERE cnt_contract_key = pcnt_contract_key;
|
|
RETURN cnt_getTermijndatum (cnt_getTermijndatum (plooptijd_tot, popzegtermijn, -1), prappeltermijn, -1);
|
|
END;
|
|
|
|
FUNCTION cnt_contract_status (van IN DATE, rappel IN DATE, opzeg IN DATE, tot IN DATE) RETURN NUMBER AS
|
|
varSysdate DATE;
|
|
BEGIN
|
|
varSysdate:=SYSDATE;
|
|
|
|
IF varSysdate < van THEN
|
|
RETURN 0;
|
|
ELSIF varSysdate <= rappel THEN
|
|
RETURN 1;
|
|
ELSIF varSysdate <= opzeg THEN
|
|
RETURN 2;
|
|
ELSIF varSysdate <= tot THEN
|
|
RETURN 3;
|
|
END IF;
|
|
|
|
RETURN 4;
|
|
END;
|
|
|
|
|
|
FUNCTION cnt_contract_items (cntKey IN NUMBER) RETURN VARCHAR2 AS
|
|
ret VARCHAR2(512);
|
|
var_ckey number;
|
|
CURSOR query(cntKey NUMBER) IS
|
|
SELECT 1 ckey, S.INS_SRTDEEL_CODE || ' ' ||S.INS_SRTDEEL_OMSCHRIJVING cntText
|
|
from CNT_CONTRACT_OBJECT O, INS_V_AANWEZIGSRTDEEL S
|
|
WHERE O.CNT_CONTRACT_KEY = cntKey
|
|
AND S.ins_srtdeel_key = O.cnt_ins_srtdeel_key
|
|
AND O.cnt_ins_DEEL_key IS NULL
|
|
UNION
|
|
SELECT 2 ckey, D.INS_DEEL_OMSCHRIJVING cntText
|
|
from CNT_CONTRACT_OBJECT O, INS_V_AANWEZIGDEEL D
|
|
WHERE O.CNT_CONTRACT_KEY = cntKey
|
|
AND D.ins_DEEL_key = O.cnt_ins_DEEL_key
|
|
UNION
|
|
SELECT 3 ckey, g.alg_locatie_omschrijving cntText
|
|
FROM alg_v_aanweziglocatie g, CNT_v_aanwezigCONTRACT_PLAATS P
|
|
WHERE p.CNT_CONTRACT_KEY = cntKey
|
|
AND p.cnt_alg_plaats_key = g.alg_locatie_key
|
|
AND p.CNT_ALG_PLAATS_CODE = 'L'
|
|
UNION
|
|
SELECT 4 ckey, l.alg_locatie_omschrijving || ' ' ||g.alg_gebouw_omschrijving cntText
|
|
FROM alg_v_aanweziggebouw g, CNT_v_aanwezigCONTRACT_PLAATS P, alg_locatie l
|
|
WHERE p.CNT_CONTRACT_KEY = cntKey
|
|
AND p.cnt_alg_plaats_key = g.alg_gebouw_key
|
|
AND p.CNT_ALG_PLAATS_CODE = 'G'
|
|
AND l.alg_locatie_key = g.alg_locatie_key
|
|
UNION
|
|
SELECT 5 ckey, l.alg_locatie_omschrijving || ' ' ||alg_terreinsector_naam cntText
|
|
FROM alg_v_aanwezigterreinsector T, CNT_v_aanwezigCONTRACT_PLAATS P, alg_locatie l
|
|
WHERE p.CNT_CONTRACT_KEY = cntKey
|
|
AND p.cnt_alg_plaats_key = T.alg_terreinsector_key
|
|
AND p.CNT_ALG_PLAATS_CODE = 'T'
|
|
AND l.alg_locatie_key = t.alg_locatie_key
|
|
ORDER BY 2;
|
|
|
|
BEGIN
|
|
ret := null;
|
|
var_ckey := -1;
|
|
FOR cntitem_rec IN query(cntKey) LOOP
|
|
IF var_ckey = -1 THEN
|
|
ret := cntitem_rec.cntText;
|
|
ELSE
|
|
IF LENGTH(ret)+LENGTH(cntitem_rec.cntText)<(512-5) THEN
|
|
ret := ret || CHR(10) || cntitem_rec.cntText;
|
|
ELSE
|
|
ret := ret || CHR(10) || '...';
|
|
RETURN ret;
|
|
END IF;
|
|
END IF;
|
|
var_ckey := cntitem_rec.ckey;
|
|
END LOOP;
|
|
|
|
RETURN ret;
|
|
END;
|
|
|
|
PROCEDURE cnt_kenmerkcontract_insert(p_contract_key IN NUMBER
|
|
,p_kenmerk_key IN NUMBER
|
|
,p_waarde IN VARCHAR2
|
|
,p_historymode IN VARCHAR2
|
|
) IS
|
|
BEGIN
|
|
IF p_waarde IS NOT NULL
|
|
THEN
|
|
INSERT INTO cnt_kenmerkcontract
|
|
( cnt_kenmerk_key
|
|
, cnt_contract_Key
|
|
, cnt_kenmerkcontract_waarde
|
|
)
|
|
VALUES(p_kenmerk_key
|
|
, p_contract_key
|
|
, p_waarde);
|
|
END IF;
|
|
END cnt_kenmerkcontract_insert;
|
|
|
|
PROCEDURE cnt_kenmerkcontract_delete(p_kenmerkcontract_key IN NUMBER
|
|
,p_historymode IN VARCHAR2
|
|
) IS
|
|
BEGIN
|
|
IF p_historymode = '0'
|
|
THEN
|
|
-- NON HISTORY MODE
|
|
DELETE
|
|
FROM cnt_kenmerkcontract
|
|
WHERE cnt_kenmerkcontract_key = p_kenmerkcontract_key;
|
|
ELSE
|
|
--HISTORY MODE
|
|
UPDATE cnt_kenmerkcontract
|
|
SET cnt_kenmerkcontract_verwijder = SYSDATE
|
|
WHERE cnt_kenmerkcontract_key = p_kenmerkcontract_key;
|
|
END IF;
|
|
END cnt_kenmerkcontract_delete;
|
|
|
|
PROCEDURE cnt_kenmerkcontract_update(p_kenmerkcontract_key IN NUMBER
|
|
,p_waarde IN VARCHAR2
|
|
,p_historymode IN VARCHAR2
|
|
) IS
|
|
BEGIN
|
|
IF p_historymode = '0'
|
|
THEN
|
|
UPDATE cnt_kenmerkcontract
|
|
SET cnt_kenmerkcontract_waarde = p_waarde
|
|
, cnt_kenmerkcontract_aanmaak = SYSDATE
|
|
, cnt_kenmerkcontract_verwijder = NULL
|
|
WHERE cnt_kenmerkcontract_key = p_kenmerkcontract_key;
|
|
ELSIF p_historymode = '1'
|
|
THEN
|
|
UPDATE cnt_kenmerkcontract
|
|
SET cnt_kenmerkcontract_waarde = p_waarde
|
|
, cnt_kenmerkcontract_verwijder = NULL
|
|
WHERE cnt_kenmerkcontract_key = p_kenmerkcontract_key;
|
|
END IF;
|
|
END cnt_kenmerkcontract_update;
|
|
|
|
PROCEDURE cnt_update_kenmerkcontract(p_contract_key IN NUMBER
|
|
,p_kenmerk_key IN NUMBER
|
|
,p_waarde IN VARCHAR2
|
|
,p_historymode IN VARCHAR2
|
|
,p_mselect IN VARCHAR2
|
|
) IS
|
|
-- Zoek alle records voor een gegeven contract en kenmerk
|
|
-- en zet de meest recente bovenaan.
|
|
--
|
|
CURSOR c_kenmerkcontract(p_kenmerk_key IN NUMBER
|
|
,p_contract_key IN NUMBER
|
|
) IS
|
|
SELECT cnt_kenmerkcontract_key
|
|
, trunc(cnt_kenmerkcontract_aanmaak) cnt_kenmerkcontract_aanmaak
|
|
, trunc(cnt_kenmerkcontract_verwijder) cnt_kenmerkcontract_verwijder
|
|
FROM cnt_kenmerkcontract
|
|
WHERE cnt_kenmerk_key = p_kenmerk_key
|
|
AND cnt_contract_key = p_contract_key
|
|
ORDER BY cnt_kenmerkcontract_key DESC
|
|
;
|
|
r_kenmerkcontract c_kenmerkcontract%ROWTYPE;
|
|
BEGIN
|
|
|
|
OPEN c_kenmerkcontract(p_kenmerk_key,p_contract_key);
|
|
|
|
FETCH c_kenmerkcontract INTO r_kenmerkcontract;
|
|
IF c_kenmerkcontract%NOTFOUND THEN
|
|
-- Voor deze contract en kenmerk bestaat nog geen record
|
|
-- dus toevoegen. Behalve als de toe te voegen waarde
|
|
-- null is, dan wil je niets toevoegen dus dan ook
|
|
-- geen actie.
|
|
IF p_waarde IS NOT NULL
|
|
THEN
|
|
_EXEC4( Cnt.cnt_kenmerkcontract_insert, p_contract_key
|
|
,p_kenmerk_key
|
|
,p_waarde
|
|
,p_historymode);
|
|
END IF;
|
|
ELSE
|
|
-- Er bestaat een record voor de contract en kenmerk.
|
|
--
|
|
IF p_historymode = '0'
|
|
THEN
|
|
IF p_waarde IS NOT NULL
|
|
THEN
|
|
_EXEC3(Cnt.cnt_kenmerkcontract_update,r_kenmerkcontract.cnt_kenmerkcontract_key
|
|
,p_waarde
|
|
,p_historymode);
|
|
END IF;
|
|
ELSIF p_historymode = '1'
|
|
THEN
|
|
-- Er bestaat een record voor de contract en kenmerk.
|
|
--
|
|
IF p_waarde IS NOT NULL
|
|
THEN
|
|
-- Er is een nieuwe waarde voor een bepaalde contract en kenmerk.
|
|
--
|
|
IF r_kenmerkcontract.cnt_kenmerkcontract_aanmaak <= TRUNC_DATE(sysdate)
|
|
AND r_kenmerkcontract.cnt_kenmerkcontract_verwijder IS NULL
|
|
THEN
|
|
-- Het record is nog actueel, dus moet eerst gesloten worden
|
|
-- door het als verwijderd te markeren.
|
|
--
|
|
_EXEC2(Cnt.cnt_kenmerkcontract_delete,r_kenmerkcontract.cnt_kenmerkcontract_key
|
|
,p_historymode);
|
|
END IF;
|
|
--
|
|
-- Er bestaat nu tijdelijk geen actueel record meer voor
|
|
-- de contract en kenmerk !!
|
|
--
|
|
IF r_kenmerkcontract.cnt_kenmerkcontract_aanmaak < TRUNC_DATE(sysdate)
|
|
AND ( r_kenmerkcontract.cnt_kenmerkcontract_verwijder <= TRUNC_DATE(sysdate)
|
|
OR r_kenmerkcontract.cnt_kenmerkcontract_verwijder IS NULL)
|
|
THEN
|
|
-- Het laatste record voor kenmerk bij een contract heeft langer
|
|
-- dan een dag bestaan. Voeg daarom een nieuwe toe.
|
|
--
|
|
_EXEC4(Cnt.cnt_kenmerkcontract_insert,p_contract_key
|
|
,p_kenmerk_key
|
|
,p_waarde
|
|
,p_historymode);
|
|
ELSIF r_kenmerkcontract.cnt_kenmerkcontract_aanmaak = TRUNC_DATE(sysdate)
|
|
THEN
|
|
-- Het record voor kenmerk bij een contract is vandaag
|
|
-- aangemaakt dus wordt er geen nieuwe toegevoegd maar
|
|
-- de huidige aangepast.
|
|
--
|
|
_EXEC3(Cnt.cnt_kenmerkcontract_update,r_kenmerkcontract.cnt_kenmerkcontract_key
|
|
,p_waarde
|
|
,p_historymode);
|
|
END IF;
|
|
ELSE
|
|
-- De nieuwe waarde voor de contract en kenmerk is leeg, dus
|
|
-- moet het als verwijderd gemarkeerd worden.
|
|
--
|
|
IF p_mselect = '0'
|
|
THEN
|
|
_EXEC2(Cnt.cnt_kenmerkcontract_delete,r_kenmerkcontract.cnt_kenmerkcontract_key
|
|
,p_historymode);
|
|
END IF;
|
|
END IF;
|
|
END IF;
|
|
END IF;
|
|
CLOSE c_kenmerkcontract;
|
|
END cnt_update_kenmerkcontract;
|
|
|
|
|
|
PROCEDURE cnt_complete_mutatie(p_mutaite_key IN NUMBER) IS
|
|
|
|
-- The following actions should be executed when the state becomes 'Voltooid':
|
|
-- Find the matching records in the CNT_CONTRACT_ONRGOED table where one row without a mutation_key
|
|
-- filled in matches a row with a mutation_key filled in.
|
|
-- The match will be successful if both rows have the same ALG_ONRGOED_KEY,
|
|
-- the same ALG_ONRGOED_NIVEAU and the same CNT_CONTRACT_KEY.
|
|
-- From these matching records the one without CNT_MUTATION_KEY should be deleted
|
|
BEGIN
|
|
DELETE
|
|
cnt_contract_onrgoed
|
|
WHERE cnt_contract_onrgoed_key IN (
|
|
SELECT a.cnt_contract_onrgoed_key
|
|
FROM cnt_contract_onrgoed b, cnt_contract_onrgoed a
|
|
WHERE a.cnt_contract_key = b.cnt_contract_key
|
|
AND a.alg_onrgoed_key = b.alg_onrgoed_key
|
|
AND a.alg_onrgoed_niveau = b.alg_onrgoed_niveau
|
|
AND b.cnt_mutatie_key = p_mutaite_key
|
|
AND a.cnt_mutatie_key IS NULL);
|
|
|
|
-- Delete the entries in the CNT_CONTRACT_ONRGOED table with the mutation_key equal
|
|
-- to the CNT_MUTATION that will be accepted and where the area size (CNT_CONTRACT_ONRGOED_OPP) = 0.
|
|
|
|
DELETE
|
|
cnt_contract_onrgoed
|
|
WHERE cnt_mutatie_key = p_mutaite_key
|
|
AND CNT_CONTRACT_ONRGOED_OPP = 0;
|
|
|
|
-- Set the Mutation_key to NULL from the rows where the CNT_MUTATION_KEY will be equal to the CNT_MUTATION that was accepted.
|
|
UPDATE
|
|
cnt_contract_onrgoed
|
|
SET cnt_mutatie_key = NULL
|
|
WHERE cnt_mutatie_key = p_mutaite_key;
|
|
--The state of the mutation should be set to 'Voltooid'
|
|
UPDATE cnt_mutatie
|
|
SET CNT_MUTATIE_DATUM_VOLTOOID = SYSDATE,
|
|
CNT_MUTATIE_STATUS = 5
|
|
WHERE cnt_mutatie_key = p_mutaite_key;
|
|
END cnt_complete_mutatie;
|
|
|
|
|
|
PROCEDURE splitscontract (p_key IN NUMBER, p_datum IN DATE, p_user IN NUMBER)
|
|
IS
|
|
begin1 DATE;
|
|
eind1 DATE;
|
|
versie1 cnt_contract.cnt_contract_versie%TYPE;
|
|
newkey NUMBER;
|
|
nummer1 cnt_contract.cnt_contract_nummer_intern%TYPE;
|
|
BEGIN
|
|
-- Splits het contract met p_key in twee delen: het oude dat eindigt op p_datum,
|
|
-- en een nieuwe kopie die begint op die datum
|
|
IF p_key IS NULL
|
|
THEN
|
|
RETURN;
|
|
END IF;
|
|
|
|
BEGIN
|
|
SELECT c.cnt_contract_looptijd_van,
|
|
c.cnt_contract_looptijd_tot,
|
|
COALESCE (c.cnt_contract_versie, '0'),
|
|
cnt_contract_nummer_intern
|
|
INTO begin1, eind1, versie1, nummer1
|
|
FROM cnt_contract c
|
|
WHERE c.cnt_contract_key = p_key
|
|
AND c.cnt_contract_looptijd_van < p_datum
|
|
AND c.cnt_contract_looptijd_tot > p_datum;
|
|
EXCEPTION
|
|
WHEN NO_DATA_FOUND
|
|
THEN
|
|
RETURN;
|
|
END;
|
|
|
|
-- de datum is een zinvolle splitsdatum, alles in orde
|
|
INSERT INTO cnt_contract (cnt_contract_nummer, cnt_contract_omschrijving, cnt_contract_looptijd_tot, cnt_contract_kosten, cnt_contract_uurloon, cnt_prs_bedrijf_key, cnt_prs_afdeling_key, cnt_contract_aanmaak, cnt_contract_verwijder, cnt_contract_nummer_intern, cnt_contract_korting, prs_contactpersoon_key, cnt_contract_contact_persoon, ins_discipline_key, cnt_contract_document, prs_perslid_key_eig, prs_perslid_key_beh, prs_afdeling_key_eig, cnt_contract_status, cnt_contract_looptijd_van, prs_kostenplaats_key, cnt_contract_termijnkosten, prs_kostensoort_key, cnt_contract_opmerking, cnt_contract_mantel_key, cnt_contract_opzegtermijn, cnt_contract_rappeltermijn, cnt_contract_versie
|
|
)
|
|
SELECT cnt_contract_nummer,
|
|
cnt_contract_omschrijving,
|
|
cnt_contract_looptijd_tot,
|
|
cnt_contract_kosten,
|
|
cnt_contract_uurloon,
|
|
cnt_prs_bedrijf_key,
|
|
cnt_prs_afdeling_key,
|
|
NULL,
|
|
NULL,
|
|
cnt_contract_nummer_intern,
|
|
cnt_contract_korting,
|
|
prs_contactpersoon_key,
|
|
cnt_contract_contact_persoon,
|
|
ins_discipline_key,
|
|
cnt_contract_document,
|
|
prs_perslid_key_eig,
|
|
prs_perslid_key_beh,
|
|
prs_afdeling_key_eig,
|
|
cnt_contract_status,
|
|
p_datum,
|
|
prs_kostenplaats_key,
|
|
cnt_contract_termijnkosten,
|
|
prs_kostensoort_key,
|
|
cnt_contract_opmerking,
|
|
cnt_contract_mantel_key,
|
|
cnt_contract_opzegtermijn,
|
|
cnt_contract_rappeltermijn,
|
|
TO_CHAR (versie1 + 1)
|
|
FROM cnt_contract
|
|
WHERE cnt_contract_key = p_key;
|
|
|
|
--- ik wil de nieuwe key weten
|
|
SELECT cnt_contract_key
|
|
INTO newkey
|
|
FROM cnt_contract
|
|
WHERE cnt_contract_nummer_intern = nummer1 AND cnt_contract_versie = TO_CHAR (versie1 + 1);
|
|
--- Een versieloos oud contract krijgt explciet versie 0
|
|
UPDATE cnt_contract
|
|
SET cnt_contract_looptijd_tot = p_datum - 1,
|
|
cnt_contract_versie = versie1
|
|
WHERE cnt_contract_key = p_key;
|
|
|
|
fac.trackaction ('CNTUPD', p_key, p_user, NULL, NULL);
|
|
|
|
-- de basis is gelegd, nu de aanhang meekopieren
|
|
-- flexkenmerken
|
|
INSERT INTO cnt_kenmerkcontract (cnt_contract_key, cnt_kenmerk_key, cnt_kenmerkcontract_waarde
|
|
)
|
|
SELECT newkey, k.cnt_kenmerk_key, k.cnt_kenmerkcontract_waarde
|
|
FROM cnt_kenmerkcontract k
|
|
WHERE k.cnt_contract_key = p_key AND k.cnt_kenmerkcontract_verwijder IS NULL;
|
|
|
|
-- cnt_contract_dienst (blind kopieren)
|
|
INSERT INTO cnt_contract_dienst (cnt_contract_key, cnt_contract_dienst_contactext, cnt_contract_dienst_contactint, cnt_contract_dienst_materiaal, cnt_contract_dienst_uitvoertd, cnt_contract_dienst_uren, cnt_contract_dienst_uurloon, mld_stdmelding_key, prs_bedrijf_key
|
|
)
|
|
SELECT newkey,
|
|
cd.cnt_contract_dienst_contactext,
|
|
cd.cnt_contract_dienst_contactint,
|
|
cd.cnt_contract_dienst_materiaal,
|
|
cd.cnt_contract_dienst_uitvoertd,
|
|
cd.cnt_contract_dienst_uren,
|
|
cd.cnt_contract_dienst_uurloon,
|
|
cd.mld_stdmelding_key,
|
|
cd.prs_bedrijf_key
|
|
FROM cnt_contract_dienst cd
|
|
WHERE cd.cnt_contract_key = p_key;
|
|
|
|
-- scope en zo
|
|
-- cnt_contract_object
|
|
INSERT INTO cnt_contract_object (cnt_contract_key, cnt_ins_srtdeel_key, cnt_ins_deel_key
|
|
)
|
|
SELECT newkey, cob.cnt_ins_srtdeel_key, cob.cnt_ins_deel_key
|
|
FROM cnt_contract_object cob
|
|
WHERE cob.cnt_contract_key = p_key AND cob.cnt_contract_object_verwijder IS NULL;
|
|
|
|
--cnt_contract_onrgoed
|
|
INSERT INTO cnt_contract_onrgoed (cnt_contract_key, alg_onrgoed_key, alg_onrgoed_niveau, alg_srtonrgoed_key, cnt_contract_onrgoed_opp, cnt_srtruimte_prijs
|
|
)
|
|
SELECT newkey,
|
|
cog.alg_onrgoed_key,
|
|
cog.alg_onrgoed_niveau,
|
|
cog.alg_srtonrgoed_key,
|
|
cog.cnt_contract_onrgoed_opp,
|
|
cog.cnt_srtruimte_prijs
|
|
FROM cnt_contract_onrgoed cog
|
|
WHERE cog.cnt_contract_key = p_key AND cog.cnt_mutatie_key IS NULL;
|
|
|
|
--cnt_contract_plaats
|
|
INSERT INTO cnt_contract_plaats (cnt_contract_key, cnt_alg_plaats_code, cnt_alg_plaats_key, cnt_contract_plaats_gewicht
|
|
)
|
|
SELECT newkey, cop.cnt_alg_plaats_code, cop.cnt_alg_plaats_key, cop.cnt_contract_plaats_gewicht
|
|
FROM cnt_contract_plaats cop
|
|
WHERE cop.cnt_contract_key = p_key AND cop.cnt_contract_plaats_verwijder IS NULL;
|
|
|
|
--cnt_factuurschema: splitst op dezelfde grensdatum
|
|
UPDATE cnt_factuurschema
|
|
SET cnt_contract_key = newkey
|
|
WHERE cnt_contract_key = p_key AND cnt_factuurschema_datum > p_datum;
|
|
|
|
fac.trackaction ('CNTNEW', newkey, p_user, NULL, NULL);
|
|
|
|
END splitscontract;
|
|
|
|
-- Zoek de key van de hoogste revisie van het meegegeven contract
|
|
-- Beseffende dat _versie een oplopende reeks is en hopende dat
|
|
-- nummer_intern hetzelfde blijft over versies en vrij uniek is
|
|
-- Voor wat extra zekerheid wordt bedrijf betrokken
|
|
FUNCTION getnieuwsteversiekey (p_key IN NUMBER)
|
|
RETURN NUMBER
|
|
IS
|
|
nummer1 cnt_contract.cnt_contract_nummer_intern%TYPE;
|
|
versie1 cnt_contract.cnt_contract_versie%TYPE;
|
|
bedrijf1 cnt_contract.cnt_prs_bedrijf_key%TYPE;
|
|
maxversie NUMBER;
|
|
resultkey NUMBER;
|
|
BEGIN
|
|
resultkey := p_key; -- mocht ik niks vinden, dan is dit em
|
|
|
|
SELECT cnt_contract_nummer_intern, cnt_contract_versie, cnt_prs_bedrijf_key
|
|
INTO nummer1, versie1, bedrijf1
|
|
FROM cnt_contract
|
|
WHERE cnt_contract_verwijder IS NULL AND cnt_contract_key = p_key;
|
|
|
|
SELECT MAX (fac.safe_to_number (cnt_contract_versie))
|
|
INTO maxversie
|
|
FROM cnt_contract
|
|
WHERE cnt_contract_nummer_intern = nummer1
|
|
AND cnt_prs_bedrijf_key = bedrijf1
|
|
AND cnt_contract_verwijder IS NULL;
|
|
|
|
IF maxversie IS NOT NULL
|
|
THEN
|
|
SELECT cnt_contract_key
|
|
INTO resultkey
|
|
FROM cnt_contract
|
|
WHERE cnt_contract_nummer_intern = nummer1
|
|
AND cnt_prs_bedrijf_key = bedrijf1
|
|
AND fac.safe_to_number (cnt_contract_versie) = maxversie;
|
|
END IF;
|
|
|
|
RETURN resultkey;
|
|
END;
|
|
|
|
|
|
END Cnt;
|
|
/
|
|
|
|
REGISTERRUN('$Workfile: CNT_PAC.SRC $','$Revision: 14 $')
|
|
|
|
#endif // CNT
|