Files
Customer/WEND/wend.sql
Jos Migo 58b175ca1b WEND#86093 -- Aanpassing koppeling medewerkers - Geen-afdeling netjes ingepast
WEND#89932 -- Contractbeheer - Aanpassing rappel

svn path=/Customer/trunk/; revision=69789
2025-07-16 09:33:25 +00:00

1434 lines
59 KiB
SQL

--
-- $Id$
--
-- Script containing customer specific sql statements for the FACILITOR database
DEFINE thisfile = 'wend.sql'
DEFINE dbuser = 'WEND'
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 ------
-- Mail2Melding - Basis uit SVRZ overgenomen:
--- WEND : key 121 = Melding 'Melding via mail - Nog te rubriceren' (meldpunt@wend.facilitor.nl)
CREATE OR REPLACE PROCEDURE wend_processemail (
pfrom IN VARCHAR2,
pto IN VARCHAR2,
psubject IN VARCHAR2,
pbody IN VARCHAR2,
psessionid IN VARCHAR2,
pemailkey IN NUMBER)
AS
c_onbekend_key NUMBER (10) := 3281 ; -- Melder onbekend
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_exist_ticket VARCHAR2 (255) := '';
v_perslid_key NUMBER (10);
v_kostenplaats_key NUMBER (10);
v_locatie_key NUMBER (10);
v_discipline_key NUMBER (10);
v_stdmelding_key NUMBER (10);
v_melding_key NUMBER (10);
v_folder_kkey NUMBER (10);
v_count NUMBER (10);
v_count_wp NUMBER (10);
v_fac_result_from VARCHAR2 (250);
v_fac_result_fromaddr VARCHAR2 (250);
v_fw_from VARCHAR2 (1000) := '';
v_from_string VARCHAR2 (1000) := NULL ;
v_voor_at VARCHAR2 (1000) := '';
v_na_at VARCHAR2 (1000) := '';
BEGIN
CASE
WHEN UPPER (pto) LIKE 'MELDPUNT@%'
THEN
-- 1. HANDMATIG doorgestuurd vanuit facilitairmeldpunt@wender.nl en helpdesk@wender.nl
-- Voorbeeld WENDER: Van: Ben Onderstijn <b.onderstijn@wender.nl> Van: Paula van der Tooren <P.Tooren@wender.nl>
-- Dus eerst op zoek naar eerste VAN-regel
v_from_string :=
SUBSTR(pbody,
REGEXP_INSTR(pbody,'Van:|From:|E-mail:',1,1),
INSTR(pbody,CHR(10),REGEXP_INSTR(pbody,'Van:|From:|E-mail:',1,1),1)-REGEXP_INSTR(pbody,'Van:|From:|E-mail:',1,1)) ;
-- Als deze bestaat dan gaan we via die kant het from-adres-bebepalen
IF v_from_string IS NOT NULL AND INSTR(v_from_string,'@')>0
THEN
IF INSTR(v_from_string, '<',1,1)>0
THEN
v_na_at :=
SUBSTR(v_from_string,
INSTR(v_from_string,'@',1,1)+1,
INSTR(v_from_string,'.nl')+3 - INSTR(v_from_string,'@',1,1)-1) ;
v_voor_at :=
SUBSTR (v_from_string,
INSTR (v_from_string, '<',1,1) + 1,
INSTR (v_from_string, '@',1,1) - INSTR (v_from_string, '<',1,1) -1);
v_fw_from := v_voor_at || '@' || v_na_at;
ELSE
v_na_at :=
SUBSTR(v_from_string,
INSTR(v_from_string,'@',1,1)+1,
REGEXP_INSTR(v_from_string,'$')-INSTR(v_from_string,'@',1,1)-1) ;
v_voor_at :=
SUBSTR (v_from_string,
INSTR (v_from_string, ':',1,1) + 2,
INSTR (v_from_string, '@',1,1) - INSTR (v_from_string, ':',1,1) -2);
v_fw_from := v_voor_at || '@' || v_na_at;
END IF;
ELSE
-- 2. AUTOMATISCH doorgestuurde mail OF geen "Van: met email-adres" in de body. Dan dus maar terugvallen op de v_fromaddr...
SELECT fac_result_waarde
INTO v_fac_result_fromaddr
FROM fac_result WHERE fac_result_sessionid = psessionid AND fac_result_naam = 'fromaddr' ;
v_fac_result_fromaddr := REPLACE(REPLACE(v_fac_result_fromaddr,'>',''),'<','') ;
v_fw_from := v_fac_result_fromaddr;
END IF;
v_fw_from := SUBSTR (v_fw_from, 1, 50);
-- Bepaal de melder/noteur op basis van e-mail adres zoals in pfrom?
v_errormsg := 'Fout bepalen melder ' || COALESCE (pfrom, '???');
SELECT COUNT (*), max(prs_perslid_key)
INTO v_count, v_perslid_key
FROM prs_v_aanwezigperslid
WHERE UPPER (prs_perslid_email) LIKE UPPER (v_fw_from) || '%';
-- Als er persoon gevonden is, dan ff checken of er ook werkplekkoppelingen onder zijn aangemaakt
IF v_count = 1
THEN
SELECT COUNT (*)
INTO v_count_wp
FROM prs_perslidwerkplek
WHERE prs_perslid_key = v_perslid_key;
END IF;
-- Als er persoon gevonden is, dan ff checken of er op gekoppelde Afdeling ook een kostenplaats is gekoppeld
IF v_count = 1
THEN
SELECT MIN(a.prs_kostenplaats_key)
INTO v_kostenplaats_key
FROM prs_v_aanwezigperslid p, prs_afdeling a
WHERE prs_perslid_key = v_perslid_key AND p.prs_afdeling_key = a.prs_afdeling_key ;
END IF;
-- Locatie erbij halen
IF v_count = 1 AND v_count_wp > 0
THEN
SELECT p.prs_perslid_key, MIN (wpg.alg_locatie_key)
INTO v_perslid_key, v_locatie_key
FROM prs_v_aanwezigperslid p,
(SELECT pw.prs_perslid_key, pw.prs_werkplek_key
FROM prs_perslidwerkplek pw
WHERE NOT EXISTS
(SELECT 1
FROM prs_perslidwerkplek
WHERE prs_perslid_key = pw.prs_perslid_key
AND prs_perslidwerkplek_key > pw.prs_perslidwerkplek_key)) pw,
prs_v_werkplekperslid_gegevens wpg
WHERE p.prs_perslid_key = v_perslid_key
AND p.prs_perslid_key = pw.prs_perslid_key(+)
AND pw.prs_werkplek_key = wpg.prs_werkplek_key(+)
GROUP BY p.prs_perslid_key;
END IF;
-- Geen werkplek of Melder onbekend - Dan melding op locatie_key 32 (Hoofdkantoor Wirdumerpoort (LE-OOSTER))
IF (v_count = 1 AND v_count_wp = 0) OR v_count = 0
THEN
v_locatie_key := 32;
END IF;
-- Melder kan niet bepaald worden, dus inlezen onder 'Melder onbekend (M2M)'
-- Op deze 'Melder onbekend' is aan voorkant wel afdeling Onbekend gekoppeld met default wender-kostenplaats. Deze kp halen we er daarom nu ook bij
IF v_count = 0
THEN
SELECT p.prs_perslid_key, a.prs_kostenplaats_key
INTO v_perslid_key, v_kostenplaats_key
FROM prs_v_aanwezigperslid p, prs_afdeling a
WHERE p.prs_afdeling_key = a.prs_afdeling_key
AND p.prs_perslid_key = c_onbekend_key;
END IF;
v_errormsg := 'Fout bepalen bestaande melding';
v_exist_ticket := psubject;
IF REGEXP_INSTR (v_exist_ticket, '\d') > 0
THEN
v_exist_ticket := SUBSTR (v_exist_ticket, REGEXP_INSTR (v_exist_ticket, '\d')) || 'x'; -- Gedeelte vanaf eerste cijfer in v_exist_ticket plus 'x'!
v_exist_ticket := SUBSTR (v_exist_ticket, 1, REGEXP_INSTR (v_exist_ticket, '\D') - 1); -- Gedeelte tot eerste niet-cijfer in v_exist_ticket!
ELSE
v_exist_ticket := 'x';
END IF;
SELECT COUNT (*)
INTO v_count
FROM mld_melding
WHERE mld_melding_key = fac.safe_to_number (v_exist_ticket);
-- Om te voorkomen dat huisnummers in het Onderwerp resulteren in het
-- toevoegen van Notities, dit voor alle meldingen doen (vanaf start met nr 10.000)
IF v_count = 1 AND fac.safe_to_number (v_exist_ticket) >= 10000
THEN -- Notitie bij bestaande melding!
SELECT mld_stdmelding_key, mld_melding_key
INTO v_stdmelding_key, v_melding_key
FROM mld_melding
WHERE mld_melding_key = fac.safe_to_number (v_exist_ticket);
v_errormsg := 'Fout toevoegen notitie';
INSERT INTO mld_melding_note (mld_melding_key,
prs_perslid_key,
mld_melding_note_omschrijving,
mld_melding_note_flag)
VALUES (v_melding_key,
v_perslid_key,
pfrom || CHR (13) || CHR (10) || psubject || CHR (13) || CHR (10) || SUBSTR (pbody, 1, 2000),
0);
INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde)
VALUES (psessionid, 'maillog', 'Notitie onder exist-melding ' || v_melding_key);
-- Vlaggetjes zetten zoals mld_edit_note.asp dat doet!
UPDATE mld_melding
SET mld_melding_actiecode = 1 + 128 -- BO + Attentie
WHERE mld_melding_key = v_melding_key;
ELSE -- Nieuwe melding!
-- Bepaal de afgesproken soortmelding met key= 1 Melding via mail - Nog te rubriceren
v_errormsg := 'Fout bepalen soortmelding';
SELECT mld_ins_discipline_key, mld_stdmelding_key
INTO v_discipline_key, v_stdmelding_key
FROM mld_stdmelding
WHERE mld_stdmelding_key = 101;
-- Suggested extensions:
-- - Check for MLDUSE-write autorisations
-- - Parse the subject to find the appropriate stdmelding, if uniquely possible
-- - Append (as a note?) to an existing melding if #key is found in the subject
v_errormsg := 'Fout toevoegen melding';
INSERT INTO mld_melding (mld_melding_module,
mld_meldbron_key,
mld_alg_locatie_key,
mld_alg_onroerendgoed_keys,
mld_melding_datum,
mld_melding_omschrijving,
mld_stdmelding_key,
mld_melding_t_uitvoertijd,
prs_kostenplaats_key,
prs_perslid_key,
prs_perslid_key_voor,
mld_melding_status,
mld_melding_spoed,
mld_melding_onderwerp,
mld_melding_behandelaar2_key,
mld_ins_discipline_key)
VALUES ('MLD',
4, -- email
v_locatie_key,
NULL, --v_onrgoed_keys,
SYSDATE,
'From-adres: ' || v_fw_from || CHR (13) || CHR (10) ||
SUBSTR (pbody, 1, 2000),
v_stdmelding_key,
NULL,
v_kostenplaats_key,
v_perslid_key,
v_perslid_key,
NULL,
3, -- prio normaal
SUBSTR (psubject, 1, 80),
NULL,
NULL)
RETURNING mld_melding_key
INTO v_melding_key;
mld.setmeldingstatus (v_melding_key, 2, v_perslid_key);
INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde)
VALUES (psessionid, 'maillog', 'Geregistreerd onder melding ' || v_melding_key);
END IF;
-- Find the lowest volgnummer of the Folder-flexfield.
SELECT MIN (k1.mld_kenmerk_key)
INTO v_folder_kkey
FROM mld_stdmelding sm1, ins_tab_discipline td1, mld_kenmerk k1, mld_srtkenmerk sk1
WHERE sm1.mld_stdmelding_key = v_stdmelding_key
AND sm1.mld_ins_discipline_key = td1.ins_discipline_key
AND k1.mld_kenmerk_verwijder IS NULL
AND k1.mld_srtkenmerk_key = sk1.mld_srtkenmerk_key
AND sk1.mld_srtkenmerk_kenmerktype = 'M'
AND ((k1.mld_stdmelding_key = sm1.mld_stdmelding_key AND k1.mld_kenmerk_niveau = 'S')
OR (k1.mld_stdmelding_key = td1.ins_discipline_key AND k1.mld_kenmerk_niveau = 'D')
OR (k1.mld_stdmelding_key = td1.ins_srtdiscipline_key AND k1.mld_kenmerk_niveau = 'T')
OR (k1.mld_kenmerk_niveau = 'A')
)
AND NOT EXISTS
(SELECT 1
FROM mld_stdmelding sm2, ins_tab_discipline td2, mld_kenmerk k2, mld_srtkenmerk sk2
WHERE sm2.mld_stdmelding_key = v_stdmelding_key
AND sm2.mld_ins_discipline_key = td2.ins_discipline_key
AND k2.mld_kenmerk_verwijder IS NULL
AND k2.mld_srtkenmerk_key = sk2.mld_srtkenmerk_key
AND sk2.mld_srtkenmerk_kenmerktype = 'M'
AND ((k2.mld_stdmelding_key = sm2.mld_stdmelding_key AND k2.mld_kenmerk_niveau = 'S')
OR (k2.mld_stdmelding_key = td2.ins_discipline_key AND k2.mld_kenmerk_niveau = 'D')
OR (k2.mld_stdmelding_key = td2.ins_srtdiscipline_key AND k2.mld_kenmerk_niveau = 'T')
OR (k1.mld_kenmerk_niveau = 'A')
)
AND k2.mld_kenmerk_volgnummer < k1.mld_kenmerk_volgnummer);
IF v_folder_kkey IS NOT NULL
THEN
INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde)
VALUES (psessionid, 'kenmerkpath', 'MLD\M' || TO_CHAR (TRUNC (v_melding_key / 1000), 'FM0000') || '___\M' || v_melding_key || '\' || v_folder_kkey || '\');
-- originele email wordt opgeslagen bij de melding
INSERT INTO fac_result (fac_result_sessionid,
fac_result_naam,
fac_result_waarde)
VALUES (psessionid,
'kenmerkorgmailpath',
'MLD\M' || TO_CHAR (TRUNC (v_melding_key / 1000), 'FM0000') || '___\M' || v_melding_key || '\' || v_folder_kkey || '\');
END IF;
ELSE
INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde)
VALUES (psessionid, 'errormsg', 'Ontvanger ongeldig - Neem contact op met uw systeembeheerder ');
END CASE;
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.writelog ('PROCESSEMAIL', 'E', 'BLOS_processemail afgebroken!', '[' || pfrom || '] ' || v_errormsg);
INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde)
VALUES (psessionid, 'errormsg', 'Database fout - Neem contact op met uw systeembeheerder ');
COMMIT;
END;
/
CREATE OR REPLACE PROCEDURE wend_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);
v_aantal_in_fclt NUMBER;
v_seq_of_columns VARCHAR (255);
-- overige variabelen
v_naam_verantw VARCHAR2(255);
v_prs_perslid_email_verantw VARCHAR2(255);
CURSOR c_verantw
IS
SELECT i.fac_imp_file_index, i.prs_perslid_email, i.prs_kenmerk12
FROM fac_imp_perslid i
WHERE fac_import_key = p_import_key
ORDER BY i.fac_imp_file_index;
BEGIN
-- Ticket WEND#86093
-- BESTAND WORDT: GivenName,Surname,UserPrincipalName,Title,EmailAddress,Mobile,telephoneNumber,employeeID,Department,Office,sAMAccountName,manager
--- VOORBEELD:
--- Popke,van der Meer,p.vandermeer@wender.nl,,p.vandermeer@wender.nl,0682300088,0880663081,204240,test,test location,CN=Jens Waterreus,OU=Accounts,OU=Wender,DC=internal,DC=wender,DC=nl
-- Import csv formaat - kolommen:
-- 1. Afdeling - DEZE VOEGEN WE BIJ IMPORT TOE - Wender stuurt namelijk geen Department mee...
-- 2. GivenName
-- 3. Surname
-- 4. UserPrincipalName
-- 5. Title
-- 6. EmailAddress
-- 7. Mobile
-- 8. TelephoneNumber
-- 9. EmployeeID
-- 10. Department - DEZE IS DUS LEEG (VOORALSNOG)
-- 11. Office
-- 12. sAMAccountName (max 15 karakters) - Om verplichte kolommen mee te vullen en daarna te updaten (afdeling, functie, ..)
-- 13. Manager (CN=Jens Waterreus)
-- 14. t/m 19 - Manager - komt in details mee maar gebruiken we niet: OU=Accounts,OU=Wender,DC=internal,DC=wender,DC=nl
-- de sequence array staat beschreven in PRS_PAC.SRC bij de prs.import_perslid procedure
v_seq_of_columns := '0;0;0;0;0;0;1;3;0;2;'
-- v_alg_locatie_code 1
-- v_alg_gebouw_code 2
-- v_alg_verdieping_volgnr 3
-- v_alg_ruimte_nr 4
-- v_prs_werkplek_volgnr 5
-- v_prs_werkplek_omschrijving 6
-- v_prs_afdeling_naam 7 -- VERPLICHT BIJ IMPORT - Geen toepassing bij Wender. Vullen deze daarom zelf op positie 1 in fac_imp-tabel
-- v_prs_perslid_naam 8 -- VERPLICHT BIJ IMPORT
-- v_prs_perslid_tussenvoegsel 9
-- v_prs_perslid_voornaam 10
|| '0;0;0;0;0;8;7;6;0;9;'
-- v_prs_perslid_voorletters 11
-- v_prs_perslid_partner_naam 12
-- v_prs_perslid_partner_tussenv 13
-- v_prs_naamgebruik_code 14 0 (default) perslid_naam en perslid_tussenvoegsel worden gebruikt
-- 1 personen die de geboortenaam van de partner icm de eigen naam willen gebruiken
-- 2 personen die de geboortenaam van de partner willen gebruiken
-- 3 personen die de eigen naam icm de geboortenaam van de partner willen gebruiken
-- v_prs_perslid_geslacht 15 Gebruik 'man', 'm' of 1 voor man en 'vrouw', 'v' of 0 voor vrouw case insensitive geen default
-- v_prs_perslid_telefoonnr 16
-- v_prs_perslid_mobiel 17
-- v_prs_perslid_email 18
-- v_prs_perslid_dienstverband 19
-- v_prs_perslid_nr 20
|| '12;6;0;0;0;0;2;3;4;5;'
-- v_prs_srtperslid_omschrijving 21 -- VERPLICHT BIJ IMPORT - Niet altijd gevuld bij WENDER. Daarom intieel vullen met sAMAccountName en daarna omzetten
-- v_prs_perslid_oslogin 22
-- v_prs_perslid_wachtwoord 23
-- v_prs_perslid_titel 24
-- v_prs_perslid_apikey 25
-- v_dummy 26
-- v_prs_kenmerk1 27
-- v_prs_kenmerk2 28
-- v_prs_kenmerk3 29
-- v_prs_kenmerk4 30
|| '6;7;8;9;10;11;12;13;0;0;'
|| '0;0;0;0;0;0';
-- Het aangeleverde bestand heeft de gegevens komma gescheiden ipv ;
v_errorhint := 'Delimiter goed zetten';
UPDATE fac_imp_file
SET fac_imp_file_line = REPLACE (fac_imp_file_line, ',', ';')
WHERE fac_import_key = p_import_key;
-- Als het aangeleverde bestand aanhalingstekens om de invoervelden heeft, dan halen we dit bij deze weg..
UPDATE fac_imp_file
SET fac_imp_file_line = REPLACE (fac_imp_file_line, '"', '')
WHERE fac_import_key = p_import_key;
-- header aanvullen met afdeling
--- deze afdeling/department komt niet mee uit entra-wender en voeg hier de algemene afdeling WEND toe waarop alle medewerkers mogen landen.
UPDATE fac_imp_file i
SET i.fac_imp_file_line =
'Afdeling_Wender'
|| ';' ||
fac_imp_file_line
WHERE fac_import_key = p_import_key AND fac_imp_file_index = 1;
-- regels
--- deze afdeling vullen met WEND
UPDATE fac_imp_file i
SET i.fac_imp_file_line =
'WEND'
|| ';' ||
fac_imp_file_line
WHERE fac_import_key = p_import_key AND fac_imp_file_index > 1;
v_errorhint := 'Generieke update';
-- csv verwerken naar de fac_imp_perslid-tabel
prs.import_perslid(p_import_key, v_seq_of_columns, 'Afdeling_Wender;GivenName;Surname;UserPrincipalName;Title;EmailAddress;Mobile;telephoneNumber;employeeID;Department;Office;sAMAccountName;manager%');
-- POST-UPDATES op data in fac_imp_perslid-tabel doen om verwerking goed/volledig/cust-specifiek te laten verlopen
v_errorhint := 'Post update(s)';
-- Loginnaam afleiden van emailadres
UPDATE fac_imp_perslid
SET prs_perslid_oslogin =
UPPER((SUBSTR (prs_perslid_email,
0,
INSTR (prs_perslid_email, '@') - 1)))
WHERE UPPER (prs_perslid_email) LIKE '%WENDER.NL%';
-- Delete uit AD Wender-medewerkers uit oude fusie-organisaties ZIEN en HETKOPLAND
DELETE fac_imp_perslid
WHERE UPPER (prs_perslid_email) LIKE '%ZIENN.NL%' or UPPER (prs_perslid_email) LIKE '%HETKOPLAND.NL%' ;
-- Functie is niet altijd gevuld, functie eerst gevuld met achternaam, nu vullen met kenmerk (of 'Onbekend').
UPDATE fac_imp_perslid
SET prs_srtperslid_omschrijving =
DECODE (prs_kenmerk4, NULL, 'Onbekend', prs_kenmerk4);
FOR rec IN c_verantw
LOOP
BEGIN
v_errorhint := 'Leidinggevende erbij zoeken';
-- Bijv: CN=Jens Waterreus (in prs_kenmerk12 opgenomen)
IF rec.prs_kenmerk12 IS NOT NULL
THEN
v_prs_perslid_email_verantw := NULL ;
v_naam_verantw := SUBSTR(rec.prs_kenmerk12, 4) ;
SELECT MAX(p.prs_perslid_email)
INTO v_prs_perslid_email_verantw
FROM prs_v_aanwezigperslid p, prs_v_perslid_fullnames pf
WHERE p.prs_perslid_key = pf.prs_perslid_key
AND UPPER(pf.prs_perslid_naam_friendly) = UPPER(v_naam_verantw) ;
IF v_prs_perslid_email_verantw IS NOT NULL
THEN
UPDATE fac_imp_perslid
SET prs_kenmerk13 = v_prs_perslid_email_verantw
WHERE fac_imp_file_index = rec.fac_imp_file_index ;
END IF;
END IF;
END;
END LOOP;
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 wend_import_perslid;
/
CREATE OR REPLACE PROCEDURE wend_update_perslid (p_import_key IN NUMBER)
IS
-- Alle personen verwijderen die niet meer in het import import bestand voorkomen
-- Personen in de juiste autorisatiegroep zetten.
-- Match bij WENDERGROEP is Email.
-- Geen acties tenzij het aantal records in de importtabel meer dan 50 medewerkers betreft.
CURSOR c_del
IS
SELECT p.prs_perslid_key, p.prs_perslid_nr, pf.prs_perslid_naam_full, v.prs_bedrijf_key, b.prs_bedrijf_naam
FROM prs_perslid p, prs_v_perslid_fullnames pf, prs_v_afdeling v, prs_bedrijf b
WHERE UPPER (p.prs_perslid_email) LIKE '%WENDER.NL%'
AND NOT EXISTS (SELECT 1 FROM fac_imp_perslid WHERE INSTR(UPPER (p.prs_perslid_email),UPPER (prs_perslid_email) ) > 0 )
AND pf.prs_perslid_key = p.prs_perslid_key
AND p.prs_Afdeling_key = v.prs_afdeling_key
AND v.prs_bedrijf_key = b.prs_bedrijf_key
AND v.prs_bedrijf_key = 21 ; -- Alleen onder/voor bedrijf Wender Opvang (key 21)
CURSOR c_flex -- Voor updaten van de algemene flex-kenmerkvelden
IS
SELECT p.prs_perslid_key, p.prs_perslid_email, i.prs_perslid_partner_naam, i.prs_kenmerk1, i.prs_kenmerk2, i.prs_kenmerk3, i.prs_kenmerk4, i.prs_kenmerk5, i.prs_kenmerk6, i.prs_kenmerk7, i.prs_kenmerk8, i.prs_kenmerk9, i.prs_kenmerk10, i.prs_kenmerk11, i.prs_kenmerk12, i.prs_kenmerk13
FROM prs_v_aanwezigperslid p, fac_imp_perslid i
WHERE p.prs_perslid_key = i.prs_perslid_key
ORDER BY 2;
CURSOR c_verantw
IS
SELECT p.prs_perslid_key,
p.prs_perslid_email,
p.prs_perslid_nr,
p.prs_perslid_oslogin,
p.leidinggevende_emailadres,
CASE WHEN p.prs_perslid_key_verantw IS NOT NULL
THEN (SELECT prs_perslid_email FROM prs_perslid WHERE prs_perslid_key = p.prs_perslid_key_verantw)
ELSE NULL
END
prs_perslid_verantw_email
FROM fac_imp_perslid i,
(SELECT p.prs_perslid_key,
p.prs_perslid_email,
p.prs_perslid_nr,
p.prs_perslid_oslogin,
p.prs_perslid_key_verantw,
(SELECT kw.prs_kenmerklink_waarde
FROM prs_kenmerklink kw
WHERE kw.prs_kenmerk_key = 1060
AND kw.prs_kenmerklink_niveau = 'P'
AND kw.prs_link_key = p.prs_perslid_key)
leidinggevende_emailadres
FROM prs_perslid p) p
WHERE p.prs_perslid_key = i.prs_perslid_key ;
v_count NUMBER;
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_errormsg VARCHAR2 (400);
v_errorhint VARCHAR2 (400);
-- overige variabelen
v_prs_perslid_key_verantw NUMBER(10);
BEGIN
v_errorhint := 'Niet genoeg personen in bestand, import afgebroken';
SELECT COUNT ( * ) INTO v_count FROM fac_imp_perslid;
IF v_count >= 50
THEN
v_errorhint := 'Verwerken persoonsgegevens';
-- Geldig importbestand wat betreft aantal personen
COMMIT;
-- generic update
-- 'EMAIL' betekent dat op basis van Email wordt gematched.
-- 'NULL' betekent altijd geen werkplekken verwijderen
prs.update_perslid (p_import_key, 'EMAIL', NULL);
v_errorhint := 'Verwijderen persoonsgegevens';
-- 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);
-- NULL;
END;
END LOOP;
FOR rec IN c_flex
LOOP
BEGIN
v_errorhint:='Fout bijwerken kenmerkvelden';
PRS.upsertkenmerk (1021, rec.prs_perslid_key, rec.prs_kenmerk1); -- GivenName
PRS.upsertkenmerk (1022, rec.prs_perslid_key, rec.prs_kenmerk2); -- SurName
PRS.upsertkenmerk (1023, rec.prs_perslid_key, rec.prs_kenmerk3); -- UserPrincipalName
PRS.upsertkenmerk (1024, rec.prs_perslid_key, rec.prs_kenmerk4); -- Title
PRS.upsertkenmerk (1025, rec.prs_perslid_key, rec.prs_kenmerk5); -- EmailAddress
PRS.upsertkenmerk (1026, rec.prs_perslid_key, rec.prs_kenmerk6); -- Mobile
PRS.upsertkenmerk (1027, rec.prs_perslid_key, rec.prs_kenmerk7); -- TelephoneNumber
PRS.upsertkenmerk (1028, rec.prs_perslid_key, rec.prs_kenmerk8); -- EmployeeID
PRS.upsertkenmerk (1029, rec.prs_perslid_key, rec.prs_kenmerk9); -- Department
PRS.upsertkenmerk (1030, rec.prs_perslid_key, rec.prs_kenmerk10); -- Office
PRS.upsertkenmerk (1040, rec.prs_perslid_key, rec.prs_kenmerk11); -- sAMAccountName
PRS.upsertkenmerk (1031, rec.prs_perslid_key, rec.prs_kenmerk12); -- Manager
PRS.upsertkenmerk (1060, rec.prs_perslid_key, rec.prs_kenmerk13); -- Emailadres leidinggevende
END;
END LOOP;
-- En de verantwoordelijk manager updaten in de personenkaart indien nodig
FOR rec IN c_verantw
LOOP
BEGIN
v_errorhint:='Fout bijwerken verantwoordelijke';
-- als de aangeboden waarde uit azure anders is dan de huidige verantwoordelijke in de personenkaart dan gaan we personenkaart updaten
IF COALESCE(rec.leidinggevende_emailadres, '<leeg>') <> COALESCE(rec.prs_perslid_verantw_email, '<leeg>')
THEN
-- geen gevonden facilitor-manager dan gevulde verantwoordelijke verwijderen
IF rec.leidinggevende_emailadres IS NULL
THEN
UPDATE prs_perslid
SET prs_perslid_key_verantw = ''
WHERE prs_perslid_key = rec.prs_perslid_key ;
END IF;
-- wel gevonden facilitor-manager dan bijbehorende verantwoordelijke_key in personenkaart vullen
IF rec.leidinggevende_emailadres IS NOT NULL
THEN
SELECT prs_perslid_key
INTO v_prs_perslid_key_verantw
FROM prs_perslid
WHERE prs_perslid_email = rec.leidinggevende_emailadres ;
UPDATE prs_perslid
SET prs_perslid_key_verantw = v_prs_perslid_key_verantw
WHERE prs_perslid_key = rec.prs_perslid_key ;
END IF;
END IF;
END;
END LOOP;
ELSE
fac.imp_writelog (p_import_key,
'E',
v_errormsg,
v_errorhint);
COMMIT;
END IF;
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 wend_update_perslid;
/
-----------------------------------------
-- Rapportage-views --
-----------------------------------------
CREATE OR REPLACE VIEW wend_v_rap_opdrachten_intern
(
TYPE,
MLD_OPDR_KEY,
MLD_UITVOERENDE_KEY,
OPDRACHTNR,
OPDRACHT_DATUM,
STATUS,
MELDING,
BEHANDELAAR,
LOCATIE_PLAATS,
LOCATIE_OMSCHRIJVING,
GEPLANDE_AANVANG,
OMSCHRIJVING,
PRS_PERSLID_KEY,
NAAM_UITVOERDER,
UREN_BESTEED,
AFMELD_DATUM,
OPDRACHT_TYPE,
TD_NAAM,
ALG_DISTRICT_OMSCHRIJVING,
PRIORITEIT
)
AS
SELECT CASE
WHEN mu.TYPE = 'B' THEN 'Poule-opdracht'
WHEN mu.TYPE = 'P' THEN 'Klus-opdracht'
ELSE '<?>'
END
TYPE,
o.mld_opdr_key,
CASE
WHEN mu.TYPE = 'B' THEN o.prs_perslid_key
WHEN mu.TYPE = 'P' THEN mu.mld_uitvoerende_key
ELSE NULL
END
mld_uitvoerende_key,
TO_CHAR (o.mld_melding_key)
|| '/'
|| o.mld_opdr_bedrijfopdr_volgnr
opdrachtnummer,
o.mld_opdr_datumbegin,
DECODE (
os.mld_statusopdr_key,
8, DECODE (o.mld_opdr_halted,
1, 'Onderbroken',
os.mld_statusopdr_omschrijving),
os.mld_statusopdr_omschrijving)
status,
std.mld_stdmelding_omschrijving,
COALESCE (p.prs_perslid_naam_full, '<nog geen behandelaar>'), -- BEHANDELAAR
l.alg_locatie_plaats,
CASE WHEN m.mld_alg_onroerendgoed_keys IS NOT NULL
THEN l.alg_locatie_omschrijving || ' - ' || COALESCE(onr.alg_gebouw_naam, onr.alg_terreinsector_naam)
ELSE l.alg_locatie_omschrijving
END
locatie_omschrijving,
COALESCE(o.mld_opdr_plandatum, o.mld_opdr_einddatum)
geplande_aanvang,
TRIM (
REGEXP_REPLACE (
REGEXP_SUBSTR (o.mld_opdr_omschrijving,
'(([^ ]*)( |$)*){10}'),
'[[:space:]]',
' '))
|| '...',
p.prs_perslid_key,
mu.naam,
(SELECT ko.mld_kenmerkopdr_waarde
FROM mld_kenmerkopdr ko
WHERE ko.mld_opdr_key = o.mld_opdr_key
AND ko.mld_kenmerk_key = 3), -- kenmerk Uren_besteed
(SELECT MAX (ft.fac_tracking_datum)
FROM fac_tracking ft
WHERE ft.fac_tracking_refkey = o.mld_opdr_key
AND ft.fac_srtnotificatie_key = 74), -- ORDAFM
ot.mld_typeopdr_omschrijving,
CASE
WHEN mu.TYPE = 'B' THEN COALESCE (p.prs_perslid_naam_full, '<nog geen behandelaar>')
WHEN mu.TYPE = 'P' THEN mu.naam
ELSE '<?>'
END TD_NAAM,
di.alg_district_omschrijving,
COALESCE(v.prioriteit,'3 - NORMAAL')
prioriteit
FROM mld_opdr o,
mld_melding m,
mld_typeopdr ot,
prs_v_perslid_fullnames p,
ins_tab_discipline d,
mld_stdmelding std,
alg_locatie l,
alg_district di,
alg_v_onroerendgoed_gegevens onr,
mld_v_uitvoerende mu,
mld_statusopdr os,
(
SELECT ko.mld_opdr_key, ud.fac_usrdata_code || ' - ' || ud.fac_usrdata_omschr prioriteit
FROM mld_kenmerkopdr ko, fac_usrdata ud
WHERE fac.safe_to_number(ko.mld_kenmerkopdr_waarde) = ud.fac_usrdata_key
AND fac_usrtab_key = 81 -- keuzelijst eigen tabel Prioriteit
AND ko.mld_kenmerk_key = 361 -- kenmerk Prioriteit
) v
WHERE o.mld_melding_key = m.mld_melding_key(+)
AND o.prs_perslid_key = p.prs_perslid_key(+)
AND o.mld_typeopdr_key = ot.mld_typeopdr_key
AND ot.mld_typeopdr_isofferte = 0 -- Alleen werkopdrachten
AND m.mld_stdmelding_key = std.mld_stdmelding_key(+)
AND std.mld_ins_discipline_key = d.ins_discipline_key(+)
AND m.mld_alg_locatie_key = l.alg_locatie_key -- alle std-meldingen hebben verplicht-niveau locatie
AND l.alg_district_key = di.alg_district_key
AND o.mld_uitvoerende_keys = mu.mld_uitvoerende_key
AND os.mld_statusopdr_key = o.mld_statusopdr_key
AND m.mld_alg_onroerendgoed_keys = onr.alg_onroerendgoed_keys (+)
AND o.mld_opdr_key = v.mld_opdr_key(+)
AND mu.intern = 1;
CREATE OR REPLACE VIEW wend_v_cal_opdrachten_intern
(
USER_KEY,
TITLE,
TOT,
VAN,
ITEM_KEY,
COLOR,
TEXTCOLOR
)
AS
SELECT mld_uitvoerende_key,
type || ' - ' || opdrachtnr || CHR(10) || locatie_plaats || CHR(10) || 'Prio: ' || prioriteit,
geplande_aanvang + 2/24,
geplande_aanvang,
mld_opdr_key,
DECODE (status,
'Afgewezen', '#C0C0C0', -- Afgewezen grijs
'Afgemeld', '#C0C0C0', -- Afgemeld grijs
'Toegekend', DECODE (LOWER(prioriteit),
'3 - normaal', '#0000FF', -- Toegekend en prio normaal is blauw
'4 - laag', '#20b2f5', -- Toegekend en prio laag is licht-blauw
'2 - hoog', '#f58a20', -- Toegekend en prio laag is oranje
'1 - kritiek', '#bf0b3b', -- Toegekend en prio laag is rood
'#0000FF'),
'Geaccepteerd', '#008000') color, -- Geaccepteerd groen
DECODE (status,
'Afgewezen', '#FFFFFF', -- Afgewezen
'Toegekend', '#FFFFFF', -- Toegekend
'Afgemeld', '#000000', -- Afgemeld
'Geaccepteerd', '#FFFFFF') textcolor -- Geaccepteerd
FROM wend_v_rap_opdrachten_intern ;
CREATE OR REPLACE VIEW WEND_V_ALG_ONROERENDGOED
(
DISTRICT,
LOCATIE,
LOCATIE_CODE,
LOCATIE_KEY,
GEBOUW,
-- gegevens uit locatiekaart
LOCATIEMANAGER,
OCTOQ,
EXTRA_INFO,
--
VERDIEPING,
RUIMTENR,
RUIMTE_OMSCHRIJVING,
RUIMTEFUNCTIE,
BVO_M2,
VLOERSOORT
)
AS
SELECT d.alg_district_omschrijving,
l.alg_locatie_omschrijving,
l.alg_locatie_code,
l.alg_locatie_key,
v.alg_gebouw_code || ' - ' || v.alg_gebouw_naam
gebouw,
km.locatiemanager,
km.octoq,
km.extra_info,
v.alg_verdieping_omschrijving || ' - ' || v.alg_verdieping_code
verdieping,
v.alg_ruimte_nr,
v.alg_ruimte_omschrijving,
sr.alg_srtruimte_omschrijving,
r.alg_ruimte_bruto_vloeropp,
flx.getdomeinwaarde (141, flx.getflex ('ALG', 1160, r.alg_ruimte_key, 'R')) vloersoort
FROM alg_v_onroerendgoed_gegevens v,
alg_locatie l,
alg_district d,
(SELECT l.alg_locatie_key,
flx.getdomeinwaarde(41, flx.getflex('ALG', 1120, l.alg_locatie_key, 'L')) locatiemanager,
flx.getflex('ALG',1100, l.alg_locatie_key, 'L') octoq,
flx.getflex('ALG',1020, l.alg_locatie_key, 'L') extra_info
FROM alg_locatie l ) km,
alg_ruimte r,
alg_srtruimte sr
WHERE v.alg_locatie_key = l.alg_locatie_key
AND l.alg_district_key = d.alg_district_key
AND v.alg_type IN ('R')
AND v.alg_locatie_key = km.alg_locatie_key (+)
AND v.alg_ruimte_key = r.alg_ruimte_key AND r.alg_ruimte_verwijder IS NULL
AND r.alg_srtruimte_key = sr.alg_srtruimte_key (+)
ORDER BY d.alg_district_omschrijving, l.alg_locatie_code, v.alg_gebouw_code, v.alg_ruimte_nr ;
-----------------------------------------
-- Voor keuzelijstjes (kenmerk domein) --
-----------------------------------------
CREATE OR REPLACE VIEW wend_v_gebouweigenaren
(
PRS_BEDRIJF_KEY,
PRS_BEDRIJF_NAAM,
PRS_BEDRIJF_PLAATS,
PRS_BEDRIJF_VERWIJDER
)
AS
SELECT
b.prs_bedrijf_key,
b.prs_bedrijf_naam,
b.prs_bedrijf_bezoek_plaats,
b.prs_bedrijf_verwijder
FROM prs_bedrijf b,
prs_kenmerklink kw,
prs_kenmerk k
WHERE (b.prs_bedrijf_intern IS NULL OR b.prs_bedrijf_intern = 0) -- extern bedrijf
AND k.prs_kenmerk_key = 1081 -- gebouweigenaar
AND k.prs_kenmerk_key = kw.prs_kenmerk_key
AND kw.prs_kenmerklink_niveau = 'B'
AND b.prs_bedrijf_key = kw.prs_link_key
ORDER BY b.prs_bedrijf_naam;
CREATE OR REPLACE VIEW wend_v_verhuurderspartijen
(
PRS_BEDRIJF_KEY,
PRS_BEDRIJF_NAAM,
PRS_BEDRIJF_PLAATS,
PRS_BEDRIJF_VERWIJDER
)
AS
SELECT
b.prs_bedrijf_key,
b.prs_bedrijf_naam,
b.prs_bedrijf_bezoek_plaats,
b.prs_bedrijf_verwijder
FROM prs_bedrijf b,
prs_kenmerklink kw,
prs_kenmerk k
WHERE (b.prs_bedrijf_intern IS NULL OR b.prs_bedrijf_intern = 0) -- extern bedrijf
AND k.prs_kenmerk_key = 1082 -- verhuurderspartijen
AND k.prs_kenmerk_key = kw.prs_kenmerk_key
AND kw.prs_kenmerklink_niveau = 'B'
AND b.prs_bedrijf_key = kw.prs_link_key
ORDER BY b.prs_bedrijf_naam;
CREATE OR REPLACE VIEW wend_v_kostenplaatsen
(
KEY,
KP_NR,
OMSCHRIJVING,
OMSCHRIJVING_TOT,
KP_EINDDATUM,
KP_GROEP
)
AS
SELECT
kp.prs_kostenplaats_key,
kp.prs_kostenplaats_nr,
kp.prs_kostenplaats_omschrijving,
kp.prs_kostenplaats_nr || ' ' || kp.prs_kostenplaats_omschrijving
omschrijving_tot,
prs_kostenplaats_eind,
kpg.prs_kostenplaatsgrp_oms
FROM
prs_kostenplaats kp,
prs_kostenplaatsgrp kpg
WHERE
kp.prs_kostenplaatsgrp_key = kpg.prs_kostenplaatsgrp_key
AND kp.prs_kostenplaats_verwijder IS NULL
AND TRUNC(SYSDATE) < COALESCE(TRUNC(prs_kostenplaats_eind),TO_DATE('31-12-2199','DD-MM-YYYY'))
ORDER BY kp.prs_kostenplaats_nr
;
CREATE OR REPLACE VIEW wend_v_personenlijst
(
PRS_PERSLID_KEY,
NAAM
)
AS
SELECT
p.prs_perslid_key,
CASE
WHEN p.prs_perslid_tussenvoegsel IS NOT NULL
THEN
p.prs_perslid_voornaam || ' ' || p.prs_perslid_tussenvoegsel || ' ' || p.prs_perslid_naam
ELSE
p.prs_perslid_voornaam || ' ' || p.prs_perslid_naam
END naam
FROM
prs_perslid p,
prs_srtperslid sp,
prs_v_afdeling a,
prs_bedrijf b
WHERE
p.prs_afdeling_key = a.prs_afdeling_key
AND a.prs_bedrijf_key = b.prs_bedrijf_key
AND p.prs_srtperslid_key = sp.prs_srtperslid_key
AND b.prs_bedrijf_key = 21 -- bedrijfs_key Wender
-- AND UPPER(sp.prs_srtperslid_omschrijving) NOT IN ('TEAMACCOUNT','INTERNE AFDELING') -- Functies uitsluiten...
AND p.prs_perslid_verwijder IS NULL
ORDER BY p.prs_perslid_naam
;
-- locatiehoofden wender
CREATE OR REPLACE VIEW wend_v_personenlijst_loc
(
PRS_PERSLID_KEY,
NAAM,
PERSONEELSNUMMER,
EMAIL
)
AS
SELECT p.prs_perslid_key,
CASE
WHEN p.prs_perslid_tussenvoegsel IS NULL
THEN
p.prs_perslid_voornaam
|| ' '
|| p.prs_perslid_naam
|| ' (Locatiehoofd - '
|| sp.prs_srtperslid_omschrijving
|| ')'
ELSE
p.prs_perslid_voornaam
|| ' '
|| p.prs_perslid_tussenvoegsel
|| ' '
|| p.prs_perslid_naam
|| ' (Locatiehoofd - '
|| sp.prs_srtperslid_omschrijving
|| ')'
END
naam,
p.prs_perslid_nr,
p.prs_perslid_email
FROM prs_perslid p,
prs_srtperslid sp,
prs_v_afdeling a,
prs_bedrijf b,
prs_kenmerklink kl
WHERE p.prs_afdeling_key = a.prs_afdeling_key
AND a.prs_bedrijf_key = b.prs_bedrijf_key
AND p.prs_srtperslid_key = sp.prs_srtperslid_key
AND p.prs_perslid_key = kl.prs_link_key
AND kl.prs_kenmerk_key = 1000 -- kenmerk locatiehoofd (vinkbox)
AND kl.prs_kenmerklink_waarde = '1'
AND kl.prs_kenmerklink_verwijder IS NULL
AND p.prs_perslid_verwijder IS NULL;
CREATE OR REPLACE VIEW wend_v_locatielijst
(
ALG_LOCATIE_KEY,
NAAM
)
AS
SELECT
l.alg_locatie_key,
l.alg_locatie_omschrijving || ' (' || l.alg_locatie_code || ' ' || l.alg_locatie_plaats || ')'
naam
FROM
alg_locatie l
WHERE
l.alg_locatie_verwijder IS NULL
AND l.alg_locatie_vervaldatum IS NULL OR TRUNC(l.alg_locatie_vervaldatum) > TRUNC(SYSDATE)
ORDER BY l.alg_locatie_omschrijving
;
CREATE OR REPLACE VIEW wend_v_it_simkaarten
(
INS_DEEL_KEY,
SIMKAART
)
AS
SELECT
v.ins_deel_key,
v.ins_deel_upper
simkaart
FROM ins_v_deel_gegevens v, ins_deel d
WHERE v.ins_discipline_key = 421 -- IT-Intern
AND v.ins_srtdeel_key = 121 -- SIM-kaarten
AND v.ins_deel_key = d.ins_deel_key
AND d.ins_deel_verwijder IS NULL
AND (d.ins_deel_vervaldatum IS NULL OR TRUNC(d.ins_deel_vervaldatum) > TRUNC(sysdate) ) ;
-- Rapportage beheer simkaarten en mobiel
CREATE OR REPLACE VIEW wend_v_it_simkaarten_man
(
MOBIEL_NUMMER,
SIMKAART_NUMMER,
PUK_CODE,
MOB_NR_27092022, -- tijdelijk veld - bij overgang te gebruiken voor koppeling sim aan mob
STATUS,
ICT_OBJECT,
ICT_OBJECT_VERVALDATUM,
GEKOPPELD_AAN_TYPE,
GEKOPPELD_AAN,
NR_INS_DEEL_KEY,
OBJ_INS_DEEL_KEY
)
AS
SELECT
nr.ins_deel_upper,
flx.getflex ('INS', 182, nr.ins_deel_key) simkaart_nummer,
flx.getflex ('INS', 183, nr.ins_deel_key) puk_code,
flx.getflex ('INS', 201, nr.ins_deel_key) mob_nr_27092022,
CASE WHEN d.ins_deel_upper IS NOT NULL THEN 'Gekoppeld' ELSE 'Vrij' END
status,
d.ins_deel_upper,
d.ins_deel_vervaldatum,
d.gekoppeld_aan_type,
d.gekoppeld_aan,
nr.ins_deel_key,
d.ins_deel_key
FROM (SELECT v.ins_deel_key,
v.ins_deel_upper
FROM ins_v_deel_gegevens v, ins_deel d
WHERE v.ins_discipline_key = 421 -- IT-Intern
AND v.ins_srtdeel_key = 121 -- SIM-kaarten
AND v.ins_deel_key = d.ins_deel_key
AND d.ins_deel_verwijder IS NULL
AND (d.ins_deel_vervaldatum IS NULL OR TRUNC(d.ins_deel_vervaldatum) > TRUNC(sysdate) )
) nr,
(SELECT d.ins_deel_key,
d.ins_deel_upper,
kw.ins_kenmerkdeel_waarde,
num.ins_deel_upper as nummer_gekoppeld,
DECODE(d.ins_alg_ruimte_type, 'R', 'Locatie',
'A', 'Afdeling',
'P', 'Persoon/Teamaccount',
'')
gekoppeld_aan_type,
v.alg_plaatsaanduiding,
d.ins_deel_vervaldatum,
DECODE(d.ins_alg_ruimte_type, 'R', l.alg_locatie_omschrijving, v.alg_plaatsaanduiding)
gekoppeld_aan
FROM ins_deel d,
ins_kenmerkdeel kw,
ins_kenmerk k,
ins_deel num,
ins_v_deel_gegevens v,
alg_locatie l
WHERE d.ins_deel_key = kw.ins_deel_key
AND kw.ins_kenmerk_key = k.ins_kenmerk_key
AND k.ins_srtkenmerk_key = 143 -- SIM_kaart gekoppeld bij Mobiel
AND kw.ins_kenmerkdeel_verwijder IS NULL
AND fac.safe_to_number (kw.ins_kenmerkdeel_waarde) =
num.ins_deel_key
AND d.ins_deel_key = v.ins_deel_key
AND d.ins_alg_locatie_key = l.alg_locatie_key(+)
) d
WHERE
nr.ins_deel_upper = d.nummer_gekoppeld(+) ;
-----------------------------------------
-- Notificatiejobs --
-----------------------------------------
-- Notificactiejob voor WENDER om vanuit Opdrachten Notities met bepaalde notitie-classificatie Meldpunt IT en Meldpunt Facilitair in te lichten
-- Flag = 17 (incl. xemail, xmobile)
CREATE OR REPLACE VIEW WEND_V_NOTI_SERVICEDESK_ORD -- ORD = Orders/Opdrachten
(
SENDER,
RECEIVER,
TEXT,
CODE,
FAC_SRTNOTIFICATIE_KEY,
KEY,
XKEY,
XEMAIL,
XMOBILE
)
AS
SELECT (SELECT prs_perslid_key
FROM prs_perslid
WHERE prs_perslid_upper = 'FACILITOR')
sender,
NULL
receiver,
'Opdrachtnotitie bij ' || TO_CHAR(o.mld_melding_key) || '/' || TO_CHAR (o.mld_opdr_bedrijfopdr_volgnr) ||
' van ' || p.prs_perslid_voornaam || ' ' || p.prs_perslid_naam
text,
'CUST01'
code,
(SELECT fac_srtnotificatie_key
FROM fac_srtnotificatie
WHERE fac_srtnotificatie_code = 'CUST01')
fac_srtnotificatie_key,
o.mld_opdr_key
key,
n.mld_opdr_note_key
xkey,
ng.fac_note_group_omschrijving
xemail,
NULL
xmobile
FROM mld_melding m,
mld_opdr o,
mld_opdr_note n,
prs_perslid p,
fac_note_group ng
WHERE o.mld_opdr_key = n.mld_opdr_key
AND m.mld_melding_key = o.mld_melding_key
AND n.prs_perslid_key = p.prs_perslid_key
AND n.fac_note_group_key = ng.fac_note_group_key
AND (
(
ng.fac_note_group_key = 1 -- Notitie voor Facilitair (1)
AND
n.prs_perslid_key NOT IN
(SELECT gg.prs_perslid_key
FROM fac_gebruikersgroep gg, fac_groep g
WHERE gg.fac_groep_key = g.fac_groep_key
AND g.fac_groep_key = 41) -- Meldpunt Facilitair (41)
)
OR
(
ng.fac_note_group_key = 2 -- Notitie voor IT (2)
AND
n.prs_perslid_key NOT IN
(SELECT gg.prs_perslid_key
FROM fac_gebruikersgroep gg, fac_groep g
WHERE gg.fac_groep_key = g.fac_groep_key
AND g.fac_groep_key = 43) -- Meldpunt IT (43)
)
)
AND n.mld_opdr_note_aanmaak >=
(SELECT COALESCE(fac_notificatie_job_lastrun, trunc(sysdate))
FROM fac_notificatie_job
WHERE fac_notificatie_job_view ='WEND_V_NOTI_SERVICEDESK_ORD') ;
-------------------------------
--- NOTI-JOBS ---------------
-------------------------------
-- Contract-Rappel
--- Notificatie op contractbeheerder, verantwoordelijke en/of 2e aanspreekpunt
--- Onderstaand rapport is basisview en deze fungeert als bron voor de rappel-notificatie
CREATE OR REPLACE VIEW wend_v_cnt_rappel_basis
AS
SELECT d.ins_discipline_omschrijving,
c.cnt_contract_key,
c.cnt_contract_nummer_intern
|| DECODE (c.cnt_contract_versie,
NULL, '',
'.' || c.cnt_contract_versie)
cnt_contract_nr,
c.cnt_contract_looptijd_van begindatum,
c.cnt_contract_looptijd_tot einddatum,
cnt.cnt_getopzegdatum (c.cnt_contract_key) cnt_opzegdatum,
cnt.cnt_getrappeldatum (c.cnt_contract_key) cnt_rappeldatum,
DECODE (cnt.cnt_contract_status (c.cnt_contract_looptijd_van,
cnt.cnt_getrappeldatum (c.cnt_contract_key),
cnt.cnt_getopzegdatum (c.cnt_contract_key),
c.cnt_contract_looptijd_tot),
0, lcl.l ('lcl_cnt_future'),
1, lcl.l ('lcl_cnt_topical'),
2, lcl.l ('lcl_cnt_warn'),
3, lcl.l ('lcl_cnt_cancel'),
4, lcl.l ('lcl_cnt_past'))
fase_actief,
DECODE (
c.cnt_contract_status,
0,
DECODE (fac.getsetting ('cnt_contract_approval'),
1, lcl.l ('lcl_cnt_active_approval'),
lcl.l ('lcl_cnt_active')),
1,
lcl.l ('lcl_cnt_inactive'),
2,
lcl.l ('lcl_cnt_new'),
3,
lcl.l ('lcl_cnt_forapproval'))
cnt_contract_status,
(SELECT kc.cnt_kenmerkcontract_waarde
FROM cnt_kenmerkcontract kc, cnt_kenmerk k
WHERE k.cnt_kenmerk_key = kc.cnt_kenmerk_key
AND kc.cnt_contract_key = c.cnt_contract_key
AND k.cnt_kenmerk_key = 224) -- contractbeheerder
vink_beheerder,
(SELECT p.prs_perslid_email
FROM prs_perslid p
WHERE p.prs_perslid_key = c.prs_perslid_key_beh
AND p.prs_perslid_verwijder IS NULL)
beheerder_email,
(SELECT kc.cnt_kenmerkcontract_waarde
FROM cnt_kenmerkcontract kc, cnt_kenmerk k
WHERE k.cnt_kenmerk_key = kc.cnt_kenmerk_key
AND kc.cnt_contract_key = c.cnt_contract_key
AND k.cnt_kenmerk_key = 223) -- contractverantwoordelijke
vink_verantwoordelijke,
(SELECT p.prs_perslid_email
FROM prs_perslid p
WHERE p.prs_perslid_key = c.prs_perslid_key_eig
AND p.prs_perslid_verwijder IS NULL)
veantwoordelijke_email,
(SELECT kc.cnt_kenmerkcontract_waarde
FROM cnt_kenmerkcontract kc, cnt_kenmerk k
WHERE k.cnt_kenmerk_key = kc.cnt_kenmerk_key
AND kc.cnt_contract_key = c.cnt_contract_key
AND k.cnt_kenmerk_key = 225) -- rappel 2e aanspreekpunt
vink_2e_aanspreekpunt,
(SELECT p.prs_perslid_email
FROM prs_perslid p
WHERE p.prs_perslid_key = (SELECT fac.safe_to_number(kc.cnt_kenmerkcontract_waarde)
FROM cnt_kenmerkcontract kc, cnt_kenmerk k
WHERE k.cnt_kenmerk_key = kc.cnt_kenmerk_key
AND kc.cnt_contract_key = c.cnt_contract_key
AND k.cnt_kenmerk_key = 241)
AND p.prs_perslid_verwijder IS NULL)
tweede_aanspreekpunt_email
FROM cnt_v_aanwezigcontract c, ins_tab_discipline d, prs_afdeling a
WHERE c.ins_discipline_key = d.ins_discipline_key
AND d.ins_discipline_module = 'CNT'
AND c.prs_afdeling_key_eig = a.prs_afdeling_key ;
-- WEND: Contractbeheerder(_eig) is Beheerder/Administrateur en de Contractverantwoordelijke (_beh) is 1e aanspreekpunt die beslist over wel/niet verlengen. Tevens optie om 2e aanspreekpunt mee te nemen in rappel
CREATE OR REPLACE VIEW wend_v_noti_cntreminder
(
code,
sender,
receiver,
text,
key,
xkey,
xemail,
xmobile
)
AS -- Op rappel-datum naar de Beheerder/Administrateur sturen
SELECT 'CNTMAI',
NULL,
c.prs_perslid_key_beh,
'TER INFO: Rappel verstuurd voor contract ' || c.cnt_contract_nummer_intern
|| DECODE (c.cnt_contract_versie, NULL, '', '.' || c.cnt_contract_versie)
|| ' (' || c.cnt_contract_omschrijving || ' ' || b.prs_bedrijf_naam || ')'
|| ' - Moet uiterlijk per ' || TO_CHAR (cnt.cnt_getopzegdatum (c.cnt_contract_key), 'dd-mm-yyyy')
|| ' worden verlengd of opgezegd.',
c.cnt_contract_key,
NULL,
NULL,
NULL
FROM wend_v_cnt_rappel_basis v, cnt_v_aanwezigcontract c, prs_bedrijf b
WHERE c.cnt_prs_bedrijf_key = b.prs_bedrijf_key
AND v.cnt_contract_key = c.cnt_contract_key
AND v.vink_beheerder = 1
AND c.cnt_contract_status = 0
AND cnt.cnt_getrappeldatum (c.cnt_contract_key) = TRUNC (SYSDATE)
AND c.prs_perslid_key_beh <> c.prs_perslid_key_eig -- als administrateur gelijk aan 1e aanspreekpunt dan dan sturen we de info-mail niet uit
AND NOT EXISTS -- kenmerkveld 'Opgezegd' staat uit
(SELECT km.cnt_contract_key
FROM cnt_kenmerkcontract km, cnt_kenmerk k
WHERE km.cnt_contract_key = c.cnt_contract_key AND km.cnt_kenmerk_key = k.cnt_kenmerk_key AND k.cnt_kenmerk_key = 243)
UNION ALL -- Op rappel-datum ACTIE-mail naar het 1e aanspreekpunt sturen (contractverantwoordelijke)
SELECT 'CUST02',
NULL,
c.prs_perslid_key_eig,
'ACTIE: Rappel verstuurd voor contract ' || c.cnt_contract_nummer_intern
|| DECODE (c.cnt_contract_versie, NULL, '', '.' || c.cnt_contract_versie)
|| ' (' || c.cnt_contract_omschrijving || ' ' || b.prs_bedrijf_naam || ')'
|| ' - Moet uiterlijk per ' || TO_CHAR (cnt.cnt_getopzegdatum (c.cnt_contract_key), 'dd-mm-yyyy')
|| ' worden verlengd of opgezegd.',
c.cnt_contract_key,
NULL,
NULL,
NULL
FROM wend_v_cnt_rappel_basis v, cnt_v_aanwezigcontract c, prs_bedrijf b
WHERE c.cnt_prs_bedrijf_key = b.prs_bedrijf_key
AND v.cnt_contract_key = c.cnt_contract_key
AND v.vink_verantwoordelijke = 1
AND c.cnt_contract_status = 0
AND cnt.cnt_getrappeldatum (c.cnt_contract_key) = TRUNC (SYSDATE)
AND c.prs_perslid_key_eig IS NOT NULL
AND NOT EXISTS -- kenmerkveld 'Opgezegd' staat uit
(SELECT km.cnt_contract_key
FROM cnt_kenmerkcontract km, cnt_kenmerk k
WHERE km.cnt_contract_key = c.cnt_contract_key AND km.cnt_kenmerk_key = k.cnt_kenmerk_key AND k.cnt_kenmerk_key = 243)
UNION ALL -- Op rappel-datum INFO-mail naar het tweede aanspreekpunt
SELECT 'CUST03',
NULL,
NULL,
'TER INFO: Rappel verstuurd voor contract ' || c.cnt_contract_nummer_intern
|| DECODE (c.cnt_contract_versie, NULL, '', '.' || c.cnt_contract_versie)
|| ' (' || c.cnt_contract_omschrijving || ' ' || b.prs_bedrijf_naam || ')'
|| ' - Moet uiterlijk per ' || TO_CHAR (cnt.cnt_getopzegdatum (c.cnt_contract_key), 'dd-mm-yyyy')
|| ' worden verlengd of opgezegd.',
c.cnt_contract_key,
NULL,
v.tweede_aanspreekpunt_email,
NULL
FROM wend_v_cnt_rappel_basis v, cnt_v_aanwezigcontract c, prs_bedrijf b
WHERE c.cnt_prs_bedrijf_key = b.prs_bedrijf_key
AND v.cnt_contract_key = c.cnt_contract_key
AND v.vink_2e_aanspreekpunt = 1
AND v.tweede_aanspreekpunt_email IS NOT NULL
AND c.cnt_contract_status = 0
AND cnt.cnt_getrappeldatum (c.cnt_contract_key) = TRUNC (SYSDATE)
AND NOT EXISTS -- kenmerkveld 'Opgezegd' staat uit
(SELECT km.cnt_contract_key
FROM cnt_kenmerkcontract km, cnt_kenmerk k
WHERE km.cnt_contract_key = c.cnt_contract_key AND km.cnt_kenmerk_key = k.cnt_kenmerk_key AND k.cnt_kenmerk_key = 243)
;
------ 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