2499 lines
112 KiB
MySQL
2499 lines
112 KiB
MySQL
--
|
||
-- $Id$
|
||
--
|
||
-- Script containing customer specific sql statements for the FACILITOR database
|
||
|
||
DEFINE thisfile = 'HCAS.SQL'
|
||
DEFINE dbuser = '^HCAS'
|
||
|
||
SET ECHO ON
|
||
SET DEFINE ON
|
||
COLUMN fcltlogfile NEW_VALUE fcltlogfile NOPRINT;
|
||
WHENEVER SQLERROR EXIT;
|
||
|
||
SELECT adm.scriptspoolfile ('&dbuser', '&thisfile') AS fcltlogfile FROM DUAL;
|
||
|
||
WHENEVER SQLERROR CONTINUE;
|
||
SPOOL &fcltlogfile
|
||
SET DEFINE OFF
|
||
|
||
------ payload begin ------
|
||
|
||
----- Personenimport -------------------------------------------------------------------------------
|
||
|
||
CREATE OR REPLACE PROCEDURE hcas_import_perslid (p_import_key IN NUMBER)
|
||
AS
|
||
oracle_err_num NUMBER;
|
||
oracle_err_mes VARCHAR2 (200);
|
||
v_errormsg VARCHAR2 (400);
|
||
v_errorhint VARCHAR2 (400);
|
||
BEGIN
|
||
v_errorhint := 'Generieke update';
|
||
-- de sequence array staat beschreven in PRS_PAC.SRC bij de prs.import_perslid proc
|
||
prs.import_perslid (
|
||
p_import_key,
|
||
'0;0;0;0;0;8;1;2;0;3;'
|
||
|| '0;0;0;0;0;0;0;6;0;0;'
|
||
|| '5;1;0;0;0;0;4;0;0;0;'
|
||
|| '0;0;0;0;0;0;0;0;0;0;'
|
||
|| '0;0;0;0;0;0',
|
||
'"SamAccountName";"sn";"GivenName";"Department";"Function";"Mail";"TelephoneNumber";"Location"%');
|
||
|
||
COMMIT;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
oracle_err_num := SQLCODE;
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
|
||
v_errormsg := 'Error ' || oracle_err_num || '/' || oracle_err_mes;
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
v_errormsg,
|
||
v_errorhint);
|
||
END hcas_import_perslid;
|
||
/
|
||
|
||
|
||
CREATE OR REPLACE PROCEDURE hcas_update_perslid (p_import_key IN NUMBER)
|
||
IS
|
||
-- Alle personen verwijderen die niet meer in import bestand voorkomen.
|
||
-- Key bij HCAS is SAMAccountName, hieronder de query om alle personen te verwijderen die:
|
||
-- a) niet meer in het importbestand staan, wel in Facilitor, en
|
||
-- b) waarvan de persoon in Facilitor geen alternatieve login heeft (gevuld alt. login van af blijven, dit zijn persleden die handmatig zijn toegevoegd)
|
||
-- c) waarvan de persoon in Facilitor niet begint met een _ in de loginnaam (ook van af blijven)
|
||
CURSOR c_del
|
||
IS
|
||
SELECT p.prs_perslid_key,
|
||
p.prs_perslid_oslogin,
|
||
p.prs_perslid_oslogin2,
|
||
pf.prs_perslid_naam_full
|
||
FROM fac_imp_perslid i, prs_perslid p, prs_v_perslid_fullnames_all pf
|
||
WHERE UPPER (p.prs_perslid_oslogin) = UPPER (i.prs_perslid_oslogin(+))
|
||
AND SUBSTR (p.prs_perslid_oslogin, 1, 1) <> '_'
|
||
AND i.prs_perslid_oslogin IS NULL
|
||
AND p.prs_perslid_verwijder IS NULL
|
||
AND p.prs_perslid_oslogin2 IS NULL
|
||
AND pf.prs_perslid_key = p.prs_perslid_key
|
||
ORDER BY 2;
|
||
|
||
oracle_err_num NUMBER;
|
||
oracle_err_mes VARCHAR2 (200);
|
||
v_errormsg VARCHAR2 (400);
|
||
v_count NUMBER;
|
||
BEGIN
|
||
-- generic update
|
||
|
||
SELECT COUNT ( * ) INTO v_count FROM fac_imp_perslid;
|
||
|
||
UPDATE fac_imp_perslid i
|
||
SET i.prs_perslid_telefoonnr =
|
||
(SELECT p.prs_perslid_telefoonnr
|
||
FROM prs_perslid p
|
||
WHERE p.prs_perslid_verwijder IS NULL
|
||
AND UPPER (P.PRS_PERSLID_OSLOGIN) =
|
||
UPPER (I.PRS_PERSLID_OSLOGIN))
|
||
WHERE i.fac_import_key = p_import_key;
|
||
|
||
UPDATE fac_imp_perslid i
|
||
SET i.prs_perslid_mobiel =
|
||
(SELECT p.prs_perslid_mobiel
|
||
FROM prs_perslid p
|
||
WHERE p.prs_perslid_verwijder IS NULL
|
||
AND UPPER (P.PRS_PERSLID_OSLOGIN) =
|
||
UPPER (I.PRS_PERSLID_OSLOGIN))
|
||
WHERE i.fac_import_key = p_import_key;
|
||
|
||
-- Afdelingsomschrijving ingelezen in kenmerk; op basis daarvan de afdelingscode
|
||
-- invullen (verplicht veld afdelingscode tijdelijk gevuld met oslogin).
|
||
UPDATE fac_imp_perslid i
|
||
SET prs_afdeling_naam =
|
||
(SELECT prs_afdeling_naam
|
||
FROM prs_afdeling a
|
||
WHERE prs_afdeling_verwijder IS NULL
|
||
AND UPPER (a.prs_afdeling_omschrijving) =
|
||
UPPER (i.prs_kenmerk1));
|
||
|
||
-- Onbekende afdelingen bewaren voor logging
|
||
UPDATE fac_imp_perslid
|
||
SET prs_afdeling_naam = SUBSTR (prs_kenmerk1, 1, 15)
|
||
WHERE prs_afdeling_naam IS NULL;
|
||
|
||
-- Locatieomschrijving ingelezen; op basis daarvan de juiste vastgoedgegevens
|
||
-- in de juiste kolommen zetten.
|
||
-- Omdat werkplekken alleen worden aangevuld, dit alleen doen voor personen die
|
||
-- nog geen werkplek hebben.
|
||
UPDATE fac_imp_perslid i
|
||
SET
|
||
(alg_locatie_code,
|
||
alg_gebouw_code,
|
||
alg_verdieping_volgnr,
|
||
alg_ruimte_nr
|
||
) =
|
||
( SELECT rg.alg_locatie_code,
|
||
MIN (rg.alg_gebouw_upper),
|
||
MIN (rg.alg_verdieping_volgnr),
|
||
rg.alg_ruimte_nr
|
||
FROM alg_v_ruimte_gegevens rg
|
||
WHERE i.prs_werkplek_omschrijving =
|
||
rg.alg_locatie_omschrijving
|
||
AND rg.alg_ruimte_nr = '_WP'
|
||
GROUP BY rg.alg_locatie_code, rg.alg_ruimte_nr)
|
||
WHERE NOT EXISTS
|
||
(SELECT DISTINCT prs_perslid_oslogin
|
||
FROM prs_perslidwerkplek pw, prs_v_aanwezigperslid ap
|
||
WHERE ap.prs_perslid_key = pw.prs_perslid_key
|
||
AND ap.prs_perslid_oslogin =
|
||
UPPER (i.prs_perslid_oslogin));
|
||
|
||
-- Tijdelijke gegevens opruimen
|
||
UPDATE fac_imp_perslid i
|
||
SET prs_werkplek_omschrijving = NULL, prs_kenmerk1 = NULL;
|
||
|
||
COMMIT;
|
||
|
||
-- 'LOGIN' betekent dat op basis van Login wordt gematched.
|
||
-- 'NR' betekent dat op basis van Personeelsnummer wordt gematched.
|
||
-- 'A' betekent altijd alle (andere/overige) werkplekken verwijderen
|
||
prs.update_perslid (p_import_key, 'LOGIN', NULL);
|
||
|
||
-- Verwijder personen die niet meer in de import voorkomen.
|
||
FOR rec IN c_del
|
||
LOOP
|
||
BEGIN
|
||
prs.delete_perslid (p_import_key, rec.prs_perslid_key);
|
||
END;
|
||
END LOOP;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
oracle_err_num := SQLCODE;
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
|
||
v_errormsg := 'Error ' || oracle_err_num || '/' || oracle_err_mes;
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
v_errormsg,
|
||
'Importproces personen afgebroken!');
|
||
END hcas_update_perslid;
|
||
/
|
||
|
||
----- Rapportage-views -----------------------------------------------------------------------------
|
||
|
||
CREATE OR REPLACE VIEW hcas_v_rap_qrc_ins_mld
|
||
AS
|
||
SELECT i.ins_deel_omschrijving hide_f_sort,
|
||
l.alg_locatie_code || ' ' || l.alg_locatie_omschrijving
|
||
fclt_f_locatie,
|
||
o.alg_gebouw_omschrijving fclt_f_gebouw,
|
||
o.alg_plaatsaanduiding fclt_f_plaats,
|
||
d.ins_discipline_omschrijving fclt_f_discipline,
|
||
g.ins_srtgroep_omschrijving fclt_f_objectgroep,
|
||
s.ins_srtdeel_omschrijving fclt_f_objectsoort,
|
||
i.ins_deel_omschrijving fclt_f_identificatie,
|
||
b.fac_bookmark_naam fclt_f_bookmark,
|
||
i.ins_deel_key,
|
||
s.ins_srtdeel_key,
|
||
i.ins_discipline_key fclt_3d_discipline_key,
|
||
l.alg_locatie_key fclt_3d_locatie_key,
|
||
i.ins_alg_ruimte_type,
|
||
i.ins_alg_ruimte_key,
|
||
b.fac_bookmark_id hide_f_bookmark_id
|
||
FROM ins_deel i,
|
||
ins_v_alg_overzicht o,
|
||
ins_srtdeel s,
|
||
ins_srtgroep g,
|
||
ins_discipline d,
|
||
alg_locatie l,
|
||
fac_bookmark b,
|
||
mld_stdmelding sm,
|
||
mld_stdmelding_srtinst si
|
||
WHERE b.fac_bookmark_path = 'appl/pda/melding.asp'
|
||
AND b.fac_bookmark_query LIKE
|
||
'%stdm_key=' || sm.mld_stdmelding_key || '%'
|
||
AND (b.fac_bookmark_expire IS NULL
|
||
OR b.fac_bookmark_expire > SYSDATE)
|
||
AND ins_deel_verwijder IS NULL
|
||
AND i.ins_deel_module = 'INS'
|
||
AND i.ins_deel_parent_key IS NULL
|
||
AND s.ins_srtdeel_key = i.ins_srtdeel_key
|
||
AND g.ins_srtgroep_key = s.ins_srtgroep_key
|
||
AND d.ins_discipline_key = g.ins_discipline_key
|
||
AND o.alg_onroerendgoed_keys = i.ins_alg_ruimte_key
|
||
AND o.alg_onroerendgoed_type = i.ins_alg_ruimte_type
|
||
AND i.ins_alg_ruimte_type IN ('T', 'R', 'W')
|
||
AND o.alg_locatie_key = i.ins_alg_locatie_key
|
||
AND i.ins_alg_locatie_key = l.alg_locatie_key
|
||
AND sm.mld_stdmelding_key = si.mld_stdmelding_key
|
||
AND si.ins_srtinstallatie_key =
|
||
DECODE (si.ins_srtinstallatie_niveau,
|
||
'S', i.ins_srtdeel_key,
|
||
'G', s.ins_srtgroep_key,
|
||
'D', g.ins_discipline_key);
|
||
|
||
CREATE OR REPLACE VIEW hcas_v_rap_qrc_ins
|
||
AS
|
||
SELECT i.ins_deel_omschrijving hide_f_sort,
|
||
l.alg_locatie_code || ' ' || l.alg_locatie_omschrijving
|
||
fclt_f_locatie,
|
||
o.alg_gebouw_omschrijving fclt_f_gebouw,
|
||
o.alg_plaatsaanduiding fclt_f_plaats,
|
||
d.ins_discipline_omschrijving fclt_f_discipline,
|
||
g.ins_srtgroep_omschrijving fclt_f_objectgroep,
|
||
s.ins_srtdeel_omschrijving fclt_f_objectsoort,
|
||
i.ins_deel_omschrijving fclt_f_identificatie,
|
||
b.fac_bookmark_naam fclt_f_bookmark,
|
||
i.ins_deel_key,
|
||
s.ins_srtdeel_key,
|
||
i.ins_discipline_key fclt_3d_discipline_key,
|
||
l.alg_locatie_key fclt_3d_locatie_key,
|
||
i.ins_alg_ruimte_type,
|
||
i.ins_alg_ruimte_key,
|
||
b.fac_bookmark_id hide_f_bookmark_id
|
||
FROM ins_deel i,
|
||
ins_v_alg_overzicht o,
|
||
ins_srtdeel s,
|
||
ins_srtgroep g,
|
||
ins_discipline d,
|
||
alg_locatie l,
|
||
fac_bookmark b
|
||
WHERE b.fac_bookmark_path = 'appl/pda/ins_deel.asp'
|
||
AND COALESCE (b.fac_bookmark_expire, SYSDATE + 1) > SYSDATE
|
||
AND ins_deel_verwijder IS NULL
|
||
AND COALESCE (i.ins_deel_vervaldatum, SYSDATE + 1) > SYSDATE
|
||
AND i.ins_deel_module = 'INS'
|
||
AND i.ins_deel_parent_key IS NULL
|
||
AND s.ins_srtdeel_key = i.ins_srtdeel_key
|
||
AND g.ins_srtgroep_key = s.ins_srtgroep_key
|
||
AND d.ins_discipline_key = g.ins_discipline_key
|
||
AND o.alg_onroerendgoed_keys = i.ins_alg_ruimte_key
|
||
AND o.alg_onroerendgoed_type = i.ins_alg_ruimte_type
|
||
AND i.ins_alg_ruimte_type IN ('T', 'R', 'W')
|
||
AND o.alg_locatie_key = i.ins_alg_locatie_key
|
||
AND l.alg_locatie_key = i.ins_alg_locatie_key;
|
||
|
||
--- HCAS#37147 rapportage met aantallen nog actieve medewerkers per afdeling
|
||
|
||
CREATE OR REPLACE VIEW HCAS_V_RAP_MDW_AFDELING
|
||
(
|
||
AANTAL,
|
||
AFDELING,
|
||
AFDELINGOMSCHRIJVING,
|
||
KOSTENPLAATS
|
||
)
|
||
AS
|
||
SELECT COUNT (prs_perslid_key),
|
||
a.prs_afdeling_upper,
|
||
PRS_AFDELING_OMSCHRIJVING,
|
||
PRS_KOSTENPLAATS_KEY
|
||
FROM prs_v_aanwezigperslid p, prs_afdeling a
|
||
WHERE P.PRS_AFDELING_KEY(+) = A.PRS_AFDELING_KEY
|
||
AND prs_afdeling_verwijder IS NULL
|
||
GROUP BY a.prs_afdeling_upper,
|
||
PRS_AFDELING_OMSCHRIJVING,
|
||
PRS_KOSTENPLAATS_KEY;
|
||
|
||
|
||
CREATE OR REPLACE PROCEDURE hcas_export_kpi (p_applname IN VARCHAR2,
|
||
p_applrun IN VARCHAR2,
|
||
p_filedir IN VARCHAR2,
|
||
p_filename IN VARCHAR2)
|
||
AS
|
||
v_aanduiding VARCHAR2 (200);
|
||
v_errorhint VARCHAR2 (1000);
|
||
v_errormsg VARCHAR2 (1000);
|
||
oracle_err_num NUMBER;
|
||
oracle_err_mes VARCHAR2 (200);
|
||
v_count NUMBER;
|
||
|
||
--- variabelen die gebruikt worden in bepalen functie herstel
|
||
v_uitvoertijd_fh_uren mld_stdmelding.mld_stdmelding_t_uitvoertijd%TYPE
|
||
:= MLD_T_UITVOERTIJD (NULL, NULL); -- constructor initialisatie
|
||
v_uitvoertijd_fh_dagen mld_stdmelding.mld_stdmelding_t_uitvoertijd%TYPE
|
||
:= MLD_T_UITVOERTIJD (NULL, NULL);
|
||
v_uitvoertijd_rep_uren mld_stdmelding.mld_stdmelding_t_uitvoertijd%TYPE
|
||
:= MLD_T_UITVOERTIJD (NULL, NULL);
|
||
v_uitvoertijd_rep_dagen mld_stdmelding.mld_stdmelding_t_uitvoertijd%TYPE
|
||
:= MLD_T_UITVOERTIJD (NULL, NULL);
|
||
v_urenperdag NUMBER (10, 3);
|
||
v_eerstedag NUMBER (10, 3);
|
||
v_laatstedag NUMBER (10, 3);
|
||
v_heledagen NUMBER (10);
|
||
v_vrijedagen NUMBER;
|
||
v_begindatum DATE; -- = datum_uitgifte (is datum / tijd veld)
|
||
v_functiehersteldatum DATE; -- = datum functieherstel (is datum/ tijd veld)
|
||
v_einddatum DATE; -- = datum reparatie (is datum / tijd veld)
|
||
v_pBeginWerkUur NUMBER (10, 3); -- = tijd waarop klok tikt, dus service window (let op notatie in kenmerk: half 8 is 7,5 en niet 7:30!!!)
|
||
v_pEindWerkUur NUMBER (10, 3); --- = tijd wanneer klok stopt, dus service window
|
||
v_pmode NUMBER (10); -- = staat in tabel
|
||
v_uitvoertijdtype VARCHAR2 (50); --- uren en dagen
|
||
|
||
|
||
-- alle opdrachtgegevens die nog niet in cust tabel zitten
|
||
-- want die moeten dan nog toegevoegd worden
|
||
CURSOR KPI
|
||
IS
|
||
SELECT b.prs_bedrijf_key,
|
||
b.prs_bedrijf_naam,
|
||
uk1_van.prs_kenmerklink_waarde AS uk1_van,
|
||
uk1_tot.prs_kenmerklink_waarde AS uk1_tot,
|
||
uk2_van.prs_kenmerklink_waarde AS uk2_van,
|
||
uk2_tot.prs_kenmerklink_waarde AS uk2_tot,
|
||
DECODE (onderhoud_obj.urgentieklasse,
|
||
'Klasse 2', 1,
|
||
'Klasse 1', 0) ---- conform FCLT standaard: 1 is alleen werdagen, 0 is alle dagen
|
||
pMode,
|
||
DECODE (onderhoud_obj.urgentieklasse,
|
||
'Klasse 2', uk2_van.prs_kenmerklink_waarde,
|
||
'Klasse 1', uk1_van.prs_kenmerklink_waarde)
|
||
GELDEND_FH_VAN,
|
||
DECODE (onderhoud_obj.urgentieklasse,
|
||
'Klasse 2', uk2_tot.prs_kenmerklink_waarde,
|
||
'Klasse 1', uk1_tot.prs_kenmerklink_waarde)
|
||
GELDEND_FH_TOT,
|
||
onderhoud_obj.ins_deel_omschrijving,
|
||
opdracht.ins_deel_key,
|
||
onderhoud_obj.conditieklasse,
|
||
onderhoud_obj.urgentieklasse,
|
||
onderhoud_obj.FH_tijd AS max_fh_tijd, --- de maximale functiehersteltijd wordt uit een eigen tabel urgentie klasse gehaald, dit is de tijd in uren
|
||
DECODE (onderhoud_obj.urgentieklasse, -----de maximale tijd voor reparatie is bepaald op 5 dagen voor objecten van klasse 2 en 3 dagen voor klasse 1
|
||
'Klasse 2', 5,
|
||
'Klasse 1', 3)
|
||
max_rep_tijd,
|
||
opdracht.mld_melding_key,
|
||
opdracht.mld_opdr_key,
|
||
opdracht.mld_typeopdr_key,
|
||
opdracht.mld_statusopdr_key,
|
||
opdracht.mld_statusopdr_omschrijving,
|
||
opdracht.datum_uitgifte,
|
||
opdracht.functieherstel,
|
||
opdracht.datum_functieherstel,
|
||
opdracht.gerepareerd,
|
||
opdracht.datum_reparatie,
|
||
opdracht.herhaalstoring
|
||
FROM prs_bedrijf b,
|
||
(SELECT *
|
||
FROM prs_kenmerklink
|
||
WHERE prs_kenmerk_key = 1140) uk1_van,
|
||
(SELECT *
|
||
FROM prs_kenmerklink
|
||
WHERE prs_kenmerk_key = 1143) uk1_tot,
|
||
(SELECT *
|
||
FROM prs_kenmerklink
|
||
WHERE prs_kenmerk_key = 1141) uk2_van,
|
||
(SELECT *
|
||
FROM prs_kenmerklink
|
||
WHERE prs_kenmerk_key = 1144) uk2_tot,
|
||
(SELECT o.ins_deel_key,
|
||
o.ins_deel_omschrijving,
|
||
fac.safe_to_number (
|
||
onderhoudsleverancier.ins_kenmerkdeel_waarde)
|
||
AS prs_bedrijf_key,
|
||
conditieklasse.ins_kenmerkdeel_waarde AS conditieklasse,
|
||
urgentieklasse.fac_usrdata_omschr AS urgentieklasse,
|
||
urgentieklasse.fac_usrdata_prijs AS fh_tijd
|
||
FROM ins_deel o,
|
||
(SELECT kd.*
|
||
FROM ins_kenmerkdeel kd, ins_kenmerk km
|
||
WHERE kd.ins_kenmerk_key = km.ins_kenmerk_key
|
||
AND km.ins_srtkenmerk_key = 62)
|
||
onderhoudsleverancier,
|
||
(SELECT kd.*, ud.fac_usrdata_omschr, fac_usrdata_prijs
|
||
FROM ins_kenmerkdeel kd,
|
||
ins_kenmerk km,
|
||
fac_usrdata ud
|
||
WHERE kd.ins_kenmerk_key = km.ins_kenmerk_key
|
||
AND kd.ins_kenmerkdeel_waarde =
|
||
ud.fac_usrdata_key
|
||
AND km.ins_srtkenmerk_key = 301) urgentieklasse,
|
||
(SELECT kd.*
|
||
FROM ins_kenmerkdeel kd, ins_kenmerk km
|
||
WHERE kd.ins_kenmerk_key = km.ins_kenmerk_key
|
||
AND km.ins_srtkenmerk_key = 321) conditieklasse
|
||
WHERE o.ins_deel_verwijder IS NULL
|
||
AND onderhoudsleverancier.ins_deel_key = o.ins_deel_key
|
||
AND conditieklasse.ins_deel_key(+) = o.ins_deel_key
|
||
AND urgentieklasse.ins_deel_key = o.ins_deel_key)
|
||
onderhoud_obj,
|
||
(SELECT mo.ins_deel_key,
|
||
m.mld_melding_key,
|
||
o.mld_opdr_key,
|
||
o.mld_typeopdr_key,
|
||
o.mld_statusopdr_key,
|
||
so.mld_statusopdr_omschrijving,
|
||
fac.safe_to_number (o.mld_uitvoerende_keys)
|
||
AS uitv_bedrijf,
|
||
fac.safe_to_date (
|
||
datum_uitg.mld_kenmerkopdr_waarde
|
||
|| ' '
|
||
|| tijd_uitg.mld_kenmerkopdr_waarde,
|
||
'dd-mm-yyyy hh24:mi')
|
||
AS datum_uitgifte,
|
||
functieherstel.fac_usrdata_omschr AS functieherstel,
|
||
fac.safe_to_date (
|
||
datum_functieherstel.mld_kenmerkopdr_waarde
|
||
|| ' '
|
||
|| tijd_functieherstel.mld_kenmerkopdr_waarde,
|
||
'dd-mm-yyyy hh24:mi')
|
||
AS datum_functieherstel,
|
||
reparatie.fac_usrdata_omschr AS gerepareerd,
|
||
fac.safe_to_date (
|
||
datum_reparatie.mld_kenmerkopdr_waarde
|
||
|| ' '
|
||
|| tijd_reparatie.mld_kenmerkopdr_waarde,
|
||
'dd-mm-yyyy hh24:mi')
|
||
AS datum_reparatie,
|
||
herhaalstoring.fac_usrdata_omschr AS herhaalstoring
|
||
FROM mld_melding_object mo,
|
||
mld_melding m,
|
||
mld_opdr o,
|
||
mld_statusopdr so,
|
||
(SELECT *
|
||
FROM mld_kenmerkopdr ko
|
||
WHERE mld_kenmerk_key = 402) datum_uitg,
|
||
(SELECT *
|
||
FROM mld_kenmerkopdr ko
|
||
WHERE mld_kenmerk_key = 403) tijd_uitg,
|
||
(SELECT *
|
||
FROM mld_kenmerkopdr ko, fac_usrdata ud
|
||
WHERE ko.mld_kenmerkopdr_waarde = ud.fac_usrdata_key
|
||
AND ud.fac_usrtab_key = 241
|
||
AND mld_kenmerk_key = 423) functieherstel,
|
||
(SELECT *
|
||
FROM mld_kenmerkopdr ko
|
||
WHERE mld_kenmerk_key = 422) datum_functieherstel,
|
||
(SELECT *
|
||
FROM mld_kenmerkopdr ko
|
||
WHERE mld_kenmerk_key = 425) tijd_functieherstel,
|
||
(SELECT *
|
||
FROM mld_kenmerkopdr ko, fac_usrdata ud
|
||
WHERE ko.mld_kenmerkopdr_waarde = ud.fac_usrdata_key
|
||
AND ud.fac_usrtab_key = 241
|
||
AND mld_kenmerk_key = 441) reparatie,
|
||
(SELECT *
|
||
FROM mld_kenmerkopdr ko
|
||
WHERE mld_kenmerk_key = 427) datum_reparatie,
|
||
(SELECT *
|
||
FROM mld_kenmerkopdr ko
|
||
WHERE mld_kenmerk_key = 428) tijd_reparatie,
|
||
(SELECT *
|
||
FROM mld_kenmerkopdr ko, fac_usrdata ud
|
||
WHERE ko.mld_kenmerkopdr_waarde = ud.fac_usrdata_key
|
||
AND ud.fac_usrtab_key = 261
|
||
AND mld_kenmerk_key = 461) herhaalstoring
|
||
WHERE mo.mld_melding_key = m.mld_melding_key
|
||
AND o.mld_melding_key = m.mld_melding_key
|
||
AND o.mld_statusopdr_key = so.mld_statusopdr_key
|
||
AND datum_uitg.mld_opdr_key = o.mld_opdr_key
|
||
AND tijd_uitg.mld_opdr_key = o.mld_opdr_key
|
||
AND functieherstel.mld_opdr_key(+) = o.mld_opdr_key
|
||
AND datum_functieherstel.mld_opdr_key(+) =
|
||
o.mld_opdr_key
|
||
AND tijd_functieherstel.mld_opdr_key(+) = o.mld_opdr_key
|
||
AND reparatie.mld_opdr_key(+) = o.mld_opdr_key
|
||
AND datum_reparatie.mld_opdr_key(+) = o.mld_opdr_key
|
||
AND herhaalstoring.mld_opdr_key(+) = o.mld_opdr_key
|
||
AND tijd_reparatie.mld_opdr_key(+) = o.mld_opdr_key)
|
||
opdracht
|
||
WHERE prs_bedrijf_verwijder IS NULL
|
||
AND prs_bedrijf_leverancier = 1
|
||
AND uk1_van.prs_link_key = b.prs_bedrijf_key
|
||
AND uk1_tot.prs_link_key = b.prs_bedrijf_key
|
||
AND uk2_van.prs_link_key = b.prs_bedrijf_key
|
||
AND uk2_tot.prs_link_key = b.prs_bedrijf_key
|
||
AND onderhoud_obj.prs_bedrijf_key = b.prs_bedrijf_key
|
||
AND opdracht.uitv_bedrijf = b.prs_bedrijf_key
|
||
AND opdracht.ins_deel_key = onderhoud_obj.ins_deel_key
|
||
AND opdracht.mld_statusopdr_key = 6 --- status van de opdracht is afgemeld
|
||
AND opdracht.mld_opdr_key NOT IN --- opdracht is nog niet ge<67>xporteerd
|
||
(SELECT mld_opdr_key FROM hcas_kpi_leveranciers);
|
||
BEGIN
|
||
FOR rec IN KPI
|
||
LOOP
|
||
INSERT INTO hcas_kpi_leveranciers (uitv_bedrijf,
|
||
prs_bedrijf_naam,
|
||
UK1_van,
|
||
UK1_tot,
|
||
UK2_van,
|
||
UK2_tot,
|
||
pmode,
|
||
geldend_FH_van,
|
||
geldend_FH_tot,
|
||
ins_deel_omschrijving,
|
||
ins_deel_key,
|
||
conditieklasse,
|
||
urgentieklasse,
|
||
max_fh_tijd,
|
||
max_rep_tijd,
|
||
mld_melding_key,
|
||
mld_opdr_key,
|
||
mld_typeopdr_key,
|
||
mld_statusopdr_key,
|
||
mld_statusopdr_omschrijving,
|
||
datum_uitgifte,
|
||
functieherstel,
|
||
datum_functieherstel,
|
||
gerepareerd,
|
||
datum_reparatie,
|
||
herhaalstoring)
|
||
VALUES (rec.prs_bedrijf_key,
|
||
rec.prs_bedrijf_naam,
|
||
rec.uk1_van,
|
||
rec.uk1_tot,
|
||
rec.uk2_van,
|
||
rec.uk2_tot,
|
||
rec.pmode,
|
||
rec.geldend_fh_van,
|
||
rec.geldend_fh_tot,
|
||
rec.ins_deel_omschrijving,
|
||
rec.ins_deel_key,
|
||
rec.conditieklasse,
|
||
rec.urgentieklasse,
|
||
rec.max_fh_tijd,
|
||
rec.max_rep_tijd,
|
||
rec.mld_melding_key,
|
||
rec.mld_opdr_key,
|
||
rec.mld_typeopdr_key,
|
||
rec.mld_statusopdr_key,
|
||
rec.mld_statusopdr_omschrijving,
|
||
rec.datum_uitgifte,
|
||
rec.functieherstel,
|
||
rec.datum_functieherstel,
|
||
rec.gerepareerd,
|
||
rec.datum_reparatie,
|
||
rec.herhaalstoring);
|
||
|
||
COMMIT;
|
||
|
||
--- tabel is nu bijgewerkt, nu de hersteltijd berekenen
|
||
--- variabelen die gebruikt worden in bepalen functie herstel
|
||
v_begindatum := rec.datum_uitgifte;
|
||
v_functiehersteldatum := rec.datum_functieherstel;
|
||
v_einddatum := rec.datum_reparatie;
|
||
v_pBeginWerkUur := rec.geldend_fh_van;
|
||
v_pEindWerkUur := rec.geldend_fh_tot;
|
||
v_pmode := rec.pmode;
|
||
v_uitvoertijdtype := 'UREN';
|
||
|
||
--- eerst FH hersteltijd berekenen in uren, later FH tijd in dagen
|
||
IF v_begindatum IS NOT NULL
|
||
AND v_functiehersteldatum IS NOT NULL
|
||
AND v_pMode BETWEEN 0 AND 2
|
||
THEN
|
||
IF v_begindatum > v_functiehersteldatum
|
||
THEN
|
||
v_uitvoertijd_fh_uren :=
|
||
fac.datumtijdnaaruitvoertijd (v_begindatum,
|
||
v_functiehersteldatum,
|
||
v_uitvoertijdtype,
|
||
v_pBeginWerkUur,
|
||
v_pEindWerkUur,
|
||
v_pMode);
|
||
|
||
v_uitvoertijd_fh_uren.tijdsduur :=
|
||
-v_uitvoertijd_fh_uren.tijdsduur;
|
||
ELSIF v_pMode = 2
|
||
THEN
|
||
--uitvoertijd := (v_functiehersteldatum - v_begindatum) * 24;
|
||
-- Zo simpel kan het zijn igv. 24/7!
|
||
-- default/uitvoertijdtype IN ('U', 'UREN')
|
||
v_uitvoertijd_fh_uren.tijdsduur :=
|
||
(v_functiehersteldatum - v_begindatum) * 24;
|
||
--v_uitvoertijd_fh.eenheid := 'U';
|
||
ELSIF v_pBeginWerkUur BETWEEN 0 AND 24
|
||
AND v_pEindWerkUur BETWEEN 0 AND 24
|
||
AND v_pEindWerkUur > v_pBeginWerkUur
|
||
THEN
|
||
v_urenperdag := v_pEindWerkUur - v_pBeginWerkUur;
|
||
v_eerstedag :=
|
||
v_pEindWerkUur
|
||
- (TRUNC (v_begindatum, 'MI') - TRUNC (v_begindatum)) * 24;
|
||
v_eerstedag := LEAST (GREATEST (0, v_eerstedag), v_urenperdag);
|
||
v_laatstedag :=
|
||
(TRUNC (v_functiehersteldatum, 'MI')
|
||
- TRUNC (v_functiehersteldatum))
|
||
* 24
|
||
- v_pBeginWerkUur;
|
||
v_laatstedag := LEAST (GREATEST (0, v_laatstedag), v_urenperdag);
|
||
|
||
IF v_pMode = 0
|
||
THEN
|
||
-- Oppassen als begin/eind op een vrije dag valt,
|
||
-- dan moeten eerste/laatste dag gewoon 0 uur zijn.
|
||
SELECT COUNT ( * )
|
||
INTO v_vrijedagen
|
||
FROM mld_vrije_dagen
|
||
WHERE mld_vrije_dagen_datum = TRUNC (v_begindatum);
|
||
|
||
IF v_vrijedagen = 1
|
||
THEN
|
||
v_eerstedag := 0;
|
||
END IF;
|
||
|
||
SELECT COUNT ( * )
|
||
INTO v_vrijedagen
|
||
FROM mld_vrije_dagen
|
||
WHERE mld_vrije_dagen_datum = TRUNC (v_functiehersteldatum);
|
||
|
||
IF v_vrijedagen = 1
|
||
THEN
|
||
v_laatstedag := 0;
|
||
END IF;
|
||
|
||
IF TRUNC (v_begindatum) = TRUNC (v_functiehersteldatum)
|
||
THEN
|
||
IF v_eerstedag + v_laatstedag > 0 -- geen vrije dag!
|
||
THEN
|
||
-- Als begindatum=einddatum <20>n werkdag, dan 1 dag corrigeren!
|
||
v_heledagen := -1;
|
||
ELSE
|
||
-- Als begindatum=einddatum <20>n vrije dag, dan geen correctie!
|
||
v_heledagen := 0;
|
||
END IF;
|
||
ELSE
|
||
-- Als begindatum<>einddatum, dan alleen nog vrije dagen tussen
|
||
-- begin+1 en eind-1 corrigeren (en altijd 0 als begin+1=eind)!
|
||
SELECT COUNT ( * )
|
||
INTO v_vrijedagen
|
||
FROM mld_vrije_dagen
|
||
WHERE mld_vrije_dagen_datum BETWEEN TRUNC (
|
||
v_begindatum + 1)
|
||
AND v_functiehersteldatum
|
||
- 1;
|
||
|
||
IF TRUNC (v_begindatum + 1) = TRUNC (v_functiehersteldatum)
|
||
THEN
|
||
v_heledagen := 0;
|
||
ELSE
|
||
v_heledagen :=
|
||
TRUNC (v_functiehersteldatum)
|
||
- TRUNC (v_begindatum + 1)
|
||
- v_vrijedagen;
|
||
END IF;
|
||
END IF;
|
||
ELSE -- pMode = 1
|
||
-- Oppassen als begin/eind in het weekend of zo valt,
|
||
-- dan moeten eerste/laatste dag gewoon 0 uur zijn.
|
||
IF fac.iswerkdag (v_begindatum) = 0
|
||
THEN
|
||
v_eerstedag := 0;
|
||
END IF;
|
||
|
||
IF fac.iswerkdag (v_functiehersteldatum) = 0
|
||
THEN
|
||
v_laatstedag := 0;
|
||
v_heledagen :=
|
||
fac.count_Work_Days (TRUNC (v_begindatum),
|
||
TRUNC (v_functiehersteldatum));
|
||
ELSE
|
||
v_heledagen :=
|
||
fac.count_Work_Days (TRUNC (v_begindatum),
|
||
TRUNC (v_functiehersteldatum))
|
||
- 1;
|
||
END IF;
|
||
END IF;
|
||
|
||
-- v_uitvoertijd_fh_uren := v_eerstedag + v_laatstedag + v_heledagen * v_urenperdag;
|
||
-- default/uitvoertijdtype IN ('U', 'UREN')
|
||
v_uitvoertijd_fh_uren.tijdsduur :=
|
||
v_eerstedag + v_laatstedag + v_heledagen * v_urenperdag;
|
||
--v_uitvoertijd_fh.eenheid := 'U';
|
||
END IF;
|
||
|
||
UPDATE HCAS_KPI_LEVERANCIERS K
|
||
SET k.functiehersteltijd_uren = v_uitvoertijd_fh_uren.tijdsduur
|
||
WHERE k.mld_opdr_key = rec.mld_opdr_key;
|
||
END IF;
|
||
|
||
COMMIT;
|
||
|
||
--- FH tijd is nu bekend in uren, vervolgens in dagen berekenen
|
||
--- variabelen die gebruikt worden in bepalen functie herstel
|
||
v_begindatum := rec.datum_uitgifte;
|
||
v_functiehersteldatum := rec.datum_functieherstel;
|
||
v_einddatum := rec.datum_reparatie;
|
||
v_pBeginWerkUur := rec.geldend_fh_van;
|
||
v_pEindWerkUur := rec.geldend_fh_tot;
|
||
v_pmode := rec.pmode;
|
||
v_uitvoertijdtype := 'DAGEN';
|
||
|
||
--- eerst FH hersteltijd berekenen in uren, later reparatie
|
||
IF v_begindatum IS NOT NULL
|
||
AND v_functiehersteldatum IS NOT NULL
|
||
AND v_pMode BETWEEN 0 AND 2
|
||
THEN
|
||
IF v_begindatum > v_functiehersteldatum
|
||
THEN
|
||
v_uitvoertijd_fh_dagen :=
|
||
fac.datumtijdnaaruitvoertijd (v_begindatum,
|
||
v_functiehersteldatum,
|
||
v_uitvoertijdtype,
|
||
v_pBeginWerkUur,
|
||
v_pEindWerkUur,
|
||
v_pMode);
|
||
|
||
v_uitvoertijd_fh_dagen.tijdsduur :=
|
||
-v_uitvoertijd_fh_dagen.tijdsduur;
|
||
ELSIF v_pMode = 2
|
||
THEN
|
||
--uitvoertijd := (v_functiehersteldatum - v_begindatum) * 24;
|
||
-- Zo simpel kan het zijn igv. 24/7!
|
||
-- default/uitvoertijdtype IN ('U', 'UREN')
|
||
v_uitvoertijd_fh_dagen.tijdsduur :=
|
||
v_functiehersteldatum - v_begindatum;
|
||
-- v_uitvoertijd_fh.eenheid := 'D';
|
||
|
||
ELSIF v_pBeginWerkUur BETWEEN 0 AND 24
|
||
AND v_pEindWerkUur BETWEEN 0 AND 24
|
||
AND v_pEindWerkUur > v_pBeginWerkUur
|
||
THEN
|
||
v_urenperdag := v_pEindWerkUur - v_pBeginWerkUur;
|
||
v_eerstedag :=
|
||
v_pEindWerkUur
|
||
- (TRUNC (v_begindatum, 'MI') - TRUNC (v_begindatum)) * 24;
|
||
v_eerstedag := LEAST (GREATEST (0, v_eerstedag), v_urenperdag);
|
||
v_laatstedag :=
|
||
(TRUNC (v_functiehersteldatum, 'MI')
|
||
- TRUNC (v_functiehersteldatum))
|
||
* 24
|
||
- v_pBeginWerkUur;
|
||
v_laatstedag := LEAST (GREATEST (0, v_laatstedag), v_urenperdag);
|
||
|
||
IF v_pMode = 0
|
||
THEN
|
||
-- Oppassen als begin/eind op een vrije dag valt,
|
||
-- dan moeten eerste/laatste dag gewoon 0 uur zijn.
|
||
SELECT COUNT ( * )
|
||
INTO v_vrijedagen
|
||
FROM mld_vrije_dagen
|
||
WHERE mld_vrije_dagen_datum = TRUNC (v_begindatum);
|
||
|
||
IF v_vrijedagen = 1
|
||
THEN
|
||
v_eerstedag := 0;
|
||
END IF;
|
||
|
||
SELECT COUNT ( * )
|
||
INTO v_vrijedagen
|
||
FROM mld_vrije_dagen
|
||
WHERE mld_vrije_dagen_datum = TRUNC (v_functiehersteldatum);
|
||
|
||
IF v_vrijedagen = 1
|
||
THEN
|
||
v_laatstedag := 0;
|
||
END IF;
|
||
|
||
IF TRUNC (v_begindatum) = TRUNC (v_functiehersteldatum)
|
||
THEN
|
||
IF v_eerstedag + v_laatstedag > 0 -- geen vrije dag!
|
||
THEN
|
||
-- Als begindatum=einddatum <20>n werkdag, dan 1 dag corrigeren!
|
||
v_heledagen := -1;
|
||
ELSE
|
||
-- Als begindatum=einddatum <20>n vrije dag, dan geen correctie!
|
||
v_heledagen := 0;
|
||
END IF;
|
||
ELSE
|
||
-- Als begindatum<>einddatum, dan alleen nog vrije dagen tussen
|
||
-- begin+1 en eind-1 corrigeren (en altijd 0 als begin+1=eind)!
|
||
SELECT COUNT ( * )
|
||
INTO v_vrijedagen
|
||
FROM mld_vrije_dagen
|
||
WHERE mld_vrije_dagen_datum BETWEEN TRUNC (
|
||
v_begindatum + 1)
|
||
AND v_functiehersteldatum
|
||
- 1;
|
||
|
||
IF TRUNC (v_begindatum + 1) = TRUNC (v_functiehersteldatum)
|
||
THEN
|
||
v_heledagen := 0;
|
||
ELSE
|
||
v_heledagen :=
|
||
TRUNC (v_functiehersteldatum)
|
||
- TRUNC (v_begindatum + 1)
|
||
- v_vrijedagen;
|
||
END IF;
|
||
END IF;
|
||
ELSE -- pMode = 1
|
||
-- Oppassen als begin/eind in het weekend of zo valt,
|
||
-- dan moeten eerste/laatste dag gewoon 0 uur zijn.
|
||
IF fac.iswerkdag (v_begindatum) = 0
|
||
THEN
|
||
v_eerstedag := 0;
|
||
END IF;
|
||
|
||
IF fac.iswerkdag (v_functiehersteldatum) = 0
|
||
THEN
|
||
v_laatstedag := 0;
|
||
v_heledagen :=
|
||
fac.count_Work_Days (TRUNC (v_begindatum),
|
||
TRUNC (v_functiehersteldatum));
|
||
ELSE
|
||
v_heledagen :=
|
||
fac.count_Work_Days (TRUNC (v_begindatum),
|
||
TRUNC (v_functiehersteldatum))
|
||
- 1;
|
||
END IF;
|
||
END IF;
|
||
|
||
-- v_uitvoertijd_fh_uren := v_eerstedag + v_laatstedag + v_heledagen * v_urenperdag;
|
||
-- default/uitvoertijdtype IN ('D', 'DAGEN')
|
||
v_uitvoertijd_fh_dagen.tijdsduur :=
|
||
(v_eerstedag + v_laatstedag + v_heledagen * v_urenperdag)
|
||
/ v_urenperdag;
|
||
-- v_uitvoertijd_fh.eenheid := 'D';
|
||
END IF;
|
||
|
||
UPDATE HCAS_KPI_LEVERANCIERS K
|
||
SET k.functiehersteltijd_dagen = v_uitvoertijd_fh_dagen.tijdsduur
|
||
WHERE k.mld_opdr_key = rec.mld_opdr_key;
|
||
END IF;
|
||
|
||
COMMIT;
|
||
|
||
-- variabelen die gebruikt worden in bepalen reparatie, eerst in dagen
|
||
-- bij een reparatie tellen nooit weekenden en feestdagen mee
|
||
-- pmode is daarom conform FCLT standaard: 1 is alleen werkdagen
|
||
v_begindatum := rec.datum_uitgifte;
|
||
v_einddatum := rec.datum_reparatie;
|
||
v_pBeginWerkUur := rec.geldend_fh_van;
|
||
v_pEindWerkUur := rec.geldend_fh_tot;
|
||
v_pmode := 1;
|
||
v_uitvoertijdtype := 'DAGEN';
|
||
|
||
IF v_begindatum IS NOT NULL
|
||
AND v_einddatum IS NOT NULL
|
||
AND v_pMode BETWEEN 0 AND 2
|
||
THEN
|
||
IF v_begindatum > v_einddatum
|
||
THEN
|
||
v_uitvoertijd_rep_dagen :=
|
||
fac.datumtijdnaaruitvoertijd (v_begindatum,
|
||
v_einddatum,
|
||
v_uitvoertijdtype,
|
||
v_pBeginWerkUur,
|
||
v_pEindWerkUur,
|
||
v_pMode);
|
||
|
||
v_uitvoertijd_rep_dagen.tijdsduur :=
|
||
-v_uitvoertijd_rep_dagen.tijdsduur;
|
||
ELSIF v_pMode = 2
|
||
THEN
|
||
--uitvoertijd := (v_functiehersteldatum - v_begindatum) * 24;
|
||
-- Zo simpel kan het zijn igv. 24/7!
|
||
-- Per 5.4.3 kunnen hier gebroken dagen worden teruggegeven!
|
||
v_uitvoertijd_rep_dagen.tijdsduur := v_einddatum - v_begindatum;
|
||
v_uitvoertijd_rep_dagen.eenheid := 'D';
|
||
ELSIF v_pBeginWerkUur BETWEEN 0 AND 24
|
||
AND v_pEindWerkUur BETWEEN 0 AND 24
|
||
AND v_pEindWerkUur > v_pBeginWerkUur
|
||
THEN
|
||
v_urenperdag := v_pEindWerkUur - v_pBeginWerkUur;
|
||
v_eerstedag :=
|
||
v_pEindWerkUur
|
||
- (TRUNC (v_begindatum, 'MI') - TRUNC (v_begindatum)) * 24;
|
||
v_eerstedag := LEAST (GREATEST (0, v_eerstedag), v_urenperdag);
|
||
v_laatstedag :=
|
||
(TRUNC (v_einddatum, 'MI') - TRUNC (v_einddatum)) * 24
|
||
- v_pBeginWerkUur;
|
||
v_laatstedag := LEAST (GREATEST (0, v_laatstedag), v_urenperdag);
|
||
|
||
IF v_pMode = 0
|
||
THEN
|
||
-- Oppassen als begin/eind op een vrije dag valt,
|
||
-- dan moeten eerste/laatste dag gewoon 0 uur zijn.
|
||
SELECT COUNT ( * )
|
||
INTO v_vrijedagen
|
||
FROM mld_vrije_dagen
|
||
WHERE mld_vrije_dagen_datum = TRUNC (v_begindatum);
|
||
|
||
IF v_vrijedagen = 1
|
||
THEN
|
||
v_eerstedag := 0;
|
||
END IF;
|
||
|
||
SELECT COUNT ( * )
|
||
INTO v_vrijedagen
|
||
FROM mld_vrije_dagen
|
||
WHERE mld_vrije_dagen_datum = TRUNC (v_einddatum);
|
||
|
||
IF v_vrijedagen = 1
|
||
THEN
|
||
v_laatstedag := 0;
|
||
END IF;
|
||
|
||
IF TRUNC (v_begindatum) = TRUNC (v_einddatum)
|
||
THEN
|
||
IF v_eerstedag + v_laatstedag > 0 -- geen vrije dag!
|
||
THEN
|
||
-- Als begindatum=einddatum <20>n werkdag, dan 1 dag corrigeren!
|
||
v_heledagen := -1;
|
||
ELSE
|
||
-- Als begindatum=einddatum <20>n vrije dag, dan geen correctie!
|
||
v_heledagen := 0;
|
||
END IF;
|
||
ELSE
|
||
-- Als begindatum<>einddatum, dan alleen nog vrije dagen tussen
|
||
-- begin+1 en eind-1 corrigeren (en altijd 0 als begin+1=eind)!
|
||
SELECT COUNT ( * )
|
||
INTO v_vrijedagen
|
||
FROM mld_vrije_dagen
|
||
WHERE mld_vrije_dagen_datum BETWEEN TRUNC (
|
||
v_begindatum + 1)
|
||
AND v_einddatum - 1;
|
||
|
||
IF TRUNC (v_begindatum + 1) = TRUNC (v_einddatum)
|
||
THEN
|
||
v_heledagen := 0;
|
||
ELSE
|
||
v_heledagen :=
|
||
TRUNC (v_einddatum)
|
||
- TRUNC (v_begindatum + 1)
|
||
- v_vrijedagen;
|
||
END IF;
|
||
END IF;
|
||
ELSE -- pMode = 1
|
||
-- Oppassen als begin/eind in het weekend of zo valt,
|
||
-- dan moeten eerste/laatste dag gewoon 0 uur zijn.
|
||
IF fac.iswerkdag (v_begindatum) = 0
|
||
THEN
|
||
v_eerstedag := 0;
|
||
END IF;
|
||
|
||
IF fac.iswerkdag (v_einddatum) = 0
|
||
THEN
|
||
v_laatstedag := 0;
|
||
v_heledagen :=
|
||
fac.count_Work_Days (TRUNC (v_begindatum),
|
||
TRUNC (v_einddatum));
|
||
ELSE
|
||
v_heledagen :=
|
||
fac.count_Work_Days (TRUNC (v_begindatum),
|
||
TRUNC (v_einddatum))
|
||
- 1;
|
||
END IF;
|
||
END IF;
|
||
|
||
-- v_uitvoertijd_rep_dagen := v_eerstedag + v_laatstedag + v_heledagen * v_urenperdag;
|
||
-- Per 5.4.3 kunnen hier gebroken dagen worden teruggegeven!
|
||
v_uitvoertijd_rep_dagen.tijdsduur :=
|
||
(v_eerstedag + v_laatstedag + v_heledagen * v_urenperdag)
|
||
/ v_urenperdag;
|
||
v_uitvoertijd_rep_dagen.eenheid := 'D';
|
||
END IF;
|
||
|
||
UPDATE HCAS_KPI_LEVERANCIERS K
|
||
SET k.reparatietijd_dagen = v_uitvoertijd_rep_dagen.tijdsduur
|
||
WHERE k.mld_opdr_key = rec.mld_opdr_key;
|
||
END IF;
|
||
|
||
COMMIT;
|
||
|
||
-- variabelen die gebruikt worden in bepalen reparatie, nu in uren
|
||
-- bij een reparatie tellen nooit weekenden en feestdagen mee
|
||
-- pmode is daarom conform FCLT standaard: 1 is alleen werkdagen
|
||
v_begindatum := rec.datum_uitgifte;
|
||
v_einddatum := rec.datum_reparatie;
|
||
v_pBeginWerkUur := rec.geldend_fh_van;
|
||
v_pEindWerkUur := rec.geldend_fh_tot;
|
||
v_pmode := 1;
|
||
v_uitvoertijdtype := 'UREN';
|
||
|
||
IF v_begindatum IS NOT NULL
|
||
AND v_einddatum IS NOT NULL
|
||
AND v_pMode BETWEEN 0 AND 2
|
||
THEN
|
||
IF v_begindatum > v_einddatum
|
||
THEN
|
||
v_uitvoertijd_rep_uren :=
|
||
fac.datumtijdnaaruitvoertijd (v_begindatum,
|
||
v_einddatum,
|
||
v_uitvoertijdtype,
|
||
v_pBeginWerkUur,
|
||
v_pEindWerkUur,
|
||
v_pMode);
|
||
|
||
v_uitvoertijd_rep_uren.tijdsduur :=
|
||
-v_uitvoertijd_rep_uren.tijdsduur;
|
||
ELSIF v_pMode = 2
|
||
THEN
|
||
v_uitvoertijd_rep_uren.tijdsduur := (v_einddatum - v_begindatum) * 24;
|
||
-- v_uitvoertijd.eenheid := 'U';
|
||
ELSIF v_pBeginWerkUur BETWEEN 0 AND 24
|
||
AND v_pEindWerkUur BETWEEN 0 AND 24
|
||
AND v_pEindWerkUur > v_pBeginWerkUur
|
||
THEN
|
||
v_urenperdag := v_pEindWerkUur - v_pBeginWerkUur;
|
||
v_eerstedag :=
|
||
v_pEindWerkUur
|
||
- (TRUNC (v_begindatum, 'MI') - TRUNC (v_begindatum)) * 24;
|
||
v_eerstedag := LEAST (GREATEST (0, v_eerstedag), v_urenperdag);
|
||
v_laatstedag :=
|
||
(TRUNC (v_einddatum, 'MI') - TRUNC (v_einddatum)) * 24
|
||
- v_pBeginWerkUur;
|
||
v_laatstedag := LEAST (GREATEST (0, v_laatstedag), v_urenperdag);
|
||
|
||
IF v_pMode = 0
|
||
THEN
|
||
-- Oppassen als begin/eind op een vrije dag valt,
|
||
-- dan moeten eerste/laatste dag gewoon 0 uur zijn.
|
||
SELECT COUNT ( * )
|
||
INTO v_vrijedagen
|
||
FROM mld_vrije_dagen
|
||
WHERE mld_vrije_dagen_datum = TRUNC (v_begindatum);
|
||
|
||
IF v_vrijedagen = 1
|
||
THEN
|
||
v_eerstedag := 0;
|
||
END IF;
|
||
|
||
SELECT COUNT ( * )
|
||
INTO v_vrijedagen
|
||
FROM mld_vrije_dagen
|
||
WHERE mld_vrije_dagen_datum = TRUNC (v_einddatum);
|
||
|
||
IF v_vrijedagen = 1
|
||
THEN
|
||
v_laatstedag := 0;
|
||
END IF;
|
||
|
||
IF TRUNC (v_begindatum) = TRUNC (v_einddatum)
|
||
THEN
|
||
IF v_eerstedag + v_laatstedag > 0 -- geen vrije dag!
|
||
THEN
|
||
-- Als begindatum=einddatum <20>n werkdag, dan 1 dag corrigeren!
|
||
v_heledagen := -1;
|
||
ELSE
|
||
-- Als begindatum=einddatum <20>n vrije dag, dan geen correctie!
|
||
v_heledagen := 0;
|
||
END IF;
|
||
ELSE
|
||
-- Als begindatum<>einddatum, dan alleen nog vrije dagen tussen
|
||
-- begin+1 en eind-1 corrigeren (en altijd 0 als begin+1=eind)!
|
||
SELECT COUNT ( * )
|
||
INTO v_vrijedagen
|
||
FROM mld_vrije_dagen
|
||
WHERE mld_vrije_dagen_datum BETWEEN TRUNC (
|
||
v_begindatum + 1)
|
||
AND v_einddatum - 1;
|
||
|
||
IF TRUNC (v_begindatum + 1) = TRUNC (v_einddatum)
|
||
THEN
|
||
v_heledagen := 0;
|
||
ELSE
|
||
v_heledagen :=
|
||
TRUNC (v_einddatum)
|
||
- TRUNC (v_begindatum + 1)
|
||
- v_vrijedagen;
|
||
END IF;
|
||
END IF;
|
||
ELSE -- pMode = 1
|
||
-- Oppassen als begin/eind in het weekend of zo valt,
|
||
-- dan moeten eerste/laatste dag gewoon 0 uur zijn.
|
||
IF fac.iswerkdag (v_begindatum) = 0
|
||
THEN
|
||
v_eerstedag := 0;
|
||
END IF;
|
||
|
||
IF fac.iswerkdag (v_einddatum) = 0
|
||
THEN
|
||
v_laatstedag := 0;
|
||
v_heledagen :=
|
||
fac.count_Work_Days (TRUNC (v_begindatum),
|
||
TRUNC (v_einddatum));
|
||
ELSE
|
||
v_heledagen :=
|
||
fac.count_Work_Days (TRUNC (v_begindatum),
|
||
TRUNC (v_einddatum))
|
||
- 1;
|
||
END IF;
|
||
END IF;
|
||
|
||
v_uitvoertijd_rep_uren.tijdsduur :=
|
||
v_eerstedag + v_laatstedag + v_heledagen * v_urenperdag;
|
||
-- v_uitvoertijd.eenheid := 'U';
|
||
END IF;
|
||
|
||
UPDATE HCAS_KPI_LEVERANCIERS K
|
||
SET k.reparatietijd_uren = v_uitvoertijd_rep_uren.tijdsduur
|
||
WHERE k.mld_opdr_key = rec.mld_opdr_key;
|
||
END IF;
|
||
|
||
COMMIT;
|
||
|
||
--- Dan moet de status van de opdracht bijgewerkt worden, zodat de opdrachten niet meer gemuteerd kunnen worden
|
||
UPDATE MLD_OPDR o
|
||
SET o.mld_statusopdr_key = 7
|
||
WHERE rec.mld_opdr_key = o.mld_opdr_key;
|
||
|
||
COMMIT;
|
||
|
||
END LOOP;
|
||
END;
|
||
/
|
||
|
||
|
||
|
||
CREATE OR REPLACE VIEW HCAS_V_RAP_FH_REPARATIE
|
||
AS
|
||
SELECT mo.ins_deel_key,
|
||
m.mld_melding_key,
|
||
o.mld_opdr_key,
|
||
fac.safe_to_number (o.mld_uitvoerende_keys) AS uitv_bedrijf,
|
||
fac.safe_to_date (
|
||
datum_uitg.mld_kenmerkopdr_waarde
|
||
|| ' '
|
||
|| tijd_uitg.mld_kenmerkopdr_waarde,
|
||
'dd-mm-yyyy hh24:mi')
|
||
AS datum_uitgifte,
|
||
functieherstel.fac_usrdata_omschr AS functieherstel,
|
||
fac.safe_to_date (
|
||
datum_functieherstel.mld_kenmerkopdr_waarde
|
||
|| ' '
|
||
|| tijd_functieherstel.mld_kenmerkopdr_waarde,
|
||
'dd-mm-yyyy hh24:mi')
|
||
AS datum_functieherstel,
|
||
reparatie.fac_usrdata_omschr AS gerepareerd,
|
||
fac.safe_to_date (
|
||
datum_reparatie.mld_kenmerkopdr_waarde
|
||
|| ' '
|
||
|| tijd_reparatie.mld_kenmerkopdr_waarde,
|
||
'dd-mm-yyyy hh24:mi')
|
||
AS datum_reparatie
|
||
FROM mld_melding_object mo,
|
||
mld_melding m,
|
||
mld_opdr o,
|
||
mld_statusopdr so,
|
||
(SELECT *
|
||
FROM mld_kenmerkopdr ko
|
||
WHERE mld_kenmerk_key = 402) datum_uitg,
|
||
(SELECT *
|
||
FROM mld_kenmerkopdr ko
|
||
WHERE mld_kenmerk_key = 403) tijd_uitg,
|
||
(SELECT *
|
||
FROM mld_kenmerkopdr ko, fac_usrdata ud
|
||
WHERE ko.mld_kenmerkopdr_waarde = ud.fac_usrdata_key
|
||
AND ud.fac_usrtab_key = 241
|
||
AND mld_kenmerk_key = 423) functieherstel,
|
||
(SELECT *
|
||
FROM mld_kenmerkopdr ko
|
||
WHERE mld_kenmerk_key = 422) datum_functieherstel,
|
||
(SELECT *
|
||
FROM mld_kenmerkopdr ko
|
||
WHERE mld_kenmerk_key = 425) tijd_functieherstel,
|
||
(SELECT *
|
||
FROM mld_kenmerkopdr ko, fac_usrdata ud
|
||
WHERE ko.mld_kenmerkopdr_waarde = ud.fac_usrdata_key
|
||
AND ud.fac_usrtab_key = 241
|
||
AND mld_kenmerk_key = 441) reparatie,
|
||
(SELECT *
|
||
FROM mld_kenmerkopdr ko
|
||
WHERE mld_kenmerk_key = 427) datum_reparatie,
|
||
(SELECT *
|
||
FROM mld_kenmerkopdr ko
|
||
WHERE mld_kenmerk_key = 428) tijd_reparatie
|
||
WHERE mo.mld_melding_key = m.mld_melding_key
|
||
AND o.mld_melding_key = m.mld_melding_key
|
||
AND o.mld_statusopdr_key = so.mld_statusopdr_key
|
||
AND datum_uitg.mld_opdr_key = o.mld_opdr_key
|
||
AND tijd_uitg.mld_opdr_key = o.mld_opdr_key
|
||
AND functieherstel.mld_opdr_key(+) = o.mld_opdr_key
|
||
AND datum_functieherstel.mld_opdr_key(+) = o.mld_opdr_key
|
||
AND tijd_functieherstel.mld_opdr_key(+) = o.mld_opdr_key
|
||
AND reparatie.mld_opdr_key(+) = o.mld_opdr_key
|
||
AND datum_reparatie.mld_opdr_key(+) = o.mld_opdr_key
|
||
AND tijd_reparatie.mld_opdr_key(+) = o.mld_opdr_key;
|
||
|
||
CREATE OR REPLACE VIEW hcas_v_rap_kpi
|
||
(
|
||
locatie,
|
||
bedrijf,
|
||
pmode,
|
||
service_window_van,
|
||
service_window_tot,
|
||
object_discipline,
|
||
objectgroep,
|
||
objectsoort,
|
||
object,
|
||
urgentieklasse_object,
|
||
conditieklasse_object,
|
||
type_melding,
|
||
opdracht_key,
|
||
opdracht_nr,
|
||
datum_opdracht,
|
||
functieherstel,
|
||
max_functiehersteltijd,
|
||
datum_functieherstel,
|
||
functiehersteltijd_uren,
|
||
gerepareerd,
|
||
max_reparatietijd,
|
||
datum_reparatie,
|
||
reparatietijd_dgn,
|
||
kpi_functieherstel,
|
||
kpi_reparatie,
|
||
kpi_one_time_fix
|
||
)
|
||
AS
|
||
SELECT l.alg_locatie_omschrijving,
|
||
kpi.prs_bedrijf_naam,
|
||
DECODE (kpi.pmode, 1, 'Werkdagen', 0, 'Alle dagen'),
|
||
kpi.geldend_fh_van AS service_window_van,
|
||
kpi.geldend_fh_tot AS service_window_tot,
|
||
obj.ins_discipline_omschrijving,
|
||
obj.ins_srtgroep_omschrijving,
|
||
obj.ins_srtdeel_omschrijving,
|
||
kpi.ins_deel_omschrijving AS object,
|
||
kpi.urgentieklasse,
|
||
kpi.conditieklasse,
|
||
type_mld.type_melding,
|
||
o.mld_opdr_key,
|
||
o.mld_opdr_key || '/' || mld_opdr_bedrijfopdr_volgnr as opdracht,
|
||
kpi.datum_uitgifte AS datum_opdracht,
|
||
kpi.functieherstel,
|
||
kpi.max_fh_tijd,
|
||
kpi.datum_functieherstel,
|
||
kpi.functiehersteltijd_uren,
|
||
kpi.gerepareerd,
|
||
kpi.max_rep_tijd,
|
||
kpi.datum_reparatie,
|
||
kpi.reparatietijd_dagen,
|
||
CASE
|
||
WHEN UPPER (functieherstel) = 'NEE'
|
||
THEN
|
||
'Niet van toepassing'
|
||
WHEN (UPPER (functieherstel) = 'JA'
|
||
AND max_fh_tijd - functiehersteltijd_uren >= 0)
|
||
THEN
|
||
'Voldoende'
|
||
WHEN (UPPER (functieherstel) = 'JA'
|
||
AND max_fh_tijd - functiehersteltijd_uren < 0)
|
||
THEN
|
||
'Onvoldoende '
|
||
ELSE
|
||
''
|
||
END
|
||
AS KPI_functieherstel,
|
||
CASE
|
||
WHEN UPPER (gerepareerd) <> 'JA'
|
||
THEN
|
||
'Niet van toepassing'
|
||
WHEN (UPPER (gerepareerd) = 'JA'
|
||
AND max_rep_tijd - reparatietijd_dagen >= 0)
|
||
THEN
|
||
'Voldoende'
|
||
WHEN (UPPER (gerepareerd) = 'JA'
|
||
AND max_rep_tijd - reparatietijd_dagen < 0)
|
||
THEN
|
||
'Onvoldoende'
|
||
ELSE
|
||
''
|
||
END
|
||
AS KPI_reparatie,
|
||
CASE
|
||
WHEN UPPER (functieherstel) = 'NEE'
|
||
OR datum_functieherstel = datum_reparatie
|
||
THEN
|
||
'Ja'
|
||
ELSE
|
||
'Nee '
|
||
END
|
||
AS KPI_one_time_fix
|
||
FROM hcas_kpi_leveranciers kpi,
|
||
mld_melding m,
|
||
mld_opdr o,
|
||
ins_v_deel_gegevens obj,
|
||
alg_locatie l,
|
||
(SELECT km.mld_melding_key, ud.fac_usrdata_omschr AS type_melding
|
||
FROM mld_kenmerkmelding km, mld_kenmerk k, fac_usrdata ud
|
||
WHERE k.mld_kenmerk_key = km.mld_kenmerk_key
|
||
AND k.mld_srtkenmerk_key = 181
|
||
AND fac.safe_to_number (mld_kenmerkmelding_waarde) =
|
||
ud.fac_usrdata_key
|
||
AND fac_usrtab_key = 121) type_mld
|
||
WHERE kpi.mld_melding_key = m.mld_melding_key
|
||
AND kpi.ins_deel_key = obj.ins_deel_key
|
||
AND kpi.mld_opdr_key = o.mld_opdr_key
|
||
AND m.mld_alg_locatie_key = l.alg_locatie_key
|
||
AND type_mld.mld_melding_key = m.mld_melding_key;
|
||
|
||
CREATE OR REPLACE VIEW hcas_v_rap_kpi_one_time_fix
|
||
(
|
||
locatie,
|
||
bedrijf,
|
||
type_melding,
|
||
datum_uitgifte,
|
||
aant_opdr,
|
||
aant_one_time_fix
|
||
)
|
||
AS
|
||
SELECT l.alg_locatie_omschrijving,
|
||
kpi.prs_bedrijf_naam,
|
||
type_mld.type_melding,
|
||
kpi.datum_uitgifte,
|
||
COUNT (kpi.mld_opdr_key),
|
||
SUM(CASE
|
||
WHEN UPPER (functieherstel) = 'NEE'
|
||
OR datum_functieherstel = datum_reparatie
|
||
THEN
|
||
1
|
||
ELSE
|
||
0
|
||
END)
|
||
FROM hcas_kpi_leveranciers kpi,
|
||
mld_melding m,
|
||
ins_v_deel_gegevens obj,
|
||
alg_locatie l,
|
||
(SELECT km.mld_melding_key, ud.fac_usrdata_omschr AS type_melding
|
||
FROM mld_kenmerkmelding km, mld_kenmerk k, fac_usrdata ud
|
||
WHERE k.mld_kenmerk_key = km.mld_kenmerk_key
|
||
AND k.mld_srtkenmerk_key = 181
|
||
AND fac.safe_to_number (mld_kenmerkmelding_waarde) =
|
||
ud.fac_usrdata_key
|
||
AND fac_usrtab_key = 121) type_mld
|
||
WHERE kpi.mld_melding_key = m.mld_melding_key
|
||
AND kpi.ins_deel_key = obj.ins_deel_key
|
||
AND m.mld_alg_locatie_key = l.alg_locatie_key
|
||
AND type_mld.mld_melding_key = m.mld_melding_key
|
||
GROUP BY alg_locatie_omschrijving,
|
||
prs_bedrijf_naam,
|
||
type_melding,
|
||
datum_uitgifte;
|
||
|
||
CREATE OR REPLACE VIEW hcas_v_rap_kpi_hhstoring
|
||
(
|
||
locatie,
|
||
bedrijf,
|
||
type_melding,
|
||
datum_opdracht,
|
||
aant_opdr,
|
||
aant_herh_storing
|
||
)
|
||
AS
|
||
SELECT l.alg_locatie_omschrijving,
|
||
prs_bedrijf_naam,
|
||
type_melding,
|
||
datum_uitgifte,
|
||
COUNT (mld_opdr_key),
|
||
SUM (DECODE (herhaalstoring, 'Ja', 1, 0))
|
||
FROM hcas_kpi_leveranciers kpi,
|
||
mld_melding m,
|
||
alg_locatie l,
|
||
(SELECT km.mld_melding_key, ud.fac_usrdata_omschr AS type_melding
|
||
FROM mld_kenmerkmelding km, mld_kenmerk k, fac_usrdata ud
|
||
WHERE k.mld_kenmerk_key = km.mld_kenmerk_key
|
||
AND k.mld_srtkenmerk_key = 181
|
||
AND fac.safe_to_number (mld_kenmerkmelding_waarde) =
|
||
ud.fac_usrdata_key
|
||
AND fac_usrtab_key = 121) type_mld
|
||
WHERE type_mld.mld_melding_key = kpi.mld_melding_key
|
||
AND kpi.mld_melding_key = m.mld_melding_key
|
||
AND m.mld_alg_locatie_key = l.alg_locatie_key
|
||
AND type_mld.mld_melding_key = m.mld_melding_key
|
||
AND kpi.conditieklasse NOT IN (5, 6)
|
||
GROUP BY l.alg_locatie_omschrijving,
|
||
prs_bedrijf_naam,
|
||
type_melding,
|
||
datum_uitgifte;
|
||
|
||
CREATE OR REPLACE VIEW HCAS_V_RAP_KPI_DOWNTIME
|
||
(
|
||
OPDRACHT,
|
||
KWARTAAL,
|
||
OBJECT_KEY,
|
||
OBJECT_OMSCHRIJVING,
|
||
LEVERANCIER,
|
||
DATUM_UITGIFTE,
|
||
DATUM_GEREED,
|
||
MAX_UPTIME,
|
||
DOWNTIME_DGN,
|
||
UPTIME_DGN,
|
||
TOELICHTING
|
||
)
|
||
AS
|
||
-- Begin en eind in zelfde Q: Q - jaartal datum uitgifte = Q - jaartal FH/reparatie
|
||
SELECT kpi.mld_opdr_key,
|
||
TO_CHAR (COALESCE (kpi.datum_functieherstel, kpi.datum_reparatie),
|
||
'yyyy')
|
||
|| ' Q'
|
||
|| TO_CHAR (
|
||
COALESCE (kpi.datum_functieherstel, kpi.datum_reparatie),
|
||
'Q')
|
||
AS tellend_kwartaal,
|
||
kpi.ins_deel_key,
|
||
kpi.ins_deel_omschrijving,
|
||
kpi.prs_bedrijf_naam,
|
||
kpi.datum_uitgifte,
|
||
COALESCE (kpi.datum_functieherstel, kpi.datum_reparatie)
|
||
datum_gereed,
|
||
(ADD_MONTHS (TRUNC (datum_uitgifte, 'Q'), +3))
|
||
- (TRUNC (datum_uitgifte, 'Q'))
|
||
AS max_uptime,
|
||
COALESCE (kpi.datum_functieherstel, kpi.datum_reparatie)
|
||
- kpi.datum_uitgifte --- voor de downtime doen regime of urgentieklasse er niet toe
|
||
downtime_dgn,
|
||
( (ADD_MONTHS (TRUNC (datum_uitgifte, 'Q'), +3))
|
||
- (TRUNC (datum_uitgifte, 'Q')))
|
||
- COALESCE (kpi.functiehersteltijd_dagen, kpi.reparatietijd_dagen)
|
||
uptime_dgn,
|
||
'Begin en einde in zelfde kwartaal' AS toelichting
|
||
FROM hcas_kpi_leveranciers kpi
|
||
WHERE 'Q'
|
||
|| TO_CHAR (
|
||
COALESCE (kpi.datum_functieherstel, kpi.datum_reparatie),
|
||
'Q')
|
||
|| ' '
|
||
|| TO_CHAR (
|
||
COALESCE (kpi.datum_functieherstel, kpi.datum_reparatie),
|
||
'yyyy') =
|
||
'Q'
|
||
|| TO_CHAR (kpi.datum_uitgifte, 'Q')
|
||
|| ' '
|
||
|| TO_CHAR (kpi.datum_uitgifte, 'yyyy') --- alleen afgeronde kwartalen gaan mee, dus einddatum ligt voor de begin datum van current Q
|
||
AND (kpi.datum_functieherstel < TRUNC(SYSDATE , 'Q') OR kpi.datum_reparatie < TRUNC(SYSDATE , 'Q') )
|
||
UNION ALL
|
||
-- Begin en eind NIET in zelfde Q; het einde van de opdracht valt in een ander kwartaal, eerst het kwartaal tellen waar de aanmaak datum invalt
|
||
-- De aanmaakdatum moet vallen in het laatste volledige kwartaal, dus aanmaakdatum < start huidig Q
|
||
-- Let op: mld is nog niet per definitie afgemeld en zit dus niet pers<72> in kpi tabel!
|
||
SELECT kpi.mld_opdr_key, -- Downtime is dan einddatum Q - datum uitgifte
|
||
TO_CHAR (kpi.datum_uitgifte, 'yyyy')
|
||
|| ' Q'
|
||
|| TO_CHAR (kpi.datum_uitgifte, 'Q')
|
||
AS tellend_kwartaal,
|
||
kpi.ins_deel_key,
|
||
kpi.ins_deel_omschrijving,
|
||
kpi.prs_bedrijf_naam,
|
||
kpi.datum_uitgifte,
|
||
COALESCE (kpi.datum_functieherstel, kpi.datum_reparatie)
|
||
datum_gereed,
|
||
(ADD_MONTHS (TRUNC (datum_uitgifte, 'Q'), +3))
|
||
- (TRUNC (datum_uitgifte, 'Q'))
|
||
AS max_uptime,
|
||
ADD_MONTHS (TRUNC (datum_uitgifte, 'Q'), +3) - kpi.datum_uitgifte --- voor de downtime doen regime of urgentieklasse er niet toe, einddatum is hier: einde kwartaal
|
||
AS downtime_dgn,
|
||
( (ADD_MONTHS (TRUNC (datum_uitgifte, 'Q'), +3))
|
||
- (TRUNC (datum_uitgifte, 'Q')))
|
||
- (ADD_MONTHS (TRUNC (datum_uitgifte, 'Q'), +3)
|
||
- kpi.datum_uitgifte)
|
||
AS uptime_dgn,
|
||
'Beginkwartaal tellen' AS toelichting
|
||
FROM (SELECT b.prs_bedrijf_key,
|
||
b.prs_bedrijf_naam,
|
||
onderhoud_obj.ins_deel_omschrijving,
|
||
opdracht.ins_deel_key,
|
||
opdracht.mld_opdr_key,
|
||
opdracht.datum_uitgifte,
|
||
opdracht.functieherstel,
|
||
opdracht.datum_functieherstel,
|
||
opdracht.gerepareerd,
|
||
opdracht.datum_reparatie
|
||
FROM prs_bedrijf b,
|
||
(SELECT o.ins_deel_key,
|
||
o.ins_deel_omschrijving,
|
||
fac.safe_to_number (
|
||
onderhoudsleverancier.ins_kenmerkdeel_waarde)
|
||
AS prs_bedrijf_key
|
||
FROM ins_deel o,
|
||
(SELECT kd.*
|
||
FROM ins_kenmerkdeel kd, ins_kenmerk km
|
||
WHERE kd.ins_kenmerk_key = km.ins_kenmerk_key
|
||
AND km.ins_srtkenmerk_key = 62)
|
||
onderhoudsleverancier
|
||
WHERE o.ins_deel_verwijder IS NULL
|
||
AND onderhoudsleverancier.ins_deel_key = o.ins_deel_key )
|
||
onderhoud_obj,
|
||
(SELECT mo.ins_deel_key,
|
||
m.mld_melding_key,
|
||
o.mld_opdr_key,
|
||
o.mld_typeopdr_key,
|
||
o.mld_statusopdr_key,
|
||
so.mld_statusopdr_omschrijving,
|
||
fac.safe_to_number (o.mld_uitvoerende_keys)
|
||
AS uitv_bedrijf,
|
||
fac.safe_to_date (
|
||
datum_uitg.mld_kenmerkopdr_waarde
|
||
|| ' '
|
||
|| tijd_uitg.mld_kenmerkopdr_waarde,
|
||
'dd-mm-yyyy hh24:mi')
|
||
AS datum_uitgifte,
|
||
functieherstel.fac_usrdata_omschr AS functieherstel,
|
||
fac.safe_to_date (
|
||
datum_functieherstel.mld_kenmerkopdr_waarde
|
||
|| ' '
|
||
|| tijd_functieherstel.mld_kenmerkopdr_waarde,
|
||
'dd-mm-yyyy hh24:mi')
|
||
AS datum_functieherstel,
|
||
reparatie.fac_usrdata_omschr AS gerepareerd,
|
||
fac.safe_to_date (
|
||
datum_reparatie.mld_kenmerkopdr_waarde
|
||
|| ' '
|
||
|| tijd_reparatie.mld_kenmerkopdr_waarde,
|
||
'dd-mm-yyyy hh24:mi')
|
||
AS datum_reparatie
|
||
FROM mld_melding_object mo,
|
||
mld_melding m,
|
||
mld_opdr o,
|
||
mld_statusopdr so,
|
||
(SELECT *
|
||
FROM mld_kenmerkopdr ko
|
||
WHERE mld_kenmerk_key = 402) datum_uitg,
|
||
(SELECT *
|
||
FROM mld_kenmerkopdr ko
|
||
WHERE mld_kenmerk_key = 403) tijd_uitg,
|
||
(SELECT *
|
||
FROM mld_kenmerkopdr ko, fac_usrdata ud
|
||
WHERE ko.mld_kenmerkopdr_waarde = ud.fac_usrdata_key
|
||
AND ud.fac_usrtab_key = 241
|
||
AND mld_kenmerk_key = 423) functieherstel,
|
||
(SELECT *
|
||
FROM mld_kenmerkopdr ko
|
||
WHERE mld_kenmerk_key = 422) datum_functieherstel,
|
||
(SELECT *
|
||
FROM mld_kenmerkopdr ko
|
||
WHERE mld_kenmerk_key = 425) tijd_functieherstel,
|
||
(SELECT *
|
||
FROM mld_kenmerkopdr ko, fac_usrdata ud
|
||
WHERE ko.mld_kenmerkopdr_waarde = ud.fac_usrdata_key
|
||
AND ud.fac_usrtab_key = 241
|
||
AND mld_kenmerk_key = 441) reparatie,
|
||
(SELECT *
|
||
FROM mld_kenmerkopdr ko
|
||
WHERE mld_kenmerk_key = 427) datum_reparatie,
|
||
(SELECT *
|
||
FROM mld_kenmerkopdr ko
|
||
WHERE mld_kenmerk_key = 428) tijd_reparatie
|
||
WHERE mo.mld_melding_key = m.mld_melding_key
|
||
AND o.mld_melding_key = m.mld_melding_key
|
||
AND o.mld_statusopdr_key = so.mld_statusopdr_key
|
||
AND datum_uitg.mld_opdr_key = o.mld_opdr_key
|
||
AND tijd_uitg.mld_opdr_key = o.mld_opdr_key
|
||
AND functieherstel.mld_opdr_key(+) = o.mld_opdr_key
|
||
AND datum_functieherstel.mld_opdr_key(+) =
|
||
o.mld_opdr_key
|
||
AND tijd_functieherstel.mld_opdr_key(+) = o.mld_opdr_key
|
||
AND reparatie.mld_opdr_key(+) = o.mld_opdr_key
|
||
AND datum_reparatie.mld_opdr_key(+) = o.mld_opdr_key
|
||
AND tijd_reparatie.mld_opdr_key(+) = o.mld_opdr_key)
|
||
opdracht
|
||
WHERE prs_bedrijf_verwijder IS NULL
|
||
AND prs_bedrijf_leverancier = 1
|
||
AND onderhoud_obj.prs_bedrijf_key = b.prs_bedrijf_key
|
||
AND opdracht.uitv_bedrijf = b.prs_bedrijf_key
|
||
AND opdracht.ins_deel_key = onderhoud_obj.ins_deel_key) kpi
|
||
WHERE 'Q'
|
||
|| TO_CHAR (
|
||
COALESCE (kpi.datum_functieherstel, kpi.datum_reparatie),
|
||
'Q')
|
||
|| ' '
|
||
|| TO_CHAR (
|
||
COALESCE (kpi.datum_functieherstel, kpi.datum_reparatie),
|
||
'yyyy') <>
|
||
'Q'
|
||
|| TO_CHAR (kpi.datum_uitgifte, 'Q')
|
||
|| ' '
|
||
|| TO_CHAR (kpi.datum_uitgifte, 'yyyy')
|
||
AND kpi.datum_uitgifte < TRUNC(SYSDATE , 'Q')
|
||
UNION ALL
|
||
-- Begin en eind NIET in zelfde Q; het einde van de opdracht valt in een ander kwartaal, dan de uren tellen die vallen in het kwartaal van de afmeld datum
|
||
-- De melding is dan al wel afgemeld, dus kan de KPI tabel gebruikt worden
|
||
-- ook hier gaan we uit van het laatste volledige kwartaal dus datum functieherstel/ gereed < begin datum current Q
|
||
SELECT kpi.mld_opdr_key, -- Downtime is dan datum FH/gereed - begindatum kwartaal
|
||
TO_CHAR (COALESCE (kpi.datum_functieherstel, kpi.datum_reparatie),
|
||
'yyyy')
|
||
|| ' Q'
|
||
|| TO_CHAR (
|
||
COALESCE (kpi.datum_functieherstel, kpi.datum_reparatie),
|
||
'Q')
|
||
AS tellend_kwartaal,
|
||
kpi.ins_deel_key,
|
||
kpi.ins_deel_omschrijving,
|
||
kpi.prs_bedrijf_naam,
|
||
kpi.datum_uitgifte,
|
||
COALESCE (kpi.datum_functieherstel, kpi.datum_reparatie)
|
||
datum_gereed,
|
||
(ADD_MONTHS (
|
||
TRUNC (
|
||
COALESCE (kpi.datum_functieherstel, kpi.datum_reparatie),
|
||
'Q'),
|
||
+3))
|
||
- (TRUNC (COALESCE (kpi.datum_functieherstel, kpi.datum_reparatie),
|
||
'Q'))
|
||
AS max_uptime,
|
||
COALESCE (kpi.datum_functieherstel, kpi.datum_reparatie)
|
||
- TRUNC (COALESCE (kpi.datum_functieherstel, kpi.datum_reparatie),
|
||
'Q')
|
||
AS downtime_dgn,
|
||
( (ADD_MONTHS (
|
||
TRUNC (
|
||
COALESCE (kpi.datum_functieherstel, kpi.datum_reparatie),
|
||
'Q'),
|
||
+3))
|
||
- (TRUNC (
|
||
COALESCE (kpi.datum_functieherstel, kpi.datum_reparatie),
|
||
'Q')))
|
||
- (COALESCE (kpi.datum_functieherstel, kpi.datum_reparatie)
|
||
- TRUNC (
|
||
COALESCE (kpi.datum_functieherstel, kpi.datum_reparatie),
|
||
'Q'))
|
||
AS uptime_dgn,
|
||
'Eindkwartaal tellen' AS toelichting
|
||
FROM hcas_kpi_leveranciers kpi
|
||
WHERE 'Q'
|
||
|| TO_CHAR (
|
||
COALESCE (kpi.datum_functieherstel, kpi.datum_reparatie),
|
||
'Q')
|
||
|| ' '
|
||
|| TO_CHAR (
|
||
COALESCE (kpi.datum_functieherstel, kpi.datum_reparatie),
|
||
'yyyy') <>
|
||
'Q'
|
||
|| TO_CHAR (kpi.datum_uitgifte, 'Q')
|
||
|| ' '
|
||
|| TO_CHAR (kpi.datum_uitgifte, 'yyyy')
|
||
AND (kpi.datum_functieherstel < TRUNC(SYSDATE , 'Q') OR kpi.datum_reparatie < TRUNC(SYSDATE , 'Q') )
|
||
UNION ALL
|
||
-- Begin en eind NIET in zelfde Q of volgend Q: dan zijn er dus tussenliggende kwartalen met 100% downtime
|
||
-- Dit zijn dus uiitsluitend de meldingen die over meer dan 2 kwartalen gaan
|
||
-- Downtime is dan gelijk aan max. uptime
|
||
-- Dus: datum gereed > einddatum next Q kwartaal uitgifte, de opdracht heeft het gehele volgende kwartaal open gestaan.
|
||
-- Of : datum gereed is null op tellend kwartaal (Q waarin de melding is aangemaakt + resp. 1, 2, 3 of 4)
|
||
SELECT kpi.mld_opdr_key,
|
||
TO_CHAR ( (ADD_MONTHS (TRUNC (datum_uitgifte, 'Q'), 3)), 'yyyy')
|
||
|| ' Q'
|
||
|| TO_CHAR ( (ADD_MONTHS (TRUNC (datum_uitgifte, 'Q'), 3)), 'Q')
|
||
AS tellend_kwartaal,
|
||
kpi.ins_deel_key,
|
||
kpi.ins_deel_omschrijving,
|
||
kpi.prs_bedrijf_naam,
|
||
kpi.datum_uitgifte,
|
||
COALESCE (kpi.datum_functieherstel, kpi.datum_reparatie) datum_gereed,
|
||
ADD_MONTHS (TRUNC (datum_uitgifte, 'Q'), 6)
|
||
- ADD_MONTHS (TRUNC (datum_uitgifte, 'Q'), 3)
|
||
MAX_UPTIME,
|
||
ADD_MONTHS (TRUNC (datum_uitgifte, 'Q'), 6)
|
||
- ADD_MONTHS (TRUNC (datum_uitgifte, 'Q'), 3)
|
||
DOWNTIME_DGN,
|
||
0 UPTIME,
|
||
'Eerste volledige kwartaal down' AS toelichting
|
||
FROM (SELECT b.prs_bedrijf_key,
|
||
b.prs_bedrijf_naam,
|
||
onderhoud_obj.ins_deel_omschrijving,
|
||
opdracht.ins_deel_key,
|
||
opdracht.mld_opdr_key,
|
||
opdracht.datum_uitgifte,
|
||
opdracht.functieherstel,
|
||
opdracht.datum_functieherstel,
|
||
opdracht.gerepareerd,
|
||
opdracht.datum_reparatie
|
||
FROM prs_bedrijf b,
|
||
(SELECT o.ins_deel_key,
|
||
o.ins_deel_omschrijving,
|
||
fac.safe_to_number (
|
||
onderhoudsleverancier.ins_kenmerkdeel_waarde)
|
||
AS prs_bedrijf_key
|
||
FROM ins_deel o,
|
||
(SELECT kd.*
|
||
FROM ins_kenmerkdeel kd, ins_kenmerk km
|
||
WHERE kd.ins_kenmerk_key = km.ins_kenmerk_key
|
||
AND km.ins_srtkenmerk_key = 62)
|
||
onderhoudsleverancier
|
||
WHERE o.ins_deel_verwijder IS NULL
|
||
AND onderhoudsleverancier.ins_deel_key =
|
||
o.ins_deel_key) onderhoud_obj,
|
||
(SELECT mo.ins_deel_key,
|
||
m.mld_melding_key,
|
||
o.mld_opdr_key,
|
||
o.mld_typeopdr_key,
|
||
o.mld_statusopdr_key,
|
||
so.mld_statusopdr_omschrijving,
|
||
fac.safe_to_number (o.mld_uitvoerende_keys)
|
||
AS uitv_bedrijf,
|
||
fac.safe_to_date (
|
||
datum_uitg.mld_kenmerkopdr_waarde
|
||
|| ' '
|
||
|| tijd_uitg.mld_kenmerkopdr_waarde,
|
||
'dd-mm-yyyy hh24:mi')
|
||
AS datum_uitgifte,
|
||
functieherstel.fac_usrdata_omschr AS functieherstel,
|
||
fac.safe_to_date (
|
||
datum_functieherstel.mld_kenmerkopdr_waarde
|
||
|| ' '
|
||
|| tijd_functieherstel.mld_kenmerkopdr_waarde,
|
||
'dd-mm-yyyy hh24:mi')
|
||
AS datum_functieherstel,
|
||
reparatie.fac_usrdata_omschr AS gerepareerd,
|
||
fac.safe_to_date (
|
||
datum_reparatie.mld_kenmerkopdr_waarde
|
||
|| ' '
|
||
|| tijd_reparatie.mld_kenmerkopdr_waarde,
|
||
'dd-mm-yyyy hh24:mi')
|
||
AS datum_reparatie
|
||
FROM mld_melding_object mo,
|
||
mld_melding m,
|
||
mld_opdr o,
|
||
mld_statusopdr so,
|
||
(SELECT *
|
||
FROM mld_kenmerkopdr ko
|
||
WHERE mld_kenmerk_key = 402) datum_uitg,
|
||
(SELECT *
|
||
FROM mld_kenmerkopdr ko
|
||
WHERE mld_kenmerk_key = 403) tijd_uitg,
|
||
(SELECT *
|
||
FROM mld_kenmerkopdr ko, fac_usrdata ud
|
||
WHERE ko.mld_kenmerkopdr_waarde = ud.fac_usrdata_key
|
||
AND ud.fac_usrtab_key = 241
|
||
AND mld_kenmerk_key = 423) functieherstel,
|
||
(SELECT *
|
||
FROM mld_kenmerkopdr ko
|
||
WHERE mld_kenmerk_key = 422) datum_functieherstel,
|
||
(SELECT *
|
||
FROM mld_kenmerkopdr ko
|
||
WHERE mld_kenmerk_key = 425) tijd_functieherstel,
|
||
(SELECT *
|
||
FROM mld_kenmerkopdr ko, fac_usrdata ud
|
||
WHERE ko.mld_kenmerkopdr_waarde = ud.fac_usrdata_key
|
||
AND ud.fac_usrtab_key = 241
|
||
AND mld_kenmerk_key = 441) reparatie,
|
||
(SELECT *
|
||
FROM mld_kenmerkopdr ko
|
||
WHERE mld_kenmerk_key = 427) datum_reparatie,
|
||
(SELECT *
|
||
FROM mld_kenmerkopdr ko
|
||
WHERE mld_kenmerk_key = 428) tijd_reparatie
|
||
WHERE mo.mld_melding_key = m.mld_melding_key
|
||
AND o.mld_melding_key = m.mld_melding_key
|
||
AND o.mld_statusopdr_key = so.mld_statusopdr_key
|
||
AND datum_uitg.mld_opdr_key = o.mld_opdr_key
|
||
AND tijd_uitg.mld_opdr_key = o.mld_opdr_key
|
||
AND functieherstel.mld_opdr_key(+) = o.mld_opdr_key
|
||
AND datum_functieherstel.mld_opdr_key(+) =
|
||
o.mld_opdr_key
|
||
AND tijd_functieherstel.mld_opdr_key(+) =
|
||
o.mld_opdr_key
|
||
AND reparatie.mld_opdr_key(+) = o.mld_opdr_key
|
||
AND datum_reparatie.mld_opdr_key(+) = o.mld_opdr_key
|
||
AND tijd_reparatie.mld_opdr_key(+) = o.mld_opdr_key)
|
||
opdracht
|
||
WHERE prs_bedrijf_verwijder IS NULL
|
||
AND prs_bedrijf_leverancier = 1
|
||
AND onderhoud_obj.prs_bedrijf_key = b.prs_bedrijf_key
|
||
AND opdracht.uitv_bedrijf = b.prs_bedrijf_key
|
||
AND opdracht.ins_deel_key = onderhoud_obj.ins_deel_key) kpi
|
||
WHERE ( (COALESCE (kpi.datum_functieherstel, kpi.datum_reparatie) >
|
||
LAST_DAY (ADD_MONTHS (TRUNC (datum_uitgifte, 'Q'), 5)))
|
||
OR (kpi.datum_functieherstel IS NULL AND kpi.datum_reparatie IS NULL))
|
||
AND LAST_DAY (ADD_MONTHS (TRUNC (datum_uitgifte, 'Q'), 5)) < SYSDATE
|
||
UNION ALL
|
||
-- Datum gereed > einddatum 2 kwartalen verder, de opdracht heeft 2 gehele volgende kwartalen open gestaan.
|
||
SELECT kpi.mld_opdr_key,
|
||
TO_CHAR ( (ADD_MONTHS (TRUNC (datum_uitgifte, 'Q'), 6)), 'yyyy')
|
||
|| ' Q'
|
||
|| TO_CHAR ( (ADD_MONTHS (TRUNC (datum_uitgifte, 'Q'), 6)), 'Q')
|
||
AS tellend_kwartaal,
|
||
kpi.ins_deel_key,
|
||
kpi.ins_deel_omschrijving,
|
||
kpi.prs_bedrijf_naam,
|
||
kpi.datum_uitgifte,
|
||
COALESCE (kpi.datum_functieherstel, kpi.datum_reparatie) datum_gereed,
|
||
ADD_MONTHS (TRUNC (datum_uitgifte, 'Q'), 9)
|
||
- ADD_MONTHS (TRUNC (datum_uitgifte, 'Q'), 6)
|
||
MAX_UPTIME,
|
||
ADD_MONTHS (TRUNC (datum_uitgifte, 'Q'), 9)
|
||
- ADD_MONTHS (TRUNC (datum_uitgifte, 'Q'), 6)
|
||
DOWNTIME_DGN,
|
||
0 UPTIME,
|
||
'Tweede Kwartaal volledige down' AS toelichting
|
||
FROM (SELECT b.prs_bedrijf_key,
|
||
b.prs_bedrijf_naam,
|
||
onderhoud_obj.ins_deel_omschrijving,
|
||
opdracht.ins_deel_key,
|
||
opdracht.mld_opdr_key,
|
||
opdracht.datum_uitgifte,
|
||
opdracht.functieherstel,
|
||
opdracht.datum_functieherstel,
|
||
opdracht.gerepareerd,
|
||
opdracht.datum_reparatie
|
||
FROM prs_bedrijf b,
|
||
(SELECT o.ins_deel_key,
|
||
o.ins_deel_omschrijving,
|
||
fac.safe_to_number (
|
||
onderhoudsleverancier.ins_kenmerkdeel_waarde)
|
||
AS prs_bedrijf_key
|
||
FROM ins_deel o,
|
||
(SELECT kd.*
|
||
FROM ins_kenmerkdeel kd, ins_kenmerk km
|
||
WHERE kd.ins_kenmerk_key = km.ins_kenmerk_key
|
||
AND km.ins_srtkenmerk_key = 62)
|
||
onderhoudsleverancier
|
||
WHERE o.ins_deel_verwijder IS NULL
|
||
AND onderhoudsleverancier.ins_deel_key =
|
||
o.ins_deel_key) onderhoud_obj,
|
||
(SELECT mo.ins_deel_key,
|
||
m.mld_melding_key,
|
||
o.mld_opdr_key,
|
||
o.mld_typeopdr_key,
|
||
o.mld_statusopdr_key,
|
||
so.mld_statusopdr_omschrijving,
|
||
fac.safe_to_number (o.mld_uitvoerende_keys)
|
||
AS uitv_bedrijf,
|
||
fac.safe_to_date (
|
||
datum_uitg.mld_kenmerkopdr_waarde
|
||
|| ' '
|
||
|| tijd_uitg.mld_kenmerkopdr_waarde,
|
||
'dd-mm-yyyy hh24:mi')
|
||
AS datum_uitgifte,
|
||
functieherstel.fac_usrdata_omschr AS functieherstel,
|
||
fac.safe_to_date (
|
||
datum_functieherstel.mld_kenmerkopdr_waarde
|
||
|| ' '
|
||
|| tijd_functieherstel.mld_kenmerkopdr_waarde,
|
||
'dd-mm-yyyy hh24:mi')
|
||
AS datum_functieherstel,
|
||
reparatie.fac_usrdata_omschr AS gerepareerd,
|
||
fac.safe_to_date (
|
||
datum_reparatie.mld_kenmerkopdr_waarde
|
||
|| ' '
|
||
|| tijd_reparatie.mld_kenmerkopdr_waarde,
|
||
'dd-mm-yyyy hh24:mi')
|
||
AS datum_reparatie
|
||
FROM mld_melding_object mo,
|
||
mld_melding m,
|
||
mld_opdr o,
|
||
mld_statusopdr so,
|
||
(SELECT *
|
||
FROM mld_kenmerkopdr ko
|
||
WHERE mld_kenmerk_key = 402) datum_uitg,
|
||
(SELECT *
|
||
FROM mld_kenmerkopdr ko
|
||
WHERE mld_kenmerk_key = 403) tijd_uitg,
|
||
(SELECT *
|
||
FROM mld_kenmerkopdr ko, fac_usrdata ud
|
||
WHERE ko.mld_kenmerkopdr_waarde = ud.fac_usrdata_key
|
||
AND ud.fac_usrtab_key = 241
|
||
AND mld_kenmerk_key = 423) functieherstel,
|
||
(SELECT *
|
||
FROM mld_kenmerkopdr ko
|
||
WHERE mld_kenmerk_key = 422) datum_functieherstel,
|
||
(SELECT *
|
||
FROM mld_kenmerkopdr ko
|
||
WHERE mld_kenmerk_key = 425) tijd_functieherstel,
|
||
(SELECT *
|
||
FROM mld_kenmerkopdr ko, fac_usrdata ud
|
||
WHERE ko.mld_kenmerkopdr_waarde = ud.fac_usrdata_key
|
||
AND ud.fac_usrtab_key = 241
|
||
AND mld_kenmerk_key = 441) reparatie,
|
||
(SELECT *
|
||
FROM mld_kenmerkopdr ko
|
||
WHERE mld_kenmerk_key = 427) datum_reparatie,
|
||
(SELECT *
|
||
FROM mld_kenmerkopdr ko
|
||
WHERE mld_kenmerk_key = 428) tijd_reparatie
|
||
WHERE mo.mld_melding_key = m.mld_melding_key
|
||
AND o.mld_melding_key = m.mld_melding_key
|
||
AND o.mld_statusopdr_key = so.mld_statusopdr_key
|
||
AND datum_uitg.mld_opdr_key = o.mld_opdr_key
|
||
AND tijd_uitg.mld_opdr_key = o.mld_opdr_key
|
||
AND functieherstel.mld_opdr_key(+) = o.mld_opdr_key
|
||
AND datum_functieherstel.mld_opdr_key(+) =
|
||
o.mld_opdr_key
|
||
AND tijd_functieherstel.mld_opdr_key(+) =
|
||
o.mld_opdr_key
|
||
AND reparatie.mld_opdr_key(+) = o.mld_opdr_key
|
||
AND datum_reparatie.mld_opdr_key(+) = o.mld_opdr_key
|
||
AND tijd_reparatie.mld_opdr_key(+) = o.mld_opdr_key)
|
||
opdracht
|
||
WHERE prs_bedrijf_verwijder IS NULL
|
||
AND prs_bedrijf_leverancier = 1
|
||
AND onderhoud_obj.prs_bedrijf_key = b.prs_bedrijf_key
|
||
AND opdracht.uitv_bedrijf = b.prs_bedrijf_key
|
||
AND opdracht.ins_deel_key = onderhoud_obj.ins_deel_key) kpi
|
||
WHERE (COALESCE (kpi.datum_functieherstel, kpi.datum_reparatie) >
|
||
LAST_DAY (ADD_MONTHS (TRUNC (datum_uitgifte, 'Q'), 8))
|
||
OR (kpi.datum_functieherstel IS NULL AND kpi.datum_reparatie IS NULL))
|
||
AND LAST_DAY (ADD_MONTHS (TRUNC (datum_uitgifte, 'Q'), 8)) < SYSDATE
|
||
UNION ALL
|
||
-- Datum gereed > einddatum 3 kwartalen verder, de opdracht heeft 3 gehele volgende kwartalen open gestaan.
|
||
SELECT kpi.mld_opdr_key,
|
||
TO_CHAR ( (ADD_MONTHS (TRUNC (datum_uitgifte, 'Q'), 9)), 'yyyy')
|
||
|| ' Q'
|
||
|| TO_CHAR ( (ADD_MONTHS (TRUNC (datum_uitgifte, 'Q'), 9)), 'Q')
|
||
AS TELLEND_KWARTAAL,
|
||
kpi.ins_deel_key,
|
||
kpi.ins_deel_omschrijving,
|
||
kpi.prs_bedrijf_naam,
|
||
kpi.datum_uitgifte,
|
||
COALESCE (kpi.datum_functieherstel, kpi.datum_reparatie) datum_gereed,
|
||
ADD_MONTHS (TRUNC (datum_uitgifte, 'Q'), 12)
|
||
- ADD_MONTHS (TRUNC (datum_uitgifte, 'Q'), 9)
|
||
MAX_UPTIME,
|
||
ADD_MONTHS (TRUNC (datum_uitgifte, 'Q'), 12)
|
||
- ADD_MONTHS (TRUNC (datum_uitgifte, 'Q'), 9)
|
||
DOWNTIME_DGN,
|
||
0 UPTIME,
|
||
'Derde kwartaal volledig down' AS toelichting
|
||
FROM (SELECT b.prs_bedrijf_key,
|
||
b.prs_bedrijf_naam,
|
||
onderhoud_obj.ins_deel_omschrijving,
|
||
opdracht.ins_deel_key,
|
||
opdracht.mld_opdr_key,
|
||
opdracht.datum_uitgifte,
|
||
opdracht.functieherstel,
|
||
opdracht.datum_functieherstel,
|
||
opdracht.gerepareerd,
|
||
opdracht.datum_reparatie
|
||
FROM prs_bedrijf b,
|
||
(SELECT o.ins_deel_key,
|
||
o.ins_deel_omschrijving,
|
||
fac.safe_to_number (
|
||
onderhoudsleverancier.ins_kenmerkdeel_waarde)
|
||
AS prs_bedrijf_key
|
||
FROM ins_deel o,
|
||
(SELECT kd.*
|
||
FROM ins_kenmerkdeel kd, ins_kenmerk km
|
||
WHERE kd.ins_kenmerk_key = km.ins_kenmerk_key
|
||
AND km.ins_srtkenmerk_key = 62)
|
||
onderhoudsleverancier
|
||
WHERE o.ins_deel_verwijder IS NULL
|
||
AND onderhoudsleverancier.ins_deel_key =
|
||
o.ins_deel_key) onderhoud_obj,
|
||
(SELECT mo.ins_deel_key,
|
||
m.mld_melding_key,
|
||
o.mld_opdr_key,
|
||
o.mld_typeopdr_key,
|
||
o.mld_statusopdr_key,
|
||
so.mld_statusopdr_omschrijving,
|
||
fac.safe_to_number (o.mld_uitvoerende_keys)
|
||
AS uitv_bedrijf,
|
||
fac.safe_to_date (
|
||
datum_uitg.mld_kenmerkopdr_waarde
|
||
|| ' '
|
||
|| tijd_uitg.mld_kenmerkopdr_waarde,
|
||
'dd-mm-yyyy hh24:mi')
|
||
AS datum_uitgifte,
|
||
functieherstel.fac_usrdata_omschr AS functieherstel,
|
||
fac.safe_to_date (
|
||
datum_functieherstel.mld_kenmerkopdr_waarde
|
||
|| ' '
|
||
|| tijd_functieherstel.mld_kenmerkopdr_waarde,
|
||
'dd-mm-yyyy hh24:mi')
|
||
AS datum_functieherstel,
|
||
reparatie.fac_usrdata_omschr AS gerepareerd,
|
||
fac.safe_to_date (
|
||
datum_reparatie.mld_kenmerkopdr_waarde
|
||
|| ' '
|
||
|| tijd_reparatie.mld_kenmerkopdr_waarde,
|
||
'dd-mm-yyyy hh24:mi')
|
||
AS datum_reparatie
|
||
FROM mld_melding_object mo,
|
||
mld_melding m,
|
||
mld_opdr o,
|
||
mld_statusopdr so,
|
||
(SELECT *
|
||
FROM mld_kenmerkopdr ko
|
||
WHERE mld_kenmerk_key = 402) datum_uitg,
|
||
(SELECT *
|
||
FROM mld_kenmerkopdr ko
|
||
WHERE mld_kenmerk_key = 403) tijd_uitg,
|
||
(SELECT *
|
||
FROM mld_kenmerkopdr ko, fac_usrdata ud
|
||
WHERE ko.mld_kenmerkopdr_waarde = ud.fac_usrdata_key
|
||
AND ud.fac_usrtab_key = 241
|
||
AND mld_kenmerk_key = 423) functieherstel,
|
||
(SELECT *
|
||
FROM mld_kenmerkopdr ko
|
||
WHERE mld_kenmerk_key = 422) datum_functieherstel,
|
||
(SELECT *
|
||
FROM mld_kenmerkopdr ko
|
||
WHERE mld_kenmerk_key = 425) tijd_functieherstel,
|
||
(SELECT *
|
||
FROM mld_kenmerkopdr ko, fac_usrdata ud
|
||
WHERE ko.mld_kenmerkopdr_waarde = ud.fac_usrdata_key
|
||
AND ud.fac_usrtab_key = 241
|
||
AND mld_kenmerk_key = 441) reparatie,
|
||
(SELECT *
|
||
FROM mld_kenmerkopdr ko
|
||
WHERE mld_kenmerk_key = 427) datum_reparatie,
|
||
(SELECT *
|
||
FROM mld_kenmerkopdr ko
|
||
WHERE mld_kenmerk_key = 428) tijd_reparatie
|
||
WHERE mo.mld_melding_key = m.mld_melding_key
|
||
AND o.mld_melding_key = m.mld_melding_key
|
||
AND o.mld_statusopdr_key = so.mld_statusopdr_key
|
||
AND datum_uitg.mld_opdr_key = o.mld_opdr_key
|
||
AND tijd_uitg.mld_opdr_key = o.mld_opdr_key
|
||
AND functieherstel.mld_opdr_key(+) = o.mld_opdr_key
|
||
AND datum_functieherstel.mld_opdr_key(+) =
|
||
o.mld_opdr_key
|
||
AND tijd_functieherstel.mld_opdr_key(+) =
|
||
o.mld_opdr_key
|
||
AND reparatie.mld_opdr_key(+) = o.mld_opdr_key
|
||
AND datum_reparatie.mld_opdr_key(+) = o.mld_opdr_key
|
||
AND tijd_reparatie.mld_opdr_key(+) = o.mld_opdr_key)
|
||
opdracht
|
||
WHERE prs_bedrijf_verwijder IS NULL
|
||
AND prs_bedrijf_leverancier = 1
|
||
AND onderhoud_obj.prs_bedrijf_key = b.prs_bedrijf_key
|
||
AND opdracht.uitv_bedrijf = b.prs_bedrijf_key
|
||
AND opdracht.ins_deel_key = onderhoud_obj.ins_deel_key) kpi
|
||
WHERE (COALESCE (kpi.datum_functieherstel, kpi.datum_reparatie) >
|
||
LAST_DAY (ADD_MONTHS (TRUNC (datum_uitgifte, 'Q'), 11))
|
||
OR (kpi.datum_functieherstel IS NULL AND kpi.datum_reparatie IS NULL))
|
||
AND LAST_DAY (ADD_MONTHS (TRUNC (datum_uitgifte, 'Q'), 11)) < SYSDATE
|
||
UNION ALL
|
||
-- De opdracht heeft 4 gehele volgende kwartalen/ een volledig jaar open gestaan.
|
||
SELECT kpi.mld_opdr_key,
|
||
TO_CHAR ( (ADD_MONTHS (TRUNC (datum_uitgifte, 'Q'), 12)), 'yyyy')
|
||
|| ' Q'
|
||
|| TO_CHAR ( (ADD_MONTHS (TRUNC (datum_uitgifte, 'Q'), 12)), 'Q')
|
||
AS TELLEND_KWARTAAL,
|
||
kpi.ins_deel_key,
|
||
kpi.ins_deel_omschrijving,
|
||
kpi.prs_bedrijf_naam,
|
||
kpi.datum_uitgifte,
|
||
COALESCE (kpi.datum_functieherstel, kpi.datum_reparatie) datum_gereed,
|
||
ADD_MONTHS (TRUNC (datum_uitgifte, 'Q'), 15)
|
||
- ADD_MONTHS (TRUNC (datum_uitgifte, 'Q'), 12)
|
||
MAX_UPTIME,
|
||
ADD_MONTHS (TRUNC (datum_uitgifte, 'Q'), 15)
|
||
- ADD_MONTHS (TRUNC (datum_uitgifte, 'Q'), 12)
|
||
DOWNTIME_DGN,
|
||
0 UPTIME,
|
||
'Vierde kwartaal volledig down' AS omschrijving
|
||
FROM (SELECT b.prs_bedrijf_key,
|
||
b.prs_bedrijf_naam,
|
||
onderhoud_obj.ins_deel_omschrijving,
|
||
opdracht.ins_deel_key,
|
||
opdracht.mld_opdr_key,
|
||
opdracht.datum_uitgifte,
|
||
opdracht.functieherstel,
|
||
opdracht.datum_functieherstel,
|
||
opdracht.gerepareerd,
|
||
opdracht.datum_reparatie
|
||
FROM prs_bedrijf b,
|
||
(SELECT o.ins_deel_key,
|
||
o.ins_deel_omschrijving,
|
||
fac.safe_to_number (
|
||
onderhoudsleverancier.ins_kenmerkdeel_waarde)
|
||
AS prs_bedrijf_key
|
||
FROM ins_deel o,
|
||
(SELECT kd.*
|
||
FROM ins_kenmerkdeel kd, ins_kenmerk km
|
||
WHERE kd.ins_kenmerk_key = km.ins_kenmerk_key
|
||
AND km.ins_srtkenmerk_key = 62)
|
||
onderhoudsleverancier
|
||
WHERE o.ins_deel_verwijder IS NULL
|
||
AND onderhoudsleverancier.ins_deel_key =
|
||
o.ins_deel_key) onderhoud_obj,
|
||
(SELECT mo.ins_deel_key,
|
||
m.mld_melding_key,
|
||
o.mld_opdr_key,
|
||
o.mld_typeopdr_key,
|
||
o.mld_statusopdr_key,
|
||
so.mld_statusopdr_omschrijving,
|
||
fac.safe_to_number (o.mld_uitvoerende_keys)
|
||
AS uitv_bedrijf,
|
||
fac.safe_to_date (
|
||
datum_uitg.mld_kenmerkopdr_waarde
|
||
|| ' '
|
||
|| tijd_uitg.mld_kenmerkopdr_waarde,
|
||
'dd-mm-yyyy hh24:mi')
|
||
AS datum_uitgifte,
|
||
functieherstel.fac_usrdata_omschr AS functieherstel,
|
||
fac.safe_to_date (
|
||
datum_functieherstel.mld_kenmerkopdr_waarde
|
||
|| ' '
|
||
|| tijd_functieherstel.mld_kenmerkopdr_waarde,
|
||
'dd-mm-yyyy hh24:mi')
|
||
AS datum_functieherstel,
|
||
reparatie.fac_usrdata_omschr AS gerepareerd,
|
||
fac.safe_to_date (
|
||
datum_reparatie.mld_kenmerkopdr_waarde
|
||
|| ' '
|
||
|| tijd_reparatie.mld_kenmerkopdr_waarde,
|
||
'dd-mm-yyyy hh24:mi')
|
||
AS datum_reparatie
|
||
FROM mld_melding_object mo,
|
||
mld_melding m,
|
||
mld_opdr o,
|
||
mld_statusopdr so,
|
||
(SELECT *
|
||
FROM mld_kenmerkopdr ko
|
||
WHERE mld_kenmerk_key = 402) datum_uitg,
|
||
(SELECT *
|
||
FROM mld_kenmerkopdr ko
|
||
WHERE mld_kenmerk_key = 403) tijd_uitg,
|
||
(SELECT *
|
||
FROM mld_kenmerkopdr ko, fac_usrdata ud
|
||
WHERE ko.mld_kenmerkopdr_waarde = ud.fac_usrdata_key
|
||
AND ud.fac_usrtab_key = 241
|
||
AND mld_kenmerk_key = 423) functieherstel,
|
||
(SELECT *
|
||
FROM mld_kenmerkopdr ko
|
||
WHERE mld_kenmerk_key = 422) datum_functieherstel,
|
||
(SELECT *
|
||
FROM mld_kenmerkopdr ko
|
||
WHERE mld_kenmerk_key = 425) tijd_functieherstel,
|
||
(SELECT *
|
||
FROM mld_kenmerkopdr ko, fac_usrdata ud
|
||
WHERE ko.mld_kenmerkopdr_waarde = ud.fac_usrdata_key
|
||
AND ud.fac_usrtab_key = 241
|
||
AND mld_kenmerk_key = 441) reparatie,
|
||
(SELECT *
|
||
FROM mld_kenmerkopdr ko
|
||
WHERE mld_kenmerk_key = 427) datum_reparatie,
|
||
(SELECT *
|
||
FROM mld_kenmerkopdr ko
|
||
WHERE mld_kenmerk_key = 428) tijd_reparatie
|
||
WHERE mo.mld_melding_key = m.mld_melding_key
|
||
AND o.mld_melding_key = m.mld_melding_key
|
||
AND o.mld_statusopdr_key = so.mld_statusopdr_key
|
||
AND datum_uitg.mld_opdr_key = o.mld_opdr_key
|
||
AND tijd_uitg.mld_opdr_key = o.mld_opdr_key
|
||
AND functieherstel.mld_opdr_key(+) = o.mld_opdr_key
|
||
AND datum_functieherstel.mld_opdr_key(+) =
|
||
o.mld_opdr_key
|
||
AND tijd_functieherstel.mld_opdr_key(+) =
|
||
o.mld_opdr_key
|
||
AND reparatie.mld_opdr_key(+) = o.mld_opdr_key
|
||
AND datum_reparatie.mld_opdr_key(+) = o.mld_opdr_key
|
||
AND tijd_reparatie.mld_opdr_key(+) = o.mld_opdr_key)
|
||
opdracht
|
||
WHERE prs_bedrijf_verwijder IS NULL
|
||
AND prs_bedrijf_leverancier = 1
|
||
AND onderhoud_obj.prs_bedrijf_key = b.prs_bedrijf_key
|
||
AND opdracht.uitv_bedrijf = b.prs_bedrijf_key
|
||
AND opdracht.ins_deel_key = onderhoud_obj.ins_deel_key) kpi
|
||
WHERE (COALESCE (kpi.datum_functieherstel, kpi.datum_reparatie) >
|
||
LAST_DAY (ADD_MONTHS (TRUNC (datum_uitgifte, 'Q'), 14))
|
||
OR (kpi.datum_functieherstel IS NULL AND kpi.datum_reparatie IS NULL))
|
||
AND LAST_DAY (ADD_MONTHS (TRUNC (datum_uitgifte, 'Q'), 14)) < SYSDATE;
|
||
|
||
---- ===================================================
|
||
--- Views tbv de FM dashboard
|
||
--- HCAS#54956 Alles op Groen
|
||
|
||
--- Operationeel Trends
|
||
--- Resultaatgebied 2: Gem. doorlooptijd meldingen per locatie per meldingcategorie
|
||
CREATE OR REPLACE VIEW HCAS_V_TRENDS_RESG2
|
||
AS
|
||
SELECT l.alg_locatie_omschrijving,
|
||
vg.ins_discipline_omschrijving,
|
||
TO_CHAR (m.mld_melding_einddatum, 'YYYY')
|
||
|| ' / '
|
||
|| TO_CHAR (m.mld_melding_einddatum, 'mm')
|
||
AS periode,
|
||
(SUM (m.mld_melding_einddatum - m.mld_melding_datum))
|
||
/ (COUNT (m.mld_melding_key))
|
||
AS gem_doorlooptijd
|
||
FROM mld_melding m,
|
||
mld_stdmelding sm,
|
||
ins_tab_discipline vg,
|
||
alg_locatie l
|
||
WHERE m.mld_melding_status IN (5, 6) --- status is afgemeld of historie
|
||
AND m.mld_stdmelding_key = sm.mld_stdmelding_key
|
||
AND sm.mld_ins_discipline_key = vg.ins_discipline_key
|
||
AND m.mld_alg_locatie_key = l.alg_locatie_key
|
||
AND m.mld_melding_einddatum > TO_DATE ('01-01-2000', 'dd-mm-yyyy')
|
||
AND MONTHS_BETWEEN (TRUNC (TRUNC (SYSDATE, 'Month'), 'Month'),
|
||
m.mld_melding_datum) < 12
|
||
AND MONTHS_BETWEEN (TRUNC (TRUNC (SYSDATE, 'Month'), 'Month'),
|
||
m.mld_melding_datum) > 0
|
||
GROUP BY l.alg_locatie_omschrijving,
|
||
vg.ins_discipline_omschrijving,
|
||
TO_CHAR (m.mld_melding_einddatum, 'YYYY')
|
||
|| ' / '
|
||
|| TO_CHAR (m.mld_melding_einddatum, 'mm')
|
||
ORDER BY l.alg_locatie_omschrijving,
|
||
vg.ins_discipline_omschrijving,
|
||
TO_CHAR (m.mld_melding_einddatum, 'YYYY')
|
||
|| ' / '
|
||
|| TO_CHAR (m.mld_melding_einddatum, 'mm');
|
||
|
||
--- Operationeel Trends
|
||
--- Resultaatgebied 3: Gem. uptime apparaten per vestiging
|
||
CREATE OR REPLACE VIEW HCAS_V_TRENDS_RESG3
|
||
AS
|
||
SELECT objecten.periode,
|
||
objecten.locatie,
|
||
objecten.max_dgn * COUNT (objecten.ins_deel_key) max_uptime,
|
||
COUNT (objecten.ins_deel_key) aant_obj,
|
||
SUM (nvl(storingen.downtime,0)) downtime,
|
||
(objecten.max_dgn * COUNT (objecten.ins_deel_key)) - SUM (nvl(storingen.downtime,0)) uptime,
|
||
( ( (objecten.max_dgn * COUNT (objecten.ins_deel_key)) - SUM (nvl(storingen.downtime,0)) ) / ( objecten.max_dgn * COUNT (objecten.ins_deel_key) )) *100 perc_uptime
|
||
FROM (SELECT TO_CHAR (periode.begin_mnd, 'YYYY')
|
||
|| ' / '
|
||
|| TO_CHAR (periode.begin_mnd, 'mm')
|
||
AS periode,
|
||
eind_mnd - begin_mnd max_dgn,
|
||
l.alg_locatie_omschrijving locatie,
|
||
o.ins_deel_key
|
||
FROM ( SELECT ADD_MONTHS (TRUNC (SYSDATE, 'MM'), -1 * ROWNUM)
|
||
begin_mnd,
|
||
LAST_DAY (
|
||
ADD_MONTHS (TRUNC (SYSDATE, 'MM'), -1 * ROWNUM))
|
||
eind_mnd
|
||
FROM DUAL
|
||
CONNECT BY LEVEL <= 12) periode,
|
||
ins_deel o,
|
||
alg_locatie l
|
||
WHERE o.ins_alg_locatie_key = l.alg_locatie_key
|
||
AND o.ins_deel_aanmaak < periode.begin_mnd
|
||
AND (o.ins_deel_verwijder > periode.eind_mnd
|
||
OR o.ins_deel_verwijder IS NULL)
|
||
AND (o.ins_deel_vervaldatum > periode.eind_mnd
|
||
OR o.ins_deel_vervaldatum IS NULL)) objecten
|
||
LEFT OUTER JOIN
|
||
(SELECT TO_CHAR (periode.begin_mnd, 'YYYY')
|
||
|| ' / '
|
||
|| TO_CHAR (periode.begin_mnd, 'mm')
|
||
AS periode,
|
||
(eind_mnd - begin_mnd) max_dgn,
|
||
mo.ins_deel_key,
|
||
CASE
|
||
--- scenario 1: begin en eind van de melding vallen in dezelfde maand
|
||
WHEN (mld_melding_datum > begin_mnd
|
||
AND mld_melding_einddatum < eind_mnd)
|
||
THEN
|
||
mld_melding_einddatum - mld_melding_datum
|
||
--- scenario 2: begin van de melding valt binnen de maand maar het einde niet
|
||
WHEN (mld_melding_datum >= begin_mnd
|
||
AND mld_melding_einddatum > eind_mnd)
|
||
THEN
|
||
eind_mnd - mld_melding_datum
|
||
--- scenario 3: begin en einde van de melding vallen buiten de maand, dan is de downtime gewoon de max
|
||
WHEN (mld_melding_datum < begin_mnd
|
||
AND mld_melding_einddatum > eind_mnd)
|
||
THEN
|
||
eind_mnd - begin_mnd
|
||
--- scenario 4: meldingdatum ligt voor het begin van de maand maar de einddatum valt wel in de maand
|
||
ELSE
|
||
mld_melding_einddatum - begin_mnd
|
||
END
|
||
AS downtime,
|
||
m.mld_melding_key,
|
||
mld_melding_datum,
|
||
mld_melding_einddatum,
|
||
vg.ins_discipline_omschrijving
|
||
FROM ( SELECT ADD_MONTHS (TRUNC (SYSDATE, 'MM'), -1 * ROWNUM)
|
||
begin_mnd,
|
||
LAST_DAY (
|
||
ADD_MONTHS (TRUNC (SYSDATE, 'MM'), -1 * ROWNUM))
|
||
eind_mnd
|
||
FROM DUAL
|
||
CONNECT BY LEVEL <= 12) periode,
|
||
mld_melding m,
|
||
mld_melding_object mo,
|
||
mld_stdmelding sm,
|
||
ins_tab_discipline vg
|
||
WHERE m.mld_stdmelding_key = sm.mld_stdmelding_key
|
||
AND sm.mld_ins_discipline_key = vg.ins_discipline_key
|
||
AND mld_melding_datum < periode.eind_mnd
|
||
AND COALESCE (mld_melding_einddatum, SYSDATE) >
|
||
periode.begin_mnd
|
||
AND m.mld_melding_key = mo.mld_melding_key) storingen
|
||
ON objecten.periode = storingen.periode
|
||
AND objecten.ins_deel_key = storingen.ins_deel_key
|
||
GROUP BY objecten.periode, objecten.max_dgn, objecten.locatie
|
||
ORDER BY objecten.periode, objecten.locatie;
|
||
|
||
--- Operationeel Processen
|
||
--- Resultaat gebied 1: Top 5 vakgroep aantal meldingen per maand per locatie
|
||
CREATE OR REPLACE VIEW HCAS_V_PROCESSEN_RESG1
|
||
AS
|
||
SELECT periode,
|
||
locatie,
|
||
vakgroep,
|
||
ranking,
|
||
aantal_mld
|
||
FROM (SELECT periode,
|
||
locatie,
|
||
vakgroep,
|
||
aantal_mld,
|
||
RANK ()
|
||
OVER (PARTITION BY periode, locatie
|
||
ORDER BY aantal_mld DESC)
|
||
RANKING
|
||
FROM ( SELECT TO_CHAR (m.mld_melding_datum, 'YYYY')
|
||
|| ' / '
|
||
|| TO_CHAR (m.mld_melding_datum, 'mm')
|
||
AS periode,
|
||
l.alg_locatie_omschrijving AS locatie,
|
||
vg.ins_discipline_omschrijving AS vakgroep,
|
||
COUNT (m.mld_melding_key) AS aantal_mld
|
||
FROM mld_melding m,
|
||
mld_stdmelding sm,
|
||
ins_tab_discipline vg,
|
||
alg_locatie l
|
||
WHERE m.mld_stdmelding_key = sm.mld_stdmelding_key
|
||
AND sm.mld_ins_discipline_key =
|
||
vg.ins_discipline_key
|
||
AND m.mld_alg_locatie_key = l.alg_locatie_key
|
||
AND m.mld_melding_einddatum >
|
||
TO_DATE ('01-01-2000', 'dd-mm-yyyy')
|
||
AND MONTHS_BETWEEN (
|
||
TRUNC (TRUNC (SYSDATE, 'Month'), 'Month'),
|
||
m.mld_melding_datum) <
|
||
12
|
||
AND MONTHS_BETWEEN (
|
||
TRUNC (TRUNC (SYSDATE, 'Month'), 'Month'),
|
||
m.mld_melding_datum) >
|
||
0
|
||
GROUP BY TO_CHAR (m.mld_melding_datum, 'YYYY')
|
||
|| ' / '
|
||
|| TO_CHAR (m.mld_melding_datum, 'mm'),
|
||
l.alg_locatie_omschrijving,
|
||
vg.ins_discipline_omschrijving
|
||
ORDER BY TO_CHAR (m.mld_melding_datum, 'YYYY')
|
||
|| ' / '
|
||
|| TO_CHAR (m.mld_melding_datum, 'mm'),
|
||
l.alg_locatie_omschrijving,
|
||
COUNT (m.mld_melding_key) DESC)
|
||
meldingen_categorie) RANK
|
||
WHERE RANKING < 6;
|
||
|
||
--- Operationeel Processen
|
||
--- Resultaat gebied 2: Gem. doorlooptijd per maand, per locatie per vakgroep
|
||
CREATE OR REPLACE VIEW HCAS_V_PROCESSEN_RESG2
|
||
AS
|
||
SELECT TO_CHAR (m.mld_melding_einddatum, 'YYYY')
|
||
|| ' / '
|
||
|| TO_CHAR (m.mld_melding_datum, 'mm')
|
||
AS periode,
|
||
l.alg_locatie_omschrijving,
|
||
vg.ins_discipline_omschrijving,
|
||
(SUM (m.mld_melding_einddatum - m.mld_melding_datum))
|
||
/ (COUNT (m.mld_melding_key))
|
||
AS gem_doorlooptijd
|
||
FROM mld_melding m,
|
||
mld_stdmelding sm,
|
||
ins_tab_discipline vg,
|
||
alg_locatie l
|
||
WHERE m.mld_stdmelding_key = sm.mld_stdmelding_key
|
||
AND sm.mld_ins_discipline_key = vg.ins_discipline_key
|
||
AND m.mld_alg_locatie_key = l.alg_locatie_key
|
||
AND m.mld_melding_einddatum > TO_DATE ('01-01-2000', 'dd-mm-yyyy')
|
||
AND MONTHS_BETWEEN (TRUNC (TRUNC (SYSDATE, 'Month'), 'Month'),
|
||
m.mld_melding_datum) < 12
|
||
AND MONTHS_BETWEEN (TRUNC (TRUNC (SYSDATE, 'Month'), 'Month'),
|
||
m.mld_melding_datum) > 0
|
||
GROUP BY TO_CHAR (m.mld_melding_einddatum, 'YYYY')
|
||
|| ' / '
|
||
|| TO_CHAR (m.mld_melding_datum, 'mm'),
|
||
l.alg_locatie_omschrijving,
|
||
vg.ins_discipline_omschrijving
|
||
ORDER BY TO_CHAR (m.mld_melding_einddatum, 'YYYY')
|
||
|| ' / '
|
||
|| TO_CHAR (m.mld_melding_datum, 'mm'),
|
||
l.alg_locatie_omschrijving,
|
||
vg.ins_discipline_omschrijving;
|
||
|
||
--- Operationeel Processen
|
||
--- Resultaat gebied 3: Gem. uptime van apparaten per vestiging
|
||
CREATE OR REPLACE VIEW HCAS_V_PROCESSEN_RESG3
|
||
AS
|
||
SELECT objecten.periode,
|
||
objecten.locatie,
|
||
storingen.vakgroep,
|
||
objecten.max_dgn * COUNT (objecten.ins_deel_key) max_uptime,
|
||
COUNT (objecten.ins_deel_key) aant_obj,
|
||
SUM (NVL (storingen.downtime, 0)) downtime,
|
||
(objecten.max_dgn * COUNT (objecten.ins_deel_key))
|
||
- SUM (NVL (storingen.downtime, 0))
|
||
uptime,
|
||
( ( (objecten.max_dgn * COUNT (objecten.ins_deel_key))
|
||
- SUM (NVL (storingen.downtime, 0)))
|
||
/ (objecten.max_dgn * COUNT (objecten.ins_deel_key)))
|
||
* 100
|
||
perc_uptime
|
||
FROM (SELECT TO_CHAR (periode.begin_mnd, 'YYYY')
|
||
|| ' / '
|
||
|| TO_CHAR (periode.begin_mnd, 'mm')
|
||
AS periode,
|
||
eind_mnd - begin_mnd max_dgn,
|
||
l.alg_locatie_omschrijving locatie,
|
||
o.ins_deel_key
|
||
FROM ( SELECT ADD_MONTHS (TRUNC (SYSDATE, 'MM'), -1 * ROWNUM)
|
||
begin_mnd,
|
||
LAST_DAY(ADD_MONTHS (TRUNC (SYSDATE, 'MM'),
|
||
-1 * ROWNUM))
|
||
eind_mnd
|
||
FROM DUAL
|
||
CONNECT BY LEVEL <= 12) periode,
|
||
ins_deel o,
|
||
alg_locatie l
|
||
WHERE o.ins_alg_locatie_key = l.alg_locatie_key
|
||
AND o.ins_deel_aanmaak < periode.begin_mnd
|
||
AND (o.ins_deel_verwijder > periode.eind_mnd
|
||
OR o.ins_deel_verwijder IS NULL)
|
||
AND (o.ins_deel_vervaldatum > periode.eind_mnd
|
||
OR o.ins_deel_vervaldatum IS NULL)) objecten
|
||
LEFT OUTER JOIN
|
||
(SELECT TO_CHAR (periode.begin_mnd, 'YYYY')
|
||
|| ' / '
|
||
|| TO_CHAR (periode.begin_mnd, 'mm')
|
||
AS periode,
|
||
(eind_mnd - begin_mnd) max_dgn,
|
||
mo.ins_deel_key,
|
||
CASE
|
||
--- scenario 1: begin en eind van de melding vallen in dezelfde maand
|
||
WHEN (mld_melding_datum > begin_mnd
|
||
AND mld_melding_einddatum < eind_mnd)
|
||
THEN
|
||
mld_melding_einddatum - mld_melding_datum
|
||
--- scenario 2: begin van de melding valt binnen de maand maar het einde niet
|
||
WHEN (mld_melding_datum >= begin_mnd
|
||
AND mld_melding_einddatum > eind_mnd)
|
||
THEN
|
||
eind_mnd - mld_melding_datum
|
||
--- scenario 3: begin en einde van de melding vallen buiten de maand, dan is de downtime gewoon de max
|
||
WHEN (mld_melding_datum < begin_mnd
|
||
AND mld_melding_einddatum > eind_mnd)
|
||
THEN
|
||
eind_mnd - begin_mnd
|
||
--- scenario 4: meldingdatum ligt voor het begin van de maand maar de einddatum valt wel in de maand
|
||
ELSE
|
||
mld_melding_einddatum - begin_mnd
|
||
END
|
||
AS downtime,
|
||
m.mld_melding_key,
|
||
mld_melding_datum,
|
||
mld_melding_einddatum,
|
||
vg.ins_discipline_omschrijving vakgroep
|
||
FROM ( SELECT ADD_MONTHS (TRUNC (SYSDATE, 'MM'), -1 * ROWNUM)
|
||
begin_mnd,
|
||
LAST_DAY(ADD_MONTHS (TRUNC (SYSDATE, 'MM'),
|
||
-1 * ROWNUM))
|
||
eind_mnd
|
||
FROM DUAL
|
||
CONNECT BY LEVEL <= 12) periode,
|
||
mld_melding m,
|
||
mld_melding_object mo,
|
||
mld_stdmelding sm,
|
||
ins_tab_discipline vg
|
||
WHERE m.mld_stdmelding_key = sm.mld_stdmelding_key
|
||
AND sm.mld_ins_discipline_key = vg.ins_discipline_key
|
||
AND mld_melding_datum < periode.eind_mnd
|
||
AND COALESCE (mld_melding_einddatum, SYSDATE) >
|
||
periode.begin_mnd
|
||
AND m.mld_melding_key = mo.mld_melding_key) storingen
|
||
ON objecten.periode = storingen.periode
|
||
AND objecten.ins_deel_key = storingen.ins_deel_key
|
||
WHERE storingen.vakgroep IS NOT NULL --- dus hier wordt alleen gekeken naar objecten die ook daadwerkelijk in storing hebben gestaan
|
||
GROUP BY objecten.periode,
|
||
objecten.max_dgn,
|
||
objecten.locatie,
|
||
storingen.vakgroep
|
||
ORDER BY objecten.periode, objecten.locatie, storingen.vakgroep;
|
||
|
||
------ payload end ------
|
||
|
||
SET DEFINE OFF
|
||
|
||
BEGIN
|
||
adm.systrackscriptId ('$Id$',
|
||
0);
|
||
END;
|
||
/
|
||
|
||
COMMIT;
|
||
SET ECHO OFF
|
||
SPOOL OFF
|
||
SET DEFINE ON
|
||
PROMPT Logfile of this upgrade is: &fcltlogfile |