Files
Customer/SORO/soro.sql
Marcel Bourseau 014bece97b SORO#31737: Autoritten administratie zonder reservering
svn path=/Customer/trunk/; revision=29651
2016-06-07 10:00:23 +00:00

983 lines
41 KiB
SQL
Raw Blame History

-- Script containing customer specific configuration sql statements for SORO: Stichting ORO
-- (c) 2013 SG|facilitor
-- $Revision$
-- $Id$
--
-- Support: +31 53 4800710
set echo on
spool xsoro.lst
--
-- Personen import
--
-- soro_insert_huidige_wp bepaalt huidige werkplek en update de import-tabel 'fac_imp_perslid' daarmee.
-- Indien persoon nieuw is (personeelsnr bestaat niet), of persoon bestaat wel maar heeft geen werkplek, dan wordt import-tabel 'fac_imp_perslid' niet geupdate met werkplek maar blijft null.
-- Indien persoon uit Beaufort op afdeling zit / is verhuisd waarbij geen werkplek kan worden bepaald (b.v. omdat v_sla_werkplek_over=1 of afdeling-gebouw relatie ontbreekt),
-- dan wordt de huidige werkplek in fac_imp_perslid geinsert, zodat die wordt aangehouden als correcte.
-- Op deze manier worden HANDMATIG geplaatste personen op een werkplek/ruimte gehandhaafd (anders zouden ze allemaal door de standaard worden verwijderd).
CREATE OR REPLACE PROCEDURE soro_insert_huidige_wp(
p_import_key IN NUMBER,
p_prs_perslid_nr IN VARCHAR2,
p_prs_perslid_naam IN VARCHAR2,
p_prs_afdeling_omschrijving IN VARCHAR2
) AS
v_prs_perslid_key prs_perslid.prs_perslid_key%TYPE;
v_prs_werkplek_key prs_werkplek.prs_werkplek_key%TYPE;
v_alg_locatie_code alg_locatie.alg_locatie_code%TYPE;
v_alg_gebouw_code alg_gebouw.alg_gebouw_code%TYPE;
v_alg_verdieping_volgnr alg_verdieping.alg_verdieping_volgnr%TYPE;
v_alg_ruimte_nr alg_ruimte.alg_ruimte_nr%TYPE;
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_errormsg VARCHAR2 (400);
v_errorhint VARCHAR2 (400);
BEGIN
v_errormsg := 'Huidige werkplek: persoon (naam = ' || p_prs_perslid_naam || ', afdeling =' || p_prs_afdeling_omschrijving || ') met personeelsnummer ' || p_prs_perslid_nr || ' is nieuw' ;
SELECT prs_perslid_key
INTO v_prs_perslid_key
FROM prs_v_aanwezigperslid
WHERE prs_perslid_nr = p_prs_perslid_nr;
v_errormsg := 'Huidige werkplek: persoon (naam = ' || p_prs_perslid_naam || ', afdeling =' || p_prs_afdeling_omschrijving || ') met personeelsnummer ' || p_prs_perslid_nr || ' is bekend en heeft geen werkplek';
SELECT prs_werkplek_key
INTO v_prs_werkplek_key
FROM prs_perslidwerkplek
WHERE prs_perslid_key = v_prs_perslid_key
AND prs_perslidwerkplek_bezetting = (SELECT MAX (prs_perslidwerkplek_bezetting)
FROM prs_perslidwerkplek
WHERE prs_perslid_key = v_prs_perslid_key);
v_errormsg := 'Huidige werkplek: persoon (naam = ' || p_prs_perslid_naam || ', afdeling =' || p_prs_afdeling_omschrijving || ') met personeelsnummer ' || p_prs_perslid_nr || ' had wel werkplek, maar bijbehorende ruimte kan niet worden gevonden' ;
SELECT r.alg_locatie_code, r.alg_gebouw_upper, r.alg_verdieping_volgnr, r.alg_ruimte_upper_nr
INTO v_alg_locatie_code, v_alg_gebouw_code, v_alg_verdieping_volgnr, v_alg_ruimte_nr
FROM prs_werkplek w, alg_v_ruimte_gegevens_all r
WHERE w.prs_werkplek_key = v_prs_werkplek_key
AND w.prs_alg_ruimte_key = r.alg_ruimte_key;
v_errormsg := 'Huidige werkplek: persoon (naam = ' || p_prs_perslid_naam || ', afdeling =' || p_prs_afdeling_omschrijving || ') met personeelsnummer ' || p_prs_perslid_nr || ' had wel werkplek, maar kon niet worden behouden.' ;
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 prs_perslid_nr = p_prs_perslid_nr;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
fac.imp_writelog (p_import_key, 'I', v_errormsg, v_errorhint);
WHEN OTHERS
THEN
fac.imp_writelog (p_import_key, 'I', v_errormsg, v_errorhint);
END soro_insert_huidige_wp;
/
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-- Voor iedere persoon vanuit Beaufort gaan we de werkplek erbij bepalen, op basis van de afdleingsnaam.
-- Indien de afdelingsnaam overeenkomt met een gebouwnaam (voor afdelingen Huisvesting, ICT, HRM b.v is dat niet het geval), dan zoeken we naar de 1e verdieping(volgnr=0)
-- en 1e ruimte (laagste ruimtenummer) om die te updaten in de importtabel, zodat personen daar een werkplek gaan krijgen.
--
CREATE OR REPLACE PROCEDURE soro_lookup_4_wp(
p_import_key IN NUMBER
) AS
CURSOR c_prs
IS
SELECT i.prs_perslid_nr, i.prs_perslid_naam, i.prs_afdeling_naam, i.prs_kenmerk1 as prs_afdeling_omschrijving
FROM fac_imp_perslid i;
v_alg_locatie_key alg_locatie.alg_locatie_key%TYPE;
v_alg_locatie_code alg_locatie.alg_locatie_code%TYPE;
v_alg_gebouw_key alg_gebouw.alg_gebouw_key%TYPE;
v_alg_gebouw_code alg_gebouw.alg_gebouw_code%TYPE;
v_alg_verdieping_key alg_verdieping.alg_verdieping_key%TYPE;
v_alg_verdieping_volgnr alg_verdieping.alg_verdieping_volgnr%TYPE;
v_alg_ruimte_nr alg_ruimte.alg_ruimte_nr%TYPE;
v_beganegrond_bestaat NUMBER;
v_ruimte_met_naam_ruimte NUMBER;
v_sla_werkplek_over NUMBER;
v_stamgebouw NUMBER;
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_errormsg VARCHAR2 (400);
v_errorhint VARCHAR2 (400);
BEGIN
FOR rec_wp IN c_prs
LOOP
BEGIN
-- Bepaal huidige werkplek (die wellicht handmatig is geplaatst), en zet die in import-tabel om die INTAKT te laten, want alle lege 'werkplekken' worden achteraf verwijderd.
soro_insert_huidige_wp(p_import_key, rec_wp.prs_perslid_nr, rec_wp.prs_perslid_naam, rec_wp.prs_afdeling_omschrijving);
v_errormsg :=
'Afdeling bestaat niet van persoon (personeelsnr - naam / afdeling - omschrijving) '
|| rec_wp.prs_perslid_nr
|| '-'
|| rec_wp.prs_perslid_naam
|| '/'
|| rec_wp.prs_afdeling_naam
|| '-'
|| rec_wp.prs_afdeling_omschrijving;
-- Check of afdeling expliciet heeft ingesteld dat voor persoon GEEN werkplek moet worden gezocht.
-- Dit is kenmerk key = 1000, is een vinkje, uit (=0) betekent wel werkplek zoeken, aan (=1) betekent geen werkplek zoeken.
-- Bij GEEN werkplek zoeken, zorgen we ervoor dat een bestaande werkplek (met de hand aangemaakt b.v.) intakt blijft.
SELECT fac.safe_to_number(COALESCE(prs_kenmerklink_waarde,'0'))
INTO v_sla_werkplek_over
FROM prs_afdeling a, prs_kenmerklink k
WHERE prs_afdeling_upper = UPPER(rec_wp.prs_afdeling_naam)
AND a.prs_afdeling_key = K.PRS_LINK_KEY (+)
AND K.PRS_KENMERKLINK_NIVEAU (+) = 'A'
AND k.prs_kenmerk_key(+) = 1000;
IF v_sla_werkplek_over = 0
THEN
-- We gaan op zoek naar werkplek, hetzij op basis van
-- 1) afdelingnaam = gebouwnaam (dit is de standaard manier), in dit geval is stamgebouw niet gevuld.
-- 2) STAMGEBOUW, dit is als stamgebouw wel is gevuld, dan overruled die regel 1), en is dit expliciet het gebouw waar afdeling zit.
-- Dus eerst op zoek of afdeling een stamgebouw heeft.
-- Dit is kenmerk key = 1001, is een ref-kenmerk naar VIEW ALG_V_AANWEZIGGEBOUW
SELECT fac.safe_to_number(COALESCE(prs_kenmerklink_waarde,'0'))
INTO v_stamgebouw
FROM prs_afdeling a, prs_kenmerklink k
WHERE prs_afdeling_upper = UPPER(rec_wp.prs_afdeling_naam)
AND a.prs_afdeling_key = K.PRS_LINK_KEY (+)
AND K.PRS_KENMERKLINK_NIVEAU (+) = 'A'
AND k.prs_kenmerk_key(+) = 1001;
v_alg_gebouw_key := NULL;
IF v_stamgebouw = 0
THEN
-- Er is GEEN stamgebouw, dus zoek op standaard manier naar gebouw waarvan de gebouwnaam overeenkomt met afdelingsomschrijving.
v_errormsg :=
'Geen gebouw kunnen bepalen afdeling van persoon (personeelsnr - naam / afdeling - omschrijving) '
|| rec_wp.prs_perslid_nr
|| '-'
|| rec_wp.prs_perslid_naam
|| '/'
|| rec_wp.prs_afdeling_naam
|| '-'
|| rec_wp.prs_afdeling_omschrijving;
SELECT alg_gebouw_key, alg_gebouw_code, alg_locatie_key
INTO v_alg_gebouw_key, v_alg_gebouw_code, v_alg_locatie_key
FROM alg_v_aanweziggebouw
WHERE UPPER(alg_gebouw_naam) = (SELECT UPPER(prs_afdeling_omschrijving) FROM prs_afdeling WHERE prs_afdeling_upper = UPPER(rec_wp.prs_afdeling_naam));
ELSE
-- Er is WEL een stamgebouw
v_errormsg :=
'Stamgebouw bestaat NIET meer bij afdeling van persoon (personeelsnr - naam / afdeling - omschrijving) '
|| rec_wp.prs_perslid_nr
|| '-'
|| rec_wp.prs_perslid_naam
|| '/'
|| rec_wp.prs_afdeling_naam
|| '-'
|| rec_wp.prs_afdeling_omschrijving;
SELECT alg_gebouw_key, alg_gebouw_code, alg_locatie_key
INTO v_alg_gebouw_key, v_alg_gebouw_code, v_alg_locatie_key
FROM alg_v_aanweziggebouw
WHERE alg_gebouw_key = v_stamgebouw;
END IF;
SELECT alg_locatie_code
INTO v_alg_locatie_code
FROM alg_locatie
WHERE alg_locatie_key = v_alg_locatie_key;
SELECT count(*)
INTO v_beganegrond_bestaat
FROM alg_v_aanwezigverdieping
WHERE alg_gebouw_key = v_alg_gebouw_key
AND alg_verdieping_volgnr = 0;
IF v_beganegrond_bestaat = 1
THEN
-- Begane grond bestaat!
SELECT alg_verdieping_key, alg_verdieping_volgnr
INTO v_alg_verdieping_key, v_alg_verdieping_volgnr
FROM alg_v_aanwezigverdieping
WHERE alg_gebouw_key = v_alg_gebouw_key
AND alg_verdieping_volgnr = 0;
ELSE
-- Begane grond bestaat niet, dan de eerste verdieping met laagste volgnummer, indien die niet gevonden, dan houd het op.
v_errormsg :='Fout bij bepalen verdieping bij gebouw (gebouwcode) ' || v_alg_gebouw_code;
v_errormsg :=
'Fout bij bepalen verdieping bij gebouw (gebouwcode) ' || v_alg_gebouw_code || ' van persoon (personeelsnr - naam / afdeling - omschrijving) '
|| rec_wp.prs_perslid_nr
|| '-'
|| rec_wp.prs_perslid_naam
|| '/'
|| rec_wp.prs_afdeling_naam
|| '-'
|| rec_wp.prs_afdeling_omschrijving;
SELECT alg_verdieping_key, alg_verdieping_volgnr
INTO v_alg_verdieping_key, v_alg_verdieping_volgnr
FROM alg_v_aanwezigverdieping
WHERE alg_gebouw_key = v_alg_gebouw_key
AND alg_verdieping_volgnr = (SELECT MIN(alg_verdieping_volgnr) FROM alg_v_aanwezigverdieping WHERE alg_gebouw_key = v_alg_gebouw_key);
END IF;
SELECT count(*)
INTO v_ruimte_met_naam_ruimte
FROM alg_v_aanwezigruimte
WHERE alg_verdieping_key = v_alg_verdieping_key
AND UPPER(alg_ruimte_nr) = 'RUIMTE';
IF v_ruimte_met_naam_ruimte = 1
THEN
-- Ruimte op verdieping met nummer 'RUIMTE' bestaat!
v_alg_ruimte_nr := 'RUIMTE';
ELSE
-- Ruimte op verdieping met nummer 'RUIMTE' bestaat NIET! Dan de eerste ruimte met laagste ruimtenr, indien die niet gevonden, dan houd het op.
v_errormsg :='Fout bij bepalen ruimte bij gebouw en verdieping (gebouwcode / verdiepingvolgnr) ' || v_alg_gebouw_code || '/' || v_alg_verdieping_volgnr;
SELECT MIN(alg_ruimte_nr)
INTO v_alg_ruimte_nr
FROM alg_v_aanwezigruimte
WHERE alg_verdieping_key = v_alg_verdieping_key;
END IF;
-- Alleen werkplek bijwerken indien een van de volgende regeltjes waar is:
-- 1) de persoon nog geen werkplek had (nieuw persoon of bestaande persoon zonder werkplek), dus als gebouw leeg is.
-- 2) de persoon wel werkplek had, maar nu is gebouw een andere.
-----> M.a.w. indien de persoon een werkplek heeft in hetzelfde gebouw, dan niet updaten, maar bestaande werkplek heeft voorrang (handmatig geplaatst b.v.)
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 prs_perslid_nr = rec_wp.prs_perslid_nr
AND (alg_gebouw_code IS NULL OR alg_gebouw_code <> v_alg_gebouw_code);
END IF;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
fac.imp_writelog (p_import_key, 'W', v_errormsg, v_errorhint);
WHEN OTHERS
THEN
fac.imp_writelog (p_import_key, 'W', v_errormsg, v_errorhint);
END;
END LOOP;
END soro_lookup_4_wp;
/
CREATE OR REPLACE PROCEDURE soro_post_import_perslid(
p_import_key IN NUMBER
) AS
BEGIN
-- Codering naamgebruik ORO:
-- B = Naam partner - Geboortenaam
-- C = Geboortenaam - Naam partner
-- E = Geboortenaam
-- P = Naam partner
UPDATE fac_imp_perslid SET PRS_PERSLID_NAAMGEBRUIK_CODE = 0 WHERE PRS_KENMERK3 = 'E'; -- 0 (default) perslid_naam en perslid_tussenvoegsel worden gebruikt
UPDATE fac_imp_perslid SET PRS_PERSLID_NAAMGEBRUIK_CODE = 1 WHERE PRS_KENMERK3 = 'B'; -- 1 personen die de geboortenaam van de partner icm de eigen naam willen gebruiken
UPDATE fac_imp_perslid SET PRS_PERSLID_NAAMGEBRUIK_CODE = 2 WHERE PRS_KENMERK3 = 'P'; -- 2 personen die de geboortenaam van de partner willen gebruiken
UPDATE fac_imp_perslid SET PRS_PERSLID_NAAMGEBRUIK_CODE = 3 WHERE PRS_KENMERK3 = 'C'; -- 3 personen die de eigen naam icm de geboortenaam van de partner willen gebruiken
-- Toewijzen werkplek adhv afdelingsnaam
-- Indien afdelingsnaam als gebouw bestaat, dan persoon hier de werkplek geven (op verdieping met volgnr 0 of anders 1e verdieping die bestaat, zo ook met ruimte (laagste ruimtenummer)
soro_lookup_4_wp(p_import_key);
END soro_post_import_perslid;
/
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
CREATE OR REPLACE PROCEDURE soro_import_perslid (p_import_key IN NUMBER)
AS
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_errormsg VARCHAR2 (400);
v_errorhint VARCHAR2 (400);
BEGIN
v_errorhint := 'Generieke update';
-- de sequence array staat beschreven in PRS_PAC.SRC bij de prs.import_perslid proc
prs.import_perslid (p_import_key,
'0;0;0;0;0;0;1;7;6;5;' ||
'0;9;8;13;;0;0;12;0;3;' ||
'11;3;0;0;0;0;2;1;13;0;'||
'0;0;0;0;0;0;0;0;0;0;'||
'0;0;0;0;0;0',
'"Org.eenh.";"Naam org.eenh.";"Persoonsnr.";"Naam samengesteld";"Roepnaam";"Voorvoeg.geb.naam";"Geb.naam";"Voorvoeg.partner";"Naam partner";"Functiecode DV";"Oms functie";"Email werk";"Gebruik achternaam"%'
);
-- Klantspecifieke aanpassingen
soro_post_import_perslid(p_import_key);
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 soro_import_perslid;
/
CREATE OR REPLACE PROCEDURE soro_update_perslid (
p_import_key IN NUMBER
) IS
CURSOR c_del
IS
SELECT p.prs_perslid_key, p.prs_perslid_nr, pf.prs_perslid_naam_full
FROM fac_imp_perslid i, prs_perslid p, prs_v_perslid_fullnames_all pf
WHERE p.prs_perslid_nr = i.prs_perslid_nr(+)
AND pf.prs_perslid_key = p.prs_perslid_key
AND p.prs_perslid_nr IS NOT NULL
AND i.prs_perslid_nr IS NULL
AND p.prs_perslid_verwijder IS NULL
ORDER BY 2;
v_count NUMBER;
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;
-- 'NR' betekent dat op basis van personeelsNummeR wordt gematched.
-- 'A' betekent altijd alle (andere/overige) werkplekken verwijderen
prs.update_perslid (p_import_key, 'NR', 'A');
-- 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;
END soro_update_perslid;
/
-- SORO#29825: Unieke objectid loopt globaal over alle ICT objecten, alle ICT objecten moeten dan wel de objectsoortcode 'ORO' gaan krijgen.
CREATE OR REPLACE VIEW soro_v_ict_ins_volgnr
(volgnr)
AS SELECT 'ORO' || NVL(LPAD( TO_CHAR(MAX(TO_NUMBER(SUBSTR(ins_deel_upper, LENGTH('ORO')+1,LENGTH(ins_deel_upper)-LENGTH('ORO'))))+1) , MAX(LENGTH(ins_deel_upper)-LENGTH('ORO')),'0'),'001')
-- INTO NextVolgNr
FROM INS_DEEL
WHERE ins_deel_upper LIKE 'ORO'||'%'
AND fac.safe_to_integer(SUBSTR(ins_deel_upper, LENGTH('ORO')+1,LENGTH(ins_deel_upper)-LENGTH('ORO'))) IS NOT NULL
AND LTRIM(SUBSTR (ins_deel_upper, LENGTH ('ORO') + 1), '0') = TO_CHAR(fac.safe_to_integer ((SUBSTR (ins_deel_upper, LENGTH ('ORO') + 1))))
AND ins_deel_parent_key IS NULL
AND ins_deel_verwijder IS NULL;
-- SORO#30996: Autoritten administratie
-- View van reserveringsnummers van autoritten (res_activiteit_key = 30) in het verleden (dus res. tot datum in het verleden) waarvan nog geen kilometerstand melding (std_melding_key = 181) van bestaat.
-- Let op: alleen de definitieve reserveringen (res_status_fo_key = 2)
-- Let op: harde datum-vanaf 1 januari 2015, zodat de hele oude autoritten (van voor 1 jan 2015) niet meedoen, aangezien dit vanaf 1 jan 2015 ingaat
-- Let op: de union is nodig zodat een gekozen reserveringsnummer (bij een melding) wel zichtbaar is als ref-flexprop, maar niet meer selecteerbaar bij edit/nieuw (vandaar de vervaldatum).
CREATE OR REPLACE VIEW soro_v_autorit_km
(
res_rsv_ruimte_key,
res_nummer,
vervaldatum,
mld_melding_key
)
AS
SELECT rrr.res_rsv_ruimte_key,
rrr.res_reservering_key || '/' || rrr.res_rsv_ruimte_volgnr,
NULL,
NULL
FROM res_rsv_ruimte rrr
WHERE res_activiteit_key = 30
AND res_rsv_ruimte_verwijder IS NULL
AND res_rsv_ruimte_dirtlevel = 0
AND res_status_fo_key = 2
AND res_rsv_ruimte_tot < SYSDATE
AND res_rsv_ruimte_van >= TO_DATE ('01-01-2015', 'dd-mm-yyyy')
AND res_rsv_ruimte_aanmaak >=
TO_DATE ('01-01-2015', 'dd-mm-yyyy')
AND NOT EXISTS
(SELECT 'x'
FROM mld_melding m,
mld_kenmerkmelding km,
mld_kenmerk k,
mld_srtkenmerk sk,
fac_kenmerkdomein kd
WHERE m.mld_stdmelding_key = 181
AND km.mld_melding_key = m.mld_melding_key
AND km.mld_kenmerk_key = k.mld_kenmerk_key
AND k.mld_kenmerk_verwijder IS NULL
AND sk.mld_srtkenmerk_key = k.mld_srtkenmerk_key
AND sk.mld_srtkenmerk_verwijder IS NULL
AND kd.fac_kenmerkdomein_key =
sk.fac_kenmerkdomein_key
AND kd.fac_kenmerkdomein_module = 'MLD'
AND kd.fac_kenmerkdomein_objectnaam =
'SORO_V_AUTORIT_KM'
AND kd.fac_kenmerkdomein_verwijder IS NULL
AND km.mld_kenmerkmelding_waarde =
TO_CHAR (rrr.res_rsv_ruimte_key))
UNION
SELECT rrr.res_rsv_ruimte_key,
res_reservering_key || '/' || res_rsv_ruimte_volgnr,
TO_DATE ('01-01-2000', 'dd-mm-yyyy'),
m.mld_melding_key
FROM mld_melding m,
mld_kenmerkmelding km,
mld_kenmerk k,
mld_srtkenmerk sk,
fac_kenmerkdomein kd,
res_rsv_ruimte rrr
WHERE m.mld_stdmelding_key = 181
AND km.mld_melding_key = m.mld_melding_key
AND km.mld_kenmerk_key = k.mld_kenmerk_key
AND k.mld_kenmerk_verwijder IS NULL
AND sk.mld_srtkenmerk_key = k.mld_srtkenmerk_key
AND sk.mld_srtkenmerk_verwijder IS NULL
AND kd.fac_kenmerkdomein_key = sk.fac_kenmerkdomein_key
AND kd.fac_kenmerkdomein_module = 'MLD'
AND kd.fac_kenmerkdomein_objectnaam = 'SORO_V_AUTORIT_KM'
AND kd.fac_kenmerkdomein_verwijder IS NULL
AND TO_CHAR (rrr.res_rsv_ruimte_key) =
km.mld_kenmerkmelding_waarde;
CREATE OR REPLACE VIEW SORO_V_NOTI_AUTORIT_KM
(
CODE,
SENDER,
RECEIVER,
TEXT,
KEY,
PAR1,
PAR2,
XKEY
)
AS
SELECT 'CUST01',
'',
rrr.res_rsv_ruimte_contact_key,
'Reminder: u heeft de kilometers van reservering/autovervoer '
|| res_reservering_key
|| '/'
|| res_rsv_ruimte_volgnr
|| ' nog niet ingevoerd',
rrr.res_rsv_ruimte_key, -- reserveringskey, althans een willekeurige; FSN#19425
NULL,
NULL,
NULL
FROM res_rsv_ruimte rrr
WHERE res_activiteit_key = 30
AND res_rsv_ruimte_verwijder IS NULL
AND res_rsv_ruimte_dirtlevel = 0
AND res_status_fo_key = 2
AND res_rsv_ruimte_tot < SYSDATE
AND res_rsv_ruimte_van >= TO_DATE ('01-01-2015', 'dd-mm-yyyy')
AND res_rsv_ruimte_aanmaak >=
TO_DATE ('01-01-2015', 'dd-mm-yyyy')
AND NOT EXISTS
(SELECT 'x'
FROM mld_melding m,
mld_kenmerkmelding km,
mld_kenmerk k,
mld_srtkenmerk sk,
fac_kenmerkdomein kd
WHERE m.mld_stdmelding_key = 181
AND km.mld_melding_key = m.mld_melding_key
AND km.mld_kenmerk_key = k.mld_kenmerk_key
AND k.mld_kenmerk_verwijder IS NULL
AND sk.mld_srtkenmerk_key = k.mld_srtkenmerk_key
AND sk.mld_srtkenmerk_verwijder IS NULL
AND kd.fac_kenmerkdomein_key =
sk.fac_kenmerkdomein_key
AND kd.fac_kenmerkdomein_module = 'MLD'
AND kd.fac_kenmerkdomein_objectnaam =
'SORO_V_AUTORIT_KM'
AND kd.fac_kenmerkdomein_verwijder IS NULL
AND km.mld_kenmerkmelding_waarde =
TO_CHAR (rrr.res_rsv_ruimte_key));
-- 1e deel: alle ritten zonder km's
--UNION
-- 2e deel: alle ritten met km's
-- Kenmerk-keys:
-- res_srtkenmerk_key = 1 -> Naam client
-- res_srtkenmerk_key = 2 -> Kosten: Client met/zonder verblijf
-- res_srtkenmerk_key = 23 -> Van
-- res_srtkenmerk_key = 24 -> Naar
-- mld_srtkenmerk_key = 63 -> Beginstand kilometers
-- mld_srtkenmerk_key = 64 -> Eindstand kilometers
CREATE OR REPLACE VIEW soro_v_autorit_met_km_reg
(res_rsv_ruimte_key,
res_nummer,
res_rsv_ruimte_omschrijving,
res_rsv_ruimte_van,
res_rsv_ruimte_tot,
res_deel_omschrijving,
alg_locatie_code,
alg_locatie_omschrijving,
prs_perslid_naam,
prs_perslid_tussenvoegsel,
prs_perslid_voorletters,
prs_perslid_voornaam,
client,
kosten,
reden_vervoer,
van,
naar,
km_start,
km_einde
)
AS
SELECT rit.res_rsv_ruimte_key,
rit.res_nummer,
rrr.res_rsv_ruimte_omschrijving,
rrr.res_rsv_ruimte_van,
rrr.res_rsv_ruimte_tot,
rd.res_deel_omschrijving,
l.alg_locatie_code,
l.alg_locatie_omschrijving,
p.prs_perslid_naam,
p.prs_perslid_tussenvoegsel,
p.prs_perslid_voorletters,
p.prs_perslid_voornaam,
NULL client,
(SELECT UD.FAC_USRDATA_OMSCHR
FROM res_kenmerkwaarde w, res_kenmerk k, fac_usrdata ud
WHERE ud.fac_usrdata_key = fac.safe_to_number(w.res_kenmerkreservering_waarde)
AND w.res_rsv_ruimte_key = rit.res_rsv_ruimte_key
AND w.res_kenmerk_key = k.res_kenmerk_key
AND k.res_srtkenmerk_key = 2
AND w.res_kenmerkwaarde_verwijder IS NULL) kosten,
(SELECT UD.FAC_USRDATA_OMSCHR
FROM res_kenmerkwaarde w, res_kenmerk k, fac_usrdata ud
WHERE ud.fac_usrdata_key = fac.safe_to_number(w.res_kenmerkreservering_waarde)
AND w.res_rsv_ruimte_key = rit.res_rsv_ruimte_key
AND w.res_kenmerk_key = k.res_kenmerk_key
AND k.res_srtkenmerk_key = 41
AND w.res_kenmerkwaarde_verwijder IS NULL) reden_vervoer,
(SELECT w.res_kenmerkreservering_waarde
FROM res_kenmerkwaarde w, res_kenmerk k
WHERE w.res_rsv_ruimte_key = rit.res_rsv_ruimte_key
AND w.res_kenmerk_key = k.res_kenmerk_key
AND k.res_srtkenmerk_key = 23
AND w.res_kenmerkwaarde_verwijder IS NULL) van,
(SELECT w.res_kenmerkreservering_waarde
FROM res_kenmerkwaarde w, res_kenmerk k
WHERE w.res_rsv_ruimte_key = rit.res_rsv_ruimte_key
AND w.res_kenmerk_key = k.res_kenmerk_key
AND k.res_srtkenmerk_key = 24
AND w.res_kenmerkwaarde_verwijder IS NULL) naar,
NULL km_start,
NULL km_einde
FROM soro_v_autorit_km rit, res_rsv_ruimte rrr, prs_perslid p, res_rsv_deel rrd, res_deel rd, ins_deel d, alg_locatie l
WHERE vervaldatum IS NULL
AND rrr.res_rsv_ruimte_key = rit.res_rsv_ruimte_key
AND p.prs_perslid_key = rrr.res_rsv_ruimte_host_key
AND rrd.res_rsv_ruimte_key = rit.res_rsv_ruimte_key
AND rrd.res_rsv_deel_verwijder IS NULL
AND rd.res_deel_key=rrd.res_deel_key
AND d.ins_deel_key = rd.res_ins_deel_key
AND l.alg_locatie_key = d.ins_alg_locatie_key
UNION
SELECT rit.res_rsv_ruimte_key,
rit.res_nummer,
rrr.res_rsv_ruimte_omschrijving,
rrr.res_rsv_ruimte_van,
rrr.res_rsv_ruimte_tot,
rd.res_deel_omschrijving,
l.alg_locatie_code,
l.alg_locatie_omschrijving,
p.prs_perslid_naam,
p.prs_perslid_tussenvoegsel,
p.prs_perslid_voorletters,
p.prs_perslid_voornaam,
NULL client,
(SELECT UD.FAC_USRDATA_OMSCHR
FROM res_kenmerkwaarde w, res_kenmerk k, fac_usrdata ud
WHERE ud.fac_usrdata_key = fac.safe_to_number(w.res_kenmerkreservering_waarde)
AND w.res_rsv_ruimte_key = rit.res_rsv_ruimte_key
AND w.res_kenmerk_key = k.res_kenmerk_key
AND k.res_srtkenmerk_key = 2
AND w.res_kenmerkwaarde_verwijder IS NULL) kosten,
(SELECT UD.FAC_USRDATA_OMSCHR
FROM res_kenmerkwaarde w, res_kenmerk k, fac_usrdata ud
WHERE ud.fac_usrdata_key = fac.safe_to_number(w.res_kenmerkreservering_waarde)
AND w.res_rsv_ruimte_key = rit.res_rsv_ruimte_key
AND w.res_kenmerk_key = k.res_kenmerk_key
AND k.res_srtkenmerk_key = 41
AND w.res_kenmerkwaarde_verwijder IS NULL) reden_vervoer,
(SELECT w.res_kenmerkreservering_waarde
FROM res_kenmerkwaarde w, res_kenmerk k
WHERE w.res_rsv_ruimte_key = rit.res_rsv_ruimte_key
AND w.res_kenmerk_key = k.res_kenmerk_key
AND k.res_srtkenmerk_key = 23
AND w.res_kenmerkwaarde_verwijder IS NULL) van,
(SELECT w.res_kenmerkreservering_waarde
FROM res_kenmerkwaarde w, res_kenmerk k
WHERE w.res_rsv_ruimte_key = rit.res_rsv_ruimte_key
AND w.res_kenmerk_key = k.res_kenmerk_key
AND k.res_srtkenmerk_key = 24
AND w.res_kenmerkwaarde_verwijder IS NULL) naar,
(SELECT km.mld_kenmerkmelding_waarde
FROM mld_kenmerkmelding km, mld_kenmerk k
WHERE km.mld_melding_key = rit.mld_melding_key
AND km.mld_kenmerk_key = k.mld_kenmerk_key
AND k.mld_srtkenmerk_key = 63
AND km.mld_kenmerkmelding_verwijder IS NULL) km_start,
(SELECT km.mld_kenmerkmelding_waarde
FROM mld_kenmerkmelding km, mld_kenmerk k
WHERE km.mld_melding_key = rit.mld_melding_key
AND km.mld_kenmerk_key = k.mld_kenmerk_key
AND k.mld_srtkenmerk_key = 64
AND km.mld_kenmerkmelding_verwijder IS NULL) km_einde
FROM soro_v_autorit_km rit, res_rsv_ruimte rrr, prs_perslid p, res_rsv_deel rrd, res_deel rd, ins_deel d, alg_locatie l
WHERE vervaldatum IS NOT NULL
AND rrr.res_rsv_ruimte_key = rit.res_rsv_ruimte_key
AND p.prs_perslid_key = rrr.res_rsv_ruimte_host_key
AND rrd.res_rsv_ruimte_key = rit.res_rsv_ruimte_key
AND rrd.res_rsv_deel_verwijder IS NULL
AND rd.res_deel_key=rrd.res_deel_key
AND d.ins_deel_key = rd.res_ins_deel_key
AND l.alg_locatie_key = d.ins_alg_locatie_key;
-- Kenmerk-keys:
-- mld_srtkenmerk_key = 85 -> Naam client
-- mld_srtkenmerk_key = 84 -> Kosten: Client met/zonder verblijf
-- mld_srtkenmerk_key = 87 -> Reden van de rit
-- mld_srtkenmerk_key = 88 -> Van
-- mld_srtkenmerk_key = 86 -> Naar
-- mld_srtkenmerk_key = 83 -> Datum van de rit
-- mld_srtkenmerk_key = 63 -> Beginstand kilometers
-- mld_srtkenmerk_key = 64 -> Eindstand kilometers
-- mld_std_melding_key = 221 -> Prive rit registratie
-- Kilometers gereden met prive auto, dus de ritten ZONDER autoRESERVERING, maar gewoon met je eigen prive-bak
-- Dit zijn de gegevens(records) waar een melding is gemaakt van standaard melding key 221
CREATE OR REPLACE VIEW soro_v_prive_autorit_met_km
(mld_melding_key,
mld_nummer,
mld_melding_omschrijving,
datum_van,
datum_tot,
auto_omschrijving,
alg_locatie_code,
alg_locatie_omschrijving,
prs_perslid_naam,
prs_perslid_tussenvoegsel,
prs_perslid_voorletters,
prs_perslid_voornaam,
client,
kosten,
reden_vervoer,
van,
naar,
km_start,
km_einde
)
AS
SELECT m.mld_melding_key,
m.mld_melding_key,
m.mld_melding_omschrijving,
(SELECT to_date(km.mld_kenmerkmelding_waarde,'dd-mm-yyyy')
FROM mld_kenmerkmelding km, mld_kenmerk k
WHERE km.mld_melding_key = m.mld_melding_key
AND km.mld_kenmerk_key = k.mld_kenmerk_key
AND k.mld_srtkenmerk_key = 83
AND km.mld_kenmerkmelding_verwijder IS NULL) datum_van,
(SELECT to_date(km.mld_kenmerkmelding_waarde,'dd-mm-yyyy')
FROM mld_kenmerkmelding km, mld_kenmerk k
WHERE km.mld_melding_key = m.mld_melding_key
AND km.mld_kenmerk_key = k.mld_kenmerk_key
AND k.mld_srtkenmerk_key = 83
AND km.mld_kenmerkmelding_verwijder IS NULL) datum_tot,
'Eigen auto',
l.alg_locatie_code,
l.alg_locatie_omschrijving,
p.prs_perslid_naam,
p.prs_perslid_tussenvoegsel,
p.prs_perslid_voorletters,
p.prs_perslid_voornaam,
(SELECT km.mld_kenmerkmelding_waarde
FROM mld_kenmerkmelding km, mld_kenmerk k
WHERE km.mld_melding_key = m.mld_melding_key
AND km.mld_kenmerk_key = k.mld_kenmerk_key
AND k.mld_srtkenmerk_key = 85
AND km.mld_kenmerkmelding_verwijder IS NULL) client,
(SELECT UD.FAC_USRDATA_OMSCHR
FROM mld_kenmerkmelding km, mld_kenmerk k, fac_usrdata ud
WHERE ud.fac_usrdata_key = fac.safe_to_number(km.mld_kenmerkmelding_waarde)
AND km.mld_melding_key = m.mld_melding_key
AND km.mld_kenmerk_key = k.mld_kenmerk_key
AND k.mld_srtkenmerk_key = 84
AND km.mld_kenmerkmelding_verwijder IS NULL) kosten,
(SELECT UD.FAC_USRDATA_OMSCHR
FROM mld_kenmerkmelding km, mld_kenmerk k, fac_usrdata ud
WHERE ud.fac_usrdata_key = fac.safe_to_number(km.mld_kenmerkmelding_waarde)
AND km.mld_melding_key = m.mld_melding_key
AND km.mld_kenmerk_key = k.mld_kenmerk_key
AND k.mld_srtkenmerk_key = 87
AND km.mld_kenmerkmelding_verwijder IS NULL) reden_vervoer,
(SELECT km.mld_kenmerkmelding_waarde
FROM mld_kenmerkmelding km, mld_kenmerk k
WHERE km.mld_melding_key = m.mld_melding_key
AND km.mld_kenmerk_key = k.mld_kenmerk_key
AND k.mld_srtkenmerk_key = 88
AND km.mld_kenmerkmelding_verwijder IS NULL) van,
(SELECT km.mld_kenmerkmelding_waarde
FROM mld_kenmerkmelding km, mld_kenmerk k
WHERE km.mld_melding_key = m.mld_melding_key
AND km.mld_kenmerk_key = k.mld_kenmerk_key
AND k.mld_srtkenmerk_key = 86
AND km.mld_kenmerkmelding_verwijder IS NULL) naar,
(SELECT km.mld_kenmerkmelding_waarde
FROM mld_kenmerkmelding km, mld_kenmerk k
WHERE km.mld_melding_key = m.mld_melding_key
AND km.mld_kenmerk_key = k.mld_kenmerk_key
AND k.mld_srtkenmerk_key = 63
AND km.mld_kenmerkmelding_verwijder IS NULL) km_start,
(SELECT km.mld_kenmerkmelding_waarde
FROM mld_kenmerkmelding km, mld_kenmerk k
WHERE km.mld_melding_key = m.mld_melding_key
AND km.mld_kenmerk_key = k.mld_kenmerk_key
AND k.mld_srtkenmerk_key = 64
AND km.mld_kenmerkmelding_verwijder IS NULL) km_einde
FROM mld_melding m, prs_perslid p, alg_locatie l
WHERE m.mld_stdmelding_key = 221
AND p.prs_perslid_key = m.prs_perslid_key_voor
AND l.alg_locatie_key = m.mld_alg_locatie_key;
CREATE OR REPLACE VIEW soro_v_rap_autorit_belasting
(
fclt_f_auto,
fclt_f_jaar,
fclt_f_kwartaal,
fclt_f_maand,
datum,
omschrijving,
chauffeur,
van,
naar,
km_start,
km_eind,
km_gereden
)
AS
SELECT
res_deel_omschrijving,
to_char(res_rsv_ruimte_van,'YYYY'),
'Q' || to_char(res_rsv_ruimte_van,'Q'),
to_char(res_rsv_ruimte_van,'MM'),
to_char(res_rsv_ruimte_van,'DD-MM-YYYY'),
res_rsv_ruimte_omschrijving,
TRIM(prs_perslid_voornaam || decode (prs_perslid_tussenvoegsel, NULL, NULL, ' ' || prs_perslid_tussenvoegsel) || decode (prs_perslid_naam, NULL, NULL, ' ' || prs_perslid_naam)),
van,
naar,
km_start,
km_einde,
fac.safe_to_number(km_einde) - fac.safe_to_number(km_start) km_gereden
FROM soro_v_autorit_met_km_reg;
CREATE OR REPLACE VIEW soro_v_rap_autorit_locatie
(
fclt_f_locatie,
fclt_f_jaar,
fclt_f_kwartaal,
fclt_f_maand,
datum,
fclt_f_prive_zakelijk,
omschrijving,
chauffeur,
van,
naar,
auto,
km_start,
km_eind,
km_gereden,
kosten
)
AS
SELECT
alg_locatie_code || alg_locatie_omschrijving,
to_char(res_rsv_ruimte_van,'YYYY'),
'Q' || to_char(res_rsv_ruimte_van,'Q'),
to_char(res_rsv_ruimte_van,'MM'),
to_char(res_rsv_ruimte_van,'DD-MM-YYYY'),
'Zakelijk',
res_rsv_ruimte_omschrijving,
TRIM(prs_perslid_voornaam || decode (prs_perslid_tussenvoegsel, NULL, NULL, ' ' || prs_perslid_tussenvoegsel) || decode (prs_perslid_naam, NULL, NULL, ' ' || prs_perslid_naam)),
van,
naar,
res_deel_omschrijving,
km_start,
km_einde,
fac.safe_to_number(km_einde) - fac.safe_to_number(km_start) km_gereden,
0.29 * (fac.safe_to_number(km_einde) - fac.safe_to_number(km_start)) kosten
FROM soro_v_autorit_met_km_reg
WHERE UPPER(kosten) LIKE '%LOCATIE%'
UNION ALL
SELECT
alg_locatie_code || alg_locatie_omschrijving,
to_char(datum_van,'YYYY'),
'Q' || to_char(datum_van,'Q'),
to_char(datum_van,'MM'),
to_char(datum_van,'DD-MM-YYYY'),
'Prive',
mld_melding_omschrijving,
TRIM(prs_perslid_voornaam || decode (prs_perslid_tussenvoegsel, NULL, NULL, ' ' || prs_perslid_tussenvoegsel) || decode (prs_perslid_naam, NULL, NULL, ' ' || prs_perslid_naam)),
van,
naar,
auto_omschrijving,
km_start,
km_einde,
fac.safe_to_number(km_einde) - fac.safe_to_number(km_start) km_gereden,
0.29 * (fac.safe_to_number(km_einde) - fac.safe_to_number(km_start)) kosten
FROM soro_v_prive_autorit_met_km
WHERE UPPER(kosten) LIKE '%LOCATIE%';
CREATE OR REPLACE VIEW soro_v_rap_autorit_client
(
fclt_f_client,
fclt_f_verblijf_behandeling,
fclt_f_reden_vervoer,
fclt_f_jaar,
fclt_f_kwartaal,
fclt_f_maand,
datum,
fclt_f_prive_zakelijk,
omschrijving,
chauffeur,
van,
naar,
auto,
km_start,
km_eind,
km_gereden,
kosten
)
AS
SELECT
w.res_kenmerkreservering_waarde client,
kosten,
reden_vervoer,
to_char(res_rsv_ruimte_van,'YYYY'),
'Q' || to_char(res_rsv_ruimte_van,'Q'),
to_char(res_rsv_ruimte_van,'MM'),
to_char(res_rsv_ruimte_van,'DD-MM-YYYY'),
'Zakelijk',
res_rsv_ruimte_omschrijving,
TRIM(prs_perslid_voornaam || decode (prs_perslid_tussenvoegsel, NULL, NULL, ' ' || prs_perslid_tussenvoegsel) || decode (prs_perslid_naam, NULL, NULL, ' ' || prs_perslid_naam)),
van,
naar,
res_deel_omschrijving,
km_start,
km_einde,
fac.safe_to_number(km_einde) - fac.safe_to_number(km_start) km_gereden,
0.29 * (fac.safe_to_number(km_einde) - fac.safe_to_number(km_start)) kosten
FROM soro_v_autorit_met_km_reg a, res_kenmerkwaarde w, res_kenmerk k
WHERE UPPER(kosten) LIKE '%CLI<4C>NT%'
AND w.res_rsv_ruimte_key = a.res_rsv_ruimte_key
AND w.res_kenmerk_key = k.res_kenmerk_key
AND k.res_srtkenmerk_key = 1
AND w.res_kenmerkwaarde_verwijder IS NULL
UNION ALL
SELECT
client,
kosten,
reden_vervoer,
to_char(datum_van,'YYYY'),
'Q' || to_char(datum_van,'Q'),
to_char(datum_van,'MM'),
to_char(datum_van,'DD-MM-YYYY'),
'Prive',
mld_melding_omschrijving,
TRIM(prs_perslid_voornaam || decode (prs_perslid_tussenvoegsel, NULL, NULL, ' ' || prs_perslid_tussenvoegsel) || decode (prs_perslid_naam, NULL, NULL, ' ' || prs_perslid_naam)),
van,
naar,
auto_omschrijving,
km_start,
km_einde,
fac.safe_to_number(km_einde) - fac.safe_to_number(km_start) km_gereden,
0.29 * (fac.safe_to_number(km_einde) - fac.safe_to_number(km_start)) kosten
FROM soro_v_prive_autorit_met_km
WHERE UPPER(kosten) LIKE '%CLI<4C>NT%';
BEGIN fac.registercustversion('SORO', 8); END;
/
BEGIN adm.systrackscriptId('$Id$', 0); END;
/
show errors;
commit;
spool off;