Files
Customer/GOKO/goko.sql
Jos Migo bf45061bb9 GOKO#75342 -- Beaufort-koppeling en probleem verwijderen werkplekkoppelingen
svn path=/Customer/trunk/; revision=57996
2022-11-15 15:17:58 +00:00

1670 lines
67 KiB
SQL
Raw Blame History

--
-- $Id$
--
-- Script containing customer specific sql statements for the FACILITOR database
DEFINE thisfile = 'goko.SQL'
DEFINE dbuser = 'GOKO'
SET ECHO ON
SET DEFINE ON
COLUMN fcltlogfile NEW_VALUE fcltlogfile NOPRINT;
COLUMN fcltcusttxt NEW_VALUE fcltcusttxt NOPRINT;
WHENEVER SQLERROR CONTINUE;
SELECT adm.getscriptspoolfile('&thisfile') AS fcltlogfile FROM DUAL;
SPOOL &fcltlogfile
WHENEVER SQLERROR EXIT;
SELECT adm.checkscriptcust('&dbuser') AS fcltcusttxt FROM DUAL;
WHENEVER SQLERROR CONTINUE;
---------------------------------------
PROMPT &fcltcusttxt
---------------------------------------
SET DEFINE OFF
------ payload begin ------
CREATE OR REPLACE PACKAGE GOKO
AS
-- PROCEDURE set_werkplek;
-- PROCEDURE annuleer_werkplek;
-- PROCEDURE bes_after_insert (p_bes_bestelling_key IN NUMBER);
FUNCTION get_kenmerk (p_module IN VARCHAR2,
p_kenmerk_key IN NUMBER,
p_link_key IN NUMBER)
RETURN VARCHAR2;
FUNCTION get_kenmerkwaarde (p_kenmerk_type VARCHAR2,
p_kenmerkdomein_key NUMBER,
p_kenmerk_waarde VARCHAR2)
RETURN VARCHAR2;
END;
/
CREATE OR REPLACE PACKAGE BODY GOKO
AS
FUNCTION get_kenmerk (p_module IN VARCHAR2,
p_kenmerk_key IN NUMBER,
p_link_key IN NUMBER)
RETURN VARCHAR2
AS
v_kenmerk_type mld_srtkenmerk.mld_srtkenmerk_kenmerktype%TYPE;
v_kenmerk_waarde mld_kenmerkmelding.mld_kenmerkmelding_waarde%TYPE;
v_kenmerkdomein_key fac_kenmerkdomein.fac_kenmerkdomein_key%TYPE;
v_kenmerk_niveau ins_kenmerk.ins_kenmerk_niveau%TYPE;
BEGIN
CASE p_module
WHEN 'MLD'
THEN
SELECT mld_srtkenmerk_kenmerktype,
sk.fac_kenmerkdomein_key,
km.mld_kenmerkmelding_waarde
INTO v_kenmerk_type, v_kenmerkdomein_key, v_kenmerk_waarde
FROM mld_v_aanwezigkenmerkmelding km,
mld_kenmerk k,
mld_srtkenmerk sk
WHERE km.mld_melding_key = p_link_key
AND km.mld_kenmerk_key = p_kenmerk_key
AND km.mld_kenmerk_key = k.mld_kenmerk_key
AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key;
WHEN 'CNT'
THEN
SELECT cnt_srtkenmerk_kenmerktype,
sk.fac_kenmerkdomein_key,
kc.cnt_kenmerkcontract_waarde
INTO v_kenmerk_type, v_kenmerkdomein_key, v_kenmerk_waarde
FROM cnt_kenmerkcontract kc,
cnt_kenmerk k,
cnt_srtkenmerk sk
WHERE kc.cnt_contract_key = p_link_key
AND kc.cnt_kenmerk_key = p_kenmerk_key
AND kc.cnt_kenmerk_key = k.cnt_kenmerk_key
AND k.cnt_srtkenmerk_key = sk.cnt_srtkenmerk_key;
WHEN 'ALG'
THEN
SELECT alg_kenmerk_kenmerktype,
k.fac_kenmerkdomein_key,
aogk.alg_onrgoedkenmerk_waarde
INTO v_kenmerk_type, v_kenmerkdomein_key, v_kenmerk_waarde
FROM alg_onrgoedkenmerk aogk, alg_kenmerk k
WHERE aogk.alg_onrgoed_key = p_link_key
AND aogk.alg_kenmerk_key = p_kenmerk_key
AND aogk.alg_kenmerk_key = k.alg_kenmerk_key;
WHEN 'INS'
THEN
SELECT k.ins_kenmerk_niveau
INTO v_kenmerk_niveau
FROM ins_kenmerk k
WHERE ins_kenmerk_key = p_kenmerk_key;
IF v_kenmerk_niveau = 'C'
THEN
SELECT sk.ins_srtkenmerk_kenmerktype,
sk.fac_kenmerkdomein_key,
ikds.ins_kmdeelsrtcontr_waarde
INTO v_kenmerk_type,
v_kenmerkdomein_key,
v_kenmerk_waarde
FROM ins_kmdeelsrtcontr ikds,
ins_kenmerk k,
ins_srtkenmerk sk
WHERE ikds.ins_kmdeelsrtcontr_key = p_link_key
AND ikds.ins_kmdeelsrtcontr_verwijder IS NULL
AND ikds.ins_kenmerk_key = p_kenmerk_key
AND ikds.ins_kenmerk_key = k.ins_kenmerk_key
AND k.ins_srtkenmerk_key = sk.ins_srtkenmerk_key;
ELSE
SELECT sk.ins_srtkenmerk_kenmerktype,
sk.fac_kenmerkdomein_key,
ikd.ins_kenmerkdeel_waarde
INTO v_kenmerk_type,
v_kenmerkdomein_key,
v_kenmerk_waarde
FROM ins_kenmerkdeel ikd,
ins_kenmerk k,
ins_srtkenmerk sk
WHERE ikd.ins_deel_key = p_link_key
AND ikd.ins_kenmerkdeel_verwijder IS NULL
AND ikd.ins_kenmerk_key = p_kenmerk_key
AND ikd.ins_kenmerk_key = k.ins_kenmerk_key
AND k.ins_srtkenmerk_key = sk.ins_srtkenmerk_key;
END IF;
END CASE;
RETURN goko.get_kenmerkwaarde (v_kenmerk_type,
v_kenmerkdomein_key,
v_kenmerk_waarde);
END;
FUNCTION get_kenmerkwaarde (p_kenmerk_type VARCHAR2,
p_kenmerkdomein_key NUMBER,
p_kenmerk_waarde VARCHAR2)
RETURN VARCHAR2
AS
v_result VARCHAR2 (4000);
BEGIN
IF p_kenmerk_type = 'R' OR p_kenmerk_type = 'S'
THEN
v_result :=
fac.getdomeinwaarde (p_kenmerkdomein_key, p_kenmerk_waarde);
ELSIF p_kenmerk_type = 'D'
THEN
v_result :=
TO_CHAR (fac.safe_to_date (p_kenmerk_waarde, 'dd-mm-yyyy'),
'yyyy-mm-dd');
ELSE
v_result := p_kenmerk_waarde;
END IF;
RETURN v_result;
END;
END;
/
-------------------------------
--- DOMEIN-VIEWS --------------
-------------------------------
-- Voor keuzelijstjes (kenmerk domein)
CREATE OR REPLACE VIEW goko_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 GO Kinderopvang
AND UPPER(sp.prs_srtperslid_omschrijving) NOT IN ('TEAMACCOUNT','INTERNE AFDELING') -- Geen team-accounts en interne afdeling-accounts
AND p.prs_perslid_verwijder IS NULL
ORDER BY p.prs_perslid_naam
;
CREATE OR REPLACE VIEW goko_v_kostenplaatsen
(
PRS_KOSTENPLAATS_KEY,
NR,
OMSCHRIJVING
)
AS
SELECT
kp.prs_kostenplaats_key,
kp.prs_kostenplaats_nr,
kpg.prs_kostenplaatsgrp_oms || ' - ' || kp.prs_kostenplaats_nr || ' ' || kp.prs_kostenplaats_omschrijving
omschrijving
FROM
prs_kostenplaats kp,
prs_kostenplaatsgrp kpg
WHERE
kp.prs_kostenplaatsgrp_key = kpg.prs_kostenplaatsgrp_key
AND kp.prs_kostenplaats_verwijder IS NULL
AND (kp.prs_kostenplaats_eind IS NULL OR kp.prs_kostenplaats_eind > TRUNC(SYSDATE) )
AND kp.prs_kostenplaats_module = 'PRS'
ORDER BY kpg.prs_kostenplaatsgrp_oms || ' - ' || kp.prs_kostenplaats_nr || ' ' || kp.prs_kostenplaats_omschrijving
;
CREATE OR REPLACE VIEW goko_v_it_nummers
(
INS_DEEL_KEY,
INS_DEEL_UPPER
)
AS
SELECT
v.ins_deel_key,
v.ins_deel_upper
FROM ins_v_deel_gegevens v, ins_deel d
WHERE v.ins_discipline_key = 84 -- IT-Nummers
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) ) ;
CREATE OR REPLACE VIEW goko_v_it_nummers_man
(
ICT_NUMMER,
STATUS,
ICT_OBJECT,
NR_INS_DEEL_KEY
)
AS
SELECT
nr.ins_deel_upper,
CASE WHEN d.ins_deel_upper IS NOT NULL THEN 'Gekoppeld' ELSE 'Vrij' END
status,
d.ins_deel_upper,
nr.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 = 84 -- IT-Nummers
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
FROM ins_deel d,
ins_kenmerkdeel kw,
ins_kenmerk k,
ins_deel num
WHERE d.ins_deel_key = kw.ins_deel_key
AND kw.ins_kenmerk_key = k.ins_kenmerk_key
AND k.ins_srtkenmerk_key = 22 -- kenmerksoort domeinview SIM-kaart
AND kw.ins_kenmerkdeel_verwijder IS NULL
AND fac.safe_to_number (kw.ins_kenmerkdeel_waarde) =
num.ins_deel_key) d
WHERE
nr.ins_deel_upper = d.nummer_gekoppeld(+) ;
-- Lijst van Locatieleiders (tbv domeinview)
CREATE OR REPLACE VIEW goko_v_personenlijst_leider
(
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 || ' (' || sp.prs_srtperslid_omschrijving || ')'
ELSE p.prs_perslid_voornaam || ' ' || p.prs_perslid_tussenvoegsel || ' ' || p.prs_perslid_naam || ' (' || 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
WHERE
p.prs_afdeling_key = a.prs_afdeling_key
AND a.prs_bedrijf_key = b.prs_bedrijf_key
AND b.prs_bedrijf_key = 21 -- bedrijfs_key GOKO
AND p.prs_srtperslid_key = sp.prs_srtperslid_key
AND UPPER(sp.prs_srtperslid_omschrijving) = 'LOCATIELEIDER'
AND p.prs_perslid_verwijder IS NULL
ORDER BY p.prs_perslid_naam
;
-- Lijst van Waarnemers (tbv domeinview)
CREATE OR REPLACE VIEW goko_v_personenlijst_waarn
(
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 || ' (Waarnemer - ' || sp.prs_srtperslid_omschrijving || ')'
ELSE p.prs_perslid_voornaam || ' ' || p.prs_perslid_tussenvoegsel || ' ' || p.prs_perslid_naam || ' (Waarnemer - ' || 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 = 1009 -- kenmerk waarnemer (vinkbox)
AND kl.prs_kenmerklink_waarde = '1' AND kl.prs_kenmerklink_verwijder IS NULL
AND p.prs_perslid_verwijder IS NULL
ORDER BY p.prs_perslid_naam
;
-- Lijst van Locatieleiders/Waarnemers en de locaties waar men verantwoordelijk voor is (tbv Personen-import)
CREATE OR REPLACE VIEW goko_v_locatiemanagers
(
PRS_PERSLID_KEY,
ALG_LOCATIE_KEY,
LOCATIEMANAGER,
LOCATIE,
WAARNEMER,
PRS_PERSLID_VERWIJDER
)
AS
SELECT p.prs_perslid_key,
l.alg_locatie_key,
p.prs_perslid_naam || ' (' || p.prs_perslid_voornaam || ' ' || p.prs_perslid_tussenvoegsel || ') - ' || sp.prs_srtperslid_omschrijving
locatiemanager,
l.alg_locatie_code || ' - ' || l.alg_locatie_omschrijving
locatie,
CASE WHEN ok.alg_kenmerk_key = 1003 THEN 'ja' ELSE 'nee' END
waarnemer,
p.prs_perslid_verwijder
FROM prs_perslid p, prs_srtperslid sp, alg_onrgoedkenmerk ok, alg_locatie l
WHERE fac.safe_to_number(ok.alg_onrgoedkenmerk_waarde) = p.prs_perslid_key
AND ok.alg_kenmerk_key IN (1002, 1003) -- locatieleider en waarnemer
AND ok.alg_onrgoedkenmerk_verwijder IS NULL
AND ok.alg_onrgoed_niveau = 'L' AND ok.alg_onrgoed_key = l.alg_locatie_key
AND l.alg_locatie_verwijder IS NULL
AND (TRUNC(l.alg_locatie_vervaldatum) > TRUNC(sysdate) OR l.alg_locatie_vervaldatum IS NULL )
AND p.prs_srtperslid_key = sp.prs_srtperslid_key
GROUP BY p.prs_perslid_key, l.alg_locatie_key,
p.prs_perslid_naam || ' (' || p.prs_perslid_voornaam || ' ' || p.prs_perslid_tussenvoegsel || ') - ' || sp.prs_srtperslid_omschrijving,
l.alg_locatie_code || ' - ' || l.alg_locatie_omschrijving,
CASE WHEN ok.alg_kenmerk_key = 1003 THEN 'ja' ELSE 'nee' END,
p.prs_perslid_verwijder ;
-- Lijst van Locatiemanagers + Waarnemers en de Werkplekkoppeling die ze in hun personenkaart hebben (tbv Personen-import)
CREATE OR REPLACE VIEW goko_v_locatiemanagers_wp
(
PRS_PERSLID_KEY,
ALG_LOCATIE_KEY,
NAAM,
LOCATIE_WP
)
AS
SELECT wp.prs_perslid_key,
onr.alg_locatie_key,
p.prs_perslid_naam_friendly,
l.alg_locatie_code || ' - ' || l.alg_locatie_omschrijving
locatie
FROM (
SELECT prs_perslid_key
FROM (SELECT *
FROM goko_v_personenlijst_leider
UNION
SELECT *
FROM goko_v_personenlijst_waarn) x
GROUP BY x.prs_perslid_key
) v,
prs_v_perslid_fullnames p, prs_perslidwerkplek wp, prs_werkplek w, alg_ruimte r, alg_v_onrgoed_boom onr, alg_locatie l
WHERE v.prs_perslid_key = p.prs_perslid_key
AND p.prs_perslid_key = wp.prs_perslid_key
AND wp.prs_werkplek_key = w.prs_werkplek_key
AND w.prs_alg_ruimte_key = r.alg_ruimte_key
AND r.alg_ruimte_key = onr.alg_ruimte_key
AND onr.alg_locatie_key = l.alg_locatie_key
ORDER BY wp.prs_perslid_key
;
-- Lijst van Locaties en de kostenplaaten die daaronder vallen (opvangsoorten die men aanbied)
CREATE OR REPLACE VIEW goko_v_locatie_kp
(
ALG_LOCATIE_KEY,
LOCATIE,
PRS_KOSTENPLAATS_KEY,
PRS_KOSTENPLAATS_NR,
PRS_KOSTENPLAATS_OMSCHRIJVING
)
AS
SELECT l.alg_locatie_key, l.alg_locatie_code || ' - ' || l.alg_locatie_omschrijving locatie, kw.alg_onrgoedkenmerk_waarde prs_kosttenplaats_key, kp.nr, kp.omschrijving
FROM alg_locatie l, alg_onrgoedkenmerk kw, goko_v_kostenplaatsen kp
WHERE l.alg_locatie_key = kw.alg_onrgoed_key
AND kw.alg_onrgoed_niveau = 'L'
AND kw.alg_onrgoedkenmerk_verwijder IS NULL
AND kw.alg_kenmerk_key = 1010 -- kostenplaats KDV
AND l.alg_locatie_verwijder IS NULL
AND (TRUNC(l.alg_locatie_vervaldatum) > TRUNC(sysdate) OR l.alg_locatie_vervaldatum IS NULL )
AND fac.safe_to_number(kw.alg_onrgoedkenmerk_waarde) = kp.prs_kostenplaats_key
UNION
SELECT l.alg_locatie_key, l.alg_locatie_code || ' - ' || l.alg_locatie_omschrijving locatie, kw.alg_onrgoedkenmerk_waarde prs_kosttenplaats_key, kp.nr, kp.omschrijving
FROM alg_locatie l, alg_onrgoedkenmerk kw, goko_v_kostenplaatsen kp
WHERE l.alg_locatie_key = kw.alg_onrgoed_key
AND kw.alg_onrgoed_niveau = 'L'
AND kw.alg_onrgoedkenmerk_verwijder IS NULL
AND kw.alg_kenmerk_key = 1012 -- kostenplaats BSO
AND l.alg_locatie_verwijder IS NULL
AND (TRUNC(l.alg_locatie_vervaldatum) > TRUNC(sysdate) OR l.alg_locatie_vervaldatum IS NULL )
AND fac.safe_to_number(kw.alg_onrgoedkenmerk_waarde) = kp.prs_kostenplaats_key
UNION
SELECT l.alg_locatie_key, l.alg_locatie_code || ' - ' || l.alg_locatie_omschrijving locatie, kw.alg_onrgoedkenmerk_waarde prs_kosttenplaats_key, kp.nr, kp.omschrijving
FROM alg_locatie l, alg_onrgoedkenmerk kw, goko_v_kostenplaatsen kp
WHERE l.alg_locatie_key = kw.alg_onrgoed_key
AND kw.alg_onrgoed_niveau = 'L'
AND kw.alg_onrgoedkenmerk_verwijder IS NULL
AND kw.alg_kenmerk_key = 1014 -- kostenplaats PSZ
AND l.alg_locatie_verwijder IS NULL
AND (TRUNC(l.alg_locatie_vervaldatum) > TRUNC(sysdate) OR l.alg_locatie_vervaldatum IS NULL )
AND fac.safe_to_number(kw.alg_onrgoedkenmerk_waarde) = kp.prs_kostenplaats_key
UNION
SELECT l.alg_locatie_key, l.alg_locatie_code || ' - ' || l.alg_locatie_omschrijving locatie, kw.alg_onrgoedkenmerk_waarde prs_kosttenplaats_key, kp.nr, kp.omschrijving
FROM alg_locatie l, alg_onrgoedkenmerk kw, goko_v_kostenplaatsen kp
WHERE l.alg_locatie_key = kw.alg_onrgoed_key
AND kw.alg_onrgoed_niveau = 'L'
AND kw.alg_onrgoedkenmerk_verwijder IS NULL
AND kw.alg_kenmerk_key = 1017 -- kostenplaats TSO
AND l.alg_locatie_verwijder IS NULL
AND (TRUNC(l.alg_locatie_vervaldatum) > TRUNC(sysdate) OR l.alg_locatie_vervaldatum IS NULL )
AND fac.safe_to_number(kw.alg_onrgoedkenmerk_waarde) = kp.prs_kostenplaats_key
UNION
SELECT l.alg_locatie_key, l.alg_locatie_code || ' - ' || l.alg_locatie_omschrijving locatie, kw.alg_onrgoedkenmerk_waarde prs_kosttenplaats_key, kp.nr, kp.omschrijving
FROM alg_locatie l, alg_onrgoedkenmerk kw, goko_v_kostenplaatsen kp
WHERE l.alg_locatie_key = kw.alg_onrgoed_key
AND kw.alg_onrgoed_niveau = 'L'
AND kw.alg_onrgoedkenmerk_verwijder IS NULL
AND kw.alg_kenmerk_key = 1016 -- 2e kostenplaats PSZ
AND l.alg_locatie_verwijder IS NULL
AND (TRUNC(l.alg_locatie_vervaldatum) > TRUNC(sysdate) OR l.alg_locatie_vervaldatum IS NULL )
AND fac.safe_to_number(kw.alg_onrgoedkenmerk_waarde) = kp.prs_kostenplaats_key ;
CREATE OR REPLACE PROCEDURE goko_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;
-- overige variabelen
v_prs_afdeling_key NUMBER(10);
c_prs_afdeling_key NUMBER(10) := 22 ; -- Fallback-afdeling 'OVERIG'
c_prs_afdeling_key_leid NUMBER(10) := 21 ; -- Afdeling OPVANG bestemd voor de Locatieleiders
v_prs_kostenplaats_key NUMBER(10);
v_prs_afdeling_upper VARCHAR2(10);
v_alg_locatie_key NUMBER(10);
v_alg_locatie_code VARCHAR2(10);
v_alg_gebouw_key NUMBER(10);
v_alg_gebouw_code VARCHAR2(12);
v_alg_verdieping_key NUMBER(10);
v_alg_verdieping_volgnr NUMBER(3);
v_alg_ruimte_key NUMBER(10);
v_alg_ruimte_nr VARCHAR2(20);
CURSOR c_email
IS
SELECT fac_imp_file_index, p.prs_perslid_key, p.prs_perslid_email
FROM fac_imp_perslid i, prs_perslid p
WHERE fac_import_key = p_import_key
AND i.prs_perslid_nr = p.prs_perslid_nr AND p.prs_perslid_verwijder IS NULL
AND p.prs_perslid_email IS NOT NULL
ORDER BY 1 ;
-- Facilitor is leading qua Functies - Voor alle bestaande werknemers de facilitor-functie overnemen en voor nieuwe medewerkers de functie uit beaufort initieel pakken..
CURSOR c_functie
IS
SELECT fac_imp_file_index, p.prs_perslid_key, sp.prs_srtperslid_omschrijving
FROM fac_imp_perslid i, prs_perslid p, prs_srtperslid sp
WHERE fac_import_key = p_import_key
AND i.prs_perslid_nr = p.prs_perslid_nr AND p.prs_perslid_verwijder IS NULL
AND p.prs_srtperslid_key = sp.prs_srtperslid_key
AND p.prs_srtperslid_key IS NOT NULL
UNION ALL
SELECT fac_imp_file_index, -1 prs_perslid_key, COALESCE(i.prs_kenmerk1,'Onbekend') prs_srtperslid_omschrijving
FROM fac_imp_perslid i
WHERE fac_import_key = p_import_key
AND NOT EXISTS (SELECT 1 FROM prs_perslid p WHERE p.prs_perslid_nr = i.prs_perslid_nr AND p.prs_perslid_verwijder IS NULL) ;
CURSOR c_login
IS
SELECT fac_imp_file_index, p.prs_perslid_key, p.prs_perslid_oslogin
FROM fac_imp_perslid i, prs_perslid p
WHERE fac_import_key = p_import_key
AND i.prs_perslid_nr = p.prs_perslid_nr AND p.prs_perslid_verwijder IS NULL
AND p.prs_perslid_oslogin IS NOT NULL
ORDER BY 1 ;
CURSOR c_afd
IS
SELECT fac_imp_file_index, prs_afdeling_naam, prs_kenmerk5, prs_srtperslid_omschrijving
FROM fac_imp_perslid
WHERE fac_import_key = p_import_key ;
CURSOR c_loc
IS
SELECT fac_imp_file_index, prs_kenmerk5
FROM fac_imp_perslid
WHERE fac_import_key = p_import_key ;
BEGIN
-- 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;
-- Het aangeleverde bestand heeft aanhalingstekens om de invoervelden..
-- UPDATE fac_imp_file
-- SET fac_imp_file_line = REPLACE (fac_imp_file_line, '"', '')
-- WHERE fac_import_key = p_import_key;
v_errorhint := 'Generieke update';
-- De sequence array staat beschreven in PRS_PAC.SRC bij de prs.import_perslid procedure
-- Voor GOKO geldt: functie in Facilitor gaan we leading maken. bij import-inleesactie vullen met personeelsnr en daarna overschrijven met het de functie uit Facilitor of bij nieuwe medewerker met <onbekend>
---
prs.import_perslid (
p_import_key,
'0;0;0;0;0;0;5;8;7;6;'
|| '0;0;0;0;0;0;0;0;0;5;'
|| '5;0;0;0;0;0;9;1;2;3;'
|| '4;10;11;0;0;0;0;0;0;0;'
|| '0;0;0;0;0;0',
'Regio;Locatie;Inzet werksoort;Kostenplaats loonverd;Persoonsnr;Roepnaam;Voorvoeg;Persoonsnaam;Oms functie;Uitdienst dat;Email werk%');
-- 1 2 3 4 5 6 7 8 9 10 11
-- DEF. BESTAND BIJ GOKO: Regio;Locatie;Inzet werksoort;Kostenplaats loonverd.;Persoonsnr.;Roepnaam;Voorvoeg.;Persoonsnaam;Oms functie;Uitdienst dat.;Email werk
v_errorhint := 'Uit dienst datum goed vullen';
UPDATE fac_imp_perslid
SET prs_kenmerk6 = DECODE (fac.safe_to_date(prs_kenmerk6,'dd-mm-yyyy'), NULL, NULL, fac.safe_to_date(prs_kenmerk6,'dd-mm-yyyy')) WHERE prs_kenmerk6 IS NOT NULL;
v_errorhint := 'De FUNCTIE uit Facilitor is leading';
FOR rec IN c_functie
LOOP
BEGIN
UPDATE fac_imp_perslid
SET prs_srtperslid_omschrijving = rec.prs_srtperslid_omschrijving
WHERE fac_imp_file_index = rec.fac_imp_file_index ;
END;
END LOOP;
v_errorhint := 'Het EMAIL-adres uit Facilitor is leading';
-- Facilitor is leading qua emailadressen.
FOR rec IN c_email
LOOP
BEGIN
UPDATE fac_imp_perslid
SET prs_perslid_email = rec.prs_perslid_email
WHERE fac_imp_file_index = rec.fac_imp_file_index ;
END;
END LOOP;
v_errorhint := 'Emailadres Go-Kinderopvang vullen';
-- De prive-adressen die uit Beaufort meekomen verwijderen - alleen de zakelijke emailadressen nemen we over naar kenmerkveld Email (werk)
UPDATE fac_imp_perslid
SET prs_kenmerk7 = NULL
WHERE prs_kenmerk7 IS NOT NULL AND INSTR(UPPER(prs_kenmerk7),'@GO-KINDEROPVANG.NL')=0 ;
FOR rec IN c_login
LOOP
BEGIN
v_errorhint := 'Bestaande OSLOGIN uit Facilitor handhaven';
UPDATE fac_imp_perslid
SET prs_perslid_oslogin = rec.prs_perslid_oslogin
WHERE fac_imp_file_index = rec.fac_imp_file_index ;
END;
END LOOP;
v_errorhint := 'Login afleiden van emailadres (voor locatieleiders)';
-- Voor de locatieleiders de oslogin vullen in geval nog niet gevuld in Facilitor (vanuit vorige cursor)
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 '%GO-KINDEROPVANG.NL'
AND prs_perslid_email IS NOT NULL
AND UPPER(prs_srtperslid_omschrijving) = 'LOCATIELEIDER'
AND prs_perslid_oslogin IS NULL
AND LENGTH((SUBSTR (prs_perslid_email,
0,
INSTR (prs_perslid_email, '@') - 1))) <=30 ;
v_errorhint := 'Afdeling bepalen en vullen';
-- Afdeling bepalen waar persoon onder komt te vallen. LET OP - Deze is voor GOKO niet altijd gevuld!? Oplossen door eerst te vullen met PERSONEELSNR en in Kenmerk5 de kostenplaats/afdeling
-- Voor locatieleiders geldt dat deze altijd op organisatie 'OPVANG' moeten komen (onder dit organisatieonderdeel zitten op niveau 2 de team/afdelingen/kostenplaatsen)
FOR rec IN c_afd
LOOP
BEGIN
v_errorhint := 'Persoon aan Afdeling koppelen';
-- Als locatieleider dan afdeling altijd OPVANG (c_prs_afdeling_key_leid)
IF UPPER(rec.prs_srtperslid_omschrijving) = 'LOCATIELEIDER'
THEN
UPDATE fac_imp_perslid
SET prs_afdeling_naam = (SELECT prs_afdeling_upper FROM prs_afdeling WHERE prs_afdeling_key = c_prs_afdeling_key_leid)
WHERE fac_imp_file_index = rec.fac_imp_file_index ;
ELSE
IF rec.prs_kenmerk5 IS NULL
THEN
v_prs_afdeling_key := NULL ;
ELSE
SELECT min(prs_afdeling_key)
INTO v_prs_afdeling_key
FROM prs_v_afdeling
WHERE prs_afdeling_upper = UPPER(rec.prs_kenmerk5)
AND prs_bedrijf_key = 21 -- bedrijf GOKO
AND prs_afdeling_verwijder IS NULL ;
END IF;
-- Als afdeling uit beaufort (nog) niet bekend is in Facilitor dan op afdeling OVERIG zetten (c_prs_afdeling_key)
IF v_prs_afdeling_key IS NULL THEN
UPDATE fac_imp_perslid
SET prs_afdeling_naam = (SELECT prs_afdeling_upper FROM prs_afdeling WHERE prs_afdeling_key = c_prs_afdeling_key)
WHERE fac_imp_file_index = rec.fac_imp_file_index ;
ELSE
UPDATE fac_imp_perslid
SET prs_afdeling_naam = rec.prs_kenmerk5
WHERE fac_imp_file_index = rec.fac_imp_file_index ;
END IF;
END IF;
END;
END LOOP;
v_errorhint := 'Locatie bepalen en vullen';
-- Op basis van kostenplaats gaan we kijken of we de locatie en werkplekkoppeling kunnen maken
FOR rec IN c_loc
LOOP
BEGIN
v_errorhint := 'Persoon aan Locatie-Ruimte koppelen adhv de kostenplaats - ' || TO_CHAR(rec.fac_imp_file_index) ;
v_alg_locatie_key := NULL;
v_prs_kostenplaats_key := NULL;
v_prs_afdeling_upper := NULL;
v_alg_gebouw_key := NULL;
v_alg_verdieping_key := NULL;
v_alg_ruimte_key := NULL;
IF rec.prs_kenmerk5 IS NULL
THEN
UPDATE fac_imp_perslid
SET prs_kenmerk20 = 'Geen werkplekkoppeling'
WHERE fac_imp_file_index = rec.fac_imp_file_index ;
ELSE
SELECT MAX(l.alg_locatie_key), MAX(kp.prs_kostenplaats_key)
INTO v_alg_locatie_key, v_prs_kostenplaats_key
FROM alg_locatie l,
alg_onrgoedkenmerk kk,
alg_kenmerk k,
prs_kostenplaats kp,
prs_afdeling a
WHERE l.alg_locatie_key = kk.alg_onrgoed_key
AND kk.alg_onrgoed_niveau = 'L'
AND kk.alg_kenmerk_key = k.alg_kenmerk_key
AND k.alg_kenmerk_key IN (1010, 1012, 1014, 1016, 1017) -- kenmerk_keys voor de kostenplaatsen KDV, BSO, PSZ, TSO en PSZ-2e
AND fac.safe_to_number (kk.alg_onrgoedkenmerk_waarde) = kp.prs_kostenplaats_key
AND kp.prs_kostenplaats_key = a.prs_kostenplaats_key
AND kp.prs_kostenplaats_verwijder IS NULL AND a.prs_afdeling_verwijder IS NULL
AND kp.prs_kostenplaats_upper = UPPER(rec.prs_kenmerk5) ;
END IF;
IF v_alg_locatie_key IS NOT NULL THEN
-- Locatie_code ophalen
SELECT alg_locatie_code
INTO v_alg_locatie_code
FROM alg_locatie
WHERE alg_locatie_key = v_alg_locatie_key ;
-- Gebouw_key ophalen
SELECT min(alg_gebouw_key)
INTO v_alg_gebouw_key
FROM alg_gebouw
WHERE alg_locatie_key = v_alg_locatie_key
AND alg_gebouw_verwijder IS NULL
AND (TRUNC(alg_gebouw_vervaldatum) > TRUNC(sysdate) OR alg_gebouw_vervaldatum IS NULL ) ;
-- Om bij update dit kenmerkveld weg te kunnen schrijven naar kenmerkveld 'Default standplaats'
UPDATE fac_imp_perslid
SET prs_kenmerk20 = (SELECT UPPER(alg_locatie_code) || ' - ' || alg_locatie_omschrijving FROM alg_locatie WHERE alg_locatie_key = v_alg_locatie_key)
WHERE fac_imp_file_index = rec.fac_imp_file_index ;
IF v_alg_gebouw_key IS NOT NULL THEN
-- Gebouw_code ophalen
SELECT alg_gebouw_code
INTO v_alg_gebouw_code
FROM alg_gebouw
WHERE alg_gebouw_key = v_alg_gebouw_key ;
-- Verdiepings_key ophalen
SELECT min(alg_verdieping_key)
INTO v_alg_verdieping_key
FROM alg_verdieping
WHERE alg_gebouw_key = v_alg_gebouw_key
AND alg_verdieping_verwijder IS NULL ;
END IF;
IF v_alg_verdieping_key IS NOT NULL THEN
-- Verdieping_volgnr ophalen
SELECT alg_verdieping_volgnr
INTO v_alg_verdieping_volgnr
FROM alg_verdieping
WHERE alg_verdieping_key = v_alg_verdieping_key ;
-- Ruimte_key ophalen
SELECT min(alg_ruimte_key)
INTO v_alg_ruimte_key
FROM alg_ruimte
WHERE alg_verdieping_key = v_alg_verdieping_key
AND alg_ruimte_verwijder IS NULL ;
END IF;
IF v_alg_ruimte_key IS NOT NULL THEN
-- Ruimte_nr ophalen
SELECT alg_ruimte_nr
INTO v_alg_ruimte_nr
FROM alg_ruimte
WHERE alg_ruimte_key = v_alg_ruimte_key ;
-- Vullen vastgoed-keten in import-tabel
UPDATE fac_imp_perslid
SET alg_locatie_code = v_alg_locatie_code,
alg_gebouw_code = v_alg_gebouw_code,
alg_verdieping_volgnr = v_alg_verdieping_volgnr,
alg_ruimte_nr = v_alg_ruimte_nr
WHERE fac_imp_file_index = rec.fac_imp_file_index ;
END IF;
ELSE
-- Geen Locatie/Vastgoedketen kunnen vinden
UPDATE fac_imp_perslid
SET prs_kenmerk20 = 'Geen werkplekkoppeling'
WHERE fac_imp_file_index = rec.fac_imp_file_index ;
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 goko_import_perslid;
/
CREATE OR REPLACE PROCEDURE goko_update_perslid (p_import_key IN NUMBER)
IS
-- Alle personen verwijderen die niet meer in het import bestand voorkomen
-- Personen in de juiste autorisatiegroep zetten.
-- Match bij GO KINDEROPVANG is Personeelsnummer.
-- Geen acties tenzij het aantal records in de importtabel meer dan 100 medewerkers betreft.
CURSOR c_del
IS
SELECT p.prs_perslid_key, p.prs_perslid_naam, p.prs_perslid_email, p.prs_perslid_nr, sp.prs_srtperslid_omschrijving
FROM prs_perslid p, prs_srtperslid sp, prs_v_afdeling_boom a
WHERE p.prs_perslid_verwijder IS NULL
AND p.prs_afdeling_key = a.prs_afdeling_key AND a.prs_bedrijf_key = 21 -- GO Kinderopvang
AND p.prs_srtperslid_key = sp.prs_srtperslid_key AND sp.prs_srtperslid_upper NOT IN ('TEAMACCOUNT','INTERNE AFDELING','UITZENDKRACHT')
AND p.prs_perslid_key NOT IN (SELECT prs_perslid_key FROM goko_v_personenlijst_waarn) -- Tijdelijke waarnemers worden niet door import verwijderd. Regelt men handmatig
AND NOT EXISTS (SELECT 1
FROM fac_imp_perslid
WHERE p.prs_perslid_nr = prs_perslid_nr
)
ORDER BY 1 ;
CURSOR c_flex -- Voor updaten van de algemene flex-kenmerkvelden op actuele medewerkers
IS
SELECT p.prs_perslid_key, i.prs_kenmerk1, i.prs_kenmerk2, i.prs_kenmerk3, i.prs_kenmerk5, i.prs_kenmerk6, i.prs_kenmerk7, i.prs_kenmerk20
FROM prs_v_aanwezigperslid p, fac_imp_perslid i
WHERE p.prs_perslid_key = i.prs_perslid_key
ORDER BY 1;
CURSOR c_loc -- Voor updaten van locatieleiders & Waarnemers (in eigen autorisatiegroep + profiel toevoegen)
IS
SELECT v.prs_perslid_key
FROM goko_v_locatiemanagers v
GROUP BY v.prs_perslid_key ;
CURSOR c_loc_wp -- Voor updaten van locatieleiders (werkplek-koppelingen)
IS
SELECT v.prs_perslid_key, v.alg_locatie_key, v.actie
FROM
(
SELECT man.prs_perslid_key, man.alg_locatie_key, 'toevoegen' actie
FROM goko_v_locatiemanagers man
WHERE NOT EXISTS
(SELECT *
FROM goko_v_locatiemanagers_wp wp
WHERE wp.alg_locatie_key = man.alg_locatie_key
AND wp.prs_perslid_key = man.prs_perslid_key)
UNION
SELECT wp.prs_perslid_key, wp.alg_locatie_key, 'verwijderen' actie
FROM goko_v_locatiemanagers_wp wp
WHERE NOT EXISTS
(SELECT *
FROM goko_v_locatiemanagers man
WHERE man.alg_locatie_key = wp.alg_locatie_key
AND man.prs_perslid_key = wp.prs_perslid_key)
UNION
SELECT wp.prs_perslid_key, wp.alg_locatie_key, 'ok' actie
FROM goko_v_locatiemanagers_wp wp, goko_v_locatiemanagers man
WHERE man.alg_locatie_key = wp.alg_locatie_key
AND man.prs_perslid_key = wp.prs_perslid_key
) v
ORDER BY 1,2 ;
CURSOR c_loc_kp -- Voor updaten van locatieleiders (budgethouder kostenplaatsen en mandaten op kostenplaatsen)
IS
SELECT v_prs.prs_perslid_key,
v_prs.alg_locatie_key,
v_kp.prs_kostenplaats_key,
v_prs.waarnemer
FROM goko_v_locatiemanagers v_prs, goko_v_locatie_kp v_kp
WHERE v_prs.alg_locatie_key = v_kp.alg_locatie_key
ORDER BY 1,2,3 ;
CURSOR c_loc_kp_del -- Voor deleten van mandaten die niet meer van toepassing zijn
IS
SELECT pk.prs_perslidkostenplaats_key
FROM prs_perslidkostenplaats pk
WHERE NOT EXISTS (SELECT v_prs.prs_perslid_key, v_kp.prs_kostenplaats_key
FROM goko_v_locatiemanagers v_prs, goko_v_locatie_kp v_kp
WHERE v_prs.alg_locatie_key = v_kp.alg_locatie_key
AND v_prs.prs_perslid_key = pk.prs_perslid_key AND v_kp.prs_kostenplaats_key = pk.prs_kostenplaats_key
GROUP BY v_prs.prs_perslid_key, v_kp.prs_kostenplaats_key
)
AND pk.prs_perslid_key IN (SELECT prs_perslid_key
FROM goko_v_locatiemanagers
GROUP BY prs_perslid_key) ;
v_count NUMBER;
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_errormsg VARCHAR2 (400);
v_errorhint VARCHAR2 (400);
v_fac_gebruikersgroep_key NUMBER(10);
v_alg_ruimte_key NUMBER;
v_prs_werkplek_key NUMBER;
v_waarnemer_overrule VARCHAR2 (12);
v_prs_perslid_key NUMBER(10); -- budgethouder op kp
v_prs_perslidkostenplaats_key NUMBER(10) ;
v_fac_profiel_key NUMBER(10);
BEGIN
v_errorhint := 'Niet genoeg personen in bestand, import afgebroken';
SELECT COUNT ( * ) INTO v_count FROM fac_imp_perslid;
IF v_count >= 100
THEN
v_errorhint := 'Verwerken persoonsgegevens';
-- Geldig importbestand wat betreft aantal personen
COMMIT;
-- generic update
-- 'EMAIL' betekent dat op basis van Email wordt gematched. 'NR' op basis van personeelsnummer.
-- 'NULL' betekent altijd geen werkplekken verwijderen
-- Voor GOKO / Beaufort geldt:
---- Op NR gaan matchen.
---- Werkplekkoppeling <20> WEL/NIET standaard verwijderen <20> HOE/WAT beste in te regelen? UITZOEKEN/TESTEN (denk verwijderen beste is<69>.? OF alleen maar voor die personen die nu andere WERKPLEK_LOCATIE_KEY hebben ?)
prs.update_perslid (p_import_key, 'NR', 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);
END;
END LOOP;
FOR rec IN c_flex
LOOP
BEGIN
v_errorhint:='Fout bijwerken kenmerkveld Regio';
PRS.upsertkenmerk (1001, rec.prs_perslid_key, rec.prs_kenmerk2);
v_errorhint:='Fout bijwerken kenmerkveld Locatie';
PRS.upsertkenmerk (1002, rec.prs_perslid_key, rec.prs_kenmerk3);
v_errorhint:='Fout bijwerken kenmerkveld Kostenplaats';
PRS.upsertkenmerk (1004, rec.prs_perslid_key, rec.prs_kenmerk5);
v_errorhint:='Fout bijwerken kenmerkveld Datum uit dienst';
PRS.upsertkenmerk (1005, rec.prs_perslid_key, rec.prs_kenmerk6);
v_errorhint:='Fout bijwerken kenmerkveld Standplaats Facilitor';
PRS.upsertkenmerk (1006, rec.prs_perslid_key, rec.prs_kenmerk20);
v_errorhint:='Fout bijwerken kenmerkveld Email (werk)';
PRS.upsertkenmerk (1007, rec.prs_perslid_key, rec.prs_kenmerk7);
v_errorhint:='Fout bijwerken kenmerkveld Functie Beaufort';
PRS.upsertkenmerk (1040, rec.prs_perslid_key, rec.prs_kenmerk1);
END;
END LOOP;
FOR rec IN c_loc
LOOP
BEGIN
-- Alle locatieleiders toevoegen aan autorisatiegroep 'Locatieleiders'
v_errorhint:='Fout bijwerken locatieleiders in eigen autorisatiegroep';
BEGIN
SELECT fac_gebruikersgroep_key
INTO v_fac_gebruikersgroep_key
FROM fac_gebruikersgroep
WHERE fac_groep_key = 21 -- Groep 'Locatieleiders en Waarnemers'
AND prs_perslid_key = rec.prs_perslid_key ;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
INSERT INTO fac_gebruikersgroep (fac_groep_key,
prs_perslid_key)
VALUES (21, rec.prs_perslid_key);
END;
-- Alle locatieleiders juiste profiel meegeven
v_errorhint:='Fout bijwerken profiel locatieleiders';
SELECT fac_profiel_key
INTO v_fac_profiel_key
FROM prs_perslid
WHERE prs_perslid_key = rec.prs_perslid_key ;
IF v_fac_profiel_key IS NULL
THEN
UPDATE prs_perslid
SET fac_profiel_key = 1
WHERE prs_perslid_key = rec.prs_perslid_key ;
BEGIN fac.trackaction('PRSUPD', rec.prs_perslid_key, 3, NULL, 'Profiel: (leeg) --> Locatieleider-profiel (<5000)'); END;
END IF;
END;
END LOOP;
FOR rec IN c_loc_wp
LOOP
BEGIN
-- Werkplekkoppelingen op basis van de locaties waar men locatieleider van is
v_errorhint:='Fout bijwerken werkplekkoppelingen locatieleider';
IF rec.actie = 'toevoegen'
THEN
v_errorhint:='Fout bij toevoegen werkplekken voor Locatieleider - perslid_key:' || TO_CHAR(rec.prs_perslid_key) || ' , loc-key: ' || TO_CHAR(rec.alg_locatie_key);
BEGIN
SELECT MIN(r.alg_ruimte_key)
INTO v_alg_ruimte_key
FROM alg_ruimte r, alg_verdieping v, alg_gebouw g
WHERE r.alg_verdieping_key = v.alg_verdieping_key AND v.alg_gebouw_key = g.alg_gebouw_key
AND r.alg_ruimte_verwijder IS NULL AND v.alg_verdieping_verwijder IS NULL AND g.alg_gebouw_verwijder IS NULL
AND g.alg_locatie_key = rec.alg_locatie_key ;
IF v_alg_ruimte_key IS NOT NULL
THEN
-- PROCEDURE movetoruimte (p_prs_key IN NUMBER, p_ruimte_key IN NUMBER, p_alg_type IN VARCHAR2, p_virtual IN NUMBER DEFAULT 0);
BEGIN
PRS.movetoruimte (rec.prs_perslid_key,
v_alg_ruimte_key,
'L',
1);
END;
END IF;
END;
END IF;
IF rec.actie = 'verwijderen'
THEN
v_errorhint:='Fout bij verwijderen werkplekken';
SELECT prs_werkplek_key
INTO v_prs_werkplek_key
FROM prs_v_perslidwerkplek_gegevens pwpg, alg_locatie l
WHERE pwpg.alg_locatie_key = l.alg_locatie_key
AND l.alg_locatie_key = rec.alg_locatie_key
AND pwpg.prs_perslid_key = rec.prs_perslid_key
GROUP BY prs_werkplek_key ;
DELETE prs_werkplek WHERE prs_werkplek_key = v_prs_werkplek_key;
END IF;
END;
END LOOP;
FOR rec IN c_loc_kp
LOOP
BEGIN
-- kostenplaatsen waar men verantwoordelijk voor is - Budgethouder en Mandaten
v_errorhint:='Fout bijwerken kostenplaatsen en mandaten waar men verantwoordelijk voor is';
v_waarnemer_overrule := 'nee' ;
-- Eerst budgethouder op kostenplaatsen updaten waar nodig
---- Indien het geen waarnemer betreft gaan we eerst checken of er een bovenliggende waarnemer op die locatie is. Deze wordt/is dan namelijk de budgethouder voor die kostenplaats
IF rec.waarnemer = 'nee'
THEN
BEGIN
-- Is er op die locatie een waarnemer (die afwijkt van locatieleider) ingevuld?
SELECT waarnemer
INTO v_waarnemer_overrule
FROM goko_v_locatiemanagers
WHERE alg_locatie_key = rec.alg_locatie_key
AND waarnemer = 'ja'
AND prs_perslid_key <> rec.prs_perslid_key ;
EXCEPTION
WHEN NO_DATA_FOUND
THEN v_waarnemer_overrule := 'nee' ;
END;
END IF;
-- Dan kunnen we nu de budgethouder op kostenplaats updaten indien nodig
IF v_waarnemer_overrule = 'nee'
THEN
-- check eers of er nu afwijkende budgethouder op KP zit. Zo ja updaten
SELECT prs_perslid_key
INTO v_prs_perslid_key
FROM prs_kostenplaats
WHERE prs_kostenplaats_key = rec.prs_kostenplaats_key
AND prs_kostenplaats_verwijder IS NULL
AND (prs_kostenplaats_eind IS NULL OR prs_kostenplaats_eind > TRUNC(SYSDATE) )
AND prs_kostenplaats_module = 'PRS' ;
IF v_prs_perslid_key IS NULL OR v_prs_perslid_key <> rec.prs_perslid_key
THEN
UPDATE prs_kostenplaats
SET prs_perslid_key = rec.prs_perslid_key
WHERE prs_kostenplaats_key = rec.prs_kostenplaats_key ;
-- Geen fac_tracking nodig. Mutatie wordt namelijk al via trigger met aud.auditaction weggeschreven
END IF;
END IF;
-- Tot slot alle mandaten goed inregelen
SELECT prs_perslidkostenplaats_key
INTO v_prs_perslidkostenplaats_key
FROM prs_perslidkostenplaats
WHERE prs_perslid_key = rec.prs_perslid_key
AND prs_kostenplaats_key = rec.prs_kostenplaats_key ;
EXCEPTION
WHEN NO_DATA_FOUND
THEN v_prs_perslidkostenplaats_key := NULL;
IF v_prs_perslidkostenplaats_key IS NULL
THEN
INSERT INTO prs_perslidkostenplaats (prs_perslidkostenplaats_boeken,
prs_perslidkostenplaats_inzage,
prs_perslid_key,
prs_kostenplaats_key)
VALUES (1,
1,
rec.prs_perslid_key,
rec.prs_kostenplaats_key) ;
END IF;
END;
END LOOP;
FOR rec IN c_loc_kp_del
LOOP
BEGIN
-- opschonen mandaten die niet meer geldig zijn
v_errorhint:='Fout verwijderen mandaten die niet meer geldig zijn';
DELETE
FROM prs_perslidkostenplaats
WHERE prs_perslidkostenplaats_key = rec.prs_perslidkostenplaats_key ;
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 goko_update_perslid;
/
-- Hook functie die na het saven (bes_postsave) van een bestelling wordt aangeroepen.
CREATE OR REPLACE PROCEDURE goko_bes_after_insert (p_key IN NUMBER)
AS
v_bes_bestelling_key NUMBER(10) ;
v_korting_percentage NUMBER(10,2) ;
v_inkoopprijs_totaal NUMBER(10,2) ;
v_check VARCHAR2(100) := 'ok' ;
v_ins_discipline_key NUMBER(10) ;
v_bes_kenmerk_key1 NUMBER(10) ; -- kenmerk_key voor totaalbedrag bestelling
v_waarde1 VARCHAR2(100) ; -- oorspronkelijke waarde van totaalbedrag in bestelling
v_bes_kenmerk_key2 NUMBER(10) ; -- kenmerk_key voor totaalbedrag korting
v_waarde2 VARCHAR2(100) ; -- oorspronkelijke waarde van totaalbedrag korting in bestelling
v_korting_totaal NUMBER(10,2) ;
v_gewijzigd NUMBER(1) := 0 ;
v_count NUMBER(10) ;
v_errormsg VARCHAR2 (1000);
v_aanduiding VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
BEGIN
v_errormsg := 'Ophalen bestelgegevens ivm totaalprijs en kortingspercentage';
v_gewijzigd := 0 ;
BEGIN
SELECT b.bes_bestelling_key, COALESCE(fac.safe_to_number(kmb.bes_kenmerkbestell_waarde),0) km_kortingspercentage, v.km_totaalprijs km_totaalprijs
INTO v_bes_bestelling_key, v_korting_percentage, v_inkoopprijs_totaal
FROM bes_bestelling b,
bes_kenmerkbestell kmb,
bes_kenmerk km,
(
SELECT bi.bes_bestelling_key,
SUM (COALESCE (bi.bes_bestelling_item_aantal * fac.safe_to_number(replace(kmi.bes_kenmerkbesteli_waarde,',','.')), 0))
km_totaalprijs
FROM bes_kenmerkbesteli kmi, bes_kenmerk km, bes_bestelling_item bi
WHERE bi.bes_bestelling_item_key = kmi.bes_bestelling_item_key
AND kmi.bes_kenmerk_key = km.bes_kenmerk_key
AND km.bes_srtkenmerk_key = 81 -- Artikelprijs
GROUP BY bi.bes_bestelling_key ) v
WHERE b.bes_bestelling_key = p_key
AND b.bes_bestelling_key = kmb.bes_bestelling_key
AND kmb.bes_kenmerk_key = km.bes_kenmerk_key AND km.bes_srtkenmerk_key = 142 -- Leverancierskorting
AND v.bes_bestelling_key = b.bes_bestelling_key
;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
v_check := 'stop';
END;
v_errormsg := 'Ophalen kenmerk_key voor totaalprijs';
IF v_check = 'ok'
THEN
-- ophalen kenmerk_key 'totaalbedrag bestelling'
-- ophalen kenmerk_key kortingsbedrag
SELECT d.ins_discipline_key
INTO v_ins_discipline_key
FROM bes_bestelling_item bi,
bes_srtdeel sd,
bes_srtgroep sg,
ins_tab_discipline d
WHERE bi.bes_bestelling_key = p_key
AND bi.bes_srtdeel_key = sd.bes_srtdeel_key
AND sd.bes_srtgroep_key = sg.bes_srtgroep_key
AND sg.ins_discipline_key = d.ins_discipline_key
GROUP BY d.ins_discipline_key ;
SELECT MAX(bes_kenmerk_key)
INTO v_bes_kenmerk_key1
FROM bes_kenmerk km, bes_srtkenmerk skm
WHERE km.bes_srtkenmerk_key = skm.bes_srtkenmerk_key
AND skm.bes_srtkenmerk_key = 44 -- totaalbedrag bestelling
AND km.bes_srtinstallatie_key = v_ins_discipline_key
AND km.bes_kenmerk_niveau = 'D'
AND km.bes_kenmerk_verwijder IS NULL ;
SELECT MAX(bes_kenmerk_key)
INTO v_bes_kenmerk_key2
FROM bes_kenmerk km, bes_srtkenmerk skm
WHERE km.bes_srtkenmerk_key = skm.bes_srtkenmerk_key
AND skm.bes_srtkenmerk_key = 47 -- totaalbedrag korting
AND km.bes_srtinstallatie_key = v_ins_discipline_key
AND km.bes_kenmerk_niveau = 'D'
AND km.bes_kenmerk_verwijder IS NULL ;
-- Vullen kenmerk 'totaalbedrag bestelling'
IF v_bes_kenmerk_key1 IS NOT NULL
THEN
-- Dan gaan we het kenmerk upserten ! ER IS GEEN bes.upsertbestellingkenmerk beschikbaar..
BEGIN
SELECT COUNT ( * ), MIN (bes_kenmerkbestell_waarde)
INTO v_count, v_waarde1
FROM bes_kenmerkbestell
WHERE bes_bestelling_key = p_key
AND bes_kenmerk_key = v_bes_kenmerk_key1
AND bes_kenmerkbestell_verwijder IS NULL;
IF v_count = 1
THEN
IF v_inkoopprijs_totaal IS NULL
THEN
DELETE bes_kenmerkbestell
WHERE bes_bestelling_key = p_key
AND bes_kenmerk_key = v_bes_kenmerk_key1
AND bes_kenmerkbestell_verwijder IS NULL;
v_gewijzigd := 1 ;
ELSE
IF (fac.safe_to_number(v_waarde1) <> v_inkoopprijs_totaal)
THEN
UPDATE bes_kenmerkbestell
SET bes_kenmerkbestell_waarde = v_inkoopprijs_totaal
WHERE bes_bestelling_key = p_key
AND bes_kenmerk_key = v_bes_kenmerk_key1
AND bes_kenmerkbestell_verwijder IS NULL;
v_gewijzigd := 1 ;
END IF;
END IF;
ELSE
IF v_bes_kenmerk_key1 IS NOT NULL AND v_inkoopprijs_totaal IS NOT NULL
THEN
INSERT INTO bes_kenmerkbestell (bes_kenmerk_key,
bes_bestelling_key,
bes_kenmerkbestell_waarde)
VALUES (v_bes_kenmerk_key1, p_key, v_inkoopprijs_totaal);
v_gewijzigd := 1 ;
END IF;
END IF;
END;
END IF;
-- Vullen kenmerk 'totaalbedrag korting'
IF v_bes_kenmerk_key2 IS NOT NULL
THEN
-- Dan gaan we het kenmerk upserten ! ER IS GEEN bes.upsertbestellingkenmerk beschikbaar..
BEGIN
v_korting_totaal := COALESCE(v_korting_percentage, 0)/100 * COALESCE(v_inkoopprijs_totaal, 0) ;
SELECT COUNT ( * ), MIN (bes_kenmerkbestell_waarde)
INTO v_count, v_waarde2
FROM bes_kenmerkbestell
WHERE bes_bestelling_key = p_key
AND bes_kenmerk_key = v_bes_kenmerk_key2
AND bes_kenmerkbestell_verwijder IS NULL;
IF v_count = 1
THEN
IF v_korting_percentage IS NULL OR v_korting_percentage = 0
THEN
DELETE bes_kenmerkbestell
WHERE bes_bestelling_key = p_key
AND bes_kenmerk_key = v_bes_kenmerk_key2
AND bes_kenmerkbestell_verwijder IS NULL;
v_gewijzigd := 1 ;
ELSE
IF (fac.safe_to_number(v_waarde2) <> v_korting_totaal)
THEN
UPDATE bes_kenmerkbestell
SET bes_kenmerkbestell_waarde = v_korting_totaal
WHERE bes_bestelling_key = p_key
AND bes_kenmerk_key = v_bes_kenmerk_key2
AND bes_kenmerkbestell_verwijder IS NULL;
v_gewijzigd := 1 ;
END IF;
END IF;
ELSE
IF v_bes_kenmerk_key2 IS NOT NULL AND v_korting_totaal > 0
THEN
INSERT INTO bes_kenmerkbestell (bes_kenmerk_key,
bes_bestelling_key,
bes_kenmerkbestell_waarde)
VALUES (v_bes_kenmerk_key2, p_key, v_korting_totaal);
v_gewijzigd := 1 ;
END IF;
END IF;
END;
END IF;
-- fac_tracking - ACTIE - bedrag is + bedrag was
IF v_gewijzigd = 1
THEN
BEGIN fac.trackaction('BESUPD', v_bes_bestelling_key, 3, NULL, 'Prijswijziging doorgevoerd in bestelling - totaalprijs was/is ' || TO_CHAR(v_waarde1) || '/' || TO_CHAR(v_inkoopprijs_totaal) || ' - korting was/is ' || TO_CHAR(v_waarde2) || '/' || TO_CHAR(v_korting_totaal)); END;
END IF;
END IF;
END goko_bes_after_insert;
/
-------------------------------
--- RAPPORTAGES ---------------
-------------------------------
CREATE OR REPLACE VIEW goko_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,
MATERIALEN_VERBRUIK,
AFMELD_DATUM,
OPDRACHT_TYPE,
TD_NAAM,
FILTERSTATUS
)
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 = 5), -- kenmerk Uren_besteed
(SELECT ko.mld_kenmerkopdr_waarde
FROM mld_kenmerkopdr ko
WHERE ko.mld_opdr_key = o.mld_opdr_key
AND ko.mld_kenmerk_key = 6), -- kenmerk Materialenverbruik
(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,
(CASE
WHEN o.mld_opdr_flag>0 THEN Lcl.L('lcl_opdr_flag' || o.mld_opdr_flag)
ELSE ''
END) filterstatus
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_v_onroerendgoed_gegevens onr,
mld_v_uitvoerende mu,
mld_statusopdr os
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 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 mu.intern = 1;
-- view om QR codes voor een deel te genereren.
CREATE OR REPLACE VIEW goko_v_rap_qr_deel
AS
SELECT fac_bookmark_naam,
fac_bookmark_id,
ins_discipline_omschrijving,
ins_srtgroep_omschrijving,
ins_srtdeel_omschrijving,
ins_deel_omschrijving,
CASE
WHEN d.ins_discipline_key = 83 -- IT
THEN
(SELECT k.ins_kenmerkdeel_waarde
FROM ins_kenmerkdeel k
WHERE k.ins_deel_key = d.ins_deel_key
AND k.ins_kenmerk_key = 8)
ELSE
NULL
END
serienummer,
CASE WHEN alg_locatie_key IS NOT NULL THEN 'Locatiegebonden'
WHEN d.prs_perslid_key IS NOT NULL THEN 'Persoonsgebonden'
ELSE 'Overig'
END soort,
alg_locatie_key,
alg_gebouw_omschrijving,
d.prs_perslid_key,
prs_perslid_volnaam,
ins_deel_aanmaak,
ins_deel_key
FROM fac_bookmark b, ins_v_deel_gegevens d
WHERE fac_bookmark_expire IS NULL
AND fac_bookmark_id = 'wiBUpSjNzahvJ9R5';
-- Rapportage Gebouwbeheer
CREATE OR REPLACE VIEW GOKO_V_ALG_ONROERENDGOED
(
DISTRICT,
LOCATIE,
LOCATIE_CODE,
LOCATIE_KEY,
GEBOUW,
-- gegevens uit locatiekaart
LOCATIEMANAGER,
WAARNEMER,
EIGENDOMSINDICATIE,
WIFI_DOOR,
INBRAAKBEV_DOOR,
TELEFONIE_DOOR,
KDV,
PSZ,
BSO,
TSO,
KDV_TEL,
PSZ_TEL,
BSO_TEL,
TSO_TEL,
--
VERDIEPING,
RUIMTENR,
RUIMTE_OMSCHRIJVING,
RUIMTEFUNCTIE,
BVO_M2
)
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.waarnemer,
km.eigendomsinidcatie,
km.wifi_door,
km.inbraakbev_door,
km.telefonie_door,
km.kdv,
km.psz,
km.bso,
km.tso,
km.kdv_tel,
km.psz_tel,
km.bso_tel,
km.tso_tel,
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
FROM alg_v_onroerendgoed_gegevens v,
alg_locatie l,
alg_district d,
(SELECT l.alg_locatie_key,
goko.get_kenmerk('ALG',1002, l.alg_locatie_key) locatiemanager,
goko.get_kenmerk('ALG',1003, l.alg_locatie_key) waarnemer,
goko.get_kenmerk('ALG',1020, l.alg_locatie_key) eigendomsinidcatie,
goko.get_kenmerk('ALG',1022, l.alg_locatie_key) wifi_door,
goko.get_kenmerk('ALG',1023, l.alg_locatie_key) inbraakbev_door,
goko.get_kenmerk('ALG',1024, l.alg_locatie_key) telefonie_door,
goko.get_kenmerk('ALG',1006, l.alg_locatie_key) KDV,
goko.get_kenmerk('ALG',1014, l.alg_locatie_key) PSZ,
goko.get_kenmerk('ALG',1007, l.alg_locatie_key) BSO,
goko.get_kenmerk('ALG',1009, l.alg_locatie_key) TSO,
goko.get_kenmerk('ALG',1011, l.alg_locatie_key) KDV_Tel,
goko.get_kenmerk('ALG',1013, l.alg_locatie_key) PSZ_Tel,
goko.get_kenmerk('ALG',1015, l.alg_locatie_key) BSO_Tel,
goko.get_kenmerk('ALG',1018, l.alg_locatie_key) TSO_Tel
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 ;
------ 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