BLOS#81864: Doorlooptijd acceptatie in mld_v_udr_melding.

svn path=/Database/trunk/; revision=68839
This commit is contained in:
Maykel Geerdink
2025-04-23 10:23:57 +00:00
parent 3787ff798e
commit 8c21e426d5
2 changed files with 170 additions and 9 deletions

View File

@@ -62,6 +62,15 @@ CREATE OR REPLACE PACKAGE mld AS
eenheid IN VARCHAR2 DEFAULT NULL
) RETURN MLD_T_UITVOERTIJD;
FUNCTION getactualuitvoer (p_melding_key IN NUMBER) RETURN MLD_T_UITVOERTIJD;
FUNCTION getactualaccept (startdate IN DATE,
enddate IN DATE,
stdm_key IN NUMBER,
prio IN NUMBER,
alg_key IN NUMBER,
ins_key IN NUMBER,
eenheid IN VARCHAR2 DEFAULT NULL
) RETURN MLD_T_UITVOERTIJD;
FUNCTION getactualaccept (p_melding_key IN NUMBER) RETURN MLD_T_UITVOERTIJD;
FUNCTION getstduitvoer (stdm_key IN NUMBER,
prio IN NUMBER,
alg_key IN NUMBER,
@@ -73,6 +82,7 @@ CREATE OR REPLACE PACKAGE mld AS
ins_key IN NUMBER,
v_mld_stdmelding_regime OUT NUMBER,
v_uitvoertijd_object OUT MLD_T_UITVOERTIJD,
v_accepttijd OUT MLD_T_UITVOERTIJD,
v_beginuur OUT NUMBER,
v_einduur OUT NUMBER,
v_werkdagen OUT NUMBER
@@ -3328,6 +3338,7 @@ CREATE OR REPLACE PACKAGE BODY mld AS
RETURN MLD_T_UITVOERTIJD
AS
v_actual_uitvoertijd_object mld_stdmelding.mld_stdmelding_t_uitvoertijd%TYPE := MLD_T_UITVOERTIJD(NULL, NULL); -- constructor initialisatie;
v_actual_accepttijd mld_stdmelding.mld_stdmelding_t_accepttijd%TYPE := MLD_T_UITVOERTIJD(NULL, NULL); -- constructor initialisatie;
v_uitvoertijdtype VARCHAR2(5);
v_mld_stdmelding_regime mld_stdmelding.mld_stdmelding_regime%TYPE;
v_beginuur alg_gebouw.alg_gebouw_beginuur%TYPE;
@@ -3335,7 +3346,7 @@ CREATE OR REPLACE PACKAGE BODY mld AS
v_werkdagen alg_gebouw.alg_gebouw_werkdagen%TYPE;
BEGIN
getSLAparams(stdm_key, prio, alg_key, ins_key,
v_mld_stdmelding_regime, v_actual_uitvoertijd_object, v_beginuur, v_einduur, v_werkdagen);
v_mld_stdmelding_regime, v_actual_uitvoertijd_object, v_actual_accepttijd, v_beginuur, v_einduur, v_werkdagen);
IF COALESCE(eenheid, v_actual_uitvoertijd_object.eenheid) = 'D'
THEN
@@ -3378,6 +3389,89 @@ CREATE OR REPLACE PACKAGE BODY mld AS
RETURN v_actual_uitvoertijd_object;
END;
-- Dit is de tijd waarop afgerekend gaat worden.
FUNCTION getactualaccept (p_melding_key IN NUMBER)
RETURN MLD_T_UITVOERTIJD
AS
v_actual_accepttijd mld_stdmelding.mld_stdmelding_t_accepttijd%TYPE := MLD_T_UITVOERTIJD(NULL, NULL); -- constructor initialisatie;
BEGIN
-- Objecten hebben geen acceptatietijd.
SELECT mld.getactualaccept(m.mld_melding_datum,
COALESCE(fac.gettrackingdate('MLDACP', m.mld_melding_key), fac.gettrackingdate('MLDAFM', m.mld_melding_key), fac.gettrackingdate('MLDREJ', m.mld_melding_key), SYSDATE),
m.mld_stdmelding_key,
m.mld_melding_spoed,
m.mld_alg_onroerendgoed_keys,
NULL, -- ins_key (Objecten hebben geen acceptatietijd).
m.mld_melding_t_uitvoertijd.eenheid
)
INTO v_actual_accepttijd
FROM mld_melding m
WHERE mld_melding_key = p_melding_key;
RETURN v_actual_accepttijd;
END;
FUNCTION getactualaccept (startdate IN DATE,
enddate IN DATE,
stdm_key IN NUMBER,
prio IN NUMBER,
alg_key IN NUMBER, -- Altijd gebouw of hoger, locatie niet ondersteund
ins_key IN NUMBER, -- Object met de laagste uitvoertijd
eenheid IN VARCHAR2 DEFAULT NULL
)
RETURN MLD_T_UITVOERTIJD
AS
v_actual_uitvoertijd_object mld_stdmelding.mld_stdmelding_t_uitvoertijd%TYPE := MLD_T_UITVOERTIJD(NULL, NULL); -- constructor initialisatie;
v_actual_accepttijd mld_stdmelding.mld_stdmelding_t_accepttijd%TYPE := MLD_T_UITVOERTIJD(NULL, NULL); -- constructor initialisatie;
v_uitvoertijdtype VARCHAR2(5);
v_mld_stdmelding_regime mld_stdmelding.mld_stdmelding_regime%TYPE;
v_beginuur alg_gebouw.alg_gebouw_beginuur%TYPE;
v_einduur alg_gebouw.alg_gebouw_einduur%TYPE;
v_werkdagen alg_gebouw.alg_gebouw_werkdagen%TYPE;
BEGIN
getSLAparams(stdm_key, prio, alg_key, ins_key,
v_mld_stdmelding_regime, v_actual_uitvoertijd_object, v_actual_accepttijd, v_beginuur, v_einduur, v_werkdagen);
IF COALESCE(eenheid, v_actual_accepttijd.eenheid) = 'D'
THEN
v_uitvoertijdtype := 'DAGEN';
ELSE
v_uitvoertijdtype := 'UREN';
END IF;
-- Als bij Openingstijden geen ruimte/gebouwopeningstijden zijn gevonden dan terugvallen op Kantoortijden.
IF v_mld_stdmelding_regime = 1 OR (v_mld_stdmelding_regime = 2 AND (v_beginuur = -1 OR v_einduur = -1)) -- Kantoortijden: als in 5.1.2
THEN
v_actual_accepttijd :=
FAC.datumtijdnaaruitvoertijd (startdate, enddate, v_uitvoertijdtype);
ELSIF v_mld_stdmelding_regime = 2 -- Openingstijden: gebruik ruimte/gebouwopeningstijden
THEN
v_actual_accepttijd :=
FAC.datumtijdnaaruitvoertijd (startdate,
enddate,
v_uitvoertijdtype,
v_beginuur,
v_einduur,
v_werkdagen); -- Mode=0/1 resp. alle dagen/alleen werkdagen!
ELSIF v_mld_stdmelding_regime = 3 -- 24/7: negeert weekenden of vrije dagen
THEN
v_actual_accepttijd :=
FAC.datumtijdnaaruitvoertijd (startdate,
enddate,
v_uitvoertijdtype,
NULL, -- Don't care
NULL, -- Don't care
2); -- Mode=2 => 24/7
END IF;
-- Een negatieve actuele uitvoertijd niet toestaan. Minimale waarde is 0.
IF v_actual_accepttijd.tijdsduur < 0
THEN
v_actual_accepttijd.tijdsduur := 0;
END IF;
RETURN v_actual_accepttijd;
END;
FUNCTION uitvoertijd_to_char (uitvoertijd IN MLD_T_UITVOERTIJD)
RETURN VARCHAR
AS BEGIN
@@ -3419,13 +3513,14 @@ CREATE OR REPLACE PACKAGE BODY mld AS
v_einddatum DATE;
v_mld_stdmelding_regime mld_stdmelding.mld_stdmelding_regime%TYPE;
v_uitvoertijd_object mld_stdmelding.mld_stdmelding_t_uitvoertijd%TYPE := MLD_T_UITVOERTIJD(NULL, NULL); -- contructor initialisatie;
v_accepttijd mld_stdmelding.mld_stdmelding_t_accepttijd%TYPE := MLD_T_UITVOERTIJD(NULL, NULL); -- contructor initialisatie;
v_uitvoertijdtype VARCHAR2(5);
v_beginuur alg_gebouw.alg_gebouw_beginuur%TYPE;
v_einduur alg_gebouw.alg_gebouw_einduur%TYPE;
v_werkdagen NUMBER;
BEGIN
getSLAparams(stdm_key, prio, alg_key, ins_key,
v_mld_stdmelding_regime, v_uitvoertijd_object, v_beginuur, v_einduur, v_werkdagen);
v_mld_stdmelding_regime, v_uitvoertijd_object, v_accepttijd, v_beginuur, v_einduur, v_werkdagen);
IF uitvoertijd_object.eenheid IS NOT NULL
THEN
@@ -3505,13 +3600,14 @@ CREATE OR REPLACE PACKAGE BODY mld AS
RETURN MLD_T_UITVOERTIJD
AS
v_uitvoertijd_object mld_stdmelding.mld_stdmelding_t_uitvoertijd%TYPE := MLD_T_UITVOERTIJD(NULL, NULL); -- contructor initialisatie
v_accepttijd mld_stdmelding.mld_stdmelding_t_accepttijd%TYPE := MLD_T_UITVOERTIJD(NULL, NULL); -- contructor initialisatie
v_mld_stdmelding_regime mld_stdmelding.mld_stdmelding_regime%TYPE;
v_beginuur alg_gebouw.alg_gebouw_beginuur%TYPE;
v_einduur alg_gebouw.alg_gebouw_einduur%TYPE;
v_werkdagen NUMBER;
BEGIN
getSLAparams(stdm_key, prio, alg_key, ins_key,
v_mld_stdmelding_regime, v_uitvoertijd_object, v_beginuur, v_einduur, v_werkdagen);
v_mld_stdmelding_regime, v_uitvoertijd_object, v_accepttijd, v_beginuur, v_einduur, v_werkdagen);
RETURN v_uitvoertijd_object;
END;
@@ -3543,12 +3639,14 @@ CREATE OR REPLACE PACKAGE BODY mld AS
ins_key IN NUMBER, -- Object met de laagste uitvoertijd
v_mld_stdmelding_regime OUT NUMBER,
v_uitvoertijd_object OUT MLD_T_UITVOERTIJD,
v_accepttijd OUT MLD_T_UITVOERTIJD,
v_beginuur OUT NUMBER,
v_einduur OUT NUMBER,
v_werkdagen OUT NUMBER
)
AS
v_uitvoertijd_object_s mld_stdmelding.mld_stdmelding_t_uitvoertijd%TYPE := MLD_T_UITVOERTIJD(NULL, NULL); -- contructor initialisatie
v_accepttijd_s mld_stdmelding.mld_stdmelding_t_accepttijd%TYPE := MLD_T_UITVOERTIJD(NULL, NULL); -- contructor initialisatie
v_mld_stdmelding_afhankelijk mld_stdmelding.mld_stdmelding_afhankelijk%TYPE;
l_alg_type VARCHAR2(1);
l_terreinsector_key alg_terreinsector.alg_terreinsector_key%TYPE;
@@ -3561,6 +3659,9 @@ CREATE OR REPLACE PACKAGE BODY mld AS
l_mldsrtruimte_uitvtijd_object mld_stdmsrtruimte.mld_stdmsrtruimte_t_uitvtijd%TYPE := MLD_T_UITVOERTIJD(NULL, NULL); -- contructor initialisatie
l_mldsrtgebouw_uitvtijd_object mld_stdmsrtgebouw.mld_stdmsrtgebouw_t_uitvtijd%TYPE := MLD_T_UITVOERTIJD(NULL, NULL); -- contructor initialisatie
l_mldsrtterrein_uitvtijd_object mld_stdmsrtterrein.mld_stdmsrtterrein_t_uitvtijd%TYPE := MLD_T_UITVOERTIJD(NULL, NULL); -- contructor initialisatie
l_mldsrtterrein_acctijd mld_stdmsrtterrein.mld_stdmsrtterrein_t_acctijd%TYPE := MLD_T_UITVOERTIJD(NULL, NULL); -- contructor initialisatie
l_mldsrtgebouw_accepttijd mld_stdmsrtgebouw.mld_stdmsrtgebouw_t_accepttijd%TYPE := MLD_T_UITVOERTIJD(NULL, NULL); -- contructor initialisatie
l_mldsrtruimte_accepttijd mld_stdmsrtruimte.mld_stdmsrtruimte_t_accepttijd%TYPE := MLD_T_UITVOERTIJD(NULL, NULL); -- contructor initialisatie
BEGIN
SELECT mld_stdmelding_regime,
CASE prio
@@ -3570,10 +3671,19 @@ CREATE OR REPLACE PACKAGE BODY mld AS
ELSE mld_stdmelding_t_uitvoertijd
END, -- gegarandeerd gevuld
mld_stdmelding_t_uitvoertijd, -- standaard uitvoertijd
CASE prio
WHEN 1 THEN mld_stdmelding_t_accept_pr1
WHEN 2 THEN mld_stdmelding_t_accept_pr2
WHEN 4 THEN mld_stdmelding_t_accept_pr4
ELSE mld_stdmelding_t_accepttijd
END, -- gegarandeerd gevuld
mld_stdmelding_t_accepttijd, -- standaard acceptatietijd
mld_stdmelding_afhankelijk
INTO v_mld_stdmelding_regime,
v_uitvoertijd_object,
v_uitvoertijd_object_s,
v_accepttijd,
v_accepttijd_s,
v_mld_stdmelding_afhankelijk
FROM mld_stdmelding msm
WHERE msm.mld_stdmelding_key = stdm_key;
@@ -3585,6 +3695,14 @@ CREATE OR REPLACE PACKAGE BODY mld AS
v_uitvoertijd_object := v_uitvoertijd_object_s;
END IF;
-- Als je geen afwijkende acceptatietijd voor de prio hebt, dan is het die van Normaal
-- Dit is een vangnet, die prio had eigenlijk niet voor kunnen komen.
IF prio <> 3 AND v_accepttijd.tijdsduur IS NULL
THEN
v_accepttijd := v_accepttijd_s;
END IF;
-- Acceptatietijd kent itt uitvoertijd geen objectafhankelijkheid.
IF v_mld_stdmelding_afhankelijk = 1 AND ins_key IS NOT NULL
THEN
-- is er een objectafhankelijke SLA? Dan geldt die ongeacht de prio
@@ -3634,10 +3752,16 @@ CREATE OR REPLACE PACKAGE BODY mld AS
2, sst.mld_stdmsrtterrein_t_uitv_pr2,
3, sst.mld_stdmsrtterrein_t_uitvtijd,
4, sst.mld_stdmsrtterrein_t_uitv_pr4),
COALESCE(sst.mld_stdmsrtterrein_regime, v_mld_stdmelding_regime) regime -- geen srtterreinsector-afhankelijk afwijkend regime.
COALESCE(sst.mld_stdmsrtterrein_regime, v_mld_stdmelding_regime) regime, -- geen srtterreinsector-afhankelijk afwijkend regime.
DECODE (prio,
1, sst.mld_stdmsrtterrein_t_acc_pr1,
2, sst.mld_stdmsrtterrein_t_acc_pr2,
3, sst.mld_stdmsrtterrein_t_acctijd,
4, sst.mld_stdmsrtterrein_t_acc_pr4)
INTO l_srtterrein_uitvoertijd_object,
l_mldsrtterrein_uitvtijd_object,
v_mld_stdmelding_regime
v_mld_stdmelding_regime,
l_mldsrtterrein_acctijd
FROM alg_terreinsector t,
alg_srtterreinsector st,
mld_stdmsrtterrein sst
@@ -3661,10 +3785,16 @@ CREATE OR REPLACE PACKAGE BODY mld AS
2, ssg.mld_stdmsrtgebouw_t_uitv_pr2,
3, ssg.mld_stdmsrtgebouw_t_uitvtijd,
4, ssg.mld_stdmsrtgebouw_t_uitv_pr4),
COALESCE(ssg.mld_stdmsrtgebouw_regime, v_mld_stdmelding_regime) regime -- geen srtgebouw-afhankelijk afwijkend regime.
COALESCE(ssg.mld_stdmsrtgebouw_regime, v_mld_stdmelding_regime) regime, -- geen srtgebouw-afhankelijk afwijkend regime.
DECODE (prio,
1, ssg.mld_stdmsrtgebouw_t_accept_pr1,
2, ssg.mld_stdmsrtgebouw_t_accept_pr2,
3, ssg.mld_stdmsrtgebouw_t_accepttijd,
4, ssg.mld_stdmsrtgebouw_t_accept_pr4)
INTO l_srtgebouw_uitvoertijd_object,
l_mldsrtgebouw_uitvtijd_object,
v_mld_stdmelding_regime
v_mld_stdmelding_regime,
l_mldsrtgebouw_accepttijd
FROM alg_gebouw g,
alg_srtgebouw sg,
mld_stdmsrtgebouw ssg
@@ -3690,10 +3820,16 @@ CREATE OR REPLACE PACKAGE BODY mld AS
2, ssr.mld_stdmsrtruimte_t_uitv_pr2,
3, ssr.mld_stdmsrtruimte_t_uitvtijd,
4, ssr.mld_stdmsrtruimte_t_uitv_pr4),
COALESCE(ssr.mld_stdmsrtruimte_regime, v_mld_stdmelding_regime) -- geen srtruimte-afhankelijk afwijkend regime.
COALESCE(ssr.mld_stdmsrtruimte_regime, v_mld_stdmelding_regime), -- geen srtruimte-afhankelijk afwijkend regime.
DECODE (prio,
1, ssr.mld_stdmsrtruimte_t_accept_pr1,
2, ssr.mld_stdmsrtruimte_t_accept_pr2,
3, ssr.mld_stdmsrtruimte_t_accepttijd,
4, ssr.mld_stdmsrtruimte_t_accept_pr4)
INTO l_srtruimte_uitvoertijd_object,
l_mldsrtruimte_uitvtijd_object,
v_mld_stdmelding_regime
v_mld_stdmelding_regime,
l_mldsrtruimte_accepttijd
FROM alg_ruimte r,
alg_srtruimte sr,
mld_stdmsrtruimte ssr
@@ -3733,6 +3869,26 @@ CREATE OR REPLACE PACKAGE BODY mld AS
ELSE
v_uitvoertijd_object.eenheid := v_uitvoertijd_object.eenheid;
END IF;
-- Acceptatietijd van de mld_stdmsrtruimte, mld_stdmsrtgebouw of mld_stdmsrtterrein nemen.
-- Als mld_stdmsrtruimte_t_accepttijd, mld_stdmsrtgebouw_t_accepttijd en mld_stdmsrtterrein_t_acctijd geen waarden hebben, dan terugvallen op standaard uitvoertijd die altijd een waarde heeft.
IF l_alg_type = 'T'
THEN
v_accepttijd.tijdsduur := COALESCE(l_mldsrtterrein_acctijd.tijdsduur, v_accepttijd.tijdsduur);
ELSE
v_accepttijd.tijdsduur := COALESCE(l_mldsrtruimte_accepttijd.tijdsduur, -- eerst ruimte
l_mldsrtgebouw_accepttijd.tijdsduur, -- dan gebouw
v_accepttijd.tijdsduur); -- dan standaard.
END IF;
IF l_mldsrtruimte_accepttijd.tijdsduur IS NOT NULL
THEN
v_accepttijd.eenheid := l_mldsrtruimte_accepttijd.eenheid;
ELSIF l_mldsrtgebouw_accepttijd.tijdsduur IS NOT NULL
THEN
v_accepttijd.eenheid := l_mldsrtgebouw_accepttijd.eenheid;
ELSE
v_accepttijd.eenheid := v_accepttijd.eenheid;
END IF;
END IF;
IF alg_key IS NULL AND v_mld_stdmelding_regime = 2

View File

@@ -850,6 +850,8 @@ CREATE_VIEW(mld_v_udr_melding, 1)
accept_sla_optijd,
uitvoering_sla_optijd,
afspraak_sla_optijd,
doorlooptijd,
acceptatietijd,
selfservice,
melding_tag,
melding_tag_datum
@@ -1010,6 +1012,8 @@ AS
lcl.l ('lcl_no')
END
afspraak_sla_optijd,
t_doorlooptijd,
t_acceptatietijd,
DECODE(invoerder, melder, lcl.l ('lcl_yes'), lcl.l ('lcl_no')) selfservice,
mld_melding_tag_naam,
mld_melding_tag_datum_tot
@@ -1162,6 +1166,7 @@ AS
mld.getmeldingstatusdate (m.mld_melding_key, 1))
accepted,
mld.getactualuitvoer (m.mld_melding_key) t_doorlooptijd,
mld.getactualaccept(m.mld_melding_key) t_acceptatietijd,
m.mld_melding_onderwerp onderwerp,
m.mld_melding_omschrijving omschrijving,
m.mld_melding_opmerking opmerking,