PCHX#82938 Alleen specifieker proberen te matchen wanneer nodig, en dan nog coulant (volgens onderstaand algoritme)
svn path=/Database/branches/DB49/; revision=66651
This commit is contained in:
@@ -15847,24 +15847,69 @@ AS
|
||||
IF (ASCII (c_prefix1) = 67 OR ASCII (c_prefix1) = 99)
|
||||
THEN
|
||||
BEGIN
|
||||
-- haal prefix 'C' of 'c' eraf
|
||||
-- Haal prefix 'C' of 'c' eraf
|
||||
c_contract_nr := SUBSTR (p_broc_nr, 2);
|
||||
IF INSTR(p_broc_nr, '.') = 0
|
||||
THEN
|
||||
-- Het laatste contract met de hoogste versie nummer opvragen.
|
||||
-- Er kunnen meerdere contracten zijn met dezelfde contract_key, maar met verschillende versies.
|
||||
-- Het contract met de hoogste versie is de laatste.
|
||||
SELECT cnt_contract_key
|
||||
INTO p_broc_key
|
||||
FROM ( SELECT cnt_contract_key,
|
||||
cnt_contract_versie
|
||||
FROM cnt_contract
|
||||
WHERE cnt_contract_verwijder IS NULL
|
||||
AND cnt_contract_status = 0
|
||||
AND cnt_contract_nummer_intern = c_contract_nr
|
||||
AND p_factuur_datum BETWEEN cnt_contract_looptijd_van AND cnt_contract_looptijd_tot
|
||||
ORDER BY cnt_contract_key DESC)
|
||||
WHERE ROWNUM = 1;
|
||||
BEGIN
|
||||
-- Het laatste contract met de hoogste versie nummer opvragen.
|
||||
-- Er kunnen meerdere contracten zijn met dezelfde contract_key, maar met verschillende versies.
|
||||
-- Het contract met de hoogste versie is de laatste.
|
||||
SELECT cnt_contract_key
|
||||
INTO p_broc_key
|
||||
FROM cnt_contract
|
||||
WHERE cnt_contract_verwijder IS NULL
|
||||
AND cnt_contract_status = 0
|
||||
AND cnt_contract_nummer_intern = c_contract_nr;
|
||||
EXCEPTION
|
||||
WHEN TOO_MANY_ROWS
|
||||
THEN
|
||||
BEGIN
|
||||
-- Meerdere versies gevonden; ga specifieker zoeken
|
||||
-- Bij overlappende contracten; pak het oudste contract
|
||||
SELECT cnt_contract_key
|
||||
INTO p_broc_key
|
||||
FROM (SELECT cnt_contract_key
|
||||
FROM cnt_contract
|
||||
WHERE cnt_contract_verwijder IS NULL
|
||||
AND cnt_contract_status = 0
|
||||
AND cnt_contract_nummer_intern = c_contract_nr
|
||||
AND p_factuur_datum BETWEEN cnt_contract_looptijd_van AND cnt_contract_looptijd_tot
|
||||
ORDER BY cnt_contract_looptijd_van ASC)
|
||||
WHERE ROWNUM = 1;
|
||||
EXCEPTION
|
||||
WHEN NO_DATA_FOUND
|
||||
THEN
|
||||
BEGIN
|
||||
-- Geen contract gevonden waarbinnen deze factuurdatum valt
|
||||
-- Zoek het contract wat het recentst (mbt de factuurdatum) is afgelopen
|
||||
SELECT cnt_contract_key
|
||||
INTO p_broc_key
|
||||
FROM (SELECT cnt_contract_key
|
||||
FROM cnt_contract
|
||||
WHERE cnt_contract_verwijder IS NULL
|
||||
AND cnt_contract_status = 0
|
||||
AND cnt_contract_nummer_intern = c_contract_nr
|
||||
AND cnt_contract_looptijd_tot <= p_factuur_datum
|
||||
ORDER BY cnt_contract_looptijd_tot DESC)
|
||||
WHERE ROWNUM = 1;
|
||||
EXCEPTION
|
||||
WHEN NO_DATA_FOUND
|
||||
THEN
|
||||
-- Geen contract gevonden met een einddatum die ligt voor de factuurdatum
|
||||
-- Dan ligt de factuurdatum dus voor de startdatum van de eerste contract-versie; pak het eerste contract
|
||||
SELECT cnt_contract_key
|
||||
INTO p_broc_key
|
||||
FROM (SELECT cnt_contract_key
|
||||
FROM cnt_contract
|
||||
WHERE cnt_contract_verwijder IS NULL
|
||||
AND cnt_contract_status = 0
|
||||
AND cnt_contract_nummer_intern = c_contract_nr
|
||||
ORDER BY cnt_contract_looptijd_van)
|
||||
WHERE ROWNUM = 1;
|
||||
END;
|
||||
END;
|
||||
END;
|
||||
ELSE
|
||||
-- Exact dit contract en versie.
|
||||
SELECT cnt_contract_key
|
||||
@@ -23304,7 +23349,7 @@ AS
|
||||
v_materiaalkosten ins_srtcontroledl_xcp.ins_srtcontroledl_xcp_materia%TYPE;
|
||||
v_aantal ins_srtcontroledl_xcp.ins_srtcontroledl_xcp_aantal%TYPE;
|
||||
v_aantaleh ins_srtcontroledl_xcp.ins_srtcontroledl_xcp_aanteh%TYPE;
|
||||
|
||||
|
||||
|
||||
|
||||
FUNCTION maakAanduiding_taak(p_deel_key IN NUMBER, p_disc_key IN NUMBER, p_oms IN VARCHAR2, o_srtdeel_key OUT NUMBER) RETURN VARCHAR2
|
||||
|
||||
Reference in New Issue
Block a user