FCLT#68548 Geplande actie niet gemaakt

svn path=/Database/branches/DB40/; revision=52936
This commit is contained in:
Erik Groener
2021-09-07 13:35:14 +00:00
parent bf80c52744
commit 3c02393faa

View File

@@ -142,7 +142,6 @@ CREATE OR REPLACE PACKAGE fac
FUNCTION getDefaultBehandelgroep(p_stdm IN NUMBER) RETURN NUMBER;
PROCEDURE processemail (pfrom IN VARCHAR2, pto IN VARCHAR2, psubject IN VARCHAR2, pbody IN VARCHAR2, psessionid IN VARCHAR2);
FUNCTION isdatefeestdag(p_date IN DATE) RETURN BOOLEAN;
FUNCTION actiontodayallowed(pact_key IN NUMBER, pdate IN DATE DEFAULT SYSDATE) RETURN NUMBER;
FUNCTION calcnextcyclusdate (p_date IN DATE, p_mode IN NUMBER, p_eenheid IN NUMBER, p_periode IN NUMBER, p_bits IN NUMBER) RETURN DATE;
FUNCTION nextcyclusdate (p_date IN DATE, p_mode IN NUMBER, p_eenheid IN NUMBER, p_periode IN NUMBER, p_bits IN NUMBER, p_steps IN NUMBER DEFAULT 0, p_ismjob IN NUMBER DEFAULT 0) RETURN DATE;
FUNCTION nextcyclusdatedeel (p_insdeel IN NUMBER, p_srtcontrole IN NUMBER, p_steps IN NUMBER DEFAULT 0) RETURN DATE;
@@ -3157,10 +3156,7 @@ CREATE OR REPLACE PACKAGE BODY fac AS
IF rec1.fac_activiteit_status_key = 2
THEN
IF (fac.actiontodayallowed(rec1.fac_activiteit_key, TRUNC(SYSDATE)) > 0)
THEN
executeactiviteit (rec1.fac_activiteit_xmlnode, rec1.fac_activiteit_key);
END IF;
executeactiviteit (rec1.fac_activiteit_xmlnode, rec1.fac_activiteit_key);
-- Remove time-part from volgende (ie. set to 0:00)!
-- De geplande actie is net aangemaakt en de volgende geplande actie vanaf nu (SYSDATE) berekenen.
@@ -4750,107 +4746,6 @@ CREATE OR REPLACE PACKAGE BODY fac AS
RETURN FALSE;
END;
-- Is de meegegeven datum geldig om een actie op te zetten.
FUNCTION actiontodayallowed(pact_key IN NUMBER, pdate IN DATE DEFAULT SYSDATE)
RETURN NUMBER
IS
v_exec NUMBER := 1;
v_eenheid fac_activiteit.fac_activiteit_eenheid%TYPE;
v_moments fac_activiteit.fac_activiteit_bits%TYPE;
v_mode NUMBER;
v_dayofweek NUMBER;
v_weekofyear NUMBER;
v_monthofyear NUMBER;
v_wk_today NUMBER;
v_wk_first NUMBER;
v_wk_last NUMBER;
BEGIN
SELECT fac_activiteit_eenheid
, fac_activiteit_bits
INTO v_eenheid
, v_moments
FROM fac_activiteit
WHERE fac_activiteit_key = pact_key;
CASE v_eenheid
WHEN 0 THEN -- uurlijks
BEGIN
IF ((BITAND(v_moments, 128) = 128) AND fac.isdatefeestdag(pdate))
THEN
v_exec := 0;
END IF;
END;
WHEN 1 THEN -- dagelijks
BEGIN
IF ((BITAND(v_moments, 128) = 128) AND fac.isdatefeestdag(pdate))
THEN
v_exec := 0;
END IF;
END;
WHEN 2 THEN -- weeklijks
BEGIN
IF ((BITAND(v_moments, 128) = 128) AND fac.isdatefeestdag(pdate))
THEN
v_exec := 0;
ELSE
v_dayofweek := fac.getweekdaynum(pdate);
v_exec := BITAND(v_moments, POWER(2, v_dayofweek-1));
END IF;
END;
WHEN 3 THEN -- maandlijks
BEGIN
IF ((BITAND(v_moments, 128) = 128) AND fac.isdatefeestdag(pdate))
THEN
v_exec := 0;
ELSE
v_dayofweek := fac.getweekdaynum(pdate);
IF (BITAND(v_moments, POWER(2, v_dayofweek-1)) > 0) -- juiste dag van de week
THEN
-- 1792 = 2^10 + 2^9 + 2^8 De bits die aangeven de hoeveelste xx-dag van de maand het moet zijn.
-- Door te delen met 256 doe je een shift right 8 posities zodat deze drie bits minst significant worden (waarde 0..7).
v_mode := BITAND(v_moments, 1792) / 256;
v_wk_today := TO_NUMBER(TO_CHAR(pdate, 'iw'));
v_wk_first := TO_NUMBER(TO_CHAR(TRUNC(pdate, 'mm'), 'iw'));
v_wk_last := TO_NUMBER(TO_CHAR(LAST_DAY(pdate), 'iw'));
IF (v_mode < 6)
THEN
-- Is het de n-de week van de maand.
IF NOT(v_mode = v_wk_today - v_wk_first + 1)
THEN
v_exec := 0;
END IF;
END IF;
IF (v_mode = 6)
THEN
-- Is het de voorlaatste week van de maand.
IF NOT(v_wk_today = v_wk_last-1)
THEN
v_exec := 0;
END IF;
END IF;
IF (v_mode = 7)
THEN
-- Is het de laatste week van de maand
IF NOT(v_wk_today = v_wk_last)
THEN
v_exec := 0;
END IF;
END IF;
ELSE
v_exec := 0;
END IF;
END IF;
END;
WHEN 4 THEN -- jaarlijks
BEGIN
v_monthofyear := TO_NUMBER(TO_CHAR(pdate,'mm'));
v_exec := BITAND(v_moments, POWER(2, v_monthofyear-1));
END;
END CASE;
RETURN v_exec;
END;
-- Calculation of next cyclus date
-- Deze functie moet snel en efficient zijn.
FUNCTION calcnextcyclusdate(p_date IN DATE,