Files
Customer/VOLK/volk.sql
Suzan Wiegerinck 1905c50105 VOLK#78884 Koppeling voor up to date houden afdelingen
svn path=/Customer/trunk/; revision=62127
2023-10-09 11:41:48 +00:00

2113 lines
82 KiB
MySQL

--
-- $Id$
--
-- Script containing customer specific sql statements for the FACILITOR database
DEFINE thisfile = 'VOLK.SQL'
DEFINE dbuser = 'VOLK'
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 PROCEDURE volk_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;
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;0;9;4;10;3;'
|| '8;0;0;0;0;5;0;12;0;1;'
|| '7;1;0;0;0;0;2;6;11;0;'
|| '0;0;0;0;0;0;0;0;0;0;'
|| '0;0;0;0;0;0',
'%"CentralAccount";"CostCenter";"FirstName";"LastName";"TelephoneNumber";"UserPrincipalName";"DepartmentName";"Initials";"DepartmentCode";"NameAddOn";"Rights";"Email"%');
-- "CentralAccount(20)";"CostCenter(27)";"FirstName(10)";"LastName(8)";"TelephoneNumber(16)";"UserPrincipalName(28)";"DepartmentName(21)";"Initials(11)";"DepartmentCode(7)";"NameAddOn(9)";"Rights(29)";"Email(18)"
-- Kenmerk 1: CostCenter. Kan eventueel later gebruikt worden om de OE te bepalen als alleen hoofdgroepen gebruikt gaan worden
-- Kenmerk 2: UserPrincipalName wordt nog niet gebruikt
-- Kenmerk 3: Rights. Dit zijn de rollen die iemand moet krijgen
COMMIT;
-- Beleid bij de Volksbank: in cloud applicaties moet gekoppeld worden op UserPrincipalName
-- Personen zonder UserPrincipalName nemen we dus niet mee
DELETE fac_imp_perslid
WHERE prs_kenmerk2 IS NULL;
/* 57846: User identification is not unique, oslogin kan niet op basis van mailadres daarom op perslidnr
-- prs oslogin hier nemen we het eerste gedeelte van de UPN, volledig UserPrincipalName is te lang
-- kan tot maximaal 30 posities
UPDATE fac_imp_perslid
SET prs_perslid_oslogin =
SUBSTR (
(SUBSTR (prs_kenmerk2, 1, (INSTR (prs_kenmerk2, '@') - 1))),
1,
30);
*/
-- functie wordt niet gebruikt, dus deze wordt altijd 'onbekend'
UPDATE fac_imp_perslid
SET prs_srtperslid_omschrijving = 'onbekend';
-- De rollen die in kenmerk3 zijn gezet splitsen we uit, aanname is dat iemand max. 5 rollen heeft
-- We vullen de kenmerken 10 tm 14 met de rollen
UPDATE fac_imp_perslid p
SET p.PRS_KENMERK10 =
DECODE (NULLIF (INSTR (p.PRS_KENMERK3,
',',
1,
1),
0),
NULL, p.prs_kenmerk3,
SUBSTR (prs_kenmerk3,
1,
(INSTR (p.PRS_KENMERK3,
',',
1,
1))
- 1)),
p.PRS_KENMERK11 =
CASE
WHEN NULLIF (INSTR (p.PRS_KENMERK3,
',',
1,
1),
0)
IS NOT NULL
THEN
DECODE (
NULLIF (INSTR (p.PRS_KENMERK3,
',',
1,
2),
0),
NULL, SUBSTR (prs_kenmerk3,
INSTR (p.PRS_KENMERK3, ',', 2) + 1),
SUBSTR (prs_kenmerk3,
( INSTR (p.PRS_KENMERK3,
',',
1,
1)
+ 1),
( INSTR (p.PRS_KENMERK3,
',',
1,
2)
- INSTR (p.PRS_KENMERK3,
',',
1,
1)
- 1)))
END,
p.PRS_KENMERK12 =
CASE
WHEN NULLIF (INSTR (p.PRS_KENMERK3,
',',
1,
2),
0)
IS NOT NULL
THEN
DECODE (NULLIF (INSTR (p.PRS_KENMERK3,
',',
1,
3),
0),
NULL, SUBSTR (prs_kenmerk3,
INSTR (p.PRS_KENMERK3,
',',
1,
2)
+ 1),
SUBSTR (prs_kenmerk3,
( INSTR (p.PRS_KENMERK3,
',',
1,
2)
+ 1),
( INSTR (p.PRS_KENMERK3,
',',
1,
3)
- INSTR (p.PRS_KENMERK3,
',',
1,
2)
- 1)))
END,
p.PRS_KENMERK13 =
CASE
WHEN NULLIF (INSTR (p.PRS_KENMERK3,
',',
1,
3),
0)
IS NOT NULL
THEN
DECODE (NULLIF (INSTR (p.PRS_KENMERK3,
',',
1,
4),
0),
NULL, SUBSTR (prs_kenmerk3,
INSTR (p.PRS_KENMERK3,
',',
1,
3)
+ 1),
SUBSTR (prs_kenmerk3,
( INSTR (p.PRS_KENMERK3,
',',
1,
3)
+ 1),
( INSTR (p.PRS_KENMERK3,
',',
1,
4)
- INSTR (p.PRS_KENMERK3,
',',
1,
3)
- 1)))
END,
p.PRS_KENMERK14 =
CASE
WHEN NULLIF (INSTR (p.PRS_KENMERK3,
',',
1,
4),
0)
IS NOT NULL
THEN
DECODE (NULLIF (INSTR (p.PRS_KENMERK3,
',',
1,
5),
0),
NULL, SUBSTR (prs_kenmerk3,
INSTR (p.PRS_KENMERK3,
',',
1,
4)
+ 1),
SUBSTR (prs_kenmerk3,
( INSTR (p.PRS_KENMERK3,
',',
1,
4)
+ 1),
( INSTR (p.PRS_KENMERK3,
',',
1,
5)
- INSTR (p.PRS_KENMERK3,
',',
1,
4)
- 1)))
END;
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 volk_import_perslid;
/
CREATE OR REPLACE PROCEDURE volk_update_autorisaties (p_import_key IN NUMBER)
AS
-- Gebruikers met rechten anders dan de bijzondere groepen die met _ gemarkeerd zijn
-- Maar die in de import niet meer die rechten mee krijgen
-- Dan moeten die rechten weer verwijderd worden
CURSOR c_perslid_autorisatie_verw IS
SELECT oud.*
FROM (SELECT gg.fac_groep_key,
fac_groep_omschrijving,
p.prs_perslid_key,
pf.prs_perslid_naam_full
FROM fac_gebruikersgroep gg,
fac_groep g,
prs_perslid p,
prs_v_perslid_fullnames_all pf
WHERE gg.fac_groep_key = g.fac_groep_key
AND gg.prs_perslid_key = p.prs_perslid_key
AND p.prs_perslid_key = pf.prs_perslid_key
AND UPPER (g.fac_groep_omschrijving) <> '_DEFAULT'
AND p.prs_perslid_oslogin NOT LIKE '%\_%' ESCAPE '\')
oud
LEFT OUTER JOIN
(SELECT groep.*
FROM (SELECT i.prs_perslid_key,
groep1.fac_groep_key,
groep1.fac_groep_omschrijving
FROM fac_imp_perslid i,
(SELECT *
FROM fac_groep g) groep1
WHERE UPPER (i.PRS_KENMERK10) =
groep1.fac_groep_upper(+)
UNION ALL
SELECT i.prs_perslid_key,
groep2.fac_groep_key,
groep2.fac_groep_omschrijving
FROM fac_imp_perslid i,
(SELECT *
FROM fac_groep g) groep2
WHERE UPPER (i.PRS_KENMERK11) =
groep2.fac_groep_upper(+)
UNION ALL
SELECT i.prs_perslid_key,
groep3.fac_groep_key,
groep3.fac_groep_omschrijving
FROM fac_imp_perslid i,
(SELECT *
FROM fac_groep g) groep3
WHERE UPPER (i.PRS_KENMERK12) =
groep3.fac_groep_upper(+)
UNION ALL
SELECT i.prs_perslid_key,
groep4.fac_groep_key,
groep4.fac_groep_omschrijving
FROM fac_imp_perslid i,
(SELECT *
FROM fac_groep g) groep4
WHERE UPPER (i.PRS_KENMERK13) =
groep4.fac_groep_upper(+)
UNION ALL
SELECT i.prs_perslid_key,
groep5.fac_groep_key,
groep5.fac_groep_omschrijving
FROM fac_imp_perslid i,
(SELECT *
FROM fac_groep g) groep5
WHERE UPPER (i.PRS_KENMERK14) =
groep5.fac_groep_upper(+)) groep
WHERE groep.prs_perslid_key IS NOT NULL
AND groep.fac_groep_key IS NOT NULL
AND UPPER (groep.fac_groep_omschrijving) <> '_DEFAULT')
nieuw
ON oud.prs_perslid_key = nieuw.prs_perslid_key
AND oud.fac_groep_key = nieuw.fac_groep_key
WHERE nieuw.fac_groep_key IS NULL;
CURSOR c_persid_autorisatiegroep IS
SELECT prs.prs_perslid_naam_full, groep.*
FROM (SELECT i.prs_perslid_key,
groep1.fac_groep_key,
groep1.fac_groep_omschrijving
FROM fac_imp_perslid i,
(SELECT *
FROM fac_groep g) groep1
WHERE UPPER (i.PRS_KENMERK10) = groep1.fac_groep_upper(+)
UNION ALL
SELECT i.prs_perslid_key,
groep2.fac_groep_key,
groep2.fac_groep_omschrijving
FROM fac_imp_perslid i,
(SELECT *
FROM fac_groep g) groep2
WHERE UPPER (i.PRS_KENMERK11) = groep2.fac_groep_upper(+)
UNION ALL
SELECT i.prs_perslid_key,
groep3.fac_groep_key,
groep3.fac_groep_omschrijving
FROM fac_imp_perslid i,
(SELECT *
FROM fac_groep g) groep3
WHERE UPPER (i.PRS_KENMERK12) = groep3.fac_groep_upper(+)
UNION ALL
SELECT i.prs_perslid_key,
groep4.fac_groep_key,
groep4.fac_groep_omschrijving
FROM fac_imp_perslid i,
(SELECT *
FROM fac_groep g) groep4
WHERE UPPER (i.PRS_KENMERK13) = groep4.fac_groep_upper(+)
UNION ALL
SELECT i.prs_perslid_key,
groep5.fac_groep_key,
groep5.fac_groep_omschrijving
FROM fac_imp_perslid i,
(SELECT *
FROM fac_groep g) groep5
WHERE UPPER (i.PRS_KENMERK14) = groep5.fac_groep_upper(+))
groep,
PRS_V_PERSLID_FULLNAMES_ALL prs
WHERE prs.prs_perslid_key = groep.prs_perslid_key
AND groep.prs_perslid_key IS NOT NULL
AND groep.fac_groep_key IS NOT NULL
AND UPPER (groep.fac_groep_omschrijving) <> '_DEFAULT'
AND NOT EXISTS
(SELECT fac_gebruikersgroep_key
FROM fac_gebruikersgroep gg
WHERE gg.prs_perslid_key = groep.prs_perslid_key
AND fac_groep_key = groep.fac_groep_key);
BEGIN
FOR rc IN c_perslid_autorisatie_verw
LOOP
BEGIN
DELETE fac_gebruikersgroep gg
WHERE gg.fac_groep_key = rc.fac_groep_key
AND gg.prs_perslid_key = rc.prs_perslid_key;
EXCEPTION
WHEN OTHERS
THEN
fac.imp_writelog (
p_import_key,
'W',
'Post update autorisaties bij persoon: '
|| rc.fac_groep_omschrijving
|| ' is NIET verwijderd,',
'Naam:' || rc.prs_perslid_naam_full);
END;
COMMIT;
END LOOP;
FOR rc IN c_persid_autorisatiegroep
LOOP
BEGIN
INSERT INTO fac_gebruikersgroep (prs_perslid_key, fac_groep_key)
VALUES (rc.prs_perslid_key, rc.fac_groep_key);
EXCEPTION
WHEN OTHERS
THEN
fac.imp_writelog (
p_import_key,
'W',
'Post update autorisaties bij persoon'
|| rc.prs_perslid_key
|| ' is NIET volledig uitgevoerd',
'Naam:' || rc.prs_perslid_naam_full);
END;
COMMIT;
END LOOP;
END;
/
CREATE OR REPLACE PROCEDURE volk_update_perslid (p_import_key IN NUMBER)
IS
v_ruimte_key NUMBER;
v_virtual NUMBER;
v_alg_type VARCHAR2 (20);
v_count NUMBER;
CURSOR c_perslid IS
SELECT *
FROM fac_imp_perslid
WHERE prs_perslid_key IS NOT NULL;
-- Alle medewerkers van de Volksbank verwijderen die niet meer in import bestand voorkomen.
CURSOR c_del IS
SELECT p.prs_perslid_key,
p.prs_perslid_oslogin,
pf.prs_perslid_naam_full
FROM prs_perslid p, prs_v_perslid_fullnames_all pf
WHERE pf.prs_perslid_key = p.prs_perslid_key
AND p.prs_perslid_oslogin IS NOT NULL
AND p.prs_perslid_verwijder IS NULL
AND p.prs_perslid_oslogin NOT LIKE '%\_%' ESCAPE '\'
AND NOT EXISTS
(SELECT *
FROM fac_imp_perslid i
WHERE UPPER (i.prs_perslid_oslogin) =
UPPER (p.prs_perslid_oslogin));
BEGIN
-- generic update
SELECT COUNT (*) INTO v_count FROM fac_imp_perslid;
IF v_count < 1000
THEN
fac.imp_writelog (
p_import_key,
'E',
'Het aantal te importeren personen is te klein ('
|| TO_CHAR (v_count)
|| ')',
'Zie Specificatie');
RETURN;
END IF;
-- Match op 'NR'
prs.update_perslid (p_import_key, 'NR', NULL);
volk_update_autorisaties (p_import_key);
COMMIT;
-- 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;
COMMIT;
FOR rec IN c_persLid
LOOP
BEGIN
volk.movetoruimte (rec.prs_perslid_key);
END;
END LOOP;
END volk_update_perslid;
/
CREATE OR REPLACE VIEW VOLK_V_RAPP_MLD_WINKELS
(
DATUM,
HTML_AANVRAAG_NR,
MELDINGNR,
LOCATIE,
GEBOUW,
MELDER,
MELDING,
STATUS,
ONDERWERP,
OMSCHRIJVING
)
AS
SELECT melding_datum,
'<a class="details" onclick=''FcltMgr.openDetail("'
|| 'appl/mld/mld_melding.asp?urole=fe&'
|| 'mld_key='
|| MELDING_KEY
|| '")''>'
|| HTF.escape_sc (meldingnummer)
|| '</a>' meldingnummer,
melding_key,
melding_locatie,
melding_gebouw,
melder,
subproductgroep,
melding_status,
onderwerp,
vomschrijving
FROM MLD_V_UDR_MELDING m
WHERE UPPER (soortmelding) LIKE '%WINKEL%';
CREATE OR REPLACE VIEW VOLK_V_RAPP_TRACKING_UITLEEN
(
INS_DEEL_KEY,
OBJECT_OMSCHRIJVING,
DATUM,
DATUM_TIJD,
TRACKING,
OMSCHRIJVING
)
AS
SELECT d.ins_deel_key,
d.ins_deel_omschrijving,
TRUNC (t.fac_tracking_datum)
periode,
t.fac_tracking_datum,
DECODE (t.fac_srtnotificatie_key,
124, 'Uitgegeven door: ' || p.prs_perslid_naam_friendly,
125, 'Ingenomen door: ' || p.prs_perslid_naam_friendly)
tracking,
DECODE (
t.fac_srtnotificatie_key,
124, (DECODE (
naam_cnt.ins_kenmerkdeel_waarde,
NULL, t.fac_tracking_oms,
'Object '
|| d.ins_deel_omschrijving
|| ' is uitgegeven aan '
|| naam_cnt.ins_kenmerkdeel_waarde)),
t.fac_tracking_oms)
tracking_omschr
FROM fac_tracking t,
ins_deel d,
prs_v_perslid_fullnames_all p,
(SELECT ins_deel_key, ins_kenmerkdeel_waarde
FROM ins_kenmerkdeel kd
WHERE ins_kenmerk_key = 2 AND ins_kenmerkdeel_verwijder IS NULL)
naam_cnt,
(SELECT ins_deel_key, ins_kenmerkdeel_waarde
FROM ins_kenmerkdeel kd
WHERE ins_kenmerk_key = 3 AND ins_kenmerkdeel_verwijder IS NULL)
telnr_cnt
WHERE fac_tracking_refkey = d.ins_deel_key
AND t.prs_perslid_key = p.prs_perslid_key
AND naam_cnt.ins_deel_key(+) = d.ins_deel_key
AND telnr_cnt.ins_deel_key(+) = d.ins_deel_key
AND t.fac_tracking_oms IS NOT NULL
AND d.ins_srtdeel_key IN (41,
42,
43,
44) -- passen en sleutels
AND fac_srtnotificatie_key IN (124, 125) -- uitgifte (insout) en inname (insinn)
ORDER BY ins_deel_key, t.fac_tracking_datum;
CREATE OR REPLACE VIEW VOLK_V_NOTI_BEZOEKERS
(
SENDER,
RECEIVER,
TEXT,
CODE,
FAC_SRTNOTIFICATIE_KEY,
KEY,
XKEY,
XEMAIL,
XMOBILE
)
AS
SELECT DISTINCT
NULL sender,
NULL receiver,
DECODE (
t.fac_srtnotificatie_key,
30, 'Nieuwe bezoekersregistratie voor '
|| b.BEZOEK_VAN
|| ', nummer: '
|| b.afspraak_key
|| ', gastheer: '
|| b.HOST,
31, 'Wijziging in bezoekersregistratie voor '
|| b.BEZOEK_VAN
|| ', nummer: '
|| b.afspraak_key
|| ', gastheer: '
|| b.HOST) TEXT,
sn.fac_srtnotificatie_code,
sn.fac_srtnotificatie_key,
b.afspraak_key,
NULL xkey,
ud.fac_usrdata_omschr,
NULL xmobile
FROM fac_tracking t,
bez_v_udr_bezoeker b,
alg_locatie l,
fac_usrdata ud,
fac_srtnotificatie sn
WHERE t.fac_tracking_refkey = b.afspraak_key
AND t.fac_srtnotificatie_key IN (30, 31) --- BEZMUT, registreren nieuwe afspraak en BEZUPD, wijzigen afspraak
AND sn.fac_srtnotificatie_code = 'CUST01'
AND t.fac_tracking_refkey = b.afspraak_key
AND b.fclt_3d_locatie_key = l.alg_locatie_key
AND ud.fac_usrdata_code = l.alg_locatie_code
AND ud.fac_usrtab_key = 141 --- bezoekersmutaties van het afgelopen uur
AND t.fac_tracking_datum >
(SELECT fac_notificatie_job_nextrun
- fac_notificatie_job_interval / 24
FROM fac_notificatie_job
WHERE UPPER (fac_notificatie_job_view) =
'VOLK_V_NOTI_BEZOEKERS')
AND t.fac_tracking_datum <
(SELECT fac_notificatie_job_nextrun
FROM fac_notificatie_job
WHERE UPPER (fac_notificatie_job_view) =
'VOLK_V_NOTI_BEZOEKERS');
CREATE OR REPLACE VIEW VOLK_V_RAPP_BEDRIJF_DIENST
(
bedrijf_naam,
prs_bedrijf_key,
dienst,
locatie
)
AS
SELECT b.prs_bedrijf_naam, scope.*
FROM prs_bedrijf b,
(SELECT bdl.prs_bedrijf_key,
d.prs_dienst_omschrijving,
NVL (
NVL (l.alg_locatie_omschrijving,
g.ALG_GEBOUW_OMSCHRIJVING),
'Alle locaties') locatie
FROM prs_bedrijfdienstlocatie bdl,
prs_dienst d,
alg_locatie l,
alg_gebouw g
WHERE bdl.prs_dienst_key = d.prs_dienst_key(+)
AND bdl.alg_gebouw_key = g.alg_gebouw_key(+)
AND bdl.alg_locatie_key = l.alg_locatie_key(+)) scope
WHERE b.prs_bedrijf_key = scope.prs_bedrijf_key;
-- De bron view met gegevens over bezoekers die een parkeerplaats moeten krijgen vandaag of morgen
CREATE OR REPLACE VIEW VOLK_V_EXP_FIRMBASE
(
BEZ_BEZOEKER_KEY,
BEZ_AFSPRAAK_KEY,
BEZ_STARTDATUM,
BEZ_EINDDATUM,
FIRMBASE_RESPONSE,
KENTEKEN,
LANDCODE,
VISITOR_PROFILE,
VISITOR_ID,
BEZOEKER_NAAM
)
AS
SELECT b.bez_bezoekers_key,
a.bez_afspraak_key,
a.bez_afspraak_datum,
a.bez_afspraak_eind,
firmb.bez_kenmerkwaarde_waarde
AS firmbase_resp, --- KOMT ER EEN KEY TERUG OF KAN IK HIER RESPONS CODE IN TERUGZETTEN?
REPLACE (
REPLACE (
COALESCE (b.bez_bezoekers_kenteken, kenteken.kenteken),
'-',
''),
' ',
''),
'NL'
AS landcode,
'VBank',
guid.bez_kenmerkwaarde_waarde
AS guid,
b.bez_afspraak_naam
AS bezoeker_naam
FROM bez_afspraak a,
bez_bezoekers b,
alg_locatie l,
(SELECT rd.bez_bezoekers_key
FROM ins_v_aanwezigdeel ins_de,
ins_srtdeel ins_sd,
res_v_aanwezigdeel res_de,
res_rsv_deel rd
WHERE ins_de.ins_deel_key = res_de.res_ins_deel_key
AND ins_de.ins_deel_module = 'INS'
AND ins_de.ins_deel_parent_key IS NULL
AND ins_sd.ins_srtdeel_key = ins_de.ins_srtdeel_key
AND ins_sd.ins_srtdeel_code = 'PARK'
AND rd.res_deel_key = res_de.res_deel_key) park,
(SELECT kw.bez_bezoekers_key, bez_kenmerkwaarde_waarde
FROM bez_kenmerkwaarde kw, bez_kenmerk k
WHERE k.bez_kenmerk_key = kw.bez_kenmerk_key
AND k.bez_kenmerk_upper = 'FIRMBASE RESPONSE') firmb,
(SELECT kw.bez_bezoekers_key,
UPPER (bez_kenmerkwaarde_waarde) kenteken
FROM bez_kenmerkwaarde kw, bez_kenmerk k
WHERE k.bez_kenmerk_key = kw.bez_kenmerk_key
AND k.bez_kenmerk_upper = 'KENTEKEN') kenteken,
(SELECT kw.bez_bezoekers_key, bez_kenmerkwaarde_waarde
FROM bez_kenmerkwaarde kw, bez_kenmerk k
WHERE k.bez_kenmerk_key = kw.bez_kenmerk_key
AND k.bez_kenmerk_upper = 'VISITORID') guid
WHERE b.bez_afspraak_key = a.bez_afspraak_key
AND b.bez_bezoekers_key = park.bez_bezoekers_key
AND a.alg_locatie_key = l.alg_locatie_key
AND l.alg_locatie_key = 104 --- alleen Utrecht groot kantoor
AND firmb.bez_bezoekers_key(+) = b.bez_bezoekers_key
AND kenteken.bez_bezoekers_key(+) = b.bez_bezoekers_key
AND guid.bez_bezoekers_key(+) = b.bez_bezoekers_key
AND a.bez_afspraak_datum < TRUNC (SYSDATE) + 2
AND a.bez_afspraak_datum > TRUNC (SYSDATE) - 1;
-- !!!!!!!!!!!!!!!!!! tijdelijke view omdat de mail uitgevallen is. !!!!!!!!!!!!!!!!!!!!!!
CREATE OR REPLACE VIEW volk_v_rap_bezoekers_mutatie
AS
SELECT DISTINCT
DECODE (t.fac_srtnotificatie_key,
30, 'Nieuw',
31, 'Wijziging')
status,
a.bez_afspraak_key
nummer,
contact.prs_perslid_naam_full
contactpersoon,
HOST.prs_perslid_naam_full
gastheer,
l.alg_locatie_omschrijving
-- locatie,
-- ud.fac_usrdata_omschr
email,
b.bez_afspraak_naam
bezoeker,
b.bez_afspraak_bedrijf
bedrijf,
a.bez_afspraak_datum
van,
a.bez_afspraak_eind
tot,
(SELECT bez_kenmerkwaarde_waarde
FROM bez_kenmerkwaarde kw, bez_kenmerk k
WHERE k.bez_kenmerk_key = kw.bez_kenmerk_key
AND kw.bez_bezoekers_key = b.bez_bezoekers_key
AND k.bez_kenmerk_upper = 'KENTEKEN')
kenteken,
(SELECT COUNT (*)
FROM res_rsv_deel rrd
WHERE rrd.bez_bezoekers_key = b.bez_bezoekers_key)
parkeerplaats,
fac_tracking_datum
wijziging
FROM fac_tracking t,
bez_bezoekers b,
bez_afspraak a,
alg_locatie l,
-- fac_usrdata ud,
fac_srtnotificatie sn,
prs_v_perslid_fullnames contact,
prs_v_perslid_fullnames HOST
WHERE a.bez_afspraak_key = b.bez_afspraak_key
AND t.fac_tracking_refkey = a.bez_afspraak_key
AND t.fac_srtnotificatie_key IN (30, 31) --- BEZMUT, registreren nieuwe afspraak en BEZUPD, wijzigen afspraak
AND sn.fac_srtnotificatie_code = 'CUST01'
AND t.fac_tracking_refkey = a.bez_afspraak_key
AND a.alg_locatie_key = l.alg_locatie_key
-- AND ud.fac_usrdata_code = l.alg_locatie_code
AND a.bez_afspraak_host_key = HOST.prs_perslid_key
AND a.bez_afspraak_contact_key = contact.prs_perslid_key
-- AND ud.fac_usrtab_key = 141 --- bezoekersmutaties van het afgelopen uur
AND t.fac_tracking_datum >
TO_DATE ('20190423 16:00', 'yyyymmdd hh24:mi');
-- Procedure om de bezoekers met een parkeerplaats klaar te zetten voor de export
CREATE OR REPLACE PROCEDURE VOLK_SELECT_FIRMBASE (p_applname IN VARCHAR2,
p_applrun IN VARCHAR2)
AS
v_rap_count NUMBER;
v_visitor_id VARCHAR (100);
v_kenmerk_visid NUMBER;
v_aanduiding VARCHAR2 (200);
v_errorhint VARCHAR2 (1000);
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_count NUMBER;
-- Firmbase koppeling bestaat uit 3 verschillende onderdelen:
-- Insert Visitor, Update Visitor, Cancel Visitor
-- Stap 1: Insert Visitor
-- Selectcriteria: alle bezoekers uit volk_v_exp_firmbase die nog niet in de tabel met Firmbase registraties staan
-- Of eigenlijk ook: nog geen visitor_id hebben
CURSOR IV IS
SELECT p.*
FROM volk_v_exp_firmbase p
WHERE p.visitor_id IS NULL
AND p.bez_bezoeker_key NOT IN
(SELECT f.bez_bezoeker_key
FROM volk_registraties_firmbase f);
-- Stap 2: Update Visitor
-- Er ontstaat verschil in kentekens tussen de VOLK eigen tabel en bez. tabel
-- Selectcriteria: alle bezoekers uit volk_v_exp_firmbase met Firmbase key waarbij kenteken afwijkt van de gegevens uit VOLK tabel
-- De nieuwe gegevens worden geexporteerd en de eigen tabel wordt bijgewerkt
CURSOR UV IS
SELECT p.*
FROM volk_v_exp_firmbase p, volk_registraties_firmbase f
WHERE p.bez_bezoeker_key = f.bez_bezoeker_key
AND NVL (p.kenteken, 'KL') <> NVL (f.kenteken, 'KL');
-- Stap 3: Cancel Visitor
-- De bezoekersregistratie staat wel in de eigen tabel maar niet in de bez. tabel (bezoeker (en evt ook afspraak) is verwijderd)
-- Bezoekers uit het verleden kijken we niet naar, die staan sowieso niet in de view
-- LET OP: ook bij het wijzigen van datum/tijd van de afspraak moet eerst een delete en dan een nieuwe insert gedaan worden
-- Selectcriteria: alle bezoekers uit VOLK eigen tabel die niet meer voorkomen in volk_v_exp_firmbase
-- Of bezoekers uit VOLK eigen tabel waarbij begin en/of eindtijd afwijkt van de informatie uit de standaard tabel
-- Er wordt een delete visitor gestuurd en het record wordt uit de eigen tabel verwijderd
CURSOR CV IS
SELECT f.*
FROM volk_registraties_firmbase f
WHERE f.bez_startdatum > TRUNC (SYSDATE - 1)
AND f.visitor_id NOT IN (SELECT v.visitor_id
FROM volk_v_exp_firmbase v)
UNION ALL
SELECT f.*
FROM volk_registraties_firmbase f, volk_v_exp_firmbase v
WHERE f.visitor_id = v.visitor_id
AND ( f.bez_startdatum <> v.bez_startdatum
OR f.bez_einddatum <> v.bez_einddatum);
BEGIN
DELETE imp_log
WHERE imp_log_applicatie = p_applname;
DELETE fac_rapport
WHERE fac_rapport_node = p_applname;
v_rap_count := 0;
SELECT k.bez_kenmerk_key
INTO v_kenmerk_visid
FROM bez_kenmerk k
WHERE k.bez_kenmerk_upper = 'VISITORID';
FOR rec IN UV
LOOP
v_rap_count := v_rap_count + 1;
v_aanduiding :=
v_rap_count
|| ': '
|| rec.bez_afspraak_key
|| '/'
|| rec.bez_bezoeker_key;
v_errormsg := 'Exportregel update visitor Firmbase aanmaken';
INSERT INTO fac_rapport (fac_rapport_node,
fac_rapport_volgnr,
fac_rapport_regel,
fac_rapport_soort)
VALUES (
p_applname,
v_rap_count,
'node update.js'
|| ' "'
|| rec.visitor_id
|| '"'
|| ' "'
|| NVL (
rec.kenteken,
'KL-'
|| SUBSTR (
TO_CHAR (rec.bez_bezoeker_key,
'FM0000000000'),
-6))
|| '"'
|| ' "'
|| NVL (rec.landcode, 'NL')
|| '" >>%0.log 2>>&1',
0);
-- dan ook het kenteken in de eigen tabel aanpassen
UPDATE volk_registraties_firmbase v
SET kenteken = rec.kenteken
WHERE v.visitor_id = rec.visitor_id;
COMMIT;
END LOOP;
FOR rec IN CV
LOOP
v_rap_count := v_rap_count + 1;
v_aanduiding :=
v_rap_count
|| ': '
|| rec.bez_afspraak_key
|| '/'
|| rec.bez_bezoeker_key;
v_errormsg := 'Exportregel delete visitor Firmbase aanmaken';
INSERT INTO fac_rapport (fac_rapport_node,
fac_rapport_volgnr,
fac_rapport_regel,
fac_rapport_soort)
VALUES (
p_applname,
v_rap_count,
'node cancel.js'
|| ' "'
|| rec.visitor_id
|| '" >>%0.log 2>>&1',
0);
--- Registratie verwijderen uit logtabel
--- VisitorID verwijderen bij de reservering omdat de bezoeker een nieuwe ID moet krijgen via insert
DELETE volk_registraties_firmbase f
WHERE f.visitor_id = rec.visitor_id;
DELETE bez_kenmerkwaarde
WHERE bez_kenmerk_key = v_kenmerk_visid
AND bez_bezoekers_key = rec.bez_bezoeker_key;
COMMIT;
END LOOP;
FOR rec IN IV
LOOP
v_rap_count := v_rap_count + 1;
v_aanduiding :=
v_rap_count
|| ': '
|| rec.bez_afspraak_key
|| '/'
|| rec.bez_bezoeker_key;
v_errormsg := 'Exportregel insert visitor Firmbase aanmaken';
SELECT SUBSTR (SYS_GUID (), 1, 26)
|| SUBSTR (TO_CHAR (p.bez_bezoeker_key, 'FM0000000000'), -6)
INTO v_visitor_id
FROM volk_v_exp_firmbase p
WHERE p.bez_bezoeker_key = rec.bez_bezoeker_key;
--- als er wel een parkeerplaats is ingevuld, maar er is geen kenteken bekend, dan moet het kenteken veld gevuld worden met:
--- KL- en de laatste 6 posities van het VisitorID, bij ons is dat de bezoekerkey aangevuld met voorloopnullen
INSERT INTO fac_rapport (fac_rapport_node,
fac_rapport_volgnr,
fac_rapport_regel,
fac_rapport_soort)
VALUES (
p_applname,
v_rap_count,
'node register.js'
|| ' "'
|| v_visitor_id
|| '"'
|| ' "'
|| NVL (
rec.kenteken,
'KL-'
|| SUBSTR (
TO_CHAR (rec.bez_bezoeker_key,
'FM0000000000'),
-6))
|| '"'
|| ' "'
|| NVL (rec.landcode, 'NL')
|| '"'
|| ' "'
|| REPLACE (rec.bez_startdatum, ' ', 'T')
|| '"'
|| ' "'
|| REPLACE (rec.bez_einddatum, ' ', 'T')
|| '"'
|| ' "'
|| rec.bezoeker_naam
|| '" >>%0.log 2>>&1',
0);
-- registratie ook in eigen tabel toevoegen
INSERT INTO volk_registraties_firmbase (bez_bezoeker_key,
bez_startdatum,
bez_einddatum,
kenteken,
visitor_id)
VALUES (rec.bez_bezoeker_key,
rec.bez_startdatum,
rec.bez_einddatum,
rec.kenteken,
v_visitor_id);
-- guid ook registreren bij desbetreffende bezoekersregistratie
INSERT INTO bez_kenmerkwaarde (bez_kenmerk_key,
bez_bezoekers_key,
bez_kenmerkwaarde_waarde)
VALUES (v_kenmerk_visid, rec.bez_bezoeker_key, v_visitor_id);
COMMIT;
END LOOP;
COMMIT;
END volk_SELECT_firmbase;
/
--- genereert het export bestand voor Firmbase
CREATE OR REPLACE VIEW VOLK_V_EXPORT_FIRMBASE
(
RESULT,
RESULT_ORDER
)
AS
SELECT fac_rapport_regel, fac_rapport_volgnr
FROM fac_rapport
WHERE fac_rapport_node = 'FIRMBASE';
CREATE OR REPLACE PACKAGE VOLK
AS
PROCEDURE mld_after_insert (p_melding_key IN NUMBER);
PROCEDURE opschonen_registraties_fb;
PROCEDURE movetoruimte (p_perslid_key NUMBER);
END;
/
CREATE OR REPLACE PACKAGE BODY VOLK
AS
PROCEDURE mld_after_insert (p_melding_key IN NUMBER)
AS
CURSOR c IS
SELECT m.mld_melding_key
FROM mld_stdmelding sm,
ins_tab_discipline vg,
ins_srtdiscipline vgt,
mld_disc_params vgp,
mld_melding m
WHERE sm.mld_ins_discipline_key = vg.ins_discipline_key
AND vg.ins_srtdiscipline_key = vgt.ins_srtdiscipline_key
AND UPPER (ins_srtdiscipline_omschrijving) LIKE '%WINKEL%'
AND sm.mld_ins_discipline_key = vgp.mld_ins_discipline_key
AND vgp.mld_disc_params_kanpubliek = 1
AND m.mld_melding_publiek = 0
AND m.mld_stdmelding_key = sm.mld_stdmelding_key;
v_count NUMBER;
v_stdmelding_key NUMBER;
BEGIN
FOR rec IN C
LOOP
UPDATE mld_melding m
SET m.mld_melding_publiek = 1
WHERE m.mld_melding_key = rec.mld_melding_key;
END LOOP;
END;
PROCEDURE opschonen_registraties_fb
AS
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_errormsg VARCHAR2 (200);
BEGIN
DELETE volk_registraties_firmbase fb
WHERE fb.bez_einddatum < TRUNC (SYSDATE - 7);
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg :=
'OTHERS (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.writelog ('Opschonen registraties Firmbase',
'E',
v_errormsg,
'');
END;
PROCEDURE movetoruimte (p_perslid_key NUMBER)
AS
v_ruimte_key NUMBER (10);
v_verdieping_key NUMBER (10);
BEGIN
SELECT MIN (x.alg_ruimte_key)
INTO v_ruimte_key
FROM (SELECT r1.alg_ruimte_key
FROM alg_v_aanwezigruimte r1, alg_verdieping v1
WHERE r1.alg_srtruimte_key = 21 -- Fictief
AND SUBSTR (r1.alg_ruimte_nr, 1, 1) = '_'
AND r1.alg_verdieping_key = v1.alg_verdieping_key
AND v1.alg_gebouw_key = 124) x
LEFT JOIN ( SELECT prs_alg_ruimte_key, COUNT (*) aant
FROM prs_werkplek wp
GROUP BY prs_alg_ruimte_key) wp
ON x.alg_ruimte_key = wp.prs_alg_ruimte_key
WHERE COALESCE (wp.aant, 0) < 9999;
IF v_ruimte_key IS NULL
THEN
INSERT INTO alg_ruimte (alg_verdieping_key, -- Begane grond Croeselaan
alg_srtruimte_key,
alg_ruimte_nr)
VALUES (1437, 21, '_Quqelequ')
RETURNING alg_ruimte_key
INTO v_ruimte_key;
UPDATE alg_ruimte
SET alg_ruimte_nr = '_' || TO_CHAR (v_ruimte_key)
WHERE alg_ruimte_key = v_ruimte_key;
END IF;
prs.movetoruimte (p_perslid_key,
v_ruimte_key,
'A',
1);
END;
END;
/
CREATE OR REPLACE VIEW VOLK_V_RAPP_AANT_BEZ_INTERN
(
DATUM,
FCLT_LOCATIE_KEY,
LOCATIE,
BEDRIJFSONDERDEEL,
AANTAL,
AANTAL_BHV,
HTML_DETAILS
)
AS
SELECT TRUNC (afs.bez_afspraak_datum),
l.alg_locatie_key,
l.alg_locatie_omschrijving,
COALESCE (bo.fac_usrdata_omschr, 'Onbekend') bedrijfsonderdeel,
COUNT (b.bez_bezoekers_key),
SUM (bhv.bhv),
'<a class="details" onclick=''FcltMgr.openDetail("appl/fac/fac_report.asp?usrrap_key=161&'
|| 'mode=list&'
|| 'fclt_datum_afspraak='
|| fac.safe_to_number (
TO_CHAR (afs.bez_afspraak_datum, 'yyyymmdd'))
|| '&'
|| 'fclt_bedrijfsonderdeel='
|| COALESCE (REPLACE (bo.fac_usrdata_omschr, '&', '%26'),
'Onbekend')
|| '&'
|| 'fclt_locatie_key='
|| l.alg_locatie_key
|| '")''>'
|| 'Klik hier voor de details'
|| '</a>' AS html_details
FROM bez_bezoekers b,
bez_afspraak afs,
prs_perslid HOST,
alg_locatie l,
prs_afdeling a,
(SELECT kl.prs_link_key,
fac.safe_to_number (kl.prs_kenmerklink_waarde) bhv
FROM prs_kenmerk k, prs_kenmerklink kl
WHERE k.prs_kenmerk_upper LIKE '%BHV%'
AND kl.prs_kenmerk_key = k.prs_kenmerk_key) bhv,
(SELECT *
FROM fac_usrtab tb, fac_usrdata ud
WHERE ud.fac_usrtab_key = tb.fac_usrtab_key
AND UPPER (tb.fac_usrtab_omschrijving) =
'BEDRIJFSONDERDEEL') bo
WHERE b.bez_afspraak_key = afs.bez_afspraak_key
AND afs.alg_locatie_key = l.alg_locatie_key
AND afs.bez_afspraak_host_key = HOST.prs_perslid_key
AND b.prs_perslid_key = bhv.prs_link_key(+)
AND HOST.prs_afdeling_key = a.prs_afdeling_key
AND bo.fac_usrdata_code(+) = a.prs_afdeling_naam --- op basis van afdelingscode wordt het bedrijfsonderdeel gekoppeld
GROUP BY TRUNC (afs.bez_afspraak_datum),
l.alg_locatie_key,
l.alg_locatie_omschrijving,
COALESCE (bo.fac_usrdata_omschr, 'Onbekend'),
'<a class="details" onclick=''FcltMgr.openDetail("appl/fac/fac_report.asp?usrrap_key=161&'
|| 'mode=list&'
|| 'fclt_datum_afspraak='
|| fac.safe_to_number (
TO_CHAR (afs.bez_afspraak_datum, 'yyyymmdd'))
|| '&'
|| 'fclt_bedrijfsonderdeel='
|| COALESCE (REPLACE (bo.fac_usrdata_omschr, '&', '%26'),
'Onbekend')
|| '&'
|| 'fclt_locatie_key='
|| l.alg_locatie_key
|| '")''>'
|| 'Klik hier voor de details'
|| '</a>';
CREATE OR REPLACE VIEW VOLK_V_RAPP_BEZ_INTERN_DETAIL
(
FCLT_DATUM_AFSPRAAK,
FCLT_BEDRIJFSONDERDEEL,
FCLT_LOCATIE_KEY,
DATUM,
BEDRIJFSONDERDEEL,
LOCATIE,
BEZOEKER,
AFSPRAAK_VAN,
AFSPRAAK_TOT,
ACTIE,
GASTHEER_VROUW
)
AS
SELECT fac.safe_to_number (TO_CHAR (afs.bez_afspraak_datum, 'yyyymmdd'))
fclt_datum,
COALESCE (bo.fac_usrdata_omschr, 'Onbekend')
fclt_bedrijfsonderdeel,
l.alg_locatie_key,
TRUNC (afs.bez_afspraak_datum),
COALESCE (bo.fac_usrdata_omschr, 'Onbekend')
bedrijfsonderdeel,
l.alg_locatie_omschrijving,
b.bez_afspraak_naam,
TO_CHAR (afs.bez_afspraak_datum, 'HH24:MI'),
TO_CHAR (afs.bez_afspraak_eind, 'HH24:MI'),
ac.bez_actie_omschrijving,
bez_voor.prs_perslid_naam_friendly
gastheer_vrouw
FROM bez_bezoekers b,
bez_afspraak afs,
prs_perslid p,
-- prs_v_perslid_fullnames_all pf,
prs_v_perslid_fullnames_all bez_voor,
alg_locatie l,
prs_afdeling a,
(SELECT *
FROM fac_usrtab tb, fac_usrdata ud
WHERE ud.fac_usrtab_key = tb.fac_usrtab_key
AND UPPER (tb.fac_usrtab_omschrijving) =
'BEDRIJFSONDERDEEL') bo,
bez_actie ac
WHERE b.bez_afspraak_key = afs.bez_afspraak_key
AND afs.alg_locatie_key = l.alg_locatie_key
AND afs.bez_afspraak_host_key = p.prs_perslid_key
AND p.prs_afdeling_key = a.prs_afdeling_key
AND bo.fac_usrdata_code(+) = a.prs_afdeling_naam --- op basis van afdelingscode wordt het bedrijfsonderdeel gekoppeld
AND afs.bez_actie_key = ac.bez_actie_key
AND afs.bez_afspraak_host_key = bez_voor.prs_perslid_key
ORDER BY afs.bez_afspraak_datum;
CREATE OR REPLACE PROCEDURE VOLK_DAILY
AS
BEGIN
-- Opschonenen Firmbase registraties
volk.opschonen_registraties_fb ();
END;
/
CREATE OR REPLACE VIEW VOLK_V_THEMA_RUIMTE_RES_DATUM
(
FCLT_F_DATUM,
ALG_RUIMTE_KEY,
RES_RUIMTE_KEY,
MIN_VAN,
MAX_TOT,
WAARDE1,
WAARDE,
WAARDE3
)
AS
WITH
datums
AS
( SELECT TRUNC (SYSDATE) + LEVEL - 1 datum
FROM DUAL
CONNECT BY LEVEL <= 29)
SELECT datum fclt_f_datum,
alg_ruimte_key,
res_ruimte_key,
MIN (res_rsv_ruimte_van) min_van,
MAX (res_rsv_ruimte_tot) max_tot,
CASE
WHEN MAX (res_rsv_ruimte_tot) IS NULL THEN res_ruimte_nr
ELSE 'bezet'
END waarde1,
CASE
WHEN MAX (res_rsv_ruimte_tot) IS NULL THEN res_ruimte_nr
ELSE 'bezet'
END waarde,
COUNT (res_rsv_ruimte_tot) -- aantal reservering deze dag
waarde3
FROM (SELECT datums.datum,
rr.res_ruimte_key,
rar.alg_ruimte_key alg_ruimte_key,
res_ruimte_nr,
res_rsv_ruimte_van,
res_rsv_ruimte_tot
FROM res_v_aanwezigruimte rr,
res_alg_ruimte rar,
datums,
(SELECT datum,
res_ruimte_key,
res_rsv_ruimte_van,
res_rsv_ruimte_tot
FROM datums,
res_rsv_ruimte rrr,
res_ruimte_opstelling rro
WHERE res_rsv_ruimte_van > TRUNC (SYSDATE) - 1 -- negeer alle irrelevante historie sowieso
AND rrr.res_rsv_ruimte_verwijder IS NULL
AND rrr.res_ruimte_opstel_key =
rro.res_ruimte_opstel_key
AND datum >= TRUNC (res_rsv_ruimte_van)
AND datum < TRUNC (res_rsv_ruimte_tot) + 1)
blokkerend -- vandaag en nog niet afgelopen
WHERE rr.res_ruimte_key = blokkerend.res_ruimte_key(+)
AND rr.res_ruimte_key = rar.res_ruimte_key
AND rar.res_alg_ruimte_verwijder IS NULL
AND datums.datum = blokkerend.datum(+)
AND res_discipline_key = 381 -- Team areas
AND ( rr.res_ruimte_vervaldatum IS NULL
OR rr.res_ruimte_vervaldatum > datums.datum))
GROUP BY datum,
alg_ruimte_key,
res_ruimte_key,
res_ruimte_nr;
COMMIT;
--- VOLK#77515 Uitbesteding Servicedesk Retail locaties SNS
--- Meldingen/opdrachten uitgezet naar Colliers mogen direct worden afgemeld
CREATE OR REPLACE PROCEDURE volk_select_colliers (p_applname IN VARCHAR2,
p_applrun IN VARCHAR2)
AS
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_errorhint VARCHAR2 (100);
v_aanduiding VARCHAR2 (100);
v_afmeldtekst VARCHAR2 (4000);
CURSOR coll IS
SELECT o.mld_opdr_key,
os.mld_statusopdr_key,
os.mld_statusopdr_omschrijving,
m.mld_melding_key,
ms.mld_statuses_key,
ms.mld_statuses_omschrijving
FROM mld_opdr o,
mld_melding m,
mld_statuses ms,
mld_statusopdr os
WHERE o.mld_uitvoerende_keys = 27886 -- Collliers
AND m.mld_melding_key = o.mld_melding_key
AND ms.mld_statuses_key = m.mld_melding_status
AND os.mld_statusopdr_key = o.mld_statusopdr_key
AND m.mld_melding_status IN (2, 3, 7);
BEGIN
v_errorhint := 'init';
DELETE imp_log
WHERE imp_log_applicatie = p_applname;
FOR rec IN coll
LOOP
BEGIN
SELECT at.mld_afmeldtekst_omschrijving
INTO v_afmeldtekst
FROM mld_afmeldtekst at
WHERE at.mld_afmeldtekst_key = 41;
UPDATE mld_melding m
SET m.mld_melding_opmerking = v_afmeldtekst
WHERE m.mld_melding_key = rec.mld_melding_key;
mld.setmeldingstatus (rec.mld_melding_key, 5, 3);
fac.trackaction ('MLDTRK',
rec.mld_melding_key,
NULL,
NULL,
'Melding naar Colliers automatisch afgemeld');
mld.setopdrachtstatus (rec.mld_opdr_key, 6, 3);
fac.trackaction ('ORDTRK',
rec.mld_opdr_key,
NULL,
NULL,
'Opdracht naar Colliers automatisch afgemeld');
COMMIT;
END;
END LOOP;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
fac.writelog (p_applname,
'E',
'Error ' || oracle_err_num || '/' || oracle_err_mes,
v_errorhint);
END;
/
--- VOLK#77515 Uitbesteding Servicedesk Retail locaties SNS
--- Colliers moet worden geinformeerd over meldingen die naar CSU zijn uitgezet
CREATE OR REPLACE VIEW VOLK_V_NOTI_CSU_ORD
(
SENDER,
RECEIVER,
TEXT,
CODE,
KEY,
XKEY,
XSENDER,
XEMAIL,
XMOBILE
)
BEQUEATH DEFINER
AS
SELECT 3 sender, --- Facilitor
NULL receiver,
'Ter informatie: Opdracht '
|| TO_CHAR (m.mld_melding_key)
|| '/'
|| TO_CHAR (o.mld_opdr_bedrijfopdr_volgnr)
|| 'is uitgezet naar CSU ' tekst,
sn.fac_srtnotificatie_code code,
o.mld_opdr_key key,
NULL xkey,
NULL xsender,
SUBSTR (ba.prs_bedrijfadres_url,
INSTR (ba.prs_bedrijfadres_url, ':') + 1) xemail,
NULL xmobile
FROM mld_opdr o,
mld_melding m,
mld_stdmelding sm,
ins_tab_discipline vg,
ins_srtdiscipline vgt,
fac_tracking t,
prs_bedrijfadres ba,
fac_srtnotificatie sn
WHERE o.mld_uitvoerende_keys = 87 -- CSU
AND m.mld_melding_key = o.mld_melding_key
AND sm.mld_stdmelding_key = m.mld_stdmelding_key
AND vg.ins_discipline_key = sm.mld_ins_discipline_key
AND vgt.ins_srtdiscipline_key = vg.ins_srtdiscipline_key
AND vgt.ins_srtdiscipline_key IN (4, 5) ---vakgroeptype SNS winkel FN/LD
AND t.fac_tracking_refkey = o.mld_opdr_key
AND t.fac_srtnotificatie_key = 72 -- ORDNEW
AND ba.prs_bedrijf_key = 27886 -- Colliers
AND ba.prs_bedrijfadres_type = 'O'
AND sn.fac_srtnotificatie_code = 'CUST02'
AND t.fac_tracking_datum >
(SELECT fac_notificatie_job_lastrun
FROM fac_notificatie_job
WHERE UPPER (fac_notificatie_job_view) =
'VOLK_V_NOTI_CSU_ORD')
AND t.fac_tracking_datum <
(SELECT fac_notificatie_job_nextrun
FROM fac_notificatie_job
WHERE UPPER (fac_notificatie_job_view) =
'VOLK_V_NOTI_CSU_ORD');
CREATE OR REPLACE PROCEDURE volk_processemail (pfrom IN VARCHAR2,
pto IN VARCHAR2,
psubject IN VARCHAR2,
pbody IN VARCHAR2,
psessionid IN VARCHAR2,
pemailkey IN NUMBER)
AS
v_count NUMBER;
sender prs_perslid.prs_perslid_key%TYPE;
defaultstdmelding fac_setting.fac_setting_default%TYPE;
subject_regexp fac_setting.fac_setting_default%TYPE;
v_newkey mld_melding.mld_melding_key%TYPE;
v_mldnum VARCHAR2 (4000);
v_mldkey mld_melding.mld_melding_key%TYPE;
v_email fac_notificatie.fac_notificatie_receiver_email%TYPE;
v_check NUMBER;
v_pbody VARCHAR2 (4000);
v_folder_kkey mld_kenmerk.mld_kenmerk_key%TYPE;
-- kkey mld_kenmerk.mld_kenmerk_key%TYPE;
errormsg fac_result.fac_result_waarde%TYPE;
BEGIN
-- Valideer de sender in pfrom: kennen we deze?
SELECT COUNT (*)
INTO v_count
FROM prs_perslid p, prs_afdeling d
WHERE p.prs_afdeling_key = d.prs_afdeling_key
AND UPPER (prs_perslid_email) = UPPER (pfrom);
-- Bekende afzender --> dat is de melder
IF (v_count = 1)
THEN
SELECT p.prs_perslid_key
INTO sender
FROM prs_perslid p, prs_afdeling d
WHERE p.prs_afdeling_key = d.prs_afdeling_key
AND p.prs_perslid_verwijder IS NULL
AND UPPER (prs_perslid_email) = UPPER (pfrom);
v_pbody := pbody;
-- Geen bekende afzender --> _FACILITOR wordt de afzender
ELSE
SELECT prs_perslid_key
INTO sender
FROM prs_perslid p, prs_afdeling d
WHERE p.prs_afdeling_key = d.prs_afdeling_key
AND prs_perslid_key = 3;
--- we nemen het mailadres van de afzender wel op in de tekst
v_pbody := 'Verstuurd door: ' || pfrom || CHR (10) || pbody;
END IF;
-- Check of de afzender een reply op een bestaande melding doet, in dat geval wordt dat in notities genoteerd.
-- 1) Eerst uit het onderwerp het meldingnummer proberen te onderscheppen, uitgangspunt dat in het onderwerp het meldingnummer '1234' kan worden opgevist, met ervoor en erna een spatie
-- 2) Het 1e nummer dat in het onderwerp staat wordt gezien als meldingnummer, eventuele andere nummers later in het onderwerp worden genegeerd.
subject_regexp := '[[:digit:]]{1,}';
v_pbody := pbody;
v_mldnum :=
REGEXP_SUBSTR (psubject,
subject_regexp,
1,
1,
'i');
v_mldkey := fac.safe_to_number (v_mldnum);
--- kijken of er inderdaad een melding bestaat met het gevonden nummer
SELECT COUNT (m.mld_melding_key)
INTO v_check
FROM mld_melding m
WHERE m.mld_melding_key = v_mldkey;
IF v_check = 1
THEN
-- Bestaande melding gevonden dus we zetten de mail als notitie bij deze melding
BEGIN
INSERT INTO mld_melding_note (mld_melding_key,
mld_melding_note_omschrijving,
mld_melding_note_flag,
prs_perslid_key)
VALUES (
v_mldkey,
SUBSTR (
psubject
|| CHR (13)
|| CHR (10)
|| REPLACE (
SUBSTR (v_pbody,
1,
4000 - (LENGTH (v_pbody) + 2)),
CHR (13)
|| CHR (10)
|| CHR (13)
|| CHR (10),
CHR (13) || CHR (10)),
1,
4000), -- verwijder onnodige witregels
1,
3);
--- belletje bij de melding zetten
UPDATE mld_melding
SET mld_melding_actiecode = 129
WHERE mld_melding_key = v_mldkey;
--- de huidige behandelaar krijgt een notificatie
SELECT mld_melding_behandelaar_key
INTO v_email
FROM mld_melding
WHERE mld_melding_key = v_mldkey;
IF v_email IS NOT NULL
THEN
INSERT INTO fac_notificatie (fac_srtnotificatie_key,
fac_notificatie_status,
prs_perslid_key_receiver,
fac_notificatie_receiver_email,
fac_notificatie_oms,
fac_notificatie_refkey,
fac_notificatie_prioriteit)
VALUES (
67, --- mldnob
2,
v_email,
NULL,
'Er is een opmerking geplaatst bij melding '
|| TO_CHAR (v_mldkey),
v_mldkey,
2);
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,
mld_melding m
WHERE m.mld_stdmelding_key = sm1.mld_stdmelding_key
AND m.mld_melding_key = v_mldkey
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'));
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_mldkey / 1000), 'FM0000')
|| '___\M'
|| v_mldkey
|| '\'
|| v_folder_kkey
|| '\');
END IF;
fac.trackaction ('MLDTRK',
v_mldkey,
NULL,
NULL,
'Nieuwe notitie via Mail2melding');
END;
ELSE
--- geen bestaande melding kunnen vinden dus dan een nieuwe aanmaken
BEGIN
INSERT INTO mld_melding (mld_melding_module,
mld_meldbron_key,
mld_melding_datum,
mld_melding_onderwerp,
mld_melding_omschrijving,
mld_melding_status,
mld_stdmelding_key,
prs_perslid_key,
prs_perslid_key_voor,
mld_melding_email_ext,
mld_melding_spoed)
VALUES (
'MLD',
4, -- email
SYSDATE,
SUBSTR (psubject, 1, 60),
SUBSTR (
REPLACE (
SUBSTR (pbody, 1, 4000),
CHR (13) || CHR (10) || CHR (13) || CHR (10),
CHR (13) || CHR (10)),
1,
4000), -- verwijder onnodige witregels
2,
341,
3,
sender,
pfrom,
3)
RETURNING mld_melding_key
INTO v_newkey;
INSERT INTO fac_result (fac_result_sessionid,
fac_result_naam,
fac_result_waarde)
VALUES (psessionid,
'maillog',
'Geregistreerd onder melding ' || v_newkey);
END;
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;
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 volk_processemail;
/
CREATE OR REPLACE PROCEDURE volk_import_organisatie (p_import_key IN NUMBER)
AS
c_fielddelimitor VARCHAR2 (2) := fac.import_delimiter (p_import_key);
v_newline VARCHAR2 (1000); -- Input line
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
header_is_valid NUMBER;
v_count NUMBER;
v_ongeldig NUMBER (1);
v_mode NUMBER (1);
v_aanduiding VARCHAR2 (200);
v_all_null BOOLEAN;
v_count_error NUMBER (10);
v_count_tot NUMBER (10);
v_count_import NUMBER (10);
-- De importvelden:
v_bedrijf_naam VARCHAR2 (256);
v_afdeling_naam VARCHAR2 (256);
v_afdeling_naam_parent VARCHAR2 (256);
v_afdeling_omschrijving VARCHAR2 (256);
v_kostenplaats_nr VARCHAR2 (256);
-- PRS_BEDRIJF
CURSOR c1 IS
SELECT *
FROM fac_imp_file
WHERE fac_import_key = p_import_key
ORDER BY fac_imp_file_index;
BEGIN
-- Eerst opruiming
DELETE FROM fac_imp_organisatie;
COMMIT;
v_count_error := 0;
header_is_valid := 0;
v_count_tot := 0;
v_count_import := 0;
FOR rec1 IN c1
LOOP
BEGIN
v_errormsg := 'Fout FETCH te importeren rij';
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_fielddelimitor, v_bedrijf_naam);
fac.imp_getfield (v_newline,
c_fielddelimitor,
v_afdeling_naam_parent);
fac.imp_getfield (v_newline, c_fielddelimitor, v_afdeling_naam);
fac.imp_getfield (v_newline,
c_fielddelimitor,
v_afdeling_omschrijving);
v_aanduiding :=
v_bedrijf_naam
|| '|'
|| v_afdeling_naam
|| '|'
|| v_afdeling_omschrijving
|| '| ';
IF (header_is_valid = 0)
THEN
IF UPPER (v_bedrijf_naam) = 'BEDRIJFSNAAM'
AND UPPER (v_afdeling_naam_parent) = 'AFDELINGSCODEPARENT'
THEN
header_is_valid := 1;
END IF;
ELSE
v_count_tot := v_count_tot + 1;
--fac.imp_writelog (p_import_key, 'I', v_aanduiding, '');
-- Controleer alle veldwaarde
v_bedrijf_naam := TRIM (v_bedrijf_naam);
IF LENGTH (v_bedrijf_naam) > 60
THEN
v_bedrijf_naam := SUBSTR (v_bedrijf_naam, 1, 60);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Bedrijf-aanduiding is te lang',
'Aanduiding wordt afgebroken tot ['
|| v_bedrijf_naam
|| ']');
END IF;
--
v_afdeling_naam := TRIM (v_afdeling_naam);
IF LENGTH (v_afdeling_naam) > 15
THEN
v_afdeling_naam := SUBSTR (v_afdeling_naam, 1, 15);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Afdeling-aanduiding is te lang',
'Aanduiding wordt afgebroken tot ['
|| v_afdeling_naam
|| ']');
END IF;
-- als de afdeling minder dan 6 karakters bevat, moeten we deze aanvullen met voorloopnullen
IF LENGTH (v_afdeling_naam) < 6
THEN
v_afdeling_naam := LPAD (v_afdeling_naam, 6, '0');
END IF;
--
v_afdeling_naam_parent := TRIM (v_afdeling_naam_parent);
IF LENGTH (v_afdeling_naam_parent) > 15
THEN
v_afdeling_naam_parent :=
SUBSTR (v_afdeling_naam_parent, 1, 15);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Afdeling-aanduiding is te lang',
'Aanduiding wordt afgebroken tot ['
|| v_afdeling_naam_parent
|| ']');
END IF;
-- als de afdelingparent minder dan 6 karakters bevat, moeten we deze aanvullen met voorloopnullen
IF LENGTH (v_afdeling_naam_parent) < 6
THEN
v_afdeling_naam_parent :=
LPAD (v_afdeling_naam_parent, 6, '0');
END IF;
--
v_afdeling_omschrijving := TRIM (v_afdeling_omschrijving);
IF LENGTH (v_afdeling_omschrijving) > 60
THEN
v_afdeling_omschrijving :=
SUBSTR (v_afdeling_omschrijving, 1, 60);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Afdelingsomschrijving is te lang',
'Aanduiding wordt afgebroken tot ['
|| v_afdeling_omschrijving
|| ']');
END IF;
v_all_null :=
(v_bedrijf_naam IS NULL)
AND (v_afdeling_naam IS NULL)
AND (v_afdeling_naam_parent IS NULL)
AND (v_afdeling_omschrijving IS NULL);
-- Insert geformatteerde import record
IF v_ongeldig = 0
THEN
v_errormsg :=
'Fout bij toevoegen te impoteren bedrijf/afdeling ['
|| v_afdeling_naam
|| ']';
INSERT INTO fac_imp_organisatie (
prs_bedrijf_naam,
prs_afdeling_naam,
prs_afdeling_naam_parent,
prs_afdeling_omschrijving,
prs_kostenplaats_nr)
VALUES (v_bedrijf_naam,
v_afdeling_naam,
'000036', -- we nemen geen niveaus op in Facilitor, alles valt direct onder Volksbank
v_afdeling_omschrijving,
'999999'); -- dummy kostenplaats
v_count_import := v_count_import + 1;
END IF;
END IF;
END;
END LOOP;
IF (header_is_valid = 0)
THEN
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || 'Ongeldig importbestand',
'Geen geldige headerregel aanwezig');
ELSE
fac.imp_writelog (
p_import_key,
'S',
'Bedrijf: aantal ingelezen regels: ' || TO_CHAR (v_count_tot),
'');
fac.imp_writelog (
p_import_key,
'S',
'Bedrijf: aantal ongeldige importregels: '
|| TO_CHAR (v_count_tot - v_count_import),
'');
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,
'');
END volk_import_organisatie;
/
CREATE OR REPLACE PROCEDURE volk_delete_organisatie (p_import_key IN NUMBER)
AS
--- afdelingen die niet in de import voorkomen en waar ook geen medewerkers meer onder vallen
--- deze mogen een verwijderdatum krijgen
CURSOR c_del IS
SELECT a.prs_afdeling_key,
a.prs_afdeling_naam || ' ' || a.prs_afdeling_omschrijving afdeling
FROM prs_afdeling a
WHERE NOT EXISTS
(SELECT i.prs_afdeling_naam
FROM fac_imp_organisatie i
WHERE i.prs_afdeling_naam = a.prs_afdeling_naam)
AND NOT EXISTS
(SELECT p.prs_afdeling_key
FROM prs_perslid p
WHERE p.prs_afdeling_key = a.prs_afdeling_key)
AND NOT EXISTS
(SELECT *
FROM prs_afdeling p
WHERE p.prs_afdeling_parentkey = a.prs_afdeling_key);
BEGIN
FOR rec IN c_del
LOOP
BEGIN
UPDATE prs_afdeling a
SET a.prs_afdeling_verwijder = SYSDATE
WHERE a.prs_afdeling_key = rec.prs_afdeling_key;
fac.trackaction (
'ADMTRK',
rec.prs_afdeling_key,
NULL,
NULL,
'Afdeling '
|| rec.afdeling
|| ' is verwijderd vanuit de organisatie import');
EXCEPTION
WHEN OTHERS
THEN
fac.imp_writelog (
p_import_key,
'W',
'volk_delete_afdeling',
'Verwijderen van afdeling: '
|| rec.afdeling
|| ' is NIET gelukt');
END;
COMMIT;
END LOOP;
END volk_delete_organisatie;
/
CREATE OR REPLACE PROCEDURE volk_update_organisatie (p_import_key IN NUMBER)
AS
-- wanneer de afdeling gelijk is maar de omschrijving, kostenplaats of de parent anders dan werken we de afdeling in Facilitor bij
CURSOR c_omschr IS
SELECT i.prs_afdeling_naam,
i.prs_afdeling_omschrijving prs_afdeling_omschrijving_new,
a.prs_afdeling_omschrijving,
a.prs_afdeling_key
FROM fac_imp_organisatie i, prs_afdeling a
WHERE i.prs_afdeling_naam = a.prs_afdeling_naam
AND a.prs_afdeling_omschrijving <> i.prs_afdeling_omschrijving;
CURSOR c_kpl IS
SELECT kn.prs_kostenplaats_key prs_kostenplaats_key_new,
a.prs_afdeling_key
FROM fac_imp_organisatie i,
prs_kostenplaats kn,
prs_afdeling a,
prs_kostenplaats k
WHERE kn.prs_kostenplaats_nr = i.prs_kostenplaats_nr
AND i.prs_afdeling_naam = a.prs_afdeling_naam
AND a.prs_kostenplaats_key = k.prs_kostenplaats_key
AND i.prs_kostenplaats_nr <> k.prs_kostenplaats_nr;
CURSOR c_parent IS
SELECT a.prs_afdeling_key,
ap_new.prs_afdeling_key prs_afdeling_parentkey_new
FROM prs_afdeling a, fac_imp_organisatie i, prs_afdeling ap_new
WHERE i.prs_afdeling_naam = a.prs_afdeling_naam
AND i.prs_afdeling_naam_parent = ap_new.prs_afdeling_naam
AND a.prs_afdeling_parentkey <> ap_new.prs_afdeling_key;
BEGIN
-- we verwijderen afdelingen die niet meer in de import meekomen
volk_delete_organisatie (p_import_key);
-- de afdelingen die wel in de import zittenvoegen we toe
fac_update_organisatie (p_import_key);
--- we werken afdelingen bij waarin omschrijving, parent en/of kostenplaats gewijzigd is
--- vanuit de update is alles wat nieuw is al aangemaakt, dus aangenomen mag worden dat de parent en de kpl bekend is in Facilitor
FOR rec IN c_omschr
LOOP
BEGIN
UPDATE prs_afdeling a
SET a.prs_afdeling_omschrijving =
rec.prs_afdeling_omschrijving_new
WHERE a.prs_afdeling_key = rec.prs_afdeling_key;
COMMIT;
END;
END LOOP;
FOR rec IN c_kpl
LOOP
BEGIN
UPDATE prs_afdeling a
SET a.prs_kostenplaats_key = rec.prs_kostenplaats_key_new
WHERE a.prs_afdeling_key = rec.prs_afdeling_key;
COMMIT;
END;
END LOOP;
FOR rec IN c_parent
LOOP
BEGIN
UPDATE prs_afdeling a
SET a.prs_afdeling_parentkey = rec.prs_afdeling_parentkey_new
WHERE a.prs_afdeling_key = rec.prs_afdeling_key;
COMMIT;
END;
END LOOP;
END volk_update_organisatie;
/
------ 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