Files
Customer/KFHT/kfht.sql
Maarten van der Heide d41a91655d KFHT#83373 Rap/Opdrachten (gekoppeld aan contract)
svn path=/Customer/trunk/; revision=64507
2024-05-03 08:28:41 +00:00

1581 lines
65 KiB
SQL

--
-- $Id$
--
-- Script containing customer specific db-configuration for KFHT.
DEFINE thisfile = 'KFHT.SQL'
DEFINE dbuser = '^KFHT'
SET ECHO ON
SET DEFINE ON
COLUMN fcltlogfile NEW_VALUE fcltlogfile NOPRINT;
COLUMN fcltcusttxt NEW_VALUE fcltcusttxt NOPRINT;
WHENEVER SQLERROR CONTINUE;
SELECT adm.getscriptspoolfile('&thisfile') AS fcltlogfile FROM DUAL;
SPOOL &fcltlogfile
WHENEVER SQLERROR EXIT;
SELECT adm.checkscriptcust('&dbuser') AS fcltcusttxt FROM DUAL;
WHENEVER SQLERROR CONTINUE;
---------------------------------------
PROMPT &fcltcusttxt
---------------------------------------
SET DEFINE OFF
------ payload begin ------
CREATE OR REPLACE PACKAGE KFHT
AS
PROCEDURE email_asml (pfrom IN VARCHAR2,
pto IN VARCHAR2,
psubject IN VARCHAR2,
pbody IN VARCHAR2,
psessionid IN VARCHAR2,
pemailkey IN NUMBER);
END;
/
CREATE OR REPLACE PACKAGE BODY KFHT
AS
--
--Rapportages
--
PROCEDURE email_asml (pfrom IN VARCHAR2,
pto IN VARCHAR2,
psubject IN VARCHAR2,
pbody IN VARCHAR2,
psessionid IN VARCHAR2,
pemailkey IN NUMBER)
AS
sender prs_perslid.prs_perslid_key%TYPE;
kostenplaats prs_afdeling.prs_kostenplaats_key%TYPE;
newkey mld_melding.mld_melding_key%TYPE;
defaultstdmelding fac_setting.fac_setting_default%TYPE;
kkey_att mld_kenmerk.mld_kenmerk_key%TYPE;
kkey_mail mld_kenmerk.mld_kenmerk_key%TYPE;
errormsg fac_result.fac_result_waarde%TYPE;
BEGIN
CASE
WHEN UPPER (pto) LIKE 'ASML@%'
THEN
sender := 45581; -- Koppeling Planon
SELECT fac_setting_pvalue
INTO defaultstdmelding
FROM fac_setting
WHERE fac_setting_name = 'defaultstdmelding';
--kkey_att := 1;
kkey_mail := 2521; -- Kenmerk voor ontvangen mail
-- suggested extensions:
-- check for MLDUSE-write autorisations
-- parse the subject to find an appropriate stdmelding, if uniquely possible
-- append (as a note?) to an existing melding if #key is found in the subject
BEGIN
INSERT INTO mld_melding (mld_melding_module,
mld_meldbron_key,
mld_melding_datum,
mld_melding_onderwerp,
mld_melding_omschrijving,
mld_melding_status,
mld_alg_locatie_key,
mld_stdmelding_key,
prs_perslid_key,
prs_perslid_key_voor,
prs_kostenplaats_key,
mld_melding_spoed)
VALUES ('MLD',
4, -- email
SYSDATE,
SUBSTR (psubject, 1, 80),
SUBSTR (REPLACE (REPLACE( SUBSTR (pbody, 1, 4000),
CHR(13)),
CHR (10) || CHR (10),
CHR (10)),
1,
4000), -- verwijder onnodige witregels
NULL,
1,
defaultstdmelding,
sender,
sender,
NULL,
3)
RETURNING mld_melding_key
INTO newkey;
INSERT INTO fac_result (fac_result_sessionid,
fac_result_naam,
fac_result_waarde)
VALUES (psessionid,
'kenmerkorgmailpath',
'MLD\M' || TO_CHAR (TRUNC (newkey / 1000), 'FM0000') || '___\M' || newkey || '\' || kkey_mail || '\');
mld.setmeldingstatus (newkey, 2, sender);
END;
ELSE
NULL;
END CASE;
IF errormsg IS NOT NULL
THEN
INSERT INTO fac_result (fac_result_sessionid,
fac_result_naam,
fac_result_waarde)
VALUES (psessionid, 'errormsg', errormsg);
END IF;
EXCEPTION
WHEN OTHERS
THEN
fac.writelog (
'PROCESSEMAIL',
'W',
'Mail kon niet verwerkt worden afzender: '
|| pfrom
|| '['
|| errormsg
|| ']',
'OTHERS (error '
|| SQLCODE
|| '/'
|| SUBSTR (SQLERRM, 1, 100)
|| ')');
INSERT INTO fac_result (fac_result_sessionid,
fac_result_naam,
fac_result_waarde)
VALUES (psessionid,
'errormsg',
'Database fout - Neem contact op met uw systeembeheerder');
END;
END;
/
-- Import vanuit Strukton
CREATE OR REPLACE PROCEDURE kfht_import_opdrstat_strukton (p_import_key IN NUMBER)
AS
c_delim VARCHAR2 (1) := ';';
v_newline VARCHAR2 (4000); -- Input line
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_aanduiding VARCHAR2 (1000) := '';
header_is_valid NUMBER := 0;
v_count_tot NUMBER (10) := 0;
v_count_imp NUMBER (10) := 0;
v_ongeldig NUMBER (1) := 0;
-- De importvelden
v_mld_opdr_key_tekst VARCHAR2 (100);
v_extern_nummer VARCHAR2 (100);
v_status_code VARCHAR2 (100);
v_status NUMBER (10);
v_datumtijd_tekst VARCHAR2 (100);
v_datumtijd DATE;
v_status_tekst VARCHAR2 (100);
v_opmerking VARCHAR2 (4000);
--v_totaal_tekst VARCHAR2 (100);
--v_totaal NUMBER (8,2);
--v_correctie_tekst VARCHAR2 (100);
--v_correctie NUMBER (8,2);
-- Overige velden
v_mld_opdr_key NUMBER (10);
v_mld_opdr_opmerking VARCHAR2 (4000);
CURSOR c1
IS
SELECT *
FROM fac_imp_file
WHERE fac_import_key = p_import_key
ORDER BY fac_imp_file_index;
BEGIN
DELETE FROM kfht_imp_opdrstat_strukton;
COMMIT;
FOR rec1 IN c1
LOOP
BEGIN
v_newline := rec1.fac_imp_file_line;
v_errormsg := 'Fout opvragen importregel';
v_aanduiding := '';
v_ongeldig := 0;
-- Lees alle veldwaarden.
fac.imp_getfield (v_newline, c_delim, v_mld_opdr_key_tekst);
v_mld_opdr_key_tekst := TRIM (v_mld_opdr_key_tekst);
fac.imp_getfield (v_newline, c_delim, v_extern_nummer);
v_extern_nummer := TRIM (v_extern_nummer);
fac.imp_getfield (v_newline, c_delim, v_status_code); -- typeID
v_status_code := TRIM (v_status_code);
fac.imp_getfield (v_newline, c_delim, v_datumtijd_tekst);
v_datumtijd_tekst := TRIM (v_datumtijd_tekst);
fac.imp_getfield (v_newline, c_delim, v_status_tekst);
v_status_tekst := TRIM (v_status_tekst);
fac.imp_getfield (v_newline, c_delim, v_opmerking);
v_opmerking := SUBSTR (TRIM (v_opmerking), 1, 1000);
--fac.imp_getfield (v_newline, c_delim, v_totaal_tekst);
--v_totaal := fac.safe_to_number (v_totaal_tekst);
--fac.imp_getfield (v_newline, c_delim, v_correctie_tekst);
--v_correctie := fac.safe_to_number (v_correctie_tekst);
-- Verwijder de markering voor cr/lf die in stylesheet is toegevoegd.
v_opmerking := REPLACE (v_opmerking, '@@', CHR (13));
v_aanduiding := '[' || v_mld_opdr_key_tekst || '|' || v_extern_nummer || '|' || v_status_code || '|' || v_datumtijd_tekst || '|' || v_status_tekst || '] ';
-- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen
-- de juiste kolomkop. Ik controleer daarbij ALLE kolommen!
-- Ik negeer alles totdat ik een geldige header ben gepasseerd.
IF (header_is_valid = 0)
THEN
IF UPPER (TRIM (v_mld_opdr_key_tekst)) = 'REFERENCEID'
AND UPPER (TRIM (v_extern_nummer)) = 'SERVICEREQUESTID'
AND UPPER (TRIM (v_status_code)) = 'TYPEID'
AND UPPER (TRIM (v_datumtijd_tekst)) = 'DATETIME'
AND UPPER (TRIM (v_opmerking)) = 'REMARKS'
--AND UPPER (TRIM (v_totaal_tekst)) = 'TOTAL'
--AND UPPER (TRIM (v_correctie_tekst)) = 'CORRECTION'
THEN
header_is_valid := 1;
END IF;
ELSE
v_count_tot := v_count_tot + 1;
-- Controleer alle veldwaarden.
v_errormsg := 'Fout bepalen opdracht';
BEGIN
SELECT o.mld_opdr_key, o.mld_opdr_opmerking
INTO v_mld_opdr_key, v_mld_opdr_opmerking
FROM mld_opdr o, mld_melding m, mld_stdmelding sm, ins_tab_discipline td, ins_srtdiscipline sd
WHERE o.mld_melding_key = m.mld_melding_key
AND m.mld_stdmelding_key = sm.mld_stdmelding_key
AND sm.mld_ins_discipline_key = td.ins_discipline_key
AND td.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
AND sd.ins_srtdiscipline_prefix || m.mld_melding_key || '/' || o.mld_opdr_bedrijfopdr_volgnr = v_mld_opdr_key_tekst;
EXCEPTION
WHEN OTHERS
THEN
v_ongeldig := 1;
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg := v_errormsg || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Regel wordt overgeslagen!');
END;
IF v_ongeldig = 0
THEN
v_errormsg := 'Status ongedefinieerd';
CASE
WHEN v_status_code = '5'
THEN
v_status := 5; -- uitgegeven
WHEN v_status_code = '10'
THEN
v_status := 8; -- geaccepteerd
WHEN v_status_code = '20' -- monteur gereed
THEN
v_status := 6; -- afgemeld
WHEN v_status_code = '25' -- specialist gereed
THEN
v_status := 6; -- afgemeld
WHEN v_status_code = '30' -- technisch gereed
THEN
v_status := 6; -- afgemeld
-- KFNS#52066: Uitprijs/fiatteer-functionaliteit!
--WHEN v_status_code = '40' -- uitgeprijst (fiattering aan FACILITOR-kant)
--THEN
-- v_status := 9; -- afgerond
--WHEN v_status_code = '45' -- gefiatteerd (fiattering aan Strukton-kant)
--THEN
-- v_status := 9; -- afgerond
WHEN v_status_code = '70'
THEN
v_status := 1; -- geannuleerd
WHEN v_status_code = '80'
THEN
v_status := 1; -- afgewezen
WHEN v_status_code = '200' -- onderbroken
THEN
--TODO: Notitie toevoegen (incl. reden?)
v_status := NULL; -- ongewijzigd
WHEN v_status_code = '210' -- herpland
THEN
--TODO: Notitie toevoegen
v_status := NULL; -- ongewijzigd
ELSE
v_status := NULL;
v_ongeldig := 1; -- nog te bezien
END CASE;
END IF;
IF v_ongeldig = 0
THEN
v_errormsg := 'Datumtijd ongeldig';
IF INSTR (v_datumtijd_tekst, '.') > 0
THEN
v_datumtijd := fac.safe_to_date (REPLACE (SUBSTR (v_datumtijd_tekst, 1, INSTR (v_datumtijd_tekst, '.') - 1), 'T', ' '), 'yyyy-mm-dd hh24:mi:ss');
ELSE
v_datumtijd := fac.safe_to_date (REPLACE (v_datumtijd_tekst, 'T', ' '), 'yyyy-mm-dd hh24:mi:ss');
END IF;
END IF;
IF v_ongeldig = 0
THEN
v_errormsg := 'Opmerking ongeldig';
-- Controleer of de opmerking niet leeg is en of dezelfde opmerking al bij een eerdere statusovergang is gemeld.
IF v_opmerking IS NOT NULL AND INSTR (v_mld_opdr_opmerking, v_opmerking) = 0
THEN
v_opmerking := '[' || v_datumtijd_tekst || '] - ' || v_status_tekst || CHR (13) || CHR (10) || v_opmerking;
ELSE
v_opmerking := '[' || v_datumtijd_tekst || '] - ' || v_status_tekst;
END IF;
END IF;
-- Insert geformatteerde import record.
IF v_ongeldig = 0
THEN
BEGIN
v_errormsg := 'Fout wegschrijven statusbericht';
INSERT INTO kfht_imp_opdrstat_strukton (mld_opdr_key,
extern_nummer,
status,
datumtijd,
opmerking) -- Geen totaal/correctie!
VALUES (v_mld_opdr_key,
v_extern_nummer,
v_status,
v_datumtijd,
v_opmerking);
v_count_imp := v_count_imp + 1;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg := v_errormsg || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg, '');
END;
ELSE
-- Foutmeldingen onderdrukken als uitprijzen/fiatteren niet is aangeschakeld.
IF v_status_code <> '40' AND v_status_code <> '45'
THEN
fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg, '');
END IF;
END IF;
END IF;
END;
END LOOP;
IF header_is_valid = 0
THEN
fac.imp_writelog (p_import_key, 'E', 'Ongeldig importbestand', 'Geen header of header niet volgens specificatie!');
ELSE
fac.imp_writelog (p_import_key, 'S', 'Inleesproces/#ingelezen statusberichten: ' || TO_CHAR (v_count_tot), '');
fac.imp_writelog (p_import_key, 'S', 'Inleesproces/#ongeldige niet ingelezen statusberichten: ' || TO_CHAR (v_count_tot - v_count_imp), '');
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg := v_errormsg || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg, 'Inleesproces statusberichten afgebroken!');
END;
/
CREATE OR REPLACE PROCEDURE kfht_update_opdrstat_strukton (p_import_key IN NUMBER)
AS
-- Cursor loopt - per opdracht in volgorde! - over alle ingelezen statusberichten.
CURSOR c1
IS
SELECT mld_opdr_key, extern_nummer, status, datumtijd, opmerking -- Geen totaal/correctie!
FROM kfht_imp_opdrstat_strukton
ORDER BY 1, 4;
c_user_key NUMBER (10) := 264; -- _STRUKTON-user
c_refnr_srtkkey NUMBER (10) := 6; -- Refnr. leverancier
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_aanduiding VARCHAR2 (200);
v_count_tot NUMBER (10) := 0;
v_count NUMBER (10) := 0;
v_mld_key NUMBER (10);
v_opdr_key NUMBER (10);
v_opdr_status NUMBER (10);
v_mld_typeopdr_key NUMBER (10);
v_mld_kenmerk_key NUMBER (10);
v_mld_kenmerkopdr_key NUMBER (10);
BEGIN
-- Loop over alle ingelezen Strukton-statusberichten.
FOR rec IN c1
LOOP
BEGIN
v_aanduiding := '[' || rec.mld_opdr_key || '|' || SUBSTR (rec.opmerking, 1, 100) || '] ';
v_count_tot := v_count_tot + 1;
-- Key van melding/opdracht bepalen en Refnr. bij opdracht opslaan.
IF rec.mld_opdr_key IS NOT NULL
THEN
v_errormsg := 'Fout bepalen opdracht.';
SELECT mld_melding_key, mld_opdr_key, mld_statusopdr_key, mld_typeopdr_key
INTO v_mld_key, v_opdr_key, v_opdr_status, v_mld_typeopdr_key
FROM mld_opdr
WHERE mld_opdr_key = rec.mld_opdr_key;
v_errormsg := 'Fout bepalen Refnr-kenmerk.';
SELECT k.mld_kenmerk_key
INTO v_mld_kenmerk_key
FROM mld_kenmerk k
WHERE k.mld_srtkenmerk_key = c_refnr_srtkkey AND k.mld_typeopdr_key = v_mld_typeopdr_key;
v_errormsg := 'Fout bepalen Refnr-kenmerkopdracht.';
SELECT MAX (ko.mld_kenmerkopdr_key)
INTO v_mld_kenmerkopdr_key
FROM mld_kenmerkopdr ko
WHERE ko.mld_opdr_key = v_opdr_key AND v_mld_kenmerk_key = ko.mld_kenmerk_key;
IF v_mld_kenmerkopdr_key IS NULL
THEN
-- Kenmerk toevoegen
v_errormsg := 'Fout toevoegen Refnr-kenmerkopdracht.';
INSERT INTO mld_kenmerkopdr (mld_kenmerk_key, mld_opdr_key, mld_kenmerkopdr_waarde)
VALUES (v_mld_kenmerk_key, v_opdr_key, rec.extern_nummer);
ELSE
-- Kenmerk bijwerken
v_errormsg := 'Fout bijwerken Refnr-kenmerkopdracht.';
UPDATE mld_kenmerkopdr
SET mld_kenmerkopdr_waarde = rec.extern_nummer
WHERE mld_kenmerkopdr_key = v_mld_kenmerkopdr_key;
END IF;
IF rec.status IS NOT NULL
THEN
v_errormsg := 'Fout bijwerken Opmerking (opdracht).';
v_count := LENGTH (rec.opmerking) + 5; -- Beetje speling qua lengte!
UPDATE mld_opdr
SET mld_opdr_opmerking =
DECODE (mld_opdr_opmerking,
NULL, rec.opmerking,
rec.opmerking || CHR (13) || CHR (10) || SUBSTR (mld_opdr_opmerking, 1, (4000 - v_count)))
WHERE mld_opdr_key = v_opdr_key;
v_errormsg := 'Fout bijwerken Status.';
IF rec.status = 8 AND v_opdr_status = 5
THEN
-- Accepteer de opdracht als deze uitgegeven was
MLD.setopdrachtstatus (v_opdr_key, 8, c_user_key); -- Strukton
ELSIF rec.status = 6 AND v_opdr_status = 5
THEN
-- Meld de opdracht af als deze uitgegeven was (na eerst accepteren)
MLD.setopdrachtstatus (v_opdr_key, 8, c_user_key); -- Strukton
MLD.setopdrachtstatus (v_opdr_key, 6, c_user_key); -- Strukton
ELSIF rec.status = 6 AND v_opdr_status = 8
THEN
-- Meld de opdracht af als deze geaccepteerd was
MLD.setopdrachtstatus (v_opdr_key, 6, c_user_key); -- Strukton
ELSIF rec.status = 1 AND v_opdr_status IN (5, 8)
THEN
-- Wijs de opdracht af als deze niet/wel geaccepteerd was
MLD.setopdrachtstatus (v_opdr_key, 1, c_user_key); -- Strukton
MLD.updatemeldingstatusAV (v_mld_key, 0, c_user_key, 0);
--ELSIF rec.status = 9 AND v_opdr_status = 6 -- Per KFNS#52066
--THEN
-- Neem ontvangen kosten over zoals afgestemd met KFNS#59399!
--UPDATE mld_opdr
-- SET mld_opdr_materiaal = rec.totaal,
-- mld_opdr_kosten = rec.totaal + rec.correctie
-- WHERE mld_opdr_key = v_opdr_key;
-- Rond de opdracht af als deze afgemeld was
--MLD.setopdrachtstatus (v_opdr_key, 9, c_user_key); -- Strukton
END IF;
IF rec.status = 6 AND v_opdr_status <> 6
THEN
-- AADO#30922: Melding niet meer automatisch afmelden.
-- KFNS#37965: Opmerking-veld bij melding niet meer bijwerken.
MLD.updatemeldingstatusAV (v_mld_key, 0, c_user_key, 0);
END IF;
ELSE -- rec.status IS NULL (= Onderbroken/Herpland), dan toevoegen Notitie!
-- YAXX#59749: Toevoegen Notitie!
v_errormsg := 'Fout toevoegen Notitie (opdracht).';
INSERT INTO mld_opdr_note (mld_opdr_key, mld_opdr_note_omschrijving, prs_perslid_key)
VALUES (v_opdr_key, rec.opmerking, c_user_key);
END IF;
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg := v_errormsg || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg, 'Statusbericht-loop');
END;
END LOOP;
END;
/
/* Formatted on 17-12-2015 12:58:02 (QP5 v5.136.908.31019) */
CREATE OR REPLACE VIEW kfht_v_export_exact (result, result_order)
AS
SELECT fac_rapport_regel, fac_rapport_volgnr
FROM fac_rapport
WHERE fac_rapport_node = SUBSTR ('EXACT', 1, 12);
CREATE OR REPLACE PROCEDURE kfht_select_exact (p_applname IN VARCHAR2,
p_applrun IN VARCHAR2)
AS
CURSOR c_opdr
IS
SELECT DISTINCT
o.mld_melding_key,
o.mld_opdr_bedrijfopdr_volgnr,
sd.ins_srtdiscipline_prefix || TO_CHAR (o.mld_melding_key) || '/' || TO_CHAR (o.mld_opdr_bedrijfopdr_volgnr)
ticketnumber,
ot.mld_typeopdr_omschrijving ordertype,
--a.prs_afdeling_omschrijving department, -- KFHT#60175: Verwijderen Department!
b.prs_bedrijf_naam supplier,
--SUBSTR (c.cnt_contract_nummer || DECODE (kl.jaarinkoopnr, NULL, '', '/' || kl.jaarinkoopnr), 1, 30)
--DECODE (o.prs_kostenplaats_key,
-- 38, SUBSTR (COALESCE (c.cnt_contract_nummer, ko.opdrinkoopnr), 1, 30), -- HTCE (300002)
-- SUBSTR (c.cnt_contract_nummer || DECODE (COALESCE (ko.opdrinkoopnr, kl.jaarinkoopnr), NULL, '', '/' || COALESCE (ko.opdrinkoopnr, kl.jaarinkoopnr)), 1, 30))
DECODE (kl.jaarinkoopnr,
NULL, SUBSTR (c.cnt_contract_nummer || '|' || ko.opdrinkoopnr, 1, 30),
kl.jaarinkoopnr)
contract, -- KFHT#60175: Anders gaan vullen Contract!
td.ins_discipline_omschrijving || ' / ' || sm.mld_stdmelding_omschrijving
reporttype,
aog.alg_gebouw_code buildingcode,
kp.prs_kostenplaats_nr costcenter,
COALESCE (ksm.prs_kostensoort_oms, ksv.prs_kostensoort_oms)
costunit,
o.mld_opdr_kosten costs,
b.prs_leverancier_nr supplierreference,
--TO_CHAR (fac.gettrackingdate ('ORDNEW', o.mld_opdr_key), 'dd-mm-yyyy hh24:mi:ss')
TO_CHAR (o.mld_opdr_datumbegin, 'dd-mm-yyyy')
|| 'T' || TO_CHAR (o.mld_opdr_datumbegin, 'hh24:mi:ss')
issued,
DECODE (fac.gettrackingdate ('ORDAFM', o.mld_opdr_key),
NULL, NULL,
TO_CHAR (fac.gettrackingdate ('ORDAFM', o.mld_opdr_key), 'dd-mm-yyyy')
|| 'T' || TO_CHAR (fac.gettrackingdate ('ORDAFM', o.mld_opdr_key), 'hh24:mi:ss'))
closed,
os.mld_statusopdr_omschrijving orderstatus -- KFHT#60175: Toevoegen Orderstatus!
FROM fac_tracking t,
fac_srtnotificatie sn,
mld_opdr o,
mld_typeopdr ot,
prs_bedrijf b,
cnt_contract c,
prs_kostenplaats kp,
mld_melding m,
mld_stdmelding sm,
ins_tab_discipline td,
ins_srtdiscipline sd,
prs_kostensoort ksm,
prs_kostensoort ksv,
alg_v_allonrgoed_gegevens aog,
prs_perslid p,
prs_afdeling a,
(SELECT prs_link_key, prs_kenmerklink_waarde jaarinkoopnr
FROM prs_v_aanwezigkenmerklink
WHERE prs_kenmerk_key = 1060) kl, -- Inkoopordernummer
(SELECT mld_opdr_key, mld_kenmerkopdr_waarde opdrinkoopnr
FROM mld_v_aanwezigkenmerkopdr
WHERE mld_kenmerk_key = 17) ko, -- Inkooporder
mld_statusopdr os
WHERE t.fac_tracking_datum > TRUNC (SYSDATE - 1) -- Export draait na middernacht!
AND t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key
AND sn.fac_srtnotificatie_xmlnode = 'opdracht'
AND t.fac_tracking_refkey = o.mld_opdr_key -- KFHT#60175: Geen restrictie meer op opdrachtstatus (daarmee bij elke wijziging van status)!
AND o.mld_typeopdr_key = ot.mld_typeopdr_key
--AND ot.mld_typeopdr_key != 8 -- KFHT#60175: Geen restrictie meer op opdrachttype (daarmee ook Offerteaanvraag)!
AND o.mld_uitvoerende_keys = b.prs_bedrijf_key -- Geen Interne opdracht, tenzij
--AND b.prs_leverancier_nr IS NOT NULL -- KFHT#60175: Geen restrictie meer op leveranciernummer (daarmee ook zonder leveranciernummer)!
AND o.cnt_contract_key = c.cnt_contract_key(+)
AND o.prs_kostenplaats_key = kp.prs_kostenplaats_key(+) -- KFHT#60175: Geen restrictie meer op kostenplaats (daarmee ook Contractopdracht, Garantieopdracht, Offerte aanvraag, Klacht en Interne opdracht)!
AND o.mld_melding_key = m.mld_melding_key
AND m.mld_stdmelding_key = sm.mld_stdmelding_key
AND sm.mld_ins_discipline_key = td.ins_discipline_key
AND td.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
AND sm.prs_kostensoort_key = ksm.prs_kostensoort_key(+)
AND td.prs_kostensoort_key = ksv.prs_kostensoort_key(+)
AND m.mld_alg_onroerendgoed_keys = aog.alg_onroerendgoed_keys
AND m.prs_perslid_key = p.prs_perslid_key
AND p.prs_afdeling_key = a.prs_afdeling_key
AND a.prs_afdeling_key = kl.prs_link_key(+)
AND o.mld_opdr_key = ko.mld_opdr_key(+)
AND o.mld_statusopdr_key = os.mld_statusopdr_key(+)
ORDER BY o.mld_melding_key, o.mld_opdr_bedrijfopdr_volgnr;
v_count NUMBER;
PROCEDURE add_row (p_regel IN VARCHAR2)
AS
BEGIN
INSERT INTO fac_rapport (fac_rapport_node, fac_rapport_volgnr, fac_rapport_regel)
VALUES (SUBSTR (p_applname, 1, 12), v_count, p_regel);
v_count := v_count + 1;
END;
PROCEDURE add_element (p_tag IN VARCHAR2, p_value IN VARCHAR2)
AS
BEGIN
add_row( '<'
|| p_tag
|| '>'
|| xml.char_to_html (p_value)
|| '</'
|| p_tag
|| '>');
END;
BEGIN
v_count := 0;
DELETE fac_rapport
WHERE fac_rapport_node = SUBSTR (p_applname, 1, 12);
-- Header
add_row ('<?xml version="1.0" encoding="utf-8" standalone="yes" ?>');
add_row ('<eExact>');
add_row ('<FacilitorImport>');
--add_row ('<Tickets>');
FOR rec IN c_opdr
LOOP
BEGIN
add_row ('<Ticket>');
add_element ('TicketNumber', rec.ticketnumber);
add_element ('OrderType', rec.ordertype);
--add_element ('Department', rec.department); -- KFHT#60175: Verwijderen Department!
add_element ('Supplier', rec.supplier);
add_element ('Contract', rec.contract); -- KFHT#60175: Anders gaan vullen Contract!
add_element ('ReportType', rec.reporttype);
add_element ('BuildingCode', rec.buildingcode);
add_element ('CostCenter', rec.costcenter);
add_element ('CostUnit', rec.costunit);
add_element ('Costs', rec.costs);
add_element ('SupplierReference', rec.supplierreference);
add_element ('Issued', rec.issued);
add_element ('Closed', rec.closed);
add_element ('Department', rec.orderstatus); -- KFHT#60175: Toevoegen Orderstatus (als Department, don't ask why)!
add_row ('</Ticket>');
-- Markeer als geexporteerd?
END;
END LOOP;
--add_row ('</Tickets>');
add_row ('</FacilitorImport>');
add_row ('</eExact>');
END;
/
-- Multi variant voor automatische import via gen_import van kosten uit Exact.
/* Formatted on 25-1-2016 17:40:20 (QP5 v5.136.908.31019) */
CREATE OR REPLACE PROCEDURE kfht_import_exact (p_import_key IN NUMBER)
AS
c_delim VARCHAR2 (1) := ';';
v_newline VARCHAR2 (1000); -- Input line
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_aanduiding VARCHAR2 (200);
header_is_valid NUMBER := 0;
v_count_tot NUMBER (10) := 0;
v_count_import NUMBER (10) := 0;
v_ongeldig NUMBER (1) := 0;
-- De importvelden
v_ticketnumber VARCHAR2 (255); -- C24
v_amount VARCHAR2 (255); -- N12,2
v_changedate VARCHAR2 (255); -- DATE
-- Overige velden:
CURSOR c1
IS
SELECT *
FROM fac_imp_file
WHERE fac_import_key = p_import_key
ORDER BY fac_imp_file_index;
BEGIN
DELETE FROM kfht_imp_exactmulti
WHERE imp_log_run <> p_import_key;
COMMIT;
FOR rec1 IN c1
LOOP
BEGIN
v_newline := rec1.fac_imp_file_line;
v_errormsg := 'Fout opvragen te importeren rij';
v_aanduiding := '';
v_ongeldig := 0;
-- Lees alle veldwaarden
fac.imp_getfield (v_newline, c_delim, v_ticketnumber);
fac.imp_getfield (v_newline, c_delim, v_amount);
fac.imp_getfield (v_newline, c_delim, v_changedate);
v_aanduiding :=
'['
|| v_ticketnumber
|| '|'
|| v_amount
|| '|'
|| v_changedate
|| '] ';
-- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen
-- de juiste kolomkop. Ik controleer daarbij ALLE kolommen!
-- Ik negeer alles totdat ik een geldige header ben gepasseerd.
IF (header_is_valid = 0)
THEN
IF UPPER (TRIM (v_ticketnumber)) = 'TICKETNUMBER'
AND UPPER (TRIM (v_amount)) = 'AMOUNT'
AND UPPER (TRIM (v_changedate)) = 'CHANGEDATE'
THEN
header_is_valid := 1;
END IF;
ELSE
v_count_tot := v_count_tot + 1;
-- Controleer alle veldwaarden
v_errormsg := 'Fout inlezen ticketnumber';
v_ticketnumber := TRIM (v_ticketnumber);
IF (v_ticketnumber IS NULL)
THEN
fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Ticketnumber ongeldig; regel wordt overgeslagen!');
v_ongeldig := 1;
END IF;
--
v_errormsg := 'Fout inlezen amount';
v_amount := TRIM (REPLACE (v_amount, ',', '.'));
IF (fac.safe_to_number (v_amount) IS NULL)
THEN
fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Amount ongeldig; regel wordt overgeslagen!');
v_ongeldig := 1;
END IF;
--
v_errormsg := 'Fout inlezen changedate';
v_changedate := TRIM (v_changedate);
IF (fac.safe_to_date (v_changedate, 'dd-mm-yyyy hh24:mi:ss') IS NULL)
THEN
fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Changedate ongeldig; regel wordt overgeslagen!');
v_ongeldig := 1;
END IF;
-- Insert geformatteerde import record
IF (v_ongeldig = 0)
THEN
BEGIN
v_errormsg := 'Fout bij wegschrijven importregel';
INSERT INTO kfht_imp_exactmulti (imp_log_run,
ticketnumber,
amount,
changedate)
VALUES (p_import_key,
v_ticketnumber,
fac.safe_to_number (v_amount),
fac.safe_to_date (v_changedate, 'dd-mm-yyyy hh24:mi:ss'));
v_count_import := v_count_import + 1;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg := v_errormsg || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg, '');
END;
END IF;
END IF;
END;
END LOOP;
IF (header_is_valid = 0)
THEN
fac.imp_writelog (p_import_key, 'E', 'Ongeldig importbestand', 'Geen header of header niet volgens specificatie!');
ELSE
fac.imp_writelog (p_import_key, 'S', 'Inleesproces/#ingelezen importregels: ' || TO_CHAR (v_count_tot), '');
fac.imp_writelog (p_import_key, 'S', 'Inleesproces/#ongeldige niet ingelezen importregels: ' || TO_CHAR (v_count_tot - v_count_import), '');
END IF;
DELETE FROM fac_imp_file
WHERE fac_import_key = p_import_key;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg := v_errormsg || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg, 'Inleesproces kostenregels uit Exact afgebroken!');
END;
/
CREATE OR REPLACE PROCEDURE kfht_update_exact (p_import_key IN NUMBER)
AS
-- Cursor loopt over alle ingelezen kostenregels uit Exact.
CURSOR c1
IS
SELECT ticketnumber, -- Ticketnumber met of zonder prefix!
DECODE (fac.safe_to_number (SUBSTR (ticketnumber, 1, 1)),
NULL, TRIM (SUBSTR (ticketnumber, 2)),
ticketnumber)
opdr_id, -- Ticketnumber zonder prefix!
amount,
changedate
FROM kfht_imp_exactmulti
WHERE imp_log_run = p_import_key
ORDER BY 4, 2;
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_aanduiding VARCHAR2 (200);
v_count_tot NUMBER (10);
v_mld_key NUMBER (10);
v_opdr_key NUMBER (10);
v_opdr_status NUMBER (10);
v_typeopdr_key NUMBER (10);
BEGIN
-- Loop door alle ingelezen kostenregels uit Exact en verwerk deze.
v_count_tot := 0;
FOR rec IN c1
LOOP
BEGIN
v_aanduiding := '[' || rec.ticketnumber || '|' || TO_CHAR (rec.amount) || '] ';
v_count_tot := v_count_tot + 1;
v_mld_key := -1;
v_opdr_key := -1;
v_errormsg := 'Fout bepalen melding/opdracht.';
BEGIN
SELECT mld_melding_key, mld_opdr_key, mld_statusopdr_key, mld_typeopdr_key
INTO v_mld_key, v_opdr_key, v_opdr_status, v_typeopdr_key
FROM mld_opdr
WHERE mld_melding_key || '/' || mld_opdr_bedrijfopdr_volgnr = rec.opdr_id;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg := v_errormsg || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
-- KFHT#60175: Voortaan bij bepalen melding/opdracht foutmelding onderdrukken als amount=0!
IF rec.amount != 0
THEN
fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg, 'Fout verwerken kostenregels uit Exact.');
END IF;
END;
-- Alleen iets doen als melding/opdracht succesvol is bepaald.
IF (v_mld_key > 0 AND v_opdr_key > 0)
THEN
-- Bijwerken kosten met amount.
v_errormsg := 'Fout bijwerken kosten.';
--UPDATE mld_opdr
-- SET mld_opdr_kosten = rec.amount,
-- mld_opdr_uren = 0,
-- mld_opdr_uurloon = 0,
-- mld_opdr_materiaal = 0
-- WHERE mld_opdr_key = v_opdr_key;
UPDATE mld_opdr
SET mld_opdr_kosten = rec.amount
WHERE mld_opdr_key = v_opdr_key;
-- Bijwerken ordernr met changedate.
v_errormsg := 'Fout bijwerken ordernr.';
UPDATE mld_opdr
SET mld_opdr_ordernr = TO_CHAR (rec.changedate, 'dd-mm-yyyy hh24:mi:ss')
WHERE mld_opdr_key = v_opdr_key;
-- Verwerken opdracht.
IF (v_opdr_status = 6 OR v_opdr_status = 9) AND v_typeopdr_key != 8
THEN
v_errormsg := 'Fout verwerken opdracht.';
MLD.setopdrachtstatus (v_opdr_key, 7, NULL);
END IF;
COMMIT;
END IF;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg := v_errormsg || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg, 'Fout verwerken kostenregels uit Exact.');
END;
END LOOP;
fac.imp_writelog (p_import_key, 'S', 'Proces: ' || TO_CHAR (v_count_tot) || ' kostenregels uit Exact afgehandeld.', '');
COMMIT;
END;
/
-- Dummy export NACHTWERK!
-- KFHT#56229: Verwijderen inactieve accounts (6 maanden niet ingelogd).
CREATE OR REPLACE PROCEDURE kfht_select_nachtwerk (p_applname IN VARCHAR2,
p_applrun IN VARCHAR2)
AS
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_count NUMBER;
BEGIN
v_count := 0;
FOR rec
IN ( SELECT p.prs_perslid_key, p.prs_perslid_oslogin, COUNT (vp.prs_perslid_key) aant
FROM prs_v_aanwezigperslid p, prs_v_verplichting_keys vp
WHERE TO_CHAR (SYSDATE, 'dd') = '01' -- Op 1e van de maand >180d niet ingelogd
AND p.prs_perslid_login < TRUNC (ADD_MONTHS (SYSDATE, -6), 'mm')
AND p.prs_perslid_key = vp.prs_perslid_key(+) -- Actuele verplichtingen?
GROUP BY p.prs_perslid_key, p.prs_perslid_oslogin
ORDER BY 1)
LOOP
BEGIN
IF rec.aant = 0
THEN
UPDATE prs_perslid
SET prs_perslid_verwijder = SYSDATE
WHERE prs_perslid_key = rec.prs_perslid_key;
v_count := v_count + 1;
ELSE
fac.writelog (p_applname, 'I',
'[' || rec.prs_perslid_oslogin || ']/#Verplichtingen: ' || TO_CHAR (rec.aant),
'Persoon niet geïnactiveerd');
END IF;
EXCEPTION
WHEN OTHERS
THEN -- Kennelijk heeft persoon toch nog ernstige verplichtingen!
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg := 'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.writelog (p_applname, 'E',
'[' || rec.prs_perslid_oslogin || ']/' || v_errormsg,
'Fout inactiveren persoon');
END;
END LOOP;
fac.writelog (p_applname, 'S', '#Personen geïnactiveerd:' || TO_CHAR (v_count), '');
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg := 'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.writelog (p_applname, 'E', v_errormsg, 'Proces NACHTWERK afgebroken!');
END kfht_select_nachtwerk;
/
CREATE OR REPLACE VIEW KFHT_V_NOTI_MLD_WVGREMINDER
(
CODE,
SENDER,
RECEIVER,
TEXT,
KEY,
PAR1,
PAR2,
XKEY
)
AS
SELECT 'CUST01',
NULL,
COALESCE (m.prs_perslid_key_voor, prs_perslid_key),
'Uw melding '
|| sd.ins_srtdiscipline_prefix
|| m.mld_melding_key
|| ' staat nog open ter goedkeuring',
m.mld_melding_key,
NULL,
NULL,
NULL
FROM mld_kenmerkmelding km,
mld_kenmerk k,
mld_melding m,
mld_stdmelding sm,
mld_discipline md,
ins_srtdiscipline sd
WHERE km.mld_kenmerk_key = k.mld_kenmerk_key
AND k.mld_kenmerk_verwijder IS NULL
AND k.mld_srtkenmerk_key = 122 -- Begindatum
AND fac.safe_to_date (km.mld_kenmerkmelding_waarde, 'DD-MM-YYYY') = TRUNC (SYSDATE) + 2
AND km.mld_melding_key = m.mld_melding_key
AND m.mld_stdmelding_key = sm.mld_stdmelding_key
AND sm.mld_ins_discipline_key = md.ins_discipline_key
AND md.ins_discipline_key = 208 -- Aanvraag werkvergunning
AND md.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
AND m.mld_melding_status NOT IN (1, 5, 6)
AND m.mld_melding_key = m.mld_melding_start_key;
-- Notijob om ASML gebouwen te notificeren bij afronden WF rondom WVG.
-- KFHT#66052: Toevoegen soortgelijke notificaties voor NXP gebouwen.
CREATE OR REPLACE VIEW KFHT_V_NOTI_MLD_ASMLREMINDER
(
CODE,
SENDER,
RECEIVER,
TEXT,
KEY,
PAR1,
PAR2,
XKEY,
XEMAIL,
XMOBILE
)
AS
SELECT 'MLDMAI',
NULL,
NULL,
'Er zullen werkzaamheden plaatsvinden betreft '
|| sd.ins_srtdiscipline_prefix
|| m.mld_melding_key
|| ' op locatie '
|| aog.alg_gebouw_naam,
m.mld_melding_key,
NULL,
NULL,
NULL,
'operation_maintenance@asml.com',
NULL
FROM mld_melding m,
mld_stdmelding sm,
mld_discipline md,
ins_srtdiscipline sd,
alg_v_onroerendgoed_gegevens aog
WHERE m.mld_stdmelding_key = sm.mld_stdmelding_key
AND sm.mld_ins_discipline_key = md.ins_discipline_key
AND md.ins_discipline_key = 208 -- Aanvraag werkvergunning
AND md.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
AND m.mld_melding_key = m.mld_melding_start_key
AND m.mld_alg_onroerendgoed_keys = aog.alg_onroerendgoed_keys
AND aog.alg_gebouw_key IN (37, 39)
AND EXISTS
(SELECT 1
FROM fac_tracking
WHERE fac_srtnotificatie_key = 38 -- MLDAFM
AND fac_tracking_datum > TRUNC (SYSDATE - 1)
AND fac_tracking_refkey = m.mld_melding_key)
UNION ALL
SELECT sn.fac_srtnotificatie_code,
NULL,
NULL,
REPLACE (
REPLACE (
REPLACE (
sn.fac_srtnotificatie_oms,
'##KEY##', sd.ins_srtdiscipline_prefix || TO_CHAR (m.mld_melding_key)),
'##STDMLD##', sm.mld_stdmelding_omschrijving),
'##GEBOUW##', aog.alg_gebouw_code || ' - ' || aog.alg_gebouw_naam),
m.mld_melding_key,
NULL,
NULL,
NULL,
'servicedesknxp@facilicom.nl',
NULL
FROM mld_melding m,
mld_stdmelding sm,
mld_discipline md,
ins_srtdiscipline sd,
alg_v_onroerendgoed_gegevens aog,
fac_srtnotificatie sn
WHERE m.mld_stdmelding_key = sm.mld_stdmelding_key
AND sm.mld_ins_discipline_key = md.ins_discipline_key
AND md.ins_discipline_key = 206 -- Beoordeling gebouwbeheerder
AND md.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
--AND m.mld_melding_start_key IS NOT NULL
AND m.mld_alg_onroerendgoed_keys = aog.alg_onroerendgoed_keys
AND aog.alg_gebouw_key IN (41, 46) -- HTC 46/HTC 60
AND sn.fac_srtnotificatie_code = 'CUST02'
AND EXISTS -- Gisteren aangemaakt altijd notificeren ongeacht status
(SELECT 1
FROM fac_tracking
WHERE fac_srtnotificatie_key = 43 -- MLDNEW
AND TRUNC (fac_tracking_datum) = TRUNC (SYSDATE - 1)
AND fac_tracking_refkey = m.mld_melding_key);
-- KFHT#61132: Opdrachtkosten per object.
-- KFHT#65899: Toevoegen Gebouw/Terrein-kolom(men).
CREATE OR REPLACE VIEW kfht_v_rap_ins_opdr_kosten
(
objectdiscipline,
objectgroep,
objectsoortcode,
objectsoort,
objectid,
objectopm,
vakgroeptype,
vakgroep,
meldingsoort,
meldingnr,
meldingstatus,
mld_aanmaak,
mld_gepland,
mld_afgemeld,
opdrachttype,
opdrachtnr,
opdrachtstatus,
ord_aanmaak,
ord_gepland,
ord_afgemeld,
--ord_afgerond,
opdrachtkosten,
ins_gebouw_terrein,
mld_gebouw_terrein
)
AS
SELECT td.ins_discipline_omschrijving,
sg.ins_srtgroep_omschrijving,
sd.ins_srtdeel_code,
sd.ins_srtdeel_omschrijving,
d.ins_deel_omschrijving,
d.ins_deel_opmerking,
sd.ins_srtdiscipline_omschrijving,
md.ins_discipline_omschrijving,
sm.mld_stdmelding_omschrijving,
COALESCE (sd.ins_srtdiscipline_prefix, '') || TO_CHAR (m.mld_melding_key) meldingnr,
ms.mld_statuses_omschrijving,
m.mld_melding_datum mld_aanmaak,
m.mld_melding_einddatum mld_gepland,
fac.gettrackingdate ('MLDAFM', m.mld_melding_key) afgemeld,
ot.mld_typeopdr_omschrijving,
TO_CHAR (o.mld_melding_key) || '/' || TO_CHAR (o.mld_opdr_bedrijfopdr_volgnr) opdrachtnr,
os.mld_statusopdr_omschrijving,
o.mld_opdr_datumbegin ord_aanmaak,
o.mld_opdr_einddatum ord_gepland,
fac.gettrackingdate ('ORDAFM', o.mld_opdr_key) ord_afgemeld,
--fac.gettrackingdate ('ORDAFR', o.mld_opdr_key) ord_afgerond,
o.mld_opdr_kosten,
DECODE (d.ins_alg_ruimte_type, 'R', aog2.alg_gebouw_code || ' - ' || aog1.alg_gebouw_naam, 'T', aog1.alg_terreinsector_code || ' - ' || aog1.alg_terreinsector_code, NULL)
gebouw_terrein1,
DECODE (m.mld_alg_onroerendgoed_keys, NULL, NULL, DECODE (aog2.alg_terreinsector_key, NULL, aog2.alg_gebouw_code || ' - ' || aog2.alg_gebouw_naam, aog2.alg_terreinsector_code || ' - ' || aog2.alg_terreinsector_code))
gebouw_terrein2
FROM ins_deel d,
ins_srtdeel sd,
ins_srtgroep sg,
ins_discipline td,
mld_melding_object mo,
mld_melding m,
mld_statuses ms,
mld_stdmelding sm,
mld_discipline md,
ins_srtdiscipline sd,
mld_opdr o,
mld_statusopdr os,
mld_typeopdr ot,
alg_v_onroerendgoed_gegevens aog1, -- Tbv. ins_gebouw_terrein
alg_v_onroerendgoed_gegevens aog2 -- Tbv. ins_gebouw_terrein
WHERE d.ins_deel_verwijder IS NULL
AND d.ins_srtdeel_key = sd.ins_srtdeel_key
AND sd.ins_srtgroep_key = sg.ins_srtgroep_key
AND sg.ins_discipline_key = td.ins_discipline_key
AND d.ins_deel_key = mo.ins_deel_key
AND mo.mld_melding_key = m.mld_melding_key
AND m.mld_melding_status = ms.mld_statuses_key(+)
AND m.mld_stdmelding_key = sm.mld_stdmelding_key
AND sm.mld_ins_discipline_key = md.ins_discipline_key
AND md.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
AND m.mld_melding_key = o.mld_melding_key
AND o.mld_statusopdr_key = os.mld_statusopdr_key(+)
AND o.mld_typeopdr_key = ot.mld_typeopdr_key
AND d.ins_alg_ruimte_key = aog1.alg_onroerendgoed_keys(+)
AND m.mld_alg_onroerendgoed_keys = aog2.alg_onroerendgoed_keys(+);
-- KFHT#77979: CUST03-noti ipv. ORD2GO bij overschrijden 1e limiet naar:
-- 1. campus.hardservices@hightechcampus.com voor de vakgroepen
-- geautoriseerd via 'Vebego Opdrachtgoedk. 500 Hard'
-- 2. alle personen zoals nu voor alle andere vakgroepen
-- BELANGRIJK: Deze notijob vervangt ORD2GO-noti en moet dus de notificatie
-- bij overschrijden van alle limieten verzorgen (uitdaging)!
CREATE OR REPLACE VIEW KFHT_V_NOTI_ORDGOE
(
code,
sender,
receiver,
text,
key,
xkey,
xemail,
xmobile
)
AS -- Voor 'Vebego Opdrachtgoedk. 500 Hard'-vakgroepen!
SELECT sn.fac_srtnotificatie_code,
NULL,
NULL,
REPLACE (sn.fac_srtnotificatie_oms, '##OPDRKEY##', TO_CHAR (o.mld_melding_key) || '/' || TO_CHAR (o.mld_opdr_bedrijfopdr_volgnr)),
o.mld_opdr_key,
NULL,
'campus.hardservices@hightechcampus.com ',
NULL
FROM fac_tracking t,
mld_opdr o,
mld_melding m,
mld_stdmelding sm,
fac_srtnotificatie sn,
fac_notificatie_job nj
WHERE t.fac_srtnotificatie_key = 72 -- ORDGOE-trackig alleen bij overschrijven 1e limiet!
AND t.fac_tracking_refkey = o.mld_opdr_key
AND o.mld_statusopdr_key = 10 -- Ter goedkeuring!
--AND o.mld_opdr_approved IS NULL -- 1e goedkeuring
AND o.mld_melding_key = m.mld_melding_key
AND m.mld_stdmelding_key = sm.mld_stdmelding_key
AND EXISTS -- ORDGOE-geautoriseerden Vebego Opdrachtgoedk. 500 Hard!
(SELECT 1
FROM fac_groeprechten
WHERE fac_groep_key = 102 -- Vebego Opdrachtgoedk. 500 Hard
AND fac_functie_key = 42 -- WEB_ORDGOE
AND ins_discipline_key = sm.mld_ins_discipline_key)
AND sn.fac_srtnotificatie_code = 'CUST03'
AND nj.fac_notificatie_job_view = 'KFHT_V_NOTI_ORDGOE'
AND t.fac_tracking_datum > nj.fac_notificatie_job_lastrun
UNION ALL -- Voor andere dan 'Vebego Opdrachtgoedk. 500 Hard'-vakgroepen!
SELECT DISTINCT
sn.fac_srtnotificatie_code,
NULL,
NULL,
REPLACE (sn.fac_srtnotificatie_oms, '##OPDRKEY##', TO_CHAR (o.mld_melding_key) || '/' || TO_CHAR (o.mld_opdr_bedrijfopdr_volgnr)),
o.mld_opdr_key,
NULL,
p.prs_perslid_email, -- Alle ORDGOE-geautoriseerden op vakgroep van meldingen!
NULL
FROM fac_tracking t,
mld_opdr o,
mld_melding m,
mld_stdmelding sm,
fac_groeprechten gr,
fac_gebruikersgroep gg,
prs_v_aanwezigperslid p,
fac_srtnotificatie sn,
fac_notificatie_job nj
WHERE t.fac_srtnotificatie_key = 72 -- ORDGOE-trackig alleen bij overschrijven 1e limiet!
AND t.fac_tracking_refkey = o.mld_opdr_key
AND o.mld_statusopdr_key = 10 -- Ter goedkeuring!
--AND o.mld_opdr_approved IS NULL -- 1e goedkeuring
AND o.mld_melding_key = m.mld_melding_key
AND m.mld_stdmelding_key = sm.mld_stdmelding_key
AND NOT EXISTS -- ORDGOE-geautoriseerden op alle andere vakgroepen
(SELECT 1
FROM fac_groeprechten
WHERE fac_groep_key = 102 -- Vebego Opdrachtgoedk. 500 Hard
AND fac_functie_key = 42 -- WEB_ORDGOE
AND ins_discipline_key = sm.mld_ins_discipline_key)
AND sm.mld_ins_discipline_key = gr.ins_discipline_key
AND gr.fac_groep_key != 102 -- Vebego Opdrachtgoedk. 500 Hard
AND gr.fac_functie_key = 42 -- WEB_ORDGOE
AND gr.fac_gebruiker_alg_level_write < 9
AND gr.fac_groep_key = gg.fac_groep_key
AND gg.prs_perslid_key = p.prs_perslid_key
AND p.prs_perslid_email IS NOT NULL
AND sn.fac_srtnotificatie_code = 'CUST03'
AND nj.fac_notificatie_job_view = 'KFHT_V_NOTI_ORDGOE'
AND t.fac_tracking_datum > nj.fac_notificatie_job_lastrun
UNION ALL -- Bij overschrijden 2e en - bij KFHT - laatste limiet!
SELECT DISTINCT
sn.fac_srtnotificatie_code,
NULL,
NULL,
REPLACE (sn.fac_srtnotificatie_oms, '##OPDRKEY##', TO_CHAR (o.mld_melding_key) || '/' || TO_CHAR (o.mld_opdr_bedrijfopdr_volgnr)),
o.mld_opdr_key,
NULL,
p.prs_perslid_email, -- Alle ORDGOE-geautoriseerden op vakgroep van meldingen!
NULL
FROM fac_tracking t,
mld_opdr o,
mld_melding m,
mld_stdmelding sm,
mld_disc_params dp,
fac_groeprechten gr,
fac_gebruikersgroep gg,
prs_v_aanwezigperslid p,
fac_srtnotificatie sn,
fac_notificatie_job nj
WHERE t.fac_srtnotificatie_key = 137 -- ORDMAI-tracking bij overschrijven van elke limiet!
AND INSTR (UPPER (t.fac_tracking_oms), 'NOTIFICATIE') > 0 -- Bah!
AND INSTR (UPPER (t.fac_tracking_oms), 'GOEDKEURING') > 0 -- Bah!
AND INSTR (UPPER (t.fac_tracking_oms), 'VERSTUURD') > 0 -- Bah!
AND t.fac_tracking_refkey = o.mld_opdr_key
AND o.mld_statusopdr_key = 10 -- Ter goedkeuring!
AND o.mld_melding_key = m.mld_melding_key
AND m.mld_stdmelding_key = sm.mld_stdmelding_key
AND sm.mld_ins_discipline_key = dp.mld_ins_discipline_key
AND o.mld_opdr_approved BETWEEN dp.mld_disc_params_bestellimiet2 AND dp.mld_disc_params_bestellimiet3 -- 2e goedkeuring
AND sm.mld_ins_discipline_key = gr.ins_discipline_key
AND gr.fac_functie_key = 43 -- WEB_ORDGO2
AND gr.fac_gebruiker_alg_level_write < 9
AND gr.fac_groep_key = gg.fac_groep_key
AND gg.prs_perslid_key = p.prs_perslid_key
AND p.prs_perslid_email IS NOT NULL
AND sn.fac_srtnotificatie_code = 'CUST03'
AND nj.fac_notificatie_job_view = 'KFHT_V_NOTI_ORDGOE'
AND t.fac_tracking_datum > nj.fac_notificatie_job_lastrun;
CREATE OR REPLACE PACKAGE KFHT
AS
PROCEDURE sluiten_wvg_wf_csm;
END;
/
CREATE OR REPLACE PACKAGE BODY KFHT
AS
-- KFHT#82282: Sluiten van - de laatste - Veiligheidskundige-stap igv. CSM-
-- gebouwen (in beheer van Vebego) en daarmee sluiten van WF.
PROCEDURE sluiten_wvg_wf_csm
AS
c_applname VARCHAR2 (50) := 'SLUITEN_WF_CSM';
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_aanduiding VARCHAR2 (200);
v_count_tot NUMBER (10) := 0;
--12101 HTC01 The Strip
--1 t/m 5 HTC01a-b-c-d-e
--10 HTC05
--12581 HTC05v
--11981 HTC06
--12301 HTC06A
--12 HTC08
--17 HTC12
--19 HTC18
--20 HTC21
--4361 HTC25 HUB
--12381 HTC25 h1
--12401 HTC25 h2
--12421 HTC25 h3
--12441 HTC25 h4
--12442 HTC25 h5
--12443 HTC25 h6
--? HTC25 h6 3de
--22 HTC27
--23 HTC27a
--24 HTC29
--25 HTC31
--27 HTC32
--8 HTC32b
--33 HTC37
--? HTC37v
--? HTC37w
--35 HTC41
--37 HTC43
--39 HTC45
--42 HTC47a
--48 HTC68
--49 HTC69
--50 HTC83
--51 HTC84
--12541 HTC85
--13221 HTC91
--4381 HTC96
--53 HTC97
--54 P0
--55 P1
--56 P2
--57 P3E
--58 P3W
--59 P4E
--60 P4S
--61 P4W
--62 P5
--63 P6
--64 P7-KWO
--66 P9
--67 P9-KWO
--4281 Foodlab Strip
--36 HTC42 (KFHT#83603)
CURSOR c_wf_csm
IS
SELECT m.mld_melding_start_key, m.mld_melding_key, m.mld_melding_onderwerp, m.mld_melding_status
FROM mld_melding m, mld_stdmelding sm, mld_discipline md
WHERE m.mld_stdmelding_key = sm.mld_stdmelding_key
AND sm.mld_ins_discipline_key = md.ins_discipline_key
AND md.ins_srtdiscipline_key = 21 -- Werkvergunning
AND md.ins_discipline_key = 202 -- Beoordeling veiligheidskundige
AND m.mld_melding_status IN (2, 3, 4) -- Nieuw/Te accepteren/In behandeling (zou Nieuw moeten zijn)
AND m.mld_melding_key != m.mld_melding_start_key -- Vervolgmelding en niet de startmelding zelf (zou zo moeten zijn)!
AND EXISTS -- Betreft CSM-gebouw
(SELECT 1
FROM alg_v_onroerendgoed_gegevens
WHERE alg_gebouw_key IN (12101,1,2,3,4,5,10,12581,11981,12301,12,17,19,20,4361,12381,12401,12421,12441,12442,12443,22,23,24,25,27,8,33,35,37,39,42,48,49,50,51,12541,13221,4381,53,54,55,56,57,58,59,60,61,62,63,64,66,67,4281,36)
AND alg_onroerendgoed_keys = m.mld_alg_onroerendgoed_keys);
BEGIN
FOR rec IN c_wf_csm
LOOP
v_aanduiding := '[' || TO_CHAR (rec.mld_melding_key) || '|' || rec.mld_melding_onderwerp || '] ';
v_count_tot := v_count_tot + 1;
MLD.setmeldingstatus (rec.mld_melding_key, 5, NULL); -- Afgemeld (incl. tracking)
MLD.mld_nextworkflowstep (rec.mld_melding_key, 1); -- 1=Completed
IF MOD (v_count_tot, 500) = 0 THEN COMMIT; END IF;
END LOOP;
fac.writelog (c_applname, 'S', '#WFs gesloten: ' || TO_CHAR (v_count_tot), '');
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg := 'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.writelog (c_applname, 'E', v_aanduiding || v_errormsg, 'Daily achtergrond taak afgebroken!');
END;
END;
/
-- KFHT#82282: Sluiten van - de laatste - Veiligheidskundige-stap igv. CSM-
-- gebouwen (in beheer van Vebego) en daarmee sluiten van WF.
CREATE OR REPLACE PROCEDURE KFHT_DAILY
AS
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
BEGIN
kfht.sluiten_wvg_wf_csm;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg := 'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.writelog ('DAILY', 'E', 'Proces afgebroken!', v_errormsg);
END KFHT_DAILY;
/
-- KFHT#83373: Opdrachten (gekoppeld aan contract).
CREATE OR REPLACE VIEW KFHT_V_RAP_CNT_OPDR
(
vakgroeptype,
vakgroep,
meldingsoort,
melding_key,
meldingnr,
meldingstatus,
--mld_aanmaak,
--mld_gepland,
--mld_afgemeld,
opdrachttype,
opdr_key,
opdrachtnr,
opdrachtstatus,
locatie,
gebouw_terrein,
uitvoerende,
refnr_lev,
contract_key,
contractnr,
ord_aanmaak,
--ord_gepland,
ord_afgemeld
)
AS
SELECT sd.ins_srtdiscipline_omschrijving vakgroeptype,
md.ins_discipline_omschrijving vakgroep,
sm.mld_stdmelding_omschrijving meldingsoort,
m.mld_melding_key melding_key,
COALESCE (sd.ins_srtdiscipline_prefix, '') || TO_CHAR (m.mld_melding_key)
meldingnr,
ms.mld_statuses_omschrijving meldingstatus,
--m.mld_melding_datum mld_aanmaak,
--m.mld_melding_einddatum mld_gepland,
--fac.gettrackingdate ('MLDAFM', m.mld_melding_key) afgemeld,
ot.mld_typeopdr_omschrijving opdrachttype,
o.mld_opdr_key opdracht_key,
TO_CHAR (o.mld_melding_key) || '/' || TO_CHAR (o.mld_opdr_bedrijfopdr_volgnr)
opdrachtnr,
os.mld_statusopdr_omschrijving opdrachtstatus,
l.alg_locatie_code || '-' || l.alg_locatie_omschrijving locatie,
DECODE (
m.mld_alg_onroerendgoed_keys,
NULL, NULL,
DECODE (
aog.alg_terreinsector_key,
NULL, aog.alg_gebouw_code || ' - ' || aog.alg_gebouw_naam,
aog.alg_terreinsector_code || ' - ' || aog.alg_terreinsector_code))
gebouw_terrein,
uv.naam uitvoerende,
rl.mld_kenmerkopdr_waarde refnr_lev,
c.cnt_contract_key contract_key,
DECODE (
c.cnt_contract_key,
NULL, NULL,
c.cnt_contract_nummer_intern || '.' || COALESCE (c.cnt_contract_versie, '0'))
contractnr,
o.mld_opdr_datumbegin ord_aanmaak,
--o.mld_opdr_einddatum ord_gepland,
fac.gettrackingdate ('ORDAFM', o.mld_opdr_key) ord_afgemeld
FROM mld_melding m,
mld_statuses ms,
mld_stdmelding sm,
mld_discipline md,
ins_srtdiscipline sd,
mld_opdr o,
mld_statusopdr os,
mld_typeopdr ot,
alg_locatie l,
alg_v_onroerendgoed_gegevens aog,
mld_v_uitvoerende uv,
(SELECT *
FROM mld_kenmerkopdr ko
WHERE EXISTS
(SELECT 1
FROM mld_kenmerk
WHERE mld_srtkenmerk_key = 6 -- Refnr. leverancier
AND mld_kenmerk_key = ko.mld_kenmerk_key)) rl,
cnt_v_aanwezigcontract c
WHERE m.mld_melding_status = ms.mld_statuses_key(+)
AND m.mld_stdmelding_key = sm.mld_stdmelding_key
AND sm.mld_ins_discipline_key = md.ins_discipline_key
AND md.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
AND m.mld_melding_key = o.mld_melding_key
AND o.mld_opdr_datumbegin > TRUNC (ADD_MONTHS (SYSDATE, -12), 'yyyy')
AND o.mld_statusopdr_key = os.mld_statusopdr_key(+)
AND o.mld_typeopdr_key = ot.mld_typeopdr_key
AND m.mld_alg_locatie_key = l.alg_locatie_key(+)
AND m.mld_alg_onroerendgoed_keys = aog.alg_onroerendgoed_keys(+)
AND o.mld_uitvoerende_keys = uv.mld_uitvoerende_key(+)
AND o.mld_opdr_key = rl.mld_opdr_key(+)
AND o.cnt_contract_key = c.cnt_contract_key(+);
------ 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