Files
Customer/NYBU/nybu.sql
Suzan Wiegerinck b7d69d501d NYBU#37370 en NYBU#37367
- con_nr vervangen door san_nr 
- Studenten met een datum verwijder moeten evengoed opnieuw worden ingevoerd

svn path=/Customer/trunk/; revision=32253
2017-01-06 13:50:17 +00:00

12060 lines
504 KiB
MySQL
Raw Blame History

--
-- $Id$
--
-- Script containing customer specific sql statements for the FACILITOR database
DEFINE thisfile = 'NYBU.SQL'
DEFINE dbuser = '^NYBU'
DEFINE custid = 'NYBU'
SET ECHO ON
SET DEFINE ON
COLUMN fcltlogfile NEW_VALUE fcltlogfile NOPRINT;
WHENEVER SQLERROR EXIT;
SELECT adm.scriptspoolfile('&dbuser', '&thisfile') AS fcltlogfile FROM DUAL;
WHENEVER SQLERROR CONTINUE;
SPOOL &fcltlogfile
SET DEFINE OFF
------ payload begin ------
CREATE OR REPLACE PACKAGE nybu
AS
TYPE t_cursor IS REF CURSOR;
FUNCTION getPeriodeNaam (p_periode IN VARCHAR2, p_lang IN VARCHAR2)
RETURN VARCHAR2;
FUNCTION getAantalDagenInPeriode (p_van IN DATE,
p_tot IN DATE,
p_periode_van IN DATE,
p_periode_tot IN DATE:= NULL)
RETURN NUMBER;
PROCEDURE nybu_rap_vrije_kamers (user_key IN NUMBER,
p_datum_van IN VARCHAR2, -- Let wel: formaat '16-01-2006'
p_datum_tot IN VARCHAR2,
p_cursor OUT t_cursor);
PROCEDURE upsertkenmerk_res (p_kenmerk_key IN NUMBER,
p_rsv_ruimte_key IN NUMBER,
p_waarde IN VARCHAR2);
END nybu;
/
CREATE OR REPLACE PACKAGE BODY nybu
AS
FUNCTION getPeriodeNaam (p_periode IN VARCHAR2, p_lang IN VARCHAR2)
RETURN VARCHAR2
IS
v_naam VARCHAR2 (20);
BEGIN
SELECT DECODE (
p_lang,
'NL',
DECODE (SUBSTR (p_periode, 5, 2),
'01', 'januari',
'02', 'februari',
'03', 'maart',
'04', 'april',
'05', 'mei',
'06', 'juni',
'07', 'juli',
'08', 'augustus',
'09', 'september',
'10', 'oktober',
'11', 'november',
'12', 'december'),
DECODE (SUBSTR (p_periode, 5, 2),
'01', 'January',
'02', 'February',
'03', 'March',
'04', 'April',
'05', 'May',
'06', 'June',
'07', 'July',
'08', 'August',
'09', 'September',
'10', 'October',
'11', 'November',
'12', 'December'))
|| ' '
|| SUBSTR (p_periode, 1, 4)
INTO v_naam
FROM DUAL;
RETURN v_naam;
END getPeriodeNaam;
-- Bepaal aantal dagen in begin- of eindperiode waarvoor huur betaald moet worden
-- Periode moet binnen dezelfde kalendermaand liggen.
-- Als p_periode_tot leeg is, gaan we uit van het einde van de maand
-- Als p_van en/of p_tot leeg zijn, dan zetten we die op begin resp. eind van de periode
FUNCTION getAantalDagenInPeriode (p_van IN DATE,
p_tot IN DATE,
p_periode_van IN DATE,
p_periode_tot IN DATE:= NULL)
RETURN NUMBER
IS
o_aantal_dagen NUMBER (4);
v_periode_tot DATE;
v_van DATE;
v_tot DATE;
BEGIN
-- Einddatum van de periode die we beschouwen.
-- Als geen einddatum, dan einde van de maand (startdatum zou dan eerste dag van de maand moeten zijn)
v_periode_tot := COALESCE (p_periode_tot, LAST_DAY (p_periode_van));
-- Valt periode (p_van - p_tot) geheel buiten (p_periode_van - p_periode_tot)? Dan nul dagen overlap!
IF (p_tot < p_periode_van OR p_van > p_periode_tot)
THEN
RETURN 0;
END IF;
-- Aantal dagen is maximaal de hele periode
o_aantal_dagen :=
CAST (TO_CHAR (v_periode_tot, 'DD') AS INT)
- CAST (TO_CHAR (p_periode_van, 'DD') AS INT)
+ 1;
v_van := p_van;
v_tot := p_tot;
-- Als geen van/tot datum opgegeven, of als van/tot datum buiten periode valt,
-- dan zet op begin-/einddatum van de periode (periode)
IF (v_van IS NULL OR v_van < p_periode_van)
THEN
v_van := p_periode_van;
END IF;
IF (v_tot IS NULL OR v_tot > v_periode_tot)
THEN
v_tot := v_periode_tot;
END IF;
-- Beslaat het contract de volledige periode, of beginnen/eindigen we halverwege?
-- DAN:
-- - ingangsmaand is hetzelfde als van huidige periode
-- - ingangsdag is later dan de eerste dag van de periode
-- EN/OF:
-- - eindmaand is hetzelfde als van huidige periode
-- - einddag is eerder dan de laatste dag van de periode
IF ( (TRUNC (v_van, 'MM') = TRUNC (p_periode_van, 'MM')
AND TRUNC (v_van, 'DD') > p_periode_van)
OR (TRUNC (v_tot, 'MM') = TRUNC (v_periode_tot, 'MM')
AND TRUNC (v_tot, 'DD') < v_periode_tot))
THEN
-- prijsfactor = aantal_dagen_gehuurd / aantal_dagen_in_deze_periode
-- = einddag - begindag + 1 / aantal_dagen_in_deze_periode
o_aantal_dagen :=
( CAST (TO_CHAR (v_tot, 'DD') AS INT)
- CAST (TO_CHAR (v_van, 'DD') AS INT)
+ 1);
END IF;
RETURN o_aantal_dagen;
END;
-- Overzicht van beschikbare studentenkamers (zonder huidig/toekomstig contract)
-- Toont (indien aanwezig) ook wanneer het eerstvolgende contract begint en het vorige eindigde.
-- (Aangepast van view naar procedure voor NYBU#28846)
-- contractsoort "Student room" 55
-- cnt_kenmerk "Student room" 1
-- alg_ruimtekenmerk "Zijde campus" 1080
-- alg_ruimtekenmerk "Out of order tot" 1100
-- fac_usrtab "Zijde campus" 281
PROCEDURE nybu_rap_vrije_kamers (user_key IN NUMBER,
p_datum_van IN VARCHAR2, -- Let wel: formaat '16-01-2006'
p_datum_tot IN VARCHAR2,
p_cursor OUT t_cursor)
AS
v_datum_van DATE;
v_datum_tot DATE;
BEGIN
v_datum_van := fac.safe_to_date (p_datum_van, 'dd-mm-yyyy');
v_datum_tot := fac.safe_to_date (p_datum_tot, 'dd-mm-yyyy');
OPEN p_cursor FOR
SELECT rg.alg_ruimte_nr hide_f_sort,
g.alg_gebouw_naam fclt_f_gebouw,
rg.alg_verdieping_code fclt_f_verdieping,
rg.alg_ruimte_nr fclt_x_kamer,
'<a class="details" onclick=''FcltMgr.openDetail("'
|| 'appl/ALG/alg_ruimte.asp?key='
|| rg.alg_ruimte_key
|| '")''>'
|| HTF.escape_sc (rg.alg_ruimte_nr)
|| '</a>'
html_kamer,
rg.alg_srtruimte_omschrijving fclt_f_type,
rg.alg_ruimte_bruto_vloeropp opp,
ud.fac_usrdata_omschr fclt_f_zijde,
(SELECT TO_CHAR (MIN (cnt_contract_looptijd_van),
'YYYY-MM-DD')
FROM cnt_contract c, cnt_kenmerkcontract kc
WHERE c.ins_discipline_key = 55
AND c.cnt_contract_looptijd_van >= v_datum_tot
AND kc.cnt_contract_key = c.cnt_contract_key
AND kc.cnt_kenmerk_key = 1
AND fac.safe_to_number (
kc.cnt_kenmerkcontract_waarde) =
rg.alg_ruimte_key)
bezet_vanaf,
(SELECT TO_CHAR (MAX (cnt_contract_looptijd_tot),
'YYYY-MM-DD')
FROM cnt_contract c, cnt_kenmerkcontract kc
WHERE c.ins_discipline_key = 55
AND c.cnt_contract_looptijd_tot <= v_datum_van
AND kc.cnt_contract_key = c.cnt_contract_key
AND kc.cnt_kenmerk_key = 1
AND fac.safe_to_number (
kc.cnt_kenmerkcontract_waarde) =
rg.alg_ruimte_key)
vrij_sinds,
fac.safe_to_date (ooo.alg_onrgoedkenmerk_waarde,
'DD-MM-YYYY')
out_of_order_tot
FROM nybu_v_studentenkamers sk,
alg_v_ruimte_gegevens rg,
alg_gebouw g,
(SELECT *
FROM alg_onrgoedkenmerk
WHERE alg_kenmerk_key = 1080
AND alg_onrgoedkenmerk_verwijder IS NULL) zijde,
(SELECT *
FROM alg_onrgoedkenmerk
WHERE alg_kenmerk_key = 1100
AND alg_onrgoedkenmerk_verwijder IS NULL) ooo,
(SELECT *
FROM fac_usrdata
WHERE fac_usrtab_key = 281) ud
WHERE sk.alg_ruimte_key = rg.alg_ruimte_key
AND g.alg_gebouw_key = rg.alg_gebouw_key
AND zijde.alg_onrgoed_key(+) = rg.alg_ruimte_key
AND ooo.alg_onrgoed_key(+) = rg.alg_ruimte_key
AND ud.fac_usrdata_key(+) =
fac.safe_to_number (zijde.alg_onrgoedkenmerk_waarde)
AND NOT EXISTS
(SELECT 1
FROM cnt_contract c, cnt_kenmerkcontract kc
WHERE c.ins_discipline_key = 55
AND c.cnt_contract_looptijd_tot >= v_datum_van
AND c.cnt_contract_looptijd_van <= v_datum_tot
AND kc.cnt_contract_key = c.cnt_contract_key
AND kc.cnt_kenmerk_key = 1
AND c.cnt_contract_verwijder IS NULL
AND fac.safe_to_number (
kc.cnt_kenmerkcontract_waarde) =
rg.alg_ruimte_key)
ORDER BY rg.alg_ruimte_nr;
END;
PROCEDURE upsertkenmerk_res (p_kenmerk_key IN NUMBER,
p_rsv_ruimte_key IN NUMBER,
p_waarde IN VARCHAR2)
IS
v_count NUMBER;
BEGIN
SELECT COUNT ( * )
INTO v_count
FROM res_kenmerkwaarde
WHERE res_rsv_ruimte_key = p_rsv_ruimte_key
AND res_kenmerk_key = p_kenmerk_key
AND res_kenmerkwaarde_verwijder IS NULL;
IF v_count = 1
THEN
IF p_waarde IS NULL
THEN
DELETE res_kenmerkwaarde
WHERE res_rsv_ruimte_key = p_rsv_ruimte_key
AND res_kenmerk_key = p_kenmerk_key
AND res_kenmerkwaarde_verwijder IS NULL;
ELSE
UPDATE res_kenmerkwaarde
SET res_kenmerkreservering_waarde = p_waarde
WHERE res_rsv_ruimte_key = p_rsv_ruimte_key
AND res_kenmerk_key = p_kenmerk_key
AND res_kenmerkwaarde_verwijder IS NULL;
END IF;
ELSE
IF p_kenmerk_key IS NOT NULL AND p_waarde IS NOT NULL
THEN
INSERT INTO res_kenmerkwaarde (res_kenmerk_key,
res_rsv_ruimte_key,
res_kenmerkreservering_waarde)
VALUES (p_kenmerk_key, p_rsv_ruimte_key, p_waarde);
END IF;
END IF;
END;
END nybu;
/
------- PERSONENIMPORT ACTIVE DIRECTORY -----------------------------------------
CREATE OR REPLACE PROCEDURE nybu_import_prs (p_import_key IN NUMBER)
IS
c_fielddelimitor VARCHAR2 (1) := ';';
v_newline VARCHAR2 (1000); -- Input line
v_header VARCHAR2 (1000);
v_aanduiding VARCHAR2 (200);
v_errorhint VARCHAR2 (1000);
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
header_is_valid NUMBER := 0;
v_ongeldig NUMBER (1);
v_count_tot NUMBER (10);
v_count_import NUMBER (10);
v_count NUMBER;
-- De importvelden:
v_prs_perslid_naam VARCHAR2 (256);
v_prs_perslid_voornaam VARCHAR2 (256);
v_prs_perslid_oslogin VARCHAR2 (256);
v_prs_perslid_nr VARCHAR2 (256);
v_prs_projkpn_nr VARCHAR2 (256);
v_prs_afdeling_omschrijving VARCHAR2 (256);
v_prs_srtperslid_omschrijving VARCHAR2 (256);
v_prs_perslid_email VARCHAR2 (256);
v_prs_perslid_telefoonnr VARCHAR2 (256);
v_prs_perslid_mobiel VARCHAR2 (256);
v_werkplek_oms VARCHAR2 (256);
v_prs_perslid_tussenvoegsel prs_perslid.prs_perslid_tussenvoegsel%TYPE;
-- Dummy
v_dummy VARCHAR2 (256);
CURSOR c1
IS
SELECT *
FROM fac_imp_file
WHERE fac_import_key = p_import_key
ORDER BY fac_imp_file_index;
BEGIN
DELETE FROM nybu_imp_prs;
COMMIT;
v_count_tot := 0;
v_count_import := 0;
FOR rec1 IN c1
LOOP
BEGIN
v_newline := rec1.fac_imp_file_line;
v_header := v_newline;
v_aanduiding := '';
v_errorhint := 'Fout bij opvragen te importeren rij';
v_ongeldig := 0;
v_prs_perslid_tussenvoegsel := NULL;
-- Lees alle veldwaarden
fac.imp_getfield (v_newline,
c_fielddelimitor,
v_prs_perslid_voornaam); -- givenname
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_naam); -- surname
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_email); -- mail
fac.imp_getfield (v_newline,
c_fielddelimitor,
v_prs_afdeling_omschrijving); -- department
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_mobiel); -- mobile
fac.imp_getfield (v_newline,
c_fielddelimitor,
v_prs_perslid_telefoonnr); -- telephonenumber
fac.imp_getfield (v_newline,
c_fielddelimitor,
v_prs_srtperslid_omschrijving); -- title
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_nr); -- EmployeeNumber
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_projkpn_nr); -- departmentNumber
fac.imp_getfield (v_newline, c_fielddelimitor, v_werkplek_oms); -- physicalDeliveryOfficeName
fac.imp_getfield (v_newline,
c_fielddelimitor,
v_prs_perslid_oslogin); -- samAccountName
-- fac.imp_getfield (v_newline, c_fielddelimitor, v_dummy);
v_aanduiding :=
'['
|| v_prs_perslid_oslogin
|| '|'
|| v_prs_perslid_naam
|| '|'
|| v_prs_perslid_voornaam
|| '|'
|| v_prs_perslid_email
|| '] ';
-- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen
-- de juiste kolomkop. Ik controleer daarbij ALLE kolommen!
-- Ik negeer alles totdat ik een geldige header ben gepasseerd.
IF (header_is_valid = 0)
THEN
IF UPPER (v_header) LIKE
UPPER('"givenname";"surname";"mail";"department";"mobile";"telephonenumber";"title";"EmployeeNumber";"departmentNumber";"physicalDeliveryOfficeName";"samAccountName"'
|| '%')
THEN
header_is_valid := 1;
END IF;
ELSE
v_count_tot := v_count_tot + 1;
-- Controleer alle veldwaarden
v_errorhint := 'Ongeldig personeelsnummer';
v_prs_perslid_nr := TRIM (v_prs_perslid_nr);
IF LENGTH (v_prs_perslid_nr) > 16
THEN
v_prs_perslid_nr := SUBSTR (v_prs_perslid_nr, 1, 16);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Personeelsnummer te lang',
'Personeelsnummer wordt afgebroken tot ['
|| v_prs_perslid_nr
|| ']');
END IF;
v_errorhint := 'Ongeldige achternaam';
v_prs_perslid_naam := TRIM (v_prs_perslid_naam);
IF LENGTH (v_prs_perslid_naam) > 30
THEN
v_prs_perslid_naam := SUBSTR (v_prs_perslid_naam, 1, 30);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Achternaam te lang',
'Achternaam wordt afgebroken tot ['
|| v_prs_perslid_naam
|| ']');
ELSE
IF (v_prs_perslid_naam IS NULL)
THEN
v_ongeldig := 1;
fac.imp_writelog (
p_import_key,
'E',
v_aanduiding || 'Achternaam onbekend',
'Achternaam is verplicht; regel wordt overgeslagen!');
END IF;
END IF;
v_errorhint := 'Ongeldige voornaam';
v_prs_perslid_voornaam := TRIM (v_prs_perslid_voornaam);
IF LENGTH (v_prs_perslid_voornaam) > 30
THEN
v_prs_perslid_voornaam :=
SUBSTR (v_prs_perslid_voornaam, 1, 30);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Voornaam te lang',
'Voornaam wordt afgebroken tot ['
|| v_prs_perslid_voornaam
|| ']');
END IF;
v_errorhint := 'Ongeldige accountnaam';
v_prs_perslid_oslogin := TRIM (v_prs_perslid_oslogin);
IF LENGTH (v_prs_perslid_oslogin) > 30
THEN
v_prs_perslid_oslogin := SUBSTR (v_prs_perslid_oslogin, 1, 30);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'accountnaam te lang',
'accountnaam wordt afgebroken tot ['
|| v_prs_perslid_oslogin
|| ']');
ELSE
IF (v_prs_perslid_oslogin IS NULL)
THEN
v_ongeldig := 1;
fac.imp_writelog (
p_import_key,
'E',
v_aanduiding || 'accountnaam onbekend',
'Accountnaam is verplicht; regel wordt overgeslagen!');
END IF;
END IF;
v_errorhint := 'Ongeldige projectkostenplaats';
v_prs_projkpn_nr := TRIM (v_prs_projkpn_nr);
IF LENGTH (v_prs_projkpn_nr) > 30
THEN
v_prs_projkpn_nr := SUBSTR (v_prs_projkpn_nr, 1, 30);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Projectkostenplaats te lang',
'Projectkostenplaats wordt afgebroken tot ['
|| v_prs_projkpn_nr
|| ']');
END IF;
v_errorhint := 'Ongeldige afdeling';
v_prs_afdeling_omschrijving := TRIM (v_prs_afdeling_omschrijving);
IF LENGTH (v_prs_afdeling_omschrijving) > 60
THEN
v_prs_afdeling_omschrijving :=
SUBSTR (v_prs_afdeling_omschrijving, 1, 60);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Afdeling te lang',
'Afdeling wordt afgebroken tot ['
|| v_prs_afdeling_omschrijving
|| ']');
ELSE
IF (v_prs_afdeling_omschrijving IS NULL)
THEN
v_prs_afdeling_omschrijving := 'Unknown';
--TODO: verplicht maken?
--v_ongeldig := 1;
--fac.imp_writelog (
-- p_import_key,
-- 'E',
-- v_aanduiding || 'Afdeling onbekend',
-- 'Afdeling is verplicht; regel wordt overgeslagen!');
END IF;
END IF;
v_errorhint := 'Ongeldige functie';
v_prs_srtperslid_omschrijving :=
TRIM (v_prs_srtperslid_omschrijving);
IF LENGTH (v_prs_srtperslid_omschrijving) > 60
THEN
v_prs_srtperslid_omschrijving :=
SUBSTR (v_prs_srtperslid_omschrijving, 1, 60);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Functie te lang',
'Functie wordt afgebroken tot ['
|| v_prs_srtperslid_omschrijving
|| ']');
ELSE
IF (v_prs_srtperslid_omschrijving IS NULL)
THEN
v_prs_srtperslid_omschrijving := 'Unknown';
--TODO: verplicht maken?
--v_ongeldig := 1;
--fac.imp_writelog (
-- p_import_key,
-- 'E',
-- v_aanduiding || 'Functie onbekend',
-- 'Functie is verplicht; regel wordt overgeslagen!');
END IF;
END IF;
v_errorhint := 'Telefoonnummer te lang';
v_prs_perslid_telefoonnr := TRIM (v_prs_perslid_telefoonnr);
IF LENGTH (v_prs_perslid_telefoonnr) > 15
THEN
v_prs_perslid_telefoonnr :=
SUBSTR (v_prs_perslid_telefoonnr, 1, 15);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || v_errorhint,
'Nummer wordt afgebroken tot ['
|| v_prs_perslid_telefoonnr
|| ']');
END IF;
v_errorhint := 'E-mailadres te lang';
v_prs_perslid_email := TRIM (v_prs_perslid_email);
IF LENGTH (v_prs_perslid_email) > 100
THEN
v_prs_perslid_email := SUBSTR (v_prs_perslid_email, 1, 100);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || v_errorhint,
'E-mailadres wordt afgebroken tot ['
|| v_prs_perslid_email
|| ']');
END IF;
v_errorhint := 'Mobiel nummer te lang';
v_prs_perslid_mobiel := TRIM (v_prs_perslid_mobiel);
IF LENGTH (v_prs_perslid_mobiel) > 15
THEN
v_prs_perslid_mobiel := SUBSTR (v_prs_perslid_mobiel, 1, 15);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || v_errorhint,
'Nummer wordt afgebroken tot ['
|| v_prs_perslid_mobiel
|| ']');
END IF;
v_errorhint := 'Tussenvoegsel';
SELECT MAX (fac_usrdata_omschr)
INTO v_prs_perslid_tussenvoegsel
FROM fac_usrdata u
WHERE UPPER (v_prs_perslid_naam) LIKE
UPPER (u.fac_usrdata_omschr) || ' ' || '%'
AND fac_usrtab_key = 1;
IF (v_prs_perslid_tussenvoegsel IS NOT NULL)
THEN
v_prs_perslid_naam :=
TRIM(SUBSTR (v_prs_perslid_naam,
LENGTH (v_prs_perslid_tussenvoegsel) + 1));
-- fac.imp_writelog (
-- p_import_key,
-- 'I',
-- v_aanduiding || 'Tussenvoegsel: '||v_prs_perslid_tussenvoegsel,
-- 'Achternaam: '||v_prs_perslid_naam);
END IF;
-- Insert geformatteerde import record
IF v_ongeldig = 0
THEN
BEGIN
v_errorhint :=
'Fout bij toevoegen regel aan importtabel NYBU_IMP_PRS';
INSERT INTO nybu_imp_prs (imp_datum,
prs_perslid_naam,
prs_perslid_voornaam,
prs_perslid_tussenvoegsel,
prs_perslid_oslogin,
prs_perslid_nr,
prs_projkpn_nr,
prs_afdeling_omschrijving,
prs_srtperslid_omschrijving,
prs_perslid_email,
prs_perslid_telefoonnr,
prs_perslid_mobiel,
werkplek_oms)
VALUES (SYSDATE,
v_prs_perslid_naam,
v_prs_perslid_voornaam,
v_prs_perslid_tussenvoegsel,
v_prs_perslid_oslogin,
v_prs_perslid_nr,
v_prs_projkpn_nr,
v_prs_afdeling_omschrijving,
v_prs_srtperslid_omschrijving,
v_prs_perslid_email,
v_prs_perslid_telefoonnr,
v_prs_perslid_mobiel,
v_werkplek_oms);
COMMIT;
v_count_import := v_count_import + 1;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg :=
v_errorhint
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || v_errormsg,
'Ingelezen regel kan niet worden weggeschreven!');
COMMIT;
END;
END IF;
END IF; -- header_valid
END;
END LOOP;
fac.imp_writelog (
p_import_key,
'S',
'Persoon: aantal ingelezen regels: ' || TO_CHAR (v_count_tot),
'');
fac.imp_writelog (
p_import_key,
'S',
'Persoon: aantal ongeldige importregels: '
|| TO_CHAR (v_count_tot - v_count_import),
'');
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.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
v_errorhint);
COMMIT;
END nybu_import_prs;
/
CREATE OR REPLACE PROCEDURE nybu_update_prs (p_import_key IN NUMBER)
IS
-- LET OP: moet idem zijn als declaratie bij nybu_IMPORT_PRS
c_persoon_inactief VARCHAR2 (30) := 'INACTIEF: ';
-- Maximaal percentage aan nieuwe medewerkers tov. actieve medewerkers met een nummer
c_max_delta_percentage NUMBER (10) := 20;
c_min_persons NUMBER := 350;
-- Ruimte waar personen in geplaatst worden (indien nog geen ruimte in opgegeven gebouw)
c_gebouw_code VARCHAR2 (10) := '';
c_ruimte_nr VARCHAR2 (10) := '999';
c_gebouw_key NUMBER (10);
c_ruimte_key NUMBER (10);
-- Groep waar personen in geplaatst worden (indien nog geen groep)
c_groep_upper VARCHAR2 (30) := '_DEFAULT';
v_aanduiding VARCHAR2 (200);
v_errorhint VARCHAR2 (1000);
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_count_prs_import NUMBER (10); -- #actieve personen na import!
v_count_prs_actual NUMBER (10); -- #actieve personen v<><76>r import!
v_count_tot NUMBER (10);
v_count_error NUMBER (10);
v_count NUMBER (10);
--
v_perslid_key NUMBER (10);
v_perslid_naam VARCHAR2 (30);
v_perslid_tussenvoegsel VARCHAR2 (15);
v_kpn_key NUMBER (10);
v_afdeling_key NUMBER (10);
v_srtperslid_key NUMBER (10);
--v_oslogin VARCHAR2 (30);
--v_locatie_key NUMBER (10);
v_gebouw_key NUMBER (10);
v_verdieping_key NUMBER (10);
v_ruimte_key NUMBER (10);
v_ruimte_nr VARCHAR2 (10);
v_wp_key NUMBER (10);
v_wp_volgnr NUMBER (3);
v_wp_oms VARCHAR2 (30);
v_groep_key NUMBER (10);
v_kenmerklink_key NUMBER (10);
v_dbg_gebouw_code VARCHAR2 (10);
v_dbg_ruimte_nr VARCHAR2 (10);
-- Alle personen met primaire login in Facilitor, die in de import niet voorkomen.
-- Dubbele nummers? Dan wordt iemand mogelijk niet verwijderd/INACTIEF!
CURSOR cdelprs
IS
SELECT p.prs_perslid_key,
p.prs_perslid_oslogin,
p.prs_perslid_naam,
p.prs_perslid_voornaam
FROM prs_v_aanwezigperslid p, prs_srtperslid sp
WHERE p.prs_perslid_oslogin IS NOT NULL
AND p.prs_perslid_oslogin NOT LIKE '\_%' ESCAPE '\'
AND p.prs_srtperslid_key = sp.prs_srtperslid_key
AND UPPER (sp.prs_srtperslid_omschrijving) NOT LIKE '%STUDENT%'
AND NOT EXISTS
(SELECT 1
FROM nybu_imp_prs ip
WHERE UPPER (ip.prs_perslid_oslogin) =
p.prs_perslid_oslogin);
-- Werkplekken van te verwijderen persoon
-- Als een persoon (logisch) verwijderd wordt, worden zijn/haar (perslid-)werkplekken dat ook
CURSOR cdelwp (
p_perslid_key NUMBER)
IS
SELECT pw.prs_perslidwerkplek_key, w.prs_werkplek_key
FROM prs_perslidwerkplek pw, prs_werkplek w
WHERE pw.prs_perslid_key = p_perslid_key
AND w.prs_werkplek_key = pw.prs_werkplek_key;
-- Dubbele nummers? Dan worden gewoon 2 (of meer) personen toegevoegd!
-- Alle gegevens uit importtabel geformatteerd volgens specificatie
CURSOR cperslid
IS
SELECT prs_perslid_naam,
prs_perslid_tussenvoegsel,
prs_perslid_voornaam,
prs_perslid_oslogin,
prs_perslid_nr,
prs_projkpn_nr,
prs_afdeling_omschrijving,
prs_srtperslid_omschrijving,
prs_perslid_email,
prs_perslid_telefoonnr,
prs_perslid_mobiel
FROM nybu_imp_prs
WHERE prs_perslid_oslogin IS NOT NULL;
-- Soort perslid/functie
CURSOR csrtperslid
IS
SELECT MIN (prs_perslid_oslogin) prs_perslid_oslogin,
MIN (prs_perslid_naam) prs_perslid_naam,
MIN (prs_perslid_voornaam) prs_perslid_voornaam,
MIN (prs_srtperslid_omschrijving) prs_srtperslid_omschrijving
FROM nybu_imp_prs
GROUP BY UPPER (prs_srtperslid_omschrijving);
-- Dubbele nummers? Dan krijgt iemand mogelijk de verkeerde plaats!
-- Personen in importsheet + hun werkplekken
-- (voor maken nieuwe/verhuizen naar (virtuele) werkplek)
CURSOR cwp
IS
SELECT p.*
FROM nybu_imp_prs ip, prs_v_aanwezigperslid p
WHERE UPPER (ip.prs_perslid_oslogin) = UPPER (p.prs_perslid_oslogin);
-- Alle actieve personen met primaire login (ie. de import-doelgroep) zonder een werkplek
-- Voor logging: lijst van mensen zonder werkplek
CURSOR cnowp
IS
SELECT p.prs_perslid_key,
p.prs_perslid_oslogin,
p.prs_perslid_naam,
p.prs_perslid_voornaam
FROM prs_v_aanwezigperslid p
WHERE p.prs_perslid_oslogin IS NOT NULL
AND p.prs_perslid_naam NOT LIKE c_persoon_inactief || '%'
AND NOT EXISTS (SELECT pw.prs_perslid_key
FROM prs_perslidwerkplek pw
WHERE pw.prs_perslid_key = p.prs_perslid_key);
-- Alle aanwezige personen met primaire login (ie. de import-doelgroep) niet in een authorisatiegroep
CURSOR cnogroup
IS
SELECT p.prs_perslid_key,
p.prs_perslid_oslogin,
p.prs_perslid_naam,
p.prs_perslid_voornaam
FROM prs_v_aanwezigperslid p
WHERE p.prs_perslid_oslogin IS NOT NULL
AND NOT EXISTS (SELECT 1
FROM fac_gebruikersgroep g
WHERE g.prs_perslid_key = p.prs_perslid_key);
BEGIN
-- Bepaal accountnaam-match tussen Facilitor en RECENT importbestand ofwel
-- het aantal actieve personen na import.
-- RECENT betekent niet meer dan een kwartiertje oud (14,4 minuten); dit voorkomt
-- dat - als er geen nieuw importbestand is aangeleverd - telkens dezelfde fouten
-- worden gerapporteerd (nl. op basis van een oud importbestand in NYBU_IMP_PRS).
SELECT COUNT ( * )
INTO v_count_prs_import
FROM prs_v_aanwezigperslid p, nybu_imp_prs ip
WHERE p.prs_perslid_oslogin IS NOT NULL
AND UPPER (p.prs_perslid_oslogin) = UPPER (ip.prs_perslid_oslogin)
AND (ip.imp_datum + 0.01) > SYSDATE;
-- Bepaal huidig aantal actieve personen in Facilitor.
SELECT DECODE (COUNT ( * ), 0, 1, COUNT ( * ))
INTO v_count_prs_actual
FROM prs_v_aanwezigperslid
WHERE prs_perslid_oslogin IS NOT NULL;
-- IF ( (TRUNC ( (v_count_prs_import / v_count_prs_actual) * 100) >=
-- (100 - c_max_delta_percentage))
-- OR
-- v_count_prs_actual < 20
-- )
IF (v_count_prs_import >= c_min_persons)
THEN
-- Geldig importbestand wat betreft aantal personen
FOR recdelprs IN cdelprs
LOOP
BEGIN
-- Heeft persoon actuele/toekomstige verplichtingen?
SELECT COUNT ( * )
INTO v_count
FROM prs_perslid p, prs_v_verplichting_keys r
WHERE p.prs_perslid_key = r.prs_perslid_key
AND p.prs_perslid_key = recdelprs.prs_perslid_key;
IF (v_count = 0)
THEN
v_errorhint := 'Fout bij verwijderen persoon';
UPDATE prs_perslid
SET prs_perslid_verwijder = SYSDATE
WHERE prs_perslid_key = recdelprs.prs_perslid_key;
fac.imp_writelog (
p_import_key,
'I',
'Persoon met login ['
|| recdelprs.prs_perslid_oslogin
|| '] en naam ['
|| recdelprs.prs_perslid_naam
|| ', '
|| recdelprs.prs_perslid_voornaam
|| '] is verwijderd',
'Persoon is verwijderd');
ELSE
-- Staat persoon INACTIEF?
SELECT COUNT ( * )
INTO v_count
FROM prs_perslid p
WHERE p.prs_perslid_naam LIKE c_persoon_inactief || '%'
AND p.prs_perslid_key = recdelprs.prs_perslid_key;
IF (v_count = 0)
THEN
v_errorhint := 'Fout bij INACTIEF zetten persoon';
-- Persoon INACTIEF zetten (update naam + reset oslogin)
UPDATE prs_perslid
SET prs_perslid_naam =
SUBSTR (c_persoon_inactief || prs_perslid_naam,
1,
30),
prs_perslid_oslogin = NULL
WHERE prs_perslid_key = recdelprs.prs_perslid_key;
fac.imp_writelog (
p_import_key,
'I',
'Persoon met login ['
|| recdelprs.prs_perslid_oslogin
|| '] en naam ['
|| recdelprs.prs_perslid_naam
|| ', '
|| recdelprs.prs_perslid_voornaam
|| '] is INACTIEF gezet',
'Persoon met verplichtingen is INACTIEF gezet');
ELSE
v_errorhint := 'Fout bij INACTIEF maken persoon';
-- Persoon INACTIEF maken (reset oslogin; indien handmatig INACTIEF gezet)
UPDATE prs_perslid
SET prs_perslid_oslogin = NULL
WHERE prs_perslid_naam LIKE c_persoon_inactief || '%'
AND prs_perslid_oslogin IS NOT NULL;
fac.imp_writelog (
p_import_key,
'I',
'Persoon met login ['
|| recdelprs.prs_perslid_oslogin
|| '] en naam ['
|| recdelprs.prs_perslid_naam
|| ', '
|| recdelprs.prs_perslid_voornaam
|| '] is INACTIEF gemaakt',
'Persoon met verplichtingen is INACTIEF gemaakt (en account is verwijderd)');
END IF;
COMMIT;
END IF;
-- NYBU heeft impliciete werkplekken; werkplekken verwijderen om gedoe te voorkomen.
-- Dit moet ook als iemand inactief gemaakt/gezet wordt.
v_errorhint := 'Fout bij verwijderen werkplek(ken)';
FOR rdwp IN cdelwp (recdelprs.prs_perslid_key)
LOOP
-- Per 5.3.2/FSN#26947 verdwijnt via trigger vanzelf de bezetting!
v_errorhint := 'Fout bij verwijderen werkplek';
DELETE FROM prs_werkplek
WHERE prs_werkplek_key = rdwp.prs_werkplek_key;
END LOOP;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
'OTHERS (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'W',
v_errormsg,
v_errorhint);
COMMIT;
END;
END LOOP;
v_count_tot := 0;
v_count_error := 0;
FOR recsrtperslid IN csrtperslid
LOOP
BEGIN
v_count_tot := v_count_tot + 1;
v_aanduiding :=
recsrtperslid.prs_perslid_oslogin
|| '|'
|| recsrtperslid.prs_perslid_naam
|| '|'
|| recsrtperslid.prs_perslid_voornaam
|| '|'
|| recsrtperslid.prs_srtperslid_omschrijving
|| ' - ';
v_errorhint := 'Fout bij bepalen functie';
SELECT COUNT ( * )
INTO v_count
FROM prs_srtperslid
WHERE UPPER (prs_srtperslid_omschrijving) =
UPPER (recsrtperslid.prs_srtperslid_omschrijving)
AND prs_srtperslid_verwijder IS NULL;
IF (v_count = 0)
THEN
v_errorhint := 'Fout bij toevoegen functie';
INSERT INTO prs_srtperslid (prs_srtperslid_omschrijving)
VALUES (recsrtperslid.prs_srtperslid_omschrijving);
END IF;
EXCEPTION
WHEN OTHERS
THEN
v_count_error := v_count_error + 1;
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
'OTHERS (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
v_errorhint);
END;
END LOOP;
fac.imp_writelog (
p_import_key,
'S',
'Functie: verwerkte regels zonder foutmelding: '
|| TO_CHAR (v_count_tot - v_count_error),
'');
fac.imp_writelog (
p_import_key,
'S',
'Functie: verwerkte regels met foutmelding: '
|| TO_CHAR (v_count_error),
'');
COMMIT;
v_count_tot := 0;
v_count_error := 0;
FOR recperslid IN cperslid
LOOP
BEGIN
v_count_tot := v_count_tot + 1;
v_aanduiding :=
'['
|| recperslid.prs_perslid_oslogin
|| '|'
|| recperslid.prs_perslid_naam
|| '|'
|| recperslid.prs_perslid_voornaam
|| '] - ';
v_errorhint :=
'Fout bij bepalen functie ['
|| recperslid.prs_srtperslid_omschrijving
|| ']';
SELECT prs_srtperslid_key
INTO v_srtperslid_key
FROM prs_srtperslid
WHERE prs_srtperslid_verwijder IS NULL
AND UPPER (prs_srtperslid_omschrijving) =
UPPER (recperslid.prs_srtperslid_omschrijving);
v_errorhint :=
'Fout bij bepalen afdeling ['
|| recperslid.prs_afdeling_omschrijving
|| ']';
SELECT prs_afdeling_key
INTO v_afdeling_key
FROM prs_afdeling
WHERE prs_afdeling_verwijder IS NULL
AND UPPER (prs_afdeling_omschrijving) =
UPPER (recperslid.prs_afdeling_omschrijving);
v_errorhint :=
'Fout bij bepalen naam ['
|| recperslid.prs_perslid_naam
|| ']';
--TODO: Is die lengte-check wel nodig? Doet import_prs ook al!
-- (Let op: v_perslid_naam wordt hieronder gebruikt!)
IF LENGTH (recperslid.prs_perslid_naam) > 30
THEN
v_perslid_naam := SUBSTR (recperslid.prs_perslid_naam, 1, 30);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Achternaam te lang',
'Achternaam wordt afgebroken tot ['
|| v_perslid_naam
|| ']');
ELSE
v_perslid_naam := recperslid.prs_perslid_naam;
END IF;
v_errorhint := 'Fout bij bepalen persoon';
SELECT COUNT ( * ), MAX (prs_perslid_key)
INTO v_count, v_perslid_key
FROM prs_perslid
WHERE prs_perslid_verwijder IS NULL
AND UPPER (prs_perslid_oslogin) =
UPPER (recperslid.prs_perslid_oslogin);
IF (v_count = 0)
THEN
v_errorhint := 'Fout bij toevoegen persoon';
INSERT INTO prs_perslid (prs_perslid_module,
prs_perslid_naam,
prs_perslid_tussenvoegsel,
prs_perslid_voornaam,
prs_perslid_oslogin,
prs_perslid_nr,
prs_afdeling_key,
prs_srtperslid_key,
prs_perslid_email,
prs_perslid_telefoonnr,
prs_perslid_mobiel)
VALUES ('PRS',
v_perslid_naam,
recperslid.prs_perslid_tussenvoegsel,
recperslid.prs_perslid_voornaam,
recperslid.prs_perslid_oslogin,
recperslid.prs_perslid_nr,
v_afdeling_key,
v_srtperslid_key,
recperslid.prs_perslid_email,
recperslid.prs_perslid_telefoonnr,
recperslid.prs_perslid_mobiel)
RETURNING prs_perslid_key
INTO v_perslid_key;
--TODO: voeg persoon toe op standaardwerkplek (xxx-0-999)
ELSE
IF (v_count > 1)
THEN
fac.imp_writelog (
p_import_key,
'E',
v_aanduiding || ' kan persoon niet eenduidig bepalen',
v_errorhint);
END IF;
v_errorhint := 'Fout bij wijzigen persoon';
-- TODO: coalesce's voor velden die nog niet overschreven moeten worden.
-- NYBU#30064: perslid_nr niet leegmaken
UPDATE prs_perslid
SET prs_perslid_naam = v_perslid_naam,
prs_perslid_tussenvoegsel =
recperslid.prs_perslid_tussenvoegsel,
prs_perslid_voornaam = recperslid.prs_perslid_voornaam,
prs_perslid_oslogin = recperslid.prs_perslid_oslogin,
prs_perslid_nr =
COALESCE (recperslid.prs_perslid_nr, prs_perslid_nr),
prs_afdeling_key = v_afdeling_key,
prs_srtperslid_key = v_srtperslid_key,
prs_perslid_email = recperslid.prs_perslid_email,
prs_perslid_telefoonnr =
recperslid.prs_perslid_telefoonnr,
prs_perslid_mobiel = recperslid.prs_perslid_mobiel
WHERE prs_perslid_key = v_perslid_key;
--TODO: als nog geen werkplek, dan standaardwerkplek?
END IF;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
v_count_error := v_count_error + 1;
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || 'Geen data gevonden',
v_errorhint);
WHEN OTHERS
THEN
v_count_error := v_count_error + 1;
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
'OTHERS (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
v_errorhint);
COMMIT;
END;
END LOOP;
fac.imp_writelog (
p_import_key,
'S',
'Persoon: verwerkte regels zonder foutmelding: '
|| TO_CHAR (v_count_tot - v_count_error),
'');
fac.imp_writelog (
p_import_key,
'S',
'Persoon: verwerkte regels met foutmelding: '
|| TO_CHAR (v_count_error),
'');
v_count_tot := 0;
v_count_error := 0;
FOR recnogroup IN cnogroup
LOOP
BEGIN
v_aanduiding :=
recnogroup.prs_perslid_oslogin
|| '|'
|| recnogroup.prs_perslid_naam
|| '|'
|| recnogroup.prs_perslid_voornaam
|| ' - ';
v_errorhint := 'Fout bij bepalen groep [' || c_groep_upper || ']';
SELECT fac_groep_key
INTO v_groep_key
FROM fac_groep
WHERE fac_groep_upper = c_groep_upper;
v_errorhint :=
'Fout bij koppelen persoon aan groep ['
|| c_groep_upper
|| ']';
INSERT INTO fac_gebruikersgroep (fac_groep_key, prs_perslid_key)
VALUES (v_groep_key, recnogroup.prs_perslid_key);
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
'OTHERS (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'E',
v_errormsg,
v_errorhint);
END;
END LOOP;
COMMIT;
-- Verwijder ongebruikte functies; deze import bepaalt de functies!
DELETE FROM prs_srtperslid sp
WHERE NOT EXISTS
(SELECT 1
FROM prs_perslid P
WHERE p.prs_srtperslid_key = sp.prs_srtperslid_key);
ELSE
IF (v_count_prs_import = 0)
THEN
fac.imp_writelog (
p_import_key,
'S',
'Geen nieuw/recent bestand met te importeren personen aangetroffen!',
'');
ELSE
fac.imp_writelog (
p_import_key,
'E',
'Verschil tussen het actuele aantal en het te importeren aantal personen te groot; zie specificatie!',
'- max. verschilpercentage = ['
|| TO_CHAR (c_max_delta_percentage)
|| '%] <br> '
|| '- matchend #personen importbestand = ['
|| TO_CHAR (v_count_prs_import)
|| '] <br> '
|| '- #personen Facilitor = ['
|| TO_CHAR (v_count_prs_actual)
|| ']');
END IF;
END IF;
COMMIT;
END nybu_update_prs;
/
-- NYBU#29356: export die optionele ruimterserveringen die plaatsvinden binnen 14 dagen en
-- optionele voorzieningen reserveringen die plaats vinden binnen 7 dagen automatisch op definitief zet.
-- de activiteiten residence (=key 130) en staff (=key 110) vanllen hier buiten.
CREATE OR REPLACE PROCEDURE nybu_export_res_statusupd (
p_applname IN VARCHAR2,
p_applrun IN VARCHAR2,
p_filedir IN VARCHAR2,
p_filename IN VARCHAR2)
AS
CURSOR copt
IS
SELECT res_rsv_ruimte_key
FROM res_rsv_ruimte ra
WHERE ra.res_status_fo_key = 1
AND res_rsv_ruimte_verwijder IS NULL
AND res_rsv_ruimte_van < SYSDATE + 28
AND res_rsv_ruimte_van > SYSDATE
AND res_activiteit_key NOT IN (110, 130)
AND ra.res_rsv_ruimte_dirtlevel = 0
AND res_activiteit_key NOT IN
(SELECT res_activiteit_key
FROM res_activiteit
WHERE res_srtactiviteit_key IN
(SELECT res_srtactiviteit_key
FROM res_srtactiviteit
WHERE res_srtactiviteit_soort = 1))
UNION ALL
SELECT res_rsv_ruimte_key
FROM res_rsv_ruimte ra
WHERE ra.res_status_fo_key = 1
AND res_rsv_ruimte_verwijder IS NULL
AND res_rsv_ruimte_van < SYSDATE + 7
AND res_rsv_ruimte_van > SYSDATE
AND ra.res_rsv_ruimte_dirtlevel = 0
AND res_activiteit_key NOT IN
(SELECT res_activiteit_key
FROM res_activiteit
WHERE res_srtactiviteit_key NOT IN
(SELECT res_srtactiviteit_key
FROM res_srtactiviteit
WHERE res_srtactiviteit_soort = 1));
v_errorhint VARCHAR2 (1000);
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
BEGIN
FOR rc IN copt
LOOP
BEGIN
v_errorhint := 'Fout bij bijwerken reserveringsstatus';
UPDATE res_rsv_ruimte
SET res_status_fo_key = 2
WHERE res_rsv_ruimte_key = rc.res_rsv_ruimte_key;
fac.trackaction ('RESUPD',
rc.res_rsv_ruimte_key,
NULL,
NULL,
'Reservering automatisch definitief');
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.writelog (p_applname,
'W',
rc.res_rsv_ruimte_key || ' ' || v_errormsg,
v_errorhint);
COMMIT;
END;
END LOOP;
--
-- TIJDELIJK: Bij het herhalen van reserveringen worden ook kenmerken meegekopieerd die te maken hebben met de
-- export. Deze kenmerken worden hier verwijderd. (NYBU#35318). Er is ook een logcenter melding aangemaakt om
-- dit structureel op te lossen FSN#35335.
--
DELETE res_kenmerkwaarde kw
WHERE res_kenmerkwaarde_key IN
(SELECT kw2.res_kenmerkwaarde_key
FROM res_kenmerkwaarde kw2,
res_kenmerk k,
res_rsv_ruimte rr
WHERE kw2.res_kenmerk_key = k.res_kenmerk_key
AND k.res_srtkenmerk_key IN
(201, 202, 203, 221, 222, 241, 261) -- kenmerken die door de export gezet worden.
AND kw2.res_rsv_ruimte_key = rr.res_rsv_ruimte_key
AND TO_CHAR (kw2.res_kenmerkwaarde_aanmaak,
'yyyymmddhh24mi') =
TO_CHAR (rr.res_rsv_ruimte_aanmaak,
'yyyymmddhh24mi')
AND kw2.res_kenmerkwaarde_aanmaak > SYSDATE - 1);
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.writelog (p_applname,
'E',
'Proces auto status update afgebroken!',
v_errormsg);
COMMIT;
END nybu_export_res_statusupd;
/
-- Export om notificatie naar contactpersonen van een reservering
-- te sturen op het moment dat de reservering totaal afgemeld is
-- en de contactpersoon de resevering moet goedkeuren.
CREATE OR REPLACE PROCEDURE nybu_export_res_noti_goedk (
p_applname IN VARCHAR2,
p_applrun IN VARCHAR2,
p_filedir IN VARCHAR2,
p_filename IN VARCHAR2)
AS
CURSOR c
IS
SELECT rrr.res_rsv_ruimte_key,
'Goedkeuring voor reservering '
|| rrr.res_reservering_key
|| '/'
|| rrr.res_rsv_ruimte_volgnr
|| ' ('
|| rrr.res_rsv_ruimte_omschrijving
|| ') is vereist'
omschrijving
FROM res_rsv_ruimte rrr,
( SELECT MIN (res_status_bo_key) res_status_bo_key,
res_rsv_ruimte_key
FROM (SELECT res_status_bo_key, rr1.res_rsv_ruimte_key
FROM res_rsv_ruimte rr1
WHERE rr1.res_rsv_ruimte_verwijder IS NULL
UNION ALL
SELECT res_status_bo_key, rd1.res_rsv_ruimte_key
FROM res_rsv_deel rd1
WHERE rd1.res_rsv_deel_verwijder IS NULL
UNION ALL
SELECT res_status_bo_key, ra1.res_rsv_ruimte_key
FROM res_rsv_artikel ra1
WHERE ra1.res_rsv_artikel_verwijder IS NULL)
GROUP BY res_rsv_ruimte_key) bo_stat
WHERE NOT EXISTS
-- die nog niet genotificeerd zijn
(SELECT fac_tracking_refkey
FROM fac_tracking t, fac_srtnotificatie sn
WHERE t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key
AND sn.fac_srtnotificatie_code = 'CUST01'
AND fac_tracking_refkey = rrr.res_rsv_ruimte_key)
-- met cateringkosten
AND (SELECT SUM (res.getartikelprijs (res_rsv_artikel_key))
FROM res_rsv_artikel rra, res_artikel ra
WHERE res_rsv_artikel_verwijder IS NULL
AND rra.res_artikel_key = ra.res_artikel_key
AND ra.res_discipline_key NOT IN (462, 581, 741) -- hotelkamers, inhuur voorzieningen, linnen
AND rra.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key) <>
0
AND rrr.res_rsv_ruimte_key = bo_stat.res_rsv_ruimte_key
AND bo_stat.res_status_bo_key = 5
AND rrr.res_rsv_ruimte_van > TO_DATE ('20160101', 'yyyymmdd');
BEGIN
FOR rec IN c
LOOP
fac.trackaction ('CUST01',
rec.res_rsv_ruimte_key,
NULL,
NULL,
rec.omschrijving);
END LOOP;
END nybu_export_res_noti_goedk;
/
-- Verschilrapportage werkplek FACILITOR vs AD
CREATE OR REPLACE VIEW nybu_v_rap_wp_verschil
AS
SELECT pf.prs_perslid_naam_full name,
'<a class="details" onclick=''FcltMgr.openDetail("appl/prs/prs_perslid.asp?key='
|| p.prs_perslid_key
|| '")''>'
|| HTF.escape_sc (p.prs_perslid_oslogin)
|| '</a>'
html_account,
g.alg_gebouw_naam || ' ' || ar.alg_ruimte_nr room_facilitor,
ip.werkplek_oms room_ad
FROM alg_v_aanwezigruimte ar,
alg_verdieping v,
alg_gebouw g,
prs_werkplek w,
prs_perslidwerkplek pw,
prs_v_aanwezigperslid p,
prs_v_perslid_fullnames pf,
nybu_imp_prs ip
WHERE UPPER (ip.prs_perslid_oslogin) = p.prs_perslid_oslogin
AND p.prs_perslid_key = pf.prs_perslid_key
AND p.prs_perslid_key = pw.prs_perslid_key(+)
AND pw.prs_werkplek_key = w.prs_werkplek_key(+)
AND w.prs_alg_ruimte_key = ar.alg_ruimte_key(+)
AND ar.alg_verdieping_key = v.alg_verdieping_key(+)
AND v.alg_gebouw_key = g.alg_gebouw_key(+)
AND (ip.werkplek_oms !=
g.alg_gebouw_naam || ' ' || ar.alg_ruimte_nr
OR (ip.werkplek_oms IS NULL AND ar.alg_ruimte_key IS NOT NULL)
OR (ip.werkplek_oms IS NOT NULL AND ar.alg_ruimte_key IS NULL));
-- Verschilrapportage afdeling Planon vs AD/Raedt
CREATE OR REPLACE VIEW nybu_v_rap_afd_verschil
AS
SELECT pf.prs_perslid_naam_full naam,
a.prs_afdeling_naam code,
a.prs_afdeling_omschrijving afdeling_ad,
km.prs_kenmerklink_waarde afdeling_planon
FROM prs_v_perslid_fullnames pf,
prs_v_aanwezigperslid p,
prs_afdeling a,
(SELECT *
FROM prs_kenmerklink
WHERE prs_kenmerk_key = 1040) km
WHERE pf.prs_perslid_key = p.prs_perslid_key
AND km.prs_link_key(+) = p.prs_perslid_key
AND a.prs_afdeling_key = p.prs_afdeling_key
AND a.prs_afdeling_naam != km.prs_kenmerklink_waarde;
------- IMPORT STUDENTENGEGEVENS CRM --------------------------------------------
CREATE OR REPLACE PROCEDURE nybu_import_crm (p_import_key IN NUMBER)
IS
c_fielddelimitor VARCHAR2 (1) := ';';
c_headerline VARCHAR (1000)
:= '(Do Not Modify) Enrollment Id;(Do Not Modify) Row Checksum;(Do Not Modify) Modified On;Contact Number (Contact) (Contact);Last Name (Contact) (Contact);First Name (Contact) (Contact);Initials (Contact) (Contact);Infix (Contact) (Contact);Gender (Contact) (Contact);Line 1 (private) (Contact) (Contact);Housenumber (private) (Contact) (Contact);Line 2 (private) (Contact) (Contact);Postal Code (private) (Contact) (Contact);City (private) (Contact) (Contact);Country (private) (Contact) (Contact);Email Private (Contact) (Contact);Private Mobile Phone (Contact) (Contact);Private Phone (Contact) (Contact);Participant Number (Contact) (Contact);SAN Number (Contact) (Contact);Birthday (Contact) (Contact);Applicant For (Program);Applicant For (Group)';
-- c_headerline VARCHAR (1000) := 'Enrollment;Contact Number (Participant);Last Name (Participant);First Name Used (Participant);Initials (Participant);Infix (Participant);Gender (Participant);Private Address: Street 1 (Participant);Private Address: Street 2 (Participant);Private Address: ZIP/Postal Code (Participant);Private Address: City (Participant);Private Address: Country (Participant);Private E-mail (Participant);Mobile Phone (Participant);Private Phone (Participant);Participant Number (Participant);SAN Number (Participant);Birthday (Participant);Applicant For (Program);Applicant For (Group)';
v_newline VARCHAR2 (1000); -- Input line
v_header VARCHAR2 (1000);
v_aanduiding VARCHAR2 (200);
v_errorhint VARCHAR2 (1000);
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
header_is_valid NUMBER := 0;
v_ongeldig NUMBER (1);
v_count_tot NUMBER (10);
v_count_import NUMBER (10);
v_count NUMBER;
-- De importvelden:
v_contact_nr VARCHAR2 (256);
v_prs_perslid_naam VARCHAR2 (256);
v_prs_perslid_tussenvoegsel VARCHAR2 (256);
v_prs_perslid_voornaam VARCHAR2 (256);
v_prs_perslid_initialen VARCHAR2 (256);
v_prs_perslid_geslacht VARCHAR2 (256);
v_adres_prive_straat1 VARCHAR2 (256);
v_housenumber VARCHAR2 (256);
v_adres_prive_straat2 VARCHAR2 (256);
v_adres_prive_postcode VARCHAR2 (256);
v_adres_prive_plaats VARCHAR2 (256);
v_adres_prive_land VARCHAR2 (256);
v_prs_perslid_email VARCHAR2 (256);
v_prs_perslid_mobiel VARCHAR2 (256);
v_prs_perslid_telnr VARCHAR2 (256);
v_prs_perslid_nr VARCHAR2 (256);
v_san_nr VARCHAR2 (256);
v_geboortedatum VARCHAR2 (256);
v_prs_afdeling_omschrijving VARCHAR2 (256);
-- Dummy
v_dummy VARCHAR2 (256);
CURSOR c1
IS
SELECT *
FROM fac_imp_file
WHERE fac_import_key = p_import_key
ORDER BY fac_imp_file_index;
BEGIN
DELETE FROM nybu_imp_crm;
COMMIT;
v_count_tot := 0;
v_count_import := 0;
FOR rec1 IN c1
LOOP
BEGIN
v_newline := rec1.fac_imp_file_line;
v_header := v_newline;
v_aanduiding := '';
v_errorhint := 'Fout bij opvragen te importeren rij';
v_ongeldig := 0;
v_prs_perslid_tussenvoegsel := NULL;
-- Lees alle veldwaarden
fac.imp_getfield (v_newline, c_fielddelimitor, v_dummy); -- Enrollment ID
fac.imp_getfield (v_newline, c_fielddelimitor, v_dummy); -- Row Checksum
fac.imp_getfield (v_newline, c_fielddelimitor, v_dummy); -- Modified on
fac.imp_getfield (v_newline, c_fielddelimitor, v_contact_nr); -- Contact number
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_naam); -- Last Name
fac.imp_getfield (v_newline,
c_fielddelimitor,
v_prs_perslid_voornaam); -- First Name
fac.imp_getfield (v_newline,
c_fielddelimitor,
v_prs_perslid_initialen); -- Initials
fac.imp_getfield (v_newline,
c_fielddelimitor,
v_prs_perslid_tussenvoegsel); -- Infix
fac.imp_getfield (v_newline,
c_fielddelimitor,
v_prs_perslid_geslacht); -- Gender
fac.imp_getfield (v_newline,
c_fielddelimitor,
v_adres_prive_straat1); -- Private Address: Line 1
fac.imp_getfield (v_newline, c_fielddelimitor, v_housenumber); -- Housenumber
fac.imp_getfield (v_newline,
c_fielddelimitor,
v_adres_prive_straat2); -- Private Address: Line 2
fac.imp_getfield (v_newline,
c_fielddelimitor,
v_adres_prive_postcode); -- Private Address: Postal Code
fac.imp_getfield (v_newline, c_fielddelimitor, v_adres_prive_plaats); -- Private Address: City
fac.imp_getfield (v_newline, c_fielddelimitor, v_adres_prive_land); -- Private Address: Country
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_email); -- E-mail Private
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_mobiel); -- Private Mobile Phone
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_telnr); -- Private Phone
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_nr); -- Participant Number
fac.imp_getfield (v_newline, c_fielddelimitor, v_san_nr); -- SAN Number
fac.imp_getfield (v_newline, c_fielddelimitor, v_geboortedatum); -- Birthday
fac.imp_getfield (v_newline, c_fielddelimitor, v_dummy); -- Applicant For (Program)
fac.imp_getfield (v_newline,
c_fielddelimitor,
v_prs_afdeling_omschrijving); -- Applicant For (Group)
v_aanduiding :=
'['
|| v_prs_perslid_naam
|| '|'
|| v_prs_perslid_voornaam
|| '|'
|| v_contact_nr
|| '] ';
-- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen
-- de juiste kolomkop. Ik controleer daarbij ALLE kolommen!
-- Ik negeer alles totdat ik een geldige header ben gepasseerd.
IF (header_is_valid = 0)
THEN
IF UPPER (v_header) LIKE UPPER (c_headerline || '%')
THEN
header_is_valid := 1;
END IF;
ELSE
v_count_tot := v_count_tot + 1;
-- Controleer alle veldwaarden
v_errorhint := 'Ongeldig studentnummer';
v_prs_perslid_nr := TRIM (v_prs_perslid_nr);
IF LENGTH (v_prs_perslid_nr) > 16
THEN
v_prs_perslid_nr := SUBSTR (v_prs_perslid_nr, 1, 16);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Studentnummer te lang',
'Studentnummer wordt afgebroken tot ['
|| v_prs_perslid_nr
|| ']');
END IF;
v_errorhint := 'Ongeldig SAN-nummer';
v_san_nr := TRIM (v_san_nr);
IF LENGTH (v_san_nr) > 20
THEN
v_san_nr := SUBSTR (v_san_nr, 1, 20);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'SAN-nummer te lang',
'SAN-nummer wordt afgebroken tot [' || v_san_nr || ']');
END IF;
v_errorhint := 'Ongeldige achternaam';
v_prs_perslid_naam := TRIM (v_prs_perslid_naam);
IF LENGTH (v_prs_perslid_naam) > 30
THEN
v_prs_perslid_naam := SUBSTR (v_prs_perslid_naam, 1, 30);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Achternaam te lang',
'Achternaam wordt afgebroken tot ['
|| v_prs_perslid_naam
|| ']');
ELSE
IF (v_prs_perslid_naam IS NULL)
THEN
v_ongeldig := 1;
fac.imp_writelog (
p_import_key,
'E',
v_aanduiding || 'Achternaam onbekend',
'Achternaam is verplicht; regel wordt overgeslagen!');
END IF;
END IF;
v_errorhint := 'Ongeldige voornaam';
v_prs_perslid_voornaam := TRIM (v_prs_perslid_voornaam);
IF LENGTH (v_prs_perslid_voornaam) > 30
THEN
v_prs_perslid_voornaam :=
SUBSTR (v_prs_perslid_voornaam, 1, 30);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Voornaam te lang',
'Voornaam wordt afgebroken tot ['
|| v_prs_perslid_voornaam
|| ']');
END IF;
v_errorhint := 'Ongeldige opleiding/afdeling';
v_prs_afdeling_omschrijving := TRIM (v_prs_afdeling_omschrijving);
IF LENGTH (v_prs_afdeling_omschrijving) > 60
THEN
v_prs_afdeling_omschrijving :=
SUBSTR (v_prs_afdeling_omschrijving, 1, 60);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Opleiding/Afdeling te lang',
'Opleiding/Afdeling wordt afgebroken tot ['
|| v_prs_afdeling_omschrijving
|| ']');
ELSE
IF (v_prs_afdeling_omschrijving IS NULL)
THEN
v_prs_afdeling_omschrijving := 'Unknown';
--TODO: verplicht maken?
--v_ongeldig := 1;
--fac.imp_writelog (
-- p_import_key,
-- 'E',
-- v_aanduiding || 'Afdeling onbekend',
-- 'Afdeling is verplicht; regel wordt overgeslagen!');
END IF;
END IF;
v_errorhint := 'E-mailadres te lang';
v_prs_perslid_email := TRIM (v_prs_perslid_email);
IF LENGTH (v_prs_perslid_email) > 100
THEN
v_prs_perslid_email := SUBSTR (v_prs_perslid_email, 1, 100);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || v_errorhint,
'E-mailadres wordt afgebroken tot ['
|| v_prs_perslid_email
|| ']');
END IF;
v_errorhint := 'Tussenvoegsel';
v_prs_perslid_tussenvoegsel := TRIM (v_prs_perslid_tussenvoegsel);
IF LENGTH (v_prs_perslid_tussenvoegsel) > 15
THEN
v_prs_perslid_tussenvoegsel :=
SUBSTR (v_prs_perslid_tussenvoegsel, 1, 15);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || v_errorhint,
'Tussenvoegsel wordt afgebroken tot ['
|| v_prs_perslid_tussenvoegsel
|| ']');
END IF;
v_errorhint := 'Mobiel nr';
v_prs_perslid_mobiel :=
TRIM (REPLACE (v_prs_perslid_mobiel, ' ', ''));
IF LENGTH (v_prs_perslid_mobiel) > 15
THEN
v_prs_perslid_mobiel := SUBSTR (v_prs_perslid_mobiel, 1, 15);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || v_errorhint,
'Mobiel nr wordt afgebroken tot ['
|| v_prs_perslid_mobiel
|| ']');
END IF;
v_errorhint := 'Telefoonnr';
v_prs_perslid_telnr :=
TRIM (REPLACE (v_prs_perslid_telnr, ' ', ''));
IF LENGTH (v_prs_perslid_telnr) > 15
THEN
v_prs_perslid_telnr := SUBSTR (v_prs_perslid_telnr, 1, 15);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || v_errorhint,
'Telefoonnr wordt afgebroken tot ['
|| v_prs_perslid_telnr
|| ']');
END IF;
-- Insert geformatteerde import record
IF v_ongeldig = 0
THEN
BEGIN
v_errorhint :=
'Fout bij toevoegen regel aan importtabel NYBU_IMP_CRM';
INSERT INTO nybu_imp_crm (imp_datum,
contact_nr,
prs_perslid_naam,
prs_perslid_tussenvoegsel,
prs_perslid_voornaam,
prs_perslid_initialen,
prs_perslid_geslacht,
adres_prive_straat1,
adres_prive_straat2,
adres_prive_postcode,
adres_prive_plaats,
adres_prive_land,
prs_perslid_email,
prs_perslid_mobiel,
prs_perslid_telefoonnr,
prs_perslid_nr,
san_nr,
geboortedatum,
prs_afdeling_omschrijving,
housenumber)
VALUES (SYSDATE,
v_contact_nr,
v_prs_perslid_naam,
v_prs_perslid_tussenvoegsel,
v_prs_perslid_voornaam,
v_prs_perslid_initialen,
v_prs_perslid_geslacht,
v_adres_prive_straat1,
v_adres_prive_straat2,
v_adres_prive_postcode,
v_adres_prive_plaats,
v_adres_prive_land,
v_prs_perslid_email,
v_prs_perslid_mobiel,
v_prs_perslid_telnr,
v_prs_perslid_nr,
v_san_nr,
v_geboortedatum,
v_prs_afdeling_omschrijving,
v_housenumber);
COMMIT;
v_count_import := v_count_import + 1;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg :=
v_errorhint
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || v_errormsg,
'Ingelezen regel kan niet worden weggeschreven!');
COMMIT;
END;
END IF;
END IF; -- header_valid
END;
END LOOP;
IF (header_is_valid = 1)
THEN
fac.imp_writelog (
p_import_key,
'S',
'Persoon: aantal ingelezen regels: ' || TO_CHAR (v_count_tot),
'');
fac.imp_writelog (
p_import_key,
'S',
'Persoon: aantal ongeldige importregels: '
|| TO_CHAR (v_count_tot - v_count_import),
'');
ELSE
fac.imp_writelog (
p_import_key,
'E',
'Ongeldige headerregel!',
SUBSTR ('Moet zijn: "' || c_headerline || '"', 1, 1000));
END IF;
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.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
v_errorhint);
COMMIT;
END nybu_import_crm;
/
CREATE OR REPLACE PROCEDURE nybu_update_crm (p_import_key IN NUMBER)
IS
c_persoon_inactief VARCHAR2 (30) := 'INACTIEF: ';
-- Maximaal percentage aan nieuwe medewerkers tov. actieve medewerkers met een nummer
c_max_delta_percentage NUMBER (10) := 20;
-- Ruimte waar studenten in geplaatst worden (indien nog geen ruimte in opgegeven gebouw)
c_gebouw_code VARCHAR2 (10) := '';
c_ruimte_nr VARCHAR2 (10) := '999';
c_gebouw_key NUMBER (10);
c_ruimte_key NUMBER (10);
-- Flexkenmerken
c_contact_nr_key NUMBER (10) := 1000;
c_address_street1_key NUMBER (10) := 1022;
c_address_street2_key NUMBER (10) := 1023;
c_address_zip_key NUMBER (10) := 1024;
c_address_city_key NUMBER (10) := 1025;
c_address_country_key NUMBER (10) := 1026;
c_birthday_key NUMBER (10) := 1027;
c_email_key NUMBER (10) := 1180;
c_san_nr_key NUMBER (10) := 1200;
-- Groep waar studenten in geplaatst worden (indien nog geen groep)
c_groep_upper VARCHAR2 (30) := '_DEFAULT';
v_aanduiding VARCHAR2 (200);
v_errorhint VARCHAR2 (1000);
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_count_tot NUMBER (10);
v_count_error NUMBER (10);
v_count NUMBER (10);
--
v_perslid_key NUMBER (10);
v_perslid_naam VARCHAR2 (30);
v_perslid_tussenvoegsel VARCHAR2 (15);
v_afdeling_key NUMBER (10);
v_srtperslid_key NUMBER (10);
--v_oslogin VARCHAR2 (30);
--v_locatie_key NUMBER (10);
v_gebouw_key NUMBER (10);
v_verdieping_key NUMBER (10);
v_ruimte_key NUMBER (10);
v_ruimte_nr VARCHAR2 (10);
v_wp_key NUMBER (10);
v_wp_volgnr NUMBER (3);
v_wp_oms VARCHAR2 (30);
v_groep_key NUMBER (10);
v_kenmerklink_key NUMBER (10);
v_dbg_gebouw_code VARCHAR2 (10);
v_dbg_ruimte_nr VARCHAR2 (10);
-- Dubbele nummers? Dan worden gewoon 2 (of meer) personen toegevoegd!
-- Alle gegevens uit importtabel geformatteerd volgens specificatie
CURSOR cstudent
IS
SELECT contact_nr,
TO_DATE (enrollment_date, 'DD-MM-YYYY'),
prs_perslid_naam,
prs_perslid_tussenvoegsel,
prs_perslid_voornaam,
prs_perslid_initialen,
DECODE (UPPER (prs_perslid_geslacht),
'MALE', 1,
'FEMALE', 0,
NULL)
prs_perslid_geslacht,
adres_prive_straat1 || ' ' || housenumber AS adres_prive_straat1,
adres_prive_straat2,
adres_prive_postcode,
adres_prive_plaats,
adres_prive_land,
prs_perslid_email,
prs_perslid_mobiel,
prs_perslid_telefoonnr,
prs_perslid_nr,
san_nr,
TO_DATE (geboortedatum, 'DD-MM-YYYY') geboortedatum,
prs_afdeling_omschrijving
FROM nybu_imp_crm
WHERE contact_nr IS NOT NULL;
FUNCTION hasKenmerk (p_perslid_key IN NUMBER, p_kenmerk_key IN NUMBER)
RETURN BOOLEAN
IS
v_result NUMBER;
BEGIN
SELECT COUNT ( * )
INTO v_result
FROM prs_kenmerklink
WHERE prs_link_key = p_perslid_key
AND prs_kenmerk_key = p_kenmerk_key
AND prs_kenmerklink_niveau = 'P'
AND prs_kenmerklink_verwijder IS NULL;
RETURN v_result > 0;
END;
BEGIN
v_errorhint := 'Fout bij bepalen functie';
SELECT prs_srtperslid_key
INTO v_srtperslid_key
FROM prs_srtperslid
WHERE prs_srtperslid_verwijder IS NULL
AND UPPER (prs_srtperslid_omschrijving) = 'STUDENT';
v_count_tot := 0;
v_count_error := 0;
FOR recstudent IN cstudent
LOOP
BEGIN
v_count_tot := v_count_tot + 1;
v_aanduiding :=
'['
|| recstudent.prs_perslid_naam
|| '|'
|| recstudent.prs_perslid_voornaam
|| '|'
|| recstudent.contact_nr
|| '] - ';
v_errorhint :=
'Fout bij bepalen afdeling ['
|| recstudent.prs_afdeling_omschrijving
|| ']';
SELECT prs_afdeling_key
INTO v_afdeling_key
FROM prs_afdeling
WHERE prs_afdeling_verwijder IS NULL
AND prs_afdeling_upper =
DECODE (
SUBSTR (
UPPER (recstudent.prs_afdeling_omschrijving),
1,
3),
'MSC',
UPPER(SUBSTR (recstudent.prs_afdeling_omschrijving,
1,
5)),
'IMB',
UPPER(SUBSTR (recstudent.prs_afdeling_omschrijving,
1,
4)
|| SUBSTR (
recstudent.prs_afdeling_omschrijving,
8,
2)));
v_errorhint :=
'Fout bij bepalen naam [' || recstudent.prs_perslid_naam || ']';
--TODO: Is die lengte-check wel nodig? Doet import_prs ook al!
-- (Let op: v_perslid_naam wordt hieronder gebruikt!)
IF LENGTH (recstudent.prs_perslid_naam) > 30
THEN
v_perslid_naam := SUBSTR (recstudent.prs_perslid_naam, 1, 30);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Achternaam te lang',
'Achternaam wordt afgebroken tot [' || v_perslid_naam || ']');
ELSE
v_perslid_naam := recstudent.prs_perslid_naam;
END IF;
v_errorhint := 'Fout bij bepalen student';
--- NYBU#37370 en #37367
--- con_nr vervangen door san_nr
-- Studenten met een datum verwijder moeten evengoed opnieuw worden ingevoerd
SELECT COUNT ( * ), MAX (prs_perslid_key)
INTO v_count, v_perslid_key
FROM prs_perslid p, prs_kenmerklink kp
WHERE kp.prs_kenmerk_key = c_san_nr_key
AND p.prs_perslid_key = kp.prs_link_key
AND p.prs_perslid_verwijder IS NULL
AND UPPER (kp.prs_kenmerklink_waarde) =
UPPER (recstudent.san_nr);
IF (v_count = 0)
THEN
v_errorhint := 'Fout bij toevoegen student';
INSERT INTO prs_perslid (prs_perslid_module,
prs_perslid_naam,
prs_perslid_tussenvoegsel,
prs_perslid_voornaam,
prs_perslid_voorletters,
prs_perslid_geslacht,
prs_perslid_email,
prs_perslid_mobiel,
prs_perslid_telefoonnr,
prs_perslid_nr,
prs_afdeling_key,
prs_srtperslid_key)
VALUES ('PRS',
v_perslid_naam,
recstudent.prs_perslid_tussenvoegsel,
recstudent.prs_perslid_voornaam,
recstudent.prs_perslid_initialen,
recstudent.prs_perslid_geslacht,
recstudent.prs_perslid_email,
recstudent.prs_perslid_mobiel,
recstudent.prs_perslid_telefoonnr,
recstudent.prs_perslid_nr,
v_afdeling_key,
v_srtperslid_key)
RETURNING prs_perslid_key
INTO v_perslid_key;
-- Kenmerk: contact_nr
v_errorhint := 'Fout zetten contact_nr';
prs.upsertkenmerk (c_contact_nr_key,
v_perslid_key,
recstudent.contact_nr);
-- Kenmerken: adres (straat1, straat2, postcode, plaats, land)
v_errorhint := 'Fout zetten adresregel 1';
prs.upsertkenmerk (c_address_street1_key,
v_perslid_key,
recstudent.adres_prive_straat1);
v_errorhint := 'Fout zetten adresregel 2';
prs.upsertkenmerk (c_address_street2_key,
v_perslid_key,
recstudent.adres_prive_straat2);
v_errorhint := 'Fout zetten postcode';
prs.upsertkenmerk (c_address_zip_key,
v_perslid_key,
recstudent.adres_prive_postcode);
v_errorhint := 'Fout zetten plaats';
prs.upsertkenmerk (c_address_city_key,
v_perslid_key,
recstudent.adres_prive_plaats);
v_errorhint := 'Fout zetten land';
prs.upsertkenmerk (c_address_country_key,
v_perslid_key,
recstudent.adres_prive_land);
-- Kenmerk: geboortedatum
v_errorhint := 'Fout zetten geboortedatum';
prs.upsertkenmerk (
c_birthday_key,
v_perslid_key,
TO_CHAR (recstudent.geboortedatum, 'DD-MM-YYYY'));
-- Kenmerk: e-mailadres
v_errorhint := 'Fout zetten e-mailadres';
prs.upsertkenmerk (c_email_key,
v_perslid_key,
recstudent.prs_perslid_email);
-- Kenmerk: SAN-nr
v_errorhint := 'Fout zetten SAN-nr';
prs.upsertkenmerk (c_san_nr_key,
v_perslid_key,
recstudent.san_nr);
fac.imp_writelog (p_import_key,
'I',
'Persoon toegevoegd',
v_aanduiding);
--TODO: voeg persoon toe op standaardwerkplek (xxx-0-999)
ELSE
IF (v_count > 1)
THEN
fac.imp_writelog (
p_import_key,
'E',
v_aanduiding || ' kan persoon niet eenduidig bepalen',
v_errorhint);
END IF;
v_errorhint := 'Fout bij wijzigen persoon';
-- TODO: coalesce's voor velden die nog niet overschreven moeten worden.
UPDATE prs_perslid
SET prs_perslid_naam =
COALESCE (prs_perslid_naam, v_perslid_naam),
prs_perslid_tussenvoegsel =
COALESCE (prs_perslid_tussenvoegsel,
recstudent.prs_perslid_tussenvoegsel),
prs_perslid_voornaam =
COALESCE (prs_perslid_voornaam,
recstudent.prs_perslid_voornaam),
prs_perslid_initialen =
COALESCE (prs_perslid_initialen,
recstudent.prs_perslid_initialen),
prs_perslid_geslacht =
COALESCE (prs_perslid_geslacht,
recstudent.prs_perslid_geslacht),
prs_perslid_email =
COALESCE (prs_perslid_email,
recstudent.prs_perslid_email),
prs_perslid_telefoonnr =
COALESCE (prs_perslid_telefoonnr,
recstudent.prs_perslid_telefoonnr),
prs_perslid_mobiel =
COALESCE (prs_perslid_mobiel,
recstudent.prs_perslid_mobiel),
prs_perslid_nr =
COALESCE (prs_perslid_nr, recstudent.prs_perslid_nr),
prs_afdeling_key =
COALESCE (prs_afdeling_key, v_afdeling_key),
prs_srtperslid_key =
COALESCE (prs_srtperslid_key, v_srtperslid_key)
WHERE prs_perslid_key = v_perslid_key;
-- Kenmerken: adres (straat1, straat2, postcode, plaats, land)
v_errorhint := 'Fout zetten adresregel 1';
IF (NOT hasKenmerk (v_perslid_key, c_address_street1_key))
THEN
prs.upsertkenmerk (c_address_street1_key,
v_perslid_key,
recstudent.adres_prive_straat1);
END IF;
v_errorhint := 'Fout zetten adresregel 2';
IF (NOT hasKenmerk (v_perslid_key, c_address_street2_key))
THEN
prs.upsertkenmerk (c_address_street2_key,
v_perslid_key,
recstudent.adres_prive_straat2);
END IF;
v_errorhint := 'Fout zetten postcode';
IF (NOT hasKenmerk (v_perslid_key, c_address_zip_key))
THEN
prs.upsertkenmerk (c_address_zip_key,
v_perslid_key,
recstudent.adres_prive_postcode);
END IF;
v_errorhint := 'Fout zetten plaats';
IF (NOT hasKenmerk (v_perslid_key, c_address_city_key))
THEN
prs.upsertkenmerk (c_address_city_key,
v_perslid_key,
recstudent.adres_prive_plaats);
END IF;
v_errorhint := 'Fout zetten land';
IF (NOT hasKenmerk (v_perslid_key, c_address_country_key))
THEN
prs.upsertkenmerk (c_address_country_key,
v_perslid_key,
recstudent.adres_prive_land);
END IF;
-- Kenmerk: geboortedatum
v_errorhint := 'Fout zetten geboortedatum';
IF (NOT hasKenmerk (v_perslid_key, c_birthday_key))
THEN
prs.upsertkenmerk (
c_birthday_key,
v_perslid_key,
TO_CHAR (recstudent.geboortedatum, 'DD-MM-YYYY'));
END IF;
-- Kenmerk: e-mailadres
v_errorhint := 'Fout zetten e-mailadres';
IF (NOT hasKenmerk (v_perslid_key, c_email_key))
THEN
prs.upsertkenmerk (c_email_key,
v_perslid_key,
recstudent.prs_perslid_email);
END IF;
-- Kenmerk: SAN-nr
v_errorhint := 'Fout zetten SAN-nr';
IF (NOT hasKenmerk (v_perslid_key, c_san_nr_key))
THEN
prs.upsertkenmerk (c_san_nr_key,
v_perslid_key,
recstudent.san_nr);
END IF;
fac.imp_writelog (p_import_key,
'I',
'Persoonsgegevens aangevuld',
v_aanduiding);
--TODO: als nog geen werkplek, dan standaardwerkplek?
END IF;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
v_count_error := v_count_error + 1;
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || 'Geen data gevonden',
v_errorhint);
WHEN OTHERS
THEN
v_count_error := v_count_error + 1;
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
'OTHERS (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
v_errorhint);
COMMIT;
END;
END LOOP;
fac.imp_writelog (
p_import_key,
'S',
'Student: verwerkte regels zonder foutmelding: '
|| TO_CHAR (v_count_tot - v_count_error),
'');
fac.imp_writelog (
p_import_key,
'S',
'Student: verwerkte regels met foutmelding: '
|| TO_CHAR (v_count_error),
'');
COMMIT;
END nybu_update_crm;
/
------- OVERIG ------------------------------------------------------------------
-- Ruimtes waar mensen vandaan/naartoe kunnen verhuizen
CREATE OR REPLACE VIEW nybu_v_werkplekruimtes
AS
SELECT rg.*
FROM alg_v_ruimte_gegevens rg, alg_srtruimte sr
WHERE rg.alg_srtruimte_key = sr.alg_srtruimte_key
AND sr.alg_srtruimte_verwijder IS NULL
AND sr.prs_bevat_werkplek IS NOT NULL;
------- HUURCONTRACTEN ----------------------------------------------------------
-- Kenmerkdomein projectkostenplaats
CREATE OR REPLACE VIEW nybu_v_projectkostenplaats
AS
SELECT prs_kostenplaats_key,
prs_kostenplaats_nr,
prs_kostenplaats_omschrijving,
prs_kostenplaats_nr || ' - ' || prs_kostenplaats_omschrijving
prs_kostenplaats_aanduiding
FROM prs_kostenplaats
WHERE prs_kostenplaats_verwijder IS NULL
AND prs_kostenplaats_module = 'PRJ';
-- Kenmerkdomein huurders (van studentenkamers)
-- Toont alle studenten plus allen niet-studenten aangemerkt als 'is huurder'
-- Voormalige studenten worden met een verwijderdatum in het verleden opgehaald (i.e. niet kiesbaar, alleen toonbaar)
-- functie 'Student' = 1537
-- kenmerk 'Former tenant' = 1220
-- kenmerk 'Is huurder' = 1080
CREATE OR REPLACE VIEW nybu_v_huurders_student
AS
SELECT pf.prs_perslid_key,
pf.prs_perslid_naam_full || ' [' || p.prs_perslid_nr || ']'
huurder_naam,
DECODE (
p.prs_perslid_key,
(SELECT prs_link_key
FROM prs_kenmerklink pk
WHERE p.prs_perslid_key = pk.prs_link_key
AND prs_kenmerklink_waarde = 1
AND prs_kenmerk_key = 1220),
SYSDATE - 1,
p.prs_perslid_verwijder)
prs_perslid_verwijder
FROM prs_v_perslid_fullnames_all pf, prs_perslid p
WHERE pf.prs_perslid_key = p.prs_perslid_key
AND p.prs_srtperslid_key = 1537
UNION ALL
SELECT pf.prs_perslid_key,
pf.prs_perslid_naam_full || ' [' || p.prs_perslid_nr || ']'
huurder_naam,
p.prs_perslid_verwijder
FROM prs_v_perslid_fullnames_all pf, prs_perslid p, prs_kenmerklink km
WHERE pf.prs_perslid_key = p.prs_perslid_key
AND p.prs_srtperslid_key NOT IN (1537)
AND km.prs_link_key = p.prs_perslid_key
AND km.prs_kenmerk_key = 1080
AND km.prs_kenmerklink_waarde = '1'
AND km.prs_kenmerklink_verwijder IS NULL;
-- Kenmerkdomein studentenkamers
CREATE OR REPLACE VIEW nybu_v_studentenkamers
AS
SELECT r.alg_ruimte_key,
g.alg_gebouw_code
|| '-'
|| v.alg_verdieping_volgnr
|| '-'
|| r.alg_ruimte_nr
|| ' ('
|| r.alg_ruimte_omschrijving
|| ', '
|| sr.alg_srtruimte_omschrijving
|| ')'
ruimte_oms
FROM alg_v_aanwezigruimte r,
alg_verdieping v,
alg_gebouw g,
alg_srtruimte sr
WHERE v.alg_gebouw_key = g.alg_gebouw_key
AND r.alg_verdieping_key = v.alg_verdieping_key
AND r.alg_srtruimte_key IN (56, 43, 58, 39, 121, 141,101)
AND sr.alg_srtruimte_key = r.alg_srtruimte_key;
-- Kenmerkdomein studentenpartner
-- functie 'Student partner' = 1644
CREATE OR REPLACE VIEW nybu_v_studentenpartners
AS
SELECT pf.prs_perslid_key, pf.prs_perslid_naam_full
FROM prs_v_perslid_fullnames pf, prs_v_aanwezigperslid p
WHERE pf.prs_perslid_key = p.prs_perslid_key
AND p.prs_srtperslid_key = 1644;
-- Kenmerkdomein kamercontrolemeldingen
-- (stdmelding Request roomcheck (workflow) = 941)
CREATE OR REPLACE VIEW nybu_v_huur_kamercontroles
AS
SELECT mld_melding_key, TO_CHAR (mld_melding_key) oms
FROM mld_melding
WHERE mld_stdmelding_key = 941;
-- NYBU#30687: Kenmerkdomein "Arrival on campus"-meldingen
-- (stdmelding 'Arrival on Campus (workflow)' = 1021)
CREATE OR REPLACE VIEW nybu_v_huur_arrival
AS
SELECT mld_melding_key, TO_CHAR (mld_melding_key) oms
FROM mld_melding
WHERE mld_stdmelding_key = 1021;
-- Kenmerkdomein huurders overige ruimtes en residenties
-- kenmerk 'Is huurder' = 1080
CREATE OR REPLACE VIEW nybu_v_huurders
AS
SELECT pf.*, p.prs_perslid_verwijder
FROM prs_v_perslid_fullnames_all pf, prs_kenmerklink kl, prs_perslid p
WHERE kl.prs_link_key = pf.prs_perslid_key
AND kl.prs_kenmerk_key = 1080
AND kl.prs_kenmerklink_verwijder IS NULL
AND kl.prs_kenmerklink_waarde = '1'
AND p.prs_perslid_key = pf.prs_perslid_key;
-- Gebruikt door huurcontracten-view en bereken-export; lijstje van huurcontracten
-- waarmee bepaald kan worden of een huurder een roommate (i.e. iemand met een contract
-- op dezelfde kamer) heeft.
CREATE OR REPLACE VIEW nybu_v_potential_roommates
AS
SELECT kamer.cnt_contract_key,
fac.safe_to_number (kamer.cnt_kenmerkcontract_waarde)
alg_ruimte_key,
pf.prs_perslid_key,
pf.prs_perslid_naam_full,
contr.cnt_contract_looptijd_van,
contr.cnt_contract_looptijd_tot
FROM cnt_kenmerkcontract kamer,
cnt_kenmerkcontract roommate,
cnt_contract contr,
prs_v_perslid_fullnames pf
WHERE kamer.cnt_kenmerk_key = 1
AND kamer.cnt_kenmerkcontract_verwijder IS NULL
AND roommate.cnt_kenmerk_key = 81
AND roommate.cnt_kenmerkcontract_verwijder IS NULL
AND pf.prs_perslid_key =
fac.safe_to_number (roommate.cnt_kenmerkcontract_waarde)
AND kamer.cnt_contract_key = roommate.cnt_contract_key
AND contr.cnt_contract_key = kamer.cnt_contract_key
AND contr.cnt_contract_verwijder IS NULL
AND contr.cnt_contract_status = 0
-- Poging om alleen recente contracten te vinden (voor allonges hoeven contracten niet per se actueel te zijn)
AND contr.cnt_contract_looptijd_tot >=
TRUNC (ADD_MONTHS (SYSDATE, -1), 'MM');
-- Basisview voor berekening, rapportage en facturatie huurcontracten studentenkamers.
-- contractsoort Student room 55
-- kenmerk Tenant 81
-- kenmerk Codanr 1000
-- kenmerk SANnr 1200
-- kenmerk Studentenkamer 1
-- kenmerk Borgbedrag 2
-- kenmerk Borg_betaald 43
-- kenmerk Schades 41
-- kenmerk Telefoonaansluiting 42
-- kenmerk Partner 21
-- kenmerk Budgetnr 63
-- kenmerk Rent to budget nr 64
-- kenmerk Service costs to nr 65
-- kenmerk Telephone to nr 66
-- kenmerk Partnercharge to nr 681
-- kenmerk Vooruit betalen 122
-- kenmerk Betaald tot 124
-- kenmerk Refund 123
-- kenmerk Schoonmaak verhuizing 941
-- srtkenmerk Maak allonge(s) 681
-- usrdata telefoonkosten 61
-- usrdata Tenant 441
-- usrdata Budget nr 442
-- usrdata Salary 443
-- NYBU#30133: SAN-nummer overruled nu het CODA-nummer (CON-nummer)
-- NYBU#30899: voor allonges alleen nog contracten met "Maak allonge(s)" beschouwen
-- NYBU#33330: huurcontract partner kan halverwege de maand eindigen; die looptijd ook meegeven
-- NYBU#33043: contracten in voorbereiding hoeven niet aan een ruimte gekoppeld te zijn
CREATE OR REPLACE VIEW nybu_v_huurcontracten_student
AS
SELECT c.cnt_contract_key,
c.cnt_contract_nummer_intern,
c.cnt_contract_versie,
DECODE (
c.cnt_contract_versie,
NULL,
c.cnt_contract_nummer_intern,
c.cnt_contract_nummer_intern || '.' || c.cnt_contract_versie)
cnt_contract_nr_versie,
c.cnt_contract_looptijd_van,
c.cnt_contract_looptijd_tot, -- eind,
c.cnt_prs_bedrijf_key,
kp.prs_kostenplaats_nr kpn,
SUBSTR (kg.prs_kostenplaatsgrp_oms, 1, 7) kpngrp,
ks.prs_kostensoort_oms AS kostensoort,
r.alg_ruimte_key,
g.alg_gebouw_naam gebouw,
v.alg_verdieping_code verdieping,
r.alg_ruimte_nr kamer,
p.prs_perslid_key,
p.prs_perslid_naam achternaam,
pf.prs_perslid_naam_full naam,
COALESCE (sannr.prs_kenmerklink_waarde,
codanr.prs_kenmerklink_waarde)
codanr,
partner.prs_perslid_key partner_key,
partner.prs_perslid_naam_full partner_naam,
sr.alg_srtruimte_omschrijving,
COALESCE (sr.alg_srtruimte_prijs, 0) huur,
DECODE (rentto.cnt_kenmerkcontract_waarde,
'442', ak.prs_kostenplaats_nr,
'443', 'salaris',
NULL)
budget_huur,
COALESCE (sr.alg_srtruimte_prijs2, 0) servicekosten,
DECODE (servto.cnt_kenmerkcontract_waarde,
'442', ak.prs_kostenplaats_nr,
'443', 'salaris',
NULL)
budget_service,
COALESCE (sr.alg_srtruimte_prijs3, 0) partnercharge,
DECODE (partnerto.cnt_kenmerkcontract_waarde,
'442', ak.prs_kostenplaats_nr,
'443', 'salaris',
NULL)
budget_partnercharge,
DECODE (telaansl.cnt_kenmerkcontract_waarde,
'1', (SELECT fac_usrdata_prijs
FROM fac_usrdata
WHERE fac_usrdata_key = 61),
0)
telefooncharge,
DECODE (telto.cnt_kenmerkcontract_waarde,
'442', ak.prs_kostenplaats_nr,
'443', 'salaris',
NULL)
budget_telefoon,
DECODE (borgbet.cnt_kenmerkcontract_waarde,
'1', 0,
fac.safe_to_number (borgbedr.cnt_kenmerkcontract_waarde))
borg_tebetalen,
DECODE (borgbet.cnt_kenmerkcontract_waarde,
'1',
fac.safe_to_number (borgbedr.cnt_kenmerkcontract_waarde),
0)
borg_betaald,
fac.safe_to_number (schade.cnt_kenmerkcontract_waarde) schadebedrag,
DECODE (fac.safe_to_number (vooruit.cnt_kenmerkcontract_waarde),
NULL, 1,
fac.safe_to_number (vooruit.cnt_kenmerkcontract_waarde))
aantal_periodes,
bettot.cnt_kenmerkcontract_waarde betaald_tot,
fac.safe_to_number (refund.cnt_kenmerkcontract_waarde) refund,
fac.safe_to_number (schoonm.cnt_kenmerkcontract_waarde) schoonmaak,
fac.safe_to_number (allonge.cnt_kenmerkcontract_waarde)
maak_allonge
FROM cnt_contract c,
(SELECT *
FROM cnt_kenmerkcontract
WHERE cnt_kenmerk_key = 81) huurder,
prs_perslid p,
prs_v_perslid_fullnames pf,
prs_v_aanwezigkostenplaats ak,
(SELECT *
FROM prs_kenmerklink
WHERE prs_kenmerk_key = 1000
AND prs_kenmerklink_verwijder IS NULL) codanr,
(SELECT *
FROM prs_kenmerklink
WHERE prs_kenmerk_key = 1200
AND prs_kenmerklink_verwijder IS NULL) sannr,
(SELECT *
FROM cnt_kenmerkcontract
WHERE cnt_kenmerk_key = 1
AND cnt_kenmerkcontract_verwijder IS NULL) studkam,
(SELECT *
FROM cnt_kenmerkcontract
WHERE cnt_kenmerk_key = 2
AND cnt_kenmerkcontract_verwijder IS NULL) borgbedr,
(SELECT *
FROM cnt_kenmerkcontract
WHERE cnt_kenmerk_key = 43
AND cnt_kenmerkcontract_verwijder IS NULL) borgbet,
(SELECT *
FROM cnt_kenmerkcontract
WHERE cnt_kenmerk_key = 42
AND cnt_kenmerkcontract_verwijder IS NULL) telaansl,
(SELECT *
FROM cnt_kenmerkcontract
WHERE cnt_kenmerk_key = 41
AND cnt_kenmerkcontract_verwijder IS NULL) schade,
(SELECT kc.cnt_contract_key, pf.*
FROM cnt_kenmerkcontract kc, prs_v_perslid_fullnames pf
WHERE kc.cnt_kenmerk_key = 21
AND cnt_kenmerkcontract_verwijder IS NULL
AND fac.safe_to_number (kc.cnt_kenmerkcontract_waarde) =
pf.prs_perslid_key) partner,
(SELECT *
FROM cnt_kenmerkcontract
WHERE cnt_kenmerk_key = 63
AND cnt_kenmerkcontract_verwijder IS NULL) budgnr,
(SELECT *
FROM cnt_kenmerkcontract
WHERE cnt_kenmerk_key = 64
AND cnt_kenmerkcontract_verwijder IS NULL) rentto,
(SELECT *
FROM cnt_kenmerkcontract
WHERE cnt_kenmerk_key = 65
AND cnt_kenmerkcontract_verwijder IS NULL) servto,
(SELECT *
FROM cnt_kenmerkcontract
WHERE cnt_kenmerk_key = 66
AND cnt_kenmerkcontract_verwijder IS NULL) telto,
(SELECT *
FROM cnt_kenmerkcontract
WHERE cnt_kenmerk_key = 681
AND cnt_kenmerkcontract_verwijder IS NULL) partnerto,
(SELECT *
FROM cnt_kenmerkcontract
WHERE cnt_kenmerk_key = 122
AND cnt_kenmerkcontract_verwijder IS NULL) vooruit,
(SELECT *
FROM cnt_kenmerkcontract
WHERE cnt_kenmerk_key = 124
AND cnt_kenmerkcontract_verwijder IS NULL) bettot,
(SELECT *
FROM cnt_kenmerkcontract
WHERE cnt_kenmerk_key = 123
AND cnt_kenmerkcontract_verwijder IS NULL) refund,
(SELECT *
FROM cnt_kenmerkcontract
WHERE cnt_kenmerk_key = 941
AND cnt_kenmerkcontract_verwijder IS NULL) schoonm,
(SELECT kc.*
FROM cnt_kenmerkcontract kc, cnt_kenmerk k
WHERE kc.cnt_kenmerk_key = k.cnt_kenmerk_key
AND k.cnt_srtkenmerk_key = 681
AND kc.cnt_kenmerkcontract_verwijder IS NULL) allonge,
alg_ruimte r,
alg_verdieping v,
alg_gebouw g,
alg_srtruimte sr,
prs_afdeling a,
prs_kostenplaats kp,
prs_kostenplaatsgrp kg,
ins_tab_discipline d,
prs_kostensoort ks
WHERE c.ins_discipline_key = 55
AND c.ins_discipline_key = d.ins_discipline_key
AND d.prs_kostensoort_key = ks.prs_kostensoort_key
AND c.cnt_contract_verwijder IS NULL
AND c.cnt_contract_status = 0
AND huurder.cnt_contract_key = c.cnt_contract_key
AND p.prs_perslid_key =
fac.safe_to_number (huurder.cnt_kenmerkcontract_waarde)
AND pf.prs_perslid_key = p.prs_perslid_key
AND codanr.prs_link_key(+) = p.prs_perslid_key
AND sannr.prs_link_key(+) = p.prs_perslid_key
AND studkam.cnt_contract_key(+) = c.cnt_contract_key
AND r.alg_ruimte_key(+) =
fac.safe_to_number (studkam.cnt_kenmerkcontract_waarde)
AND v.alg_verdieping_key(+) = r.alg_verdieping_key
AND g.alg_gebouw_key(+) = v.alg_gebouw_key
AND sr.alg_srtruimte_key(+) = r.alg_srtruimte_key
AND borgbedr.cnt_contract_key(+) = c.cnt_contract_key
AND borgbet.cnt_contract_key(+) = c.cnt_contract_key
AND telaansl.cnt_contract_key(+) = c.cnt_contract_key
AND schade.cnt_contract_key(+) = c.cnt_contract_key
AND partner.cnt_contract_key(+) = c.cnt_contract_key
AND budgnr.cnt_contract_key(+) = c.cnt_contract_key
AND ak.prs_kostenplaats_key(+) =
fac.safe_to_number (budgnr.cnt_kenmerkcontract_waarde)
AND rentto.cnt_contract_key(+) = c.cnt_contract_key
AND servto.cnt_contract_key(+) = c.cnt_contract_key
AND telto.cnt_contract_key(+) = c.cnt_contract_key
AND partnerto.cnt_contract_key(+) = c.cnt_contract_key
AND vooruit.cnt_contract_key(+) = c.cnt_contract_key
AND bettot.cnt_contract_key(+) = c.cnt_contract_key
AND refund.cnt_contract_key(+) = c.cnt_contract_key
AND schoonm.cnt_contract_key(+) = c.cnt_contract_key
AND allonge.cnt_contract_key(+) = c.cnt_contract_key
AND a.prs_afdeling_key = p.prs_afdeling_key
AND kp.prs_kostenplaats_key = c.prs_kostenplaats_key
AND kg.prs_kostenplaatsgrp_key(+) = kp.prs_kostenplaatsgrp_key
AND COALESCE (sannr.prs_kenmerklink_waarde,
codanr.prs_kenmerklink_waarde) IS NOT NULL;
----- Exports ------------------------------------
-- Bepaalt factuurregels op basis van huidige contractgegevens.
-- Deze gegevens kunnen op twee manieren gebruikt worden: reguliere export en mutatie.
-- Bij reguliere export worden de gegenereerde factuurregels voor een periode naar een exportbestand geschreven
-- Bij mutatie worden de resulterende regels tegen al bestaande regels voor dezelfde periode gehouden en
-- worden verschilregels gegenereerd. Die verschilregels zijn voor de volgende periode en worden in de
-- export voor die periode meegenomen.
-- Parameter p_mode:
-- 0: testexport (gebruik alleen buffer, kenmerken niet bijwerken)
-- 1: definitieve export (kopieer buffer naar archief, kenmerken bijwerken)
-- 2: allonges (gebruik alleen buffer, alleen contracten met "Maak allonge(s)" gezet,
-- kenmerken niet bijwerken)
-- NYBU#30133: SAN-nummer overruled CODA-nummer (CON-nummer)
-- NYBU#30899: kenmerk "Maak allonge(s)" meenemen
-- NYBU#33043: alleen campuscontracten overwegen die aan een ruimte gekoppeld te zijn
-- cnt_srtcontract Campus 55
-- cnt_srtcontract Staff Residence 221
-- cnt_srtcontract Office 561
-- prs_kenmerk CON-number 1000
-- cnt_kenmerk SAN number 1200
-- cnt_kenmerk Student room 1
-- cnt_kenmerk Budget nr 63
-- cnt_kenmerk Tenant (student) 81
-- cnt_kenmerk Bill in advance 122
-- cnt_kenmerk Contract paid until 124
-- cnt_srtkenmerk Huurder 101
-- cnt_srtkenmerk Verhuurbare ruimte 102
-- cnt_srtkenmerk P-number 341
-- cnt_srtkenmerk Maak allonge(s) 681
-- cnt_srtkenmerk Refund omschrijving (BTW hoog) 722
-- cnt_srtkenmerk Refund bedrag (incl BTW hoog) 723
-- cnt_srtkenmerk Refund omschrijving (BTW laag) 724
-- cnt_srtkenmerk Refund bedrag (incl BTW laag) 725
-- cnt_srtkenmerk Refund omschrijving (geen BTW) 726
-- cnt_srtkenmerk Refund bedrag (geen BTW) 727
-- fac_usrtab CODA_BTW 42
-- fac_usrtab CODA_OMS 43
CREATE OR REPLACE PROCEDURE nybu_bereken_factuurregels (
p_applname IN VARCHAR2,
p_run IN DATE,
p_periode IN VARCHAR2,
p_mode IN NUMBER)
AS
v_aanduiding VARCHAR2 (200);
v_errorhint VARCHAR2 (1000);
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_count NUMBER;
-- Student room
-- Alle verhuurcontracten waarbij de huidige periode (deels) binnen de looptijd valt
-- TRUNC op maand, omdat contracten halverwege de maand kunnen beginnen/eindigen
CURSOR sr
IS
SELECT c.*
FROM nybu_v_huurcontracten_student c
WHERE (c.betaald_tot IS NULL OR c.betaald_tot < p_periode)
AND TO_DATE (p_periode, 'YYYYMM') BETWEEN TRUNC (
c.cnt_contract_looptijd_van,
'MM')
AND TRUNC (
c.cnt_contract_looptijd_tot,
'MM')
AND alg_ruimte_key IS NOT NULL;
-- Residence/office
CURSOR ro
IS
SELECT c.cnt_contract_key,
c.cnt_contract_looptijd_van,
c.cnt_contract_looptijd_tot,
DECODE (c.ins_discipline_key,
221, 'Staff residence',
561, 'Office')
betreft,
c.cnt_contract_nummer_intern,
c.cnt_contract_versie,
DECODE (
c.cnt_contract_versie,
NULL,
c.cnt_contract_nummer_intern,
c.cnt_contract_nummer_intern || '.' || c.cnt_contract_versie)
cnt_contract_nr_versie,
c.cnt_contract_omschrijving,
kp.prs_kostenplaats_nr kpn,
TRIM (SUBSTR (kg.prs_kostenplaatsgrp_oms, 1, 7)) kpngrp,
ks.prs_kostensoort_oms kostensoort,
p.prs_perslid_key,
p.prs_perslid_naam,
pf.prs_perslid_naam_full,
COALESCE (sannr.prs_kenmerklink_waarde,
codanr.prs_kenmerklink_waarde)
codanr,
k.prs_kostenplaats_nr,
rg.alg_ruimte_key,
rg.alg_ruimte_aanduiding,
allonge.cnt_kenmerkcontract_waarde maak_allonge
FROM (SELECT *
FROM cnt_contract
WHERE ins_discipline_key IN (221, 561)) c,
(SELECT kc.*
FROM cnt_kenmerkcontract kc, cnt_kenmerk k
WHERE kc.cnt_kenmerk_key = k.cnt_kenmerk_key
AND k.cnt_srtkenmerk_key = 101
AND kc.cnt_kenmerkcontract_verwijder IS NULL) huurder,
(SELECT kc.*
FROM cnt_kenmerkcontract kc, cnt_kenmerk k
WHERE kc.cnt_kenmerk_key = k.cnt_kenmerk_key
AND cnt_srtkenmerk_key = 341) pnummer,
(SELECT kc.*
FROM cnt_kenmerkcontract kc, cnt_kenmerk k
WHERE kc.cnt_kenmerk_key = k.cnt_kenmerk_key
AND k.cnt_srtkenmerk_key = 102
AND kc.cnt_kenmerkcontract_verwijder IS NULL) ruimte,
(SELECT kc.*
FROM cnt_kenmerkcontract kc, cnt_kenmerk k
WHERE kc.cnt_kenmerk_key = k.cnt_kenmerk_key
AND k.cnt_srtkenmerk_key = 681
AND kc.cnt_kenmerkcontract_verwijder IS NULL) allonge,
prs_perslid p,
prs_v_perslid_fullnames pf,
(SELECT *
FROM prs_kenmerklink
WHERE prs_kenmerk_key = 1000
AND prs_kenmerklink_verwijder IS NULL) codanr,
(SELECT *
FROM prs_kenmerklink
WHERE prs_kenmerk_key = 1200
AND prs_kenmerklink_verwijder IS NULL) sannr,
prs_kostenplaats k,
prs_kostenplaats kp,
prs_kostenplaatsgrp kg,
alg_v_ruimte_gegevens rg,
ins_tab_discipline d,
prs_kostensoort ks
WHERE c.ins_discipline_key = d.ins_discipline_key
AND d.prs_kostensoort_key = ks.prs_kostensoort_key
AND huurder.cnt_contract_key(+) = c.cnt_contract_key
AND pnummer.cnt_contract_key(+) = c.cnt_contract_key
AND ruimte.cnt_contract_key(+) = c.cnt_contract_key
AND allonge.cnt_contract_key(+) = c.cnt_contract_key
AND kp.prs_kostenplaats_key = c.prs_kostenplaats_key
AND kg.prs_kostenplaatsgrp_key(+) = kp.prs_kostenplaatsgrp_key
AND p.prs_perslid_key(+) =
fac.safe_to_number (huurder.cnt_kenmerkcontract_waarde)
AND pf.prs_perslid_key(+) = p.prs_perslid_key
AND codanr.prs_link_key(+) = p.prs_perslid_key
AND sannr.prs_link_key(+) = p.prs_perslid_key
AND k.prs_kostenplaats_key(+) =
fac.safe_to_number (pnummer.cnt_kenmerkcontract_waarde)
AND rg.alg_ruimte_key(+) =
fac.safe_to_number (ruimte.cnt_kenmerkcontract_waarde)
AND c.cnt_contract_verwijder IS NULL
AND TO_DATE (p_periode, 'YYYYMM') BETWEEN TRUNC (
c.cnt_contract_looptijd_van,
'MM')
AND TRUNC (
c.cnt_contract_looptijd_tot,
'MM');
-- Refunds
-- Voor zowel campus- als residence/office-contracten. Aparte cursor, omdat hiervoor
-- ook gesloten contracten moeten worden beschouwd.
CURSOR refunds
IS
WITH refunds
AS (SELECT c.cnt_contract_key,
kco.cnt_kenmerkcontract_waarde omschrijving,
fac.safe_to_number (kcb.cnt_kenmerkcontract_waarde)
bedrag,
'VH21' btw,
ko.cnt_kenmerk_volgnummer volgnr,
ko.cnt_srtkenmerk_key,
ko.cnt_kenmerk_key omschr_key,
kb.cnt_kenmerk_key bedrag_key
FROM cnt_contract c,
cnt_kenmerk ko,
cnt_kenmerk kb,
cnt_kenmerkcontract kco,
cnt_kenmerkcontract kcb
WHERE c.cnt_contract_verwijder IS NULL
AND kco.cnt_kenmerkcontract_verwijder IS NULL
AND kco.cnt_kenmerkcontract_verwijder IS NULL
AND kco.cnt_contract_key = c.cnt_contract_key
AND kcb.cnt_contract_key = c.cnt_contract_key
AND kco.cnt_kenmerk_key = ko.cnt_kenmerk_key
AND kcb.cnt_kenmerk_key = kb.cnt_kenmerk_key
AND ko.cnt_kenmerk_key IN
(SELECT cnt_kenmerk_key
FROM cnt_kenmerk
WHERE cnt_srtkenmerk_key = 722)
AND kb.cnt_kenmerk_key IN
(SELECT cnt_kenmerk_key
FROM cnt_kenmerk
WHERE cnt_srtkenmerk_key = 723)
UNION ALL
SELECT c.cnt_contract_key,
kco.cnt_kenmerkcontract_waarde omschrijving,
fac.safe_to_number (kcb.cnt_kenmerkcontract_waarde)
bedrag,
'VL' btw,
ko.cnt_kenmerk_volgnummer volgnr,
ko.cnt_srtkenmerk_key,
ko.cnt_kenmerk_key omschr_key,
kb.cnt_kenmerk_key bedrag_key
FROM cnt_contract c,
cnt_kenmerk ko,
cnt_kenmerk kb,
cnt_kenmerkcontract kco,
cnt_kenmerkcontract kcb
WHERE c.cnt_contract_verwijder IS NULL
AND kco.cnt_kenmerkcontract_verwijder IS NULL
AND kco.cnt_kenmerkcontract_verwijder IS NULL
AND kco.cnt_contract_key = c.cnt_contract_key
AND kcb.cnt_contract_key = c.cnt_contract_key
AND kco.cnt_kenmerk_key = ko.cnt_kenmerk_key
AND kcb.cnt_kenmerk_key = kb.cnt_kenmerk_key
AND ko.cnt_kenmerk_key IN
(SELECT cnt_kenmerk_key
FROM cnt_kenmerk
WHERE cnt_srtkenmerk_key = 724)
AND kb.cnt_kenmerk_key IN
(SELECT cnt_kenmerk_key
FROM cnt_kenmerk
WHERE cnt_srtkenmerk_key = 725)
UNION ALL
SELECT c.cnt_contract_key,
kco.cnt_kenmerkcontract_waarde omschrijving,
fac.safe_to_number (kcb.cnt_kenmerkcontract_waarde)
bedrag,
'VV' btw,
ko.cnt_kenmerk_volgnummer volgnr,
ko.cnt_srtkenmerk_key,
ko.cnt_kenmerk_key omschr_key,
kb.cnt_kenmerk_key bedrag_key
FROM cnt_contract c,
cnt_kenmerk ko,
cnt_kenmerk kb,
cnt_kenmerkcontract kco,
cnt_kenmerkcontract kcb
WHERE c.cnt_contract_verwijder IS NULL
AND kco.cnt_kenmerkcontract_verwijder IS NULL
AND kco.cnt_kenmerkcontract_verwijder IS NULL
AND kco.cnt_contract_key = c.cnt_contract_key
AND kcb.cnt_contract_key = c.cnt_contract_key
AND kco.cnt_kenmerk_key = ko.cnt_kenmerk_key
AND kcb.cnt_kenmerk_key = kb.cnt_kenmerk_key
AND ko.cnt_kenmerk_key IN
(SELECT cnt_kenmerk_key
FROM cnt_kenmerk
WHERE cnt_srtkenmerk_key = 726)
AND kb.cnt_kenmerk_key IN
(SELECT cnt_kenmerk_key
FROM cnt_kenmerk
WHERE cnt_srtkenmerk_key = 727)),
contracten
AS (SELECT c.cnt_contract_key,
c.ins_discipline_key,
DECODE (c.ins_discipline_key,
221, 'Staff residence',
561, 'Office')
betreft,
c.cnt_contract_nummer_intern,
c.cnt_contract_versie,
DECODE (
c.cnt_contract_versie,
NULL,
c.cnt_contract_nummer_intern,
c.cnt_contract_nummer_intern
|| '.'
|| c.cnt_contract_versie)
cnt_contract_nr_versie,
kp.prs_kostenplaats_nr kpn,
TRIM (SUBSTR (kg.prs_kostenplaatsgrp_oms, 1, 7))
kpngrp,
ks.prs_kostensoort_oms kostensoort,
p.prs_perslid_key,
p.prs_perslid_naam,
pf.prs_perslid_naam_full,
COALESCE (sannr.prs_kenmerklink_waarde,
codanr.prs_kenmerklink_waarde)
codanr,
k.prs_kostenplaats_nr budgetnr,
rg.alg_ruimte_key,
rg.alg_ruimte_aanduiding alg_ruimte_nr,
allonge.cnt_kenmerkcontract_waarde maak_allonge
FROM (SELECT *
FROM cnt_contract
WHERE ins_discipline_key IN (221, 561)) c,
(SELECT kc.*
FROM cnt_kenmerkcontract kc, cnt_kenmerk k
WHERE kc.cnt_kenmerk_key = k.cnt_kenmerk_key
AND k.cnt_srtkenmerk_key = 101
AND kc.cnt_kenmerkcontract_verwijder IS NULL)
huurder,
(SELECT kc.*
FROM cnt_kenmerkcontract kc, cnt_kenmerk k
WHERE kc.cnt_kenmerk_key = k.cnt_kenmerk_key
AND cnt_srtkenmerk_key = 341) pnummer,
(SELECT kc.*
FROM cnt_kenmerkcontract kc, cnt_kenmerk k
WHERE kc.cnt_kenmerk_key = k.cnt_kenmerk_key
AND k.cnt_srtkenmerk_key = 102
AND kc.cnt_kenmerkcontract_verwijder IS NULL)
ruimte,
(SELECT kc.*
FROM cnt_kenmerkcontract kc, cnt_kenmerk k
WHERE kc.cnt_kenmerk_key = k.cnt_kenmerk_key
AND k.cnt_srtkenmerk_key = 681
AND kc.cnt_kenmerkcontract_verwijder IS NULL)
allonge,
prs_perslid p,
prs_v_perslid_fullnames pf,
(SELECT *
FROM prs_kenmerklink
WHERE prs_kenmerk_key = 1000
AND prs_kenmerklink_verwijder IS NULL)
codanr,
(SELECT *
FROM prs_kenmerklink
WHERE prs_kenmerk_key = 1200
AND prs_kenmerklink_verwijder IS NULL) sannr,
prs_kostenplaats k,
prs_kostenplaats kp,
prs_kostenplaatsgrp kg,
alg_v_ruimte_gegevens rg,
ins_tab_discipline d,
prs_kostensoort ks
WHERE c.ins_discipline_key = d.ins_discipline_key
AND d.prs_kostensoort_key = ks.prs_kostensoort_key
AND huurder.cnt_contract_key(+) = c.cnt_contract_key
AND pnummer.cnt_contract_key(+) = c.cnt_contract_key
AND ruimte.cnt_contract_key(+) = c.cnt_contract_key
AND allonge.cnt_contract_key(+) = c.cnt_contract_key
AND kp.prs_kostenplaats_key = c.prs_kostenplaats_key
AND kg.prs_kostenplaatsgrp_key(+) =
kp.prs_kostenplaatsgrp_key
AND p.prs_perslid_key(+) =
fac.safe_to_number (
huurder.cnt_kenmerkcontract_waarde)
AND pf.prs_perslid_key(+) = p.prs_perslid_key
AND codanr.prs_link_key(+) = p.prs_perslid_key
AND sannr.prs_link_key(+) = p.prs_perslid_key
AND k.prs_kostenplaats_key(+) =
fac.safe_to_number (
pnummer.cnt_kenmerkcontract_waarde)
AND rg.alg_ruimte_key(+) =
fac.safe_to_number (
ruimte.cnt_kenmerkcontract_waarde)
AND c.cnt_contract_verwijder IS NULL
UNION ALL
SELECT c.cnt_contract_key,
c.ins_discipline_key,
'Campus' betreft,
c.cnt_contract_nummer_intern,
c.cnt_contract_versie,
DECODE (
c.cnt_contract_versie,
NULL,
c.cnt_contract_nummer_intern,
c.cnt_contract_nummer_intern
|| '.'
|| c.cnt_contract_versie)
cnt_contract_nr_versie,
kp.prs_kostenplaats_nr kpn,
SUBSTR (kg.prs_kostenplaatsgrp_oms, 1, 7) kpngrp,
ks.prs_kostensoort_oms kostensoort,
p.prs_perslid_key,
p.prs_perslid_naam achternaam,
pf.prs_perslid_naam_full naam,
COALESCE (sannr.prs_kenmerklink_waarde,
codanr.prs_kenmerklink_waarde)
codanr,
ak.prs_kostenplaats_nr budgetnr,
r.alg_ruimte_key,
r.alg_ruimte_nr,
allonge.cnt_kenmerkcontract_waarde maak_allonge
FROM cnt_contract c,
(SELECT *
FROM cnt_kenmerkcontract
WHERE cnt_kenmerk_key = 81) student,
prs_perslid p,
prs_v_perslid_fullnames pf,
prs_v_aanwezigkostenplaats ak,
(SELECT *
FROM prs_kenmerklink
WHERE prs_kenmerk_key = 1000
AND prs_kenmerklink_verwijder IS NULL)
codanr,
(SELECT *
FROM prs_kenmerklink
WHERE prs_kenmerk_key = 1200
AND prs_kenmerklink_verwijder IS NULL) sannr,
(SELECT *
FROM cnt_kenmerkcontract
WHERE cnt_kenmerk_key = 1
AND cnt_kenmerkcontract_verwijder IS NULL)
studkam,
(SELECT *
FROM cnt_kenmerkcontract
WHERE cnt_kenmerk_key = 63
AND cnt_kenmerkcontract_verwijder IS NULL)
budgnr,
(SELECT kc.*
FROM cnt_kenmerkcontract kc, cnt_kenmerk k
WHERE kc.cnt_kenmerk_key = k.cnt_kenmerk_key
AND k.cnt_srtkenmerk_key = 681
AND kc.cnt_kenmerkcontract_verwijder IS NULL)
allonge,
alg_ruimte r,
prs_afdeling a,
prs_kostenplaats kp,
prs_kostenplaatsgrp kg,
ins_tab_discipline d,
prs_kostensoort ks
WHERE c.ins_discipline_key = 55
AND c.ins_discipline_key = d.ins_discipline_key
AND d.prs_kostensoort_key = ks.prs_kostensoort_key
AND c.cnt_contract_verwijder IS NULL
AND student.cnt_contract_key = c.cnt_contract_key
AND p.prs_perslid_key =
fac.safe_to_number (
student.cnt_kenmerkcontract_waarde)
AND pf.prs_perslid_key = p.prs_perslid_key
AND codanr.prs_link_key(+) = p.prs_perslid_key
AND sannr.prs_link_key(+) = p.prs_perslid_key
AND allonge.cnt_contract_key(+) = c.cnt_contract_key
AND studkam.cnt_contract_key = c.cnt_contract_key
AND r.alg_ruimte_key(+) =
fac.safe_to_number (
studkam.cnt_kenmerkcontract_waarde)
AND budgnr.cnt_contract_key(+) = c.cnt_contract_key
AND ak.prs_kostenplaats_key(+) =
fac.safe_to_number (
budgnr.cnt_kenmerkcontract_waarde)
AND a.prs_afdeling_key = p.prs_afdeling_key
AND kp.prs_kostenplaats_key = c.prs_kostenplaats_key
AND kg.prs_kostenplaatsgrp_key(+) =
kp.prs_kostenplaatsgrp_key)
SELECT betreft,
DECODE (c.ins_discipline_key,
561, COALESCE (c.budgetnr, c.codanr),
CASE
WHEN r.volgnr BETWEEN 500 AND 599 THEN c.codanr
WHEN r.volgnr BETWEEN 600 AND 699 THEN c.budgetnr
WHEN r.volgnr BETWEEN 700 AND 799 THEN 'salaris'
END)
bill_to,
prs_perslid_naam,
prs_perslid_naam_full,
prs_perslid_key,
cnt_contract_nummer_intern,
cnt_contract_versie,
DECODE (
c.cnt_contract_versie,
NULL,
c.cnt_contract_nummer_intern,
c.cnt_contract_nummer_intern || '.' || c.cnt_contract_versie)
cnt_contract_nr_versie,
r.cnt_contract_key,
alg_ruimte_nr,
alg_ruimte_key,
omschrijving,
kpngrp,
kpn,
kostensoort,
btw.fac_usrdata_omschr btw,
fac.safe_to_number (btw.fac_usrdata_code) perc,
-bedrag bedrag,
omschr_key,
bedrag_key,
maak_allonge
FROM refunds r,
contracten c,
fac_usrdata btw,
ins_tab_discipline d,
prs_kostensoort ks
WHERE r.cnt_contract_key = c.cnt_contract_key
AND c.ins_discipline_key = d.ins_discipline_key
AND d.prs_kostensoort_key = ks.prs_kostensoort_key
AND btw.fac_usrdata_omschr = r.btw
AND btw.fac_usrtab_key = 42;
-- NYBU#35517 Payments toevoegen conform refunds
-- Voor zowel campus- als residence/office-contracten. Aparte cursor, omdat hiervoor
-- ook gesloten contracten moeten worden beschouwd.
CURSOR payments
IS
WITH payments
AS (SELECT c.cnt_contract_key,
kco.cnt_kenmerkcontract_waarde omschrijving,
fac.safe_to_number (kcb.cnt_kenmerkcontract_waarde)
bedrag,
'VH21' btw,
ko.cnt_kenmerk_volgnummer volgnr,
ko.cnt_srtkenmerk_key,
ko.cnt_kenmerk_key omschr_key,
kb.cnt_kenmerk_key bedrag_key
FROM cnt_contract c,
cnt_kenmerk ko,
cnt_kenmerk kb,
cnt_kenmerkcontract kco,
cnt_kenmerkcontract kcb
WHERE c.cnt_contract_verwijder IS NULL
AND kco.cnt_kenmerkcontract_verwijder IS NULL
AND kco.cnt_kenmerkcontract_verwijder IS NULL
AND kco.cnt_contract_key = c.cnt_contract_key
AND kcb.cnt_contract_key = c.cnt_contract_key
AND kco.cnt_kenmerk_key = ko.cnt_kenmerk_key
AND kcb.cnt_kenmerk_key = kb.cnt_kenmerk_key
AND ko.cnt_kenmerk_key IN
(SELECT cnt_kenmerk_key
FROM cnt_kenmerk
WHERE cnt_srtkenmerk_key = 841) --- payment omschrijving BTW hoog
AND kb.cnt_kenmerk_key IN
(SELECT cnt_kenmerk_key
FROM cnt_kenmerk
WHERE cnt_srtkenmerk_key = 842) --- payment bedrag incl BTW hoog
UNION ALL
SELECT c.cnt_contract_key,
kco.cnt_kenmerkcontract_waarde omschrijving,
fac.safe_to_number (kcb.cnt_kenmerkcontract_waarde)
bedrag,
'VL' btw,
ko.cnt_kenmerk_volgnummer volgnr,
ko.cnt_srtkenmerk_key,
ko.cnt_kenmerk_key omschr_key,
kb.cnt_kenmerk_key bedrag_key
FROM cnt_contract c,
cnt_kenmerk ko,
cnt_kenmerk kb,
cnt_kenmerkcontract kco,
cnt_kenmerkcontract kcb
WHERE c.cnt_contract_verwijder IS NULL
AND kco.cnt_kenmerkcontract_verwijder IS NULL
AND kco.cnt_kenmerkcontract_verwijder IS NULL
AND kco.cnt_contract_key = c.cnt_contract_key
AND kcb.cnt_contract_key = c.cnt_contract_key
AND kco.cnt_kenmerk_key = ko.cnt_kenmerk_key
AND kcb.cnt_kenmerk_key = kb.cnt_kenmerk_key
AND ko.cnt_kenmerk_key IN
(SELECT cnt_kenmerk_key
FROM cnt_kenmerk
WHERE cnt_srtkenmerk_key = 843) --- payment omschrijving BTW laag
AND kb.cnt_kenmerk_key IN
(SELECT cnt_kenmerk_key
FROM cnt_kenmerk
WHERE cnt_srtkenmerk_key = 844) --- payment bedrag incl BTW laag
UNION ALL
SELECT c.cnt_contract_key,
kco.cnt_kenmerkcontract_waarde omschrijving,
fac.safe_to_number (kcb.cnt_kenmerkcontract_waarde)
bedrag,
'VV' btw,
ko.cnt_kenmerk_volgnummer volgnr,
ko.cnt_srtkenmerk_key,
ko.cnt_kenmerk_key omschr_key,
kb.cnt_kenmerk_key bedrag_key
FROM cnt_contract c,
cnt_kenmerk ko,
cnt_kenmerk kb,
cnt_kenmerkcontract kco,
cnt_kenmerkcontract kcb
WHERE c.cnt_contract_verwijder IS NULL
AND kco.cnt_kenmerkcontract_verwijder IS NULL
AND kco.cnt_kenmerkcontract_verwijder IS NULL
AND kco.cnt_contract_key = c.cnt_contract_key
AND kcb.cnt_contract_key = c.cnt_contract_key
AND kco.cnt_kenmerk_key = ko.cnt_kenmerk_key
AND kcb.cnt_kenmerk_key = kb.cnt_kenmerk_key
AND ko.cnt_kenmerk_key IN
(SELECT cnt_kenmerk_key
FROM cnt_kenmerk
WHERE cnt_srtkenmerk_key = 845) --- payment omschrijving geen BTW
AND kb.cnt_kenmerk_key IN
(SELECT cnt_kenmerk_key
FROM cnt_kenmerk
WHERE cnt_srtkenmerk_key = 846) --- payment bedrag geen BTW
),
contracten
AS (SELECT c.cnt_contract_key,
c.ins_discipline_key,
DECODE (c.ins_discipline_key,
221, 'Staff residence',
561, 'Office')
betreft,
c.cnt_contract_nummer_intern,
c.cnt_contract_versie,
DECODE (
c.cnt_contract_versie,
NULL,
c.cnt_contract_nummer_intern,
c.cnt_contract_nummer_intern
|| '.'
|| c.cnt_contract_versie)
cnt_contract_nr_versie,
kp.prs_kostenplaats_nr kpn,
TRIM (SUBSTR (kg.prs_kostenplaatsgrp_oms, 1, 7))
kpngrp,
ks.prs_kostensoort_oms kostensoort,
p.prs_perslid_key,
p.prs_perslid_naam,
pf.prs_perslid_naam_full,
COALESCE (sannr.prs_kenmerklink_waarde,
codanr.prs_kenmerklink_waarde)
codanr,
k.prs_kostenplaats_nr budgetnr,
rg.alg_ruimte_key,
rg.alg_ruimte_aanduiding alg_ruimte_nr,
allonge.cnt_kenmerkcontract_waarde maak_allonge
FROM (SELECT *
FROM cnt_contract
WHERE ins_discipline_key IN (221, 561)) c,
(SELECT kc.*
FROM cnt_kenmerkcontract kc, cnt_kenmerk k
WHERE kc.cnt_kenmerk_key = k.cnt_kenmerk_key
AND k.cnt_srtkenmerk_key = 101
AND kc.cnt_kenmerkcontract_verwijder IS NULL)
huurder,
(SELECT kc.*
FROM cnt_kenmerkcontract kc, cnt_kenmerk k
WHERE kc.cnt_kenmerk_key = k.cnt_kenmerk_key
AND cnt_srtkenmerk_key = 341) pnummer,
(SELECT kc.*
FROM cnt_kenmerkcontract kc, cnt_kenmerk k
WHERE kc.cnt_kenmerk_key = k.cnt_kenmerk_key
AND k.cnt_srtkenmerk_key = 102
AND kc.cnt_kenmerkcontract_verwijder IS NULL)
ruimte,
(SELECT kc.*
FROM cnt_kenmerkcontract kc, cnt_kenmerk k
WHERE kc.cnt_kenmerk_key = k.cnt_kenmerk_key
AND k.cnt_srtkenmerk_key = 681
AND kc.cnt_kenmerkcontract_verwijder IS NULL)
allonge,
prs_perslid p,
prs_v_perslid_fullnames pf,
(SELECT *
FROM prs_kenmerklink
WHERE prs_kenmerk_key = 1000
AND prs_kenmerklink_verwijder IS NULL)
codanr,
(SELECT *
FROM prs_kenmerklink
WHERE prs_kenmerk_key = 1200
AND prs_kenmerklink_verwijder IS NULL) sannr,
prs_kostenplaats k,
prs_kostenplaats kp,
prs_kostenplaatsgrp kg,
alg_v_ruimte_gegevens rg,
ins_tab_discipline d,
prs_kostensoort ks
WHERE c.ins_discipline_key = d.ins_discipline_key
AND d.prs_kostensoort_key = ks.prs_kostensoort_key
AND huurder.cnt_contract_key(+) = c.cnt_contract_key
AND pnummer.cnt_contract_key(+) = c.cnt_contract_key
AND ruimte.cnt_contract_key(+) = c.cnt_contract_key
AND allonge.cnt_contract_key(+) = c.cnt_contract_key
AND kp.prs_kostenplaats_key = c.prs_kostenplaats_key
AND kg.prs_kostenplaatsgrp_key(+) =
kp.prs_kostenplaatsgrp_key
AND p.prs_perslid_key(+) =
fac.safe_to_number (
huurder.cnt_kenmerkcontract_waarde)
AND pf.prs_perslid_key(+) = p.prs_perslid_key
AND codanr.prs_link_key(+) = p.prs_perslid_key
AND sannr.prs_link_key(+) = p.prs_perslid_key
AND k.prs_kostenplaats_key(+) =
fac.safe_to_number (
pnummer.cnt_kenmerkcontract_waarde)
AND rg.alg_ruimte_key(+) =
fac.safe_to_number (
ruimte.cnt_kenmerkcontract_waarde)
AND c.cnt_contract_verwijder IS NULL
UNION ALL
SELECT c.cnt_contract_key,
c.ins_discipline_key,
'Campus' betreft,
c.cnt_contract_nummer_intern,
c.cnt_contract_versie,
DECODE (
c.cnt_contract_versie,
NULL,
c.cnt_contract_nummer_intern,
c.cnt_contract_nummer_intern
|| '.'
|| c.cnt_contract_versie)
cnt_contract_nr_versie,
kp.prs_kostenplaats_nr kpn,
SUBSTR (kg.prs_kostenplaatsgrp_oms, 1, 7) kpngrp,
ks.prs_kostensoort_oms kostensoort,
p.prs_perslid_key,
p.prs_perslid_naam achternaam,
pf.prs_perslid_naam_full naam,
COALESCE (sannr.prs_kenmerklink_waarde,
codanr.prs_kenmerklink_waarde)
codanr,
ak.prs_kostenplaats_nr budgetnr,
r.alg_ruimte_key,
r.alg_ruimte_nr,
allonge.cnt_kenmerkcontract_waarde maak_allonge
FROM cnt_contract c,
(SELECT *
FROM cnt_kenmerkcontract
WHERE cnt_kenmerk_key = 81) student,
prs_perslid p,
prs_v_perslid_fullnames pf,
prs_v_aanwezigkostenplaats ak,
(SELECT *
FROM prs_kenmerklink
WHERE prs_kenmerk_key = 1000
AND prs_kenmerklink_verwijder IS NULL)
codanr,
(SELECT *
FROM prs_kenmerklink
WHERE prs_kenmerk_key = 1200
AND prs_kenmerklink_verwijder IS NULL) sannr,
(SELECT *
FROM cnt_kenmerkcontract
WHERE cnt_kenmerk_key = 1
AND cnt_kenmerkcontract_verwijder IS NULL)
studkam,
(SELECT *
FROM cnt_kenmerkcontract
WHERE cnt_kenmerk_key = 63
AND cnt_kenmerkcontract_verwijder IS NULL)
budgnr,
(SELECT kc.*
FROM cnt_kenmerkcontract kc, cnt_kenmerk k
WHERE kc.cnt_kenmerk_key = k.cnt_kenmerk_key
AND k.cnt_srtkenmerk_key = 681
AND kc.cnt_kenmerkcontract_verwijder IS NULL)
allonge,
alg_ruimte r,
prs_afdeling a,
prs_kostenplaats kp,
prs_kostenplaatsgrp kg,
ins_tab_discipline d,
prs_kostensoort ks
WHERE c.ins_discipline_key = 55
AND c.ins_discipline_key = d.ins_discipline_key
AND d.prs_kostensoort_key = ks.prs_kostensoort_key
AND c.cnt_contract_verwijder IS NULL
AND student.cnt_contract_key = c.cnt_contract_key
AND p.prs_perslid_key =
fac.safe_to_number (
student.cnt_kenmerkcontract_waarde)
AND pf.prs_perslid_key = p.prs_perslid_key
AND codanr.prs_link_key(+) = p.prs_perslid_key
AND sannr.prs_link_key(+) = p.prs_perslid_key
AND allonge.cnt_contract_key(+) = c.cnt_contract_key
AND studkam.cnt_contract_key = c.cnt_contract_key
AND r.alg_ruimte_key(+) =
fac.safe_to_number (
studkam.cnt_kenmerkcontract_waarde)
AND budgnr.cnt_contract_key(+) = c.cnt_contract_key
AND ak.prs_kostenplaats_key(+) =
fac.safe_to_number (
budgnr.cnt_kenmerkcontract_waarde)
AND a.prs_afdeling_key = p.prs_afdeling_key
AND kp.prs_kostenplaats_key = c.prs_kostenplaats_key
AND kg.prs_kostenplaatsgrp_key(+) =
kp.prs_kostenplaatsgrp_key)
SELECT betreft,
DECODE (c.ins_discipline_key,
561, COALESCE (c.budgetnr, c.codanr),
c.codanr)
bill_to,
prs_perslid_naam,
prs_perslid_naam_full,
prs_perslid_key,
cnt_contract_nummer_intern,
cnt_contract_versie,
DECODE (
c.cnt_contract_versie,
NULL,
c.cnt_contract_nummer_intern,
c.cnt_contract_nummer_intern || '.' || c.cnt_contract_versie)
cnt_contract_nr_versie,
p.cnt_contract_key,
alg_ruimte_nr,
alg_ruimte_key,
omschrijving,
kpngrp,
kpn,
kostensoort,
btw.fac_usrdata_omschr btw,
fac.safe_to_number (btw.fac_usrdata_code) perc,
bedrag bedrag,
omschr_key,
bedrag_key,
maak_allonge
FROM payments p,
contracten c,
fac_usrdata btw,
ins_tab_discipline d,
prs_kostensoort ks
WHERE p.cnt_contract_key = c.cnt_contract_key
AND c.ins_discipline_key = d.ins_discipline_key
AND d.prs_kostensoort_key = ks.prs_kostensoort_key
AND btw.fac_usrdata_omschr = p.btw
AND btw.fac_usrtab_key = 42;
v_periodeDate DATE;
v_periodeNaam VARCHAR2 (20);
v_aantalPeriodes NUMBER;
v_curPeriodeDate DATE;
v_curPeriode VARCHAR2 (10);
v_curPeriodeNaam VARCHAR2 (20);
v_curPeriodeDagen NUMBER (4);
v_oms fac_usrdata.fac_usrdata_omschr%TYPE;
v_btw_code fac_usrdata.fac_usrdata_omschr%TYPE;
v_btw_perc fac_usrdata.fac_usrdata_code%TYPE;
v_grtbk prs_kostensoort.prs_kostensoort_refcode%TYPE;
v_kpl prs_kostenplaats.prs_kostenplaats_nr%TYPE;
v_proj prs_kostenplaats.prs_kostenplaats_nr%TYPE;
v_aantal_dagen NUMBER (4);
v_dagen_roommate NUMBER (4);
v_dagen_partner NUMBER (4);
v_per_van DATE;
v_per_tot DATE;
v_betreft VARCHAR (20);
v_refnr VARCHAR (20);
v_kostensoort prs_kostensoort.prs_kostensoort_oms%TYPE;
BEGIN
-- Buffer en log leegmaken
DELETE nybu_huur_buffer;
DELETE imp_log
WHERE imp_log_applicatie = p_applname;
v_periodeDate := TO_DATE (p_periode, 'YYYYMM');
v_periodeNaam := nybu.getPeriodeNaam (p_periode, 'EN');
-- NYBU35788 kostensoorten moeten bepaald worden vanuit de contractsoorten
-- Kostensoort voor exportbestand bepalen
-- SELECT prs_kostensoort_oms
-- INTO v_kostensoort
-- FROM prs_kostensoort
-- WHERE prs_kostensoort_key = 1;
v_betreft := 'Campus';
FOR rec IN sr
LOOP
v_aanduiding := rec.cnt_contract_nr_versie || '/' || rec.naam;
-- Als we allongeregels aan het maken zijn (p_mode=2), sla dan alle contracten zonder "Maak allonge(s)" over
IF NOT (p_mode = 2 AND rec.maak_allonge IS NULL)
THEN
-- Huur, servicekosten en toeslagen kunnen een X aantal maanden vooruit betaald worden
IF (rec.aantal_periodes > 1)
THEN
fac.writelog (
p_applname,
'I',
v_aanduiding || ': meerdere maanden in <20><>n keer factureren',
'Aantal maanden: ' || rec.aantal_periodes);
END IF;
FOR cntr IN 1 .. rec.aantal_periodes
LOOP
-- Bepaal gegevens van door-te-belasten periode (bij meerdere periodes in <20><>n keer
-- doorbelasten is dit steeds een maand verder)
v_curPeriodeDate := ADD_MONTHS (v_periodeDate, cntr - 1);
v_curPeriode := TO_CHAR (v_curPeriodeDate, 'YYYYMM');
v_curPeriodeNaam := nybu.getPeriodeNaam (v_curPeriode, 'EN');
v_curPeriodeDagen :=
CAST (TO_CHAR (LAST_DAY (v_curPeriodeDate), 'DD') AS INT)
- CAST (TO_CHAR (v_curPeriodeDate, 'DD') AS INT)
+ 1;
-- Voor de eerste en laatste maand wordt voor de huurprijs etc mogelijk maar
-- een deel doorbelast, als het contract halverwege de maand begint/eindigt.
-- Daarvoor het aantal dagen uitrekenen (max is aantal dagen in huidige maand)
v_aantal_dagen := v_curPeriodeDagen;
-- Lopend contract? --> huur etc factureren
IF (TRUNC (v_curPeriodeDate, 'MM') BETWEEN TRUNC (
rec.cnt_contract_looptijd_van,
'MM')
AND TRUNC (
rec.cnt_contract_looptijd_tot,
'MM'))
THEN
-- Is de ingangsmaand van het contract volledig, of beginnen we halverwege?
-- (alleen checken bij ingangsmaand contract)
IF (TRUNC (rec.cnt_contract_looptijd_van, 'MM') =
v_curPeriodeDate)
THEN
v_aantal_dagen :=
nybu.getAantalDagenInPeriode (
rec.cnt_contract_looptijd_van,
rec.cnt_contract_looptijd_tot,
v_curPeriodeDate);
IF (v_aantal_dagen != v_curPeriodeDagen)
THEN
fac.writelog (
p_applname,
'I',
v_aanduiding
|| ': contract start halverwege '
|| v_curPeriodeNaam,
'Aantal dagen = ' || v_aantal_dagen);
END IF;
END IF;
-- Is de eindmaand van het contract volledig, of eindigen we halverwege?
-- (alleen checken in slotmaand contract)
-- NB: ingangs- en slotmaand kunnen dezelfde zijn! (contract loopt dan minder dan een maand)
IF (TRUNC (rec.cnt_contract_looptijd_tot, 'MM') =
v_curPeriodeDate)
THEN
v_aantal_dagen :=
nybu.getAantalDagenInPeriode (
rec.cnt_contract_looptijd_van,
rec.cnt_contract_looptijd_tot,
v_curPeriodeDate);
IF (v_aantal_dagen != v_curPeriodeDagen)
THEN
fac.writelog (
p_applname,
'I',
v_aanduiding
|| ': contract eindigt halverwege '
|| v_curPeriodeNaam,
'Aantal dagen = ' || v_aantal_dagen);
END IF;
END IF;
-- NYBU#33330: als twee personen dezelfde kamer huren (huurder en roommate),
-- dan kan het contract van de roommate ook halverwege de maand starten/eindigen.
-- De rest van de maand moeten de gehele huur, service- en telefoonkosten (maar geen
-- partnercharge) worden doorberekend aan de huurder.
-- NB: een partner (flexkenmerk in contract huurder) zit er altijd even lang als de huurder zelf
-- NYBU#35948: voorheen gingen we ervan uit dat je maximaal <20><>n roommate kon hebben. In maanden
-- waarin een huurder halverwege een andere roommate krijgt is dat niet waar.
-- Daarom per dag van de periode bepalen of er een partner is
-- Overlap tussen looptijd contract en te factureren maand
v_per_van :=
GREATEST (v_curPeriodeDate, rec.cnt_contract_looptijd_van);
v_per_tot :=
LEAST (LAST_DAY (v_curPeriodeDate),
rec.cnt_contract_looptijd_tot);
-- Deze query lijst alle dagen uit in de periode v_per_van-v_per_tot (middels CONNECT BY)
-- en bepaalt voor iedere dag of er die dag een-of-meer roommate-contracten lopen op de ruimte.
-- Telt vervolgens het aantal dagen waarop er minstens <20><>n roommate-contract was (en dus een roommate)
SELECT COUNT ( * )
INTO v_count
FROM ( SELECT DISTINCT dag, COUNT ( * ) aantal
FROM nybu_v_potential_roommates roommate,
( SELECT v_per_van + LEVEL - 1 dag
FROM DUAL
CONNECT BY LEVEL <= v_per_tot - v_per_van + 1)
d
WHERE rec.alg_ruimte_key IS NOT NULL
AND roommate.cnt_contract_key !=
rec.cnt_contract_key
AND roommate.alg_ruimte_key =
rec.alg_ruimte_key
AND roommate.cnt_contract_looptijd_van <
rec.cnt_contract_looptijd_tot
AND roommate.cnt_contract_looptijd_tot >
rec.cnt_contract_looptijd_van
AND d.dag BETWEEN roommate.cnt_contract_looptijd_van
AND roommate.cnt_contract_looptijd_tot
GROUP BY dag);
v_dagen_roommate := v_count;
IF (v_dagen_roommate != v_aantal_dagen
AND v_dagen_roommate > 0)
THEN
fac.writelog (
p_applname,
'I',
v_aanduiding
|| ': contract roommate begint/eindigt tijdens looptijd contract huurder',
'Aantal dagen overlap = ' || v_dagen_roommate);
END IF;
--- HUURPRIJS ---
v_errormsg := 'Archiefregel huurprijs aanmaken';
-- Plaats in archief
-- met juiste kostenplaatsen en -soorten, omschrijving
INSERT INTO nybu_huur_buffer (betreft,
datum_export,
periode,
isMutatie,
deb_nr,
achternaam,
naam_full,
prs_perslid_key,
cnt_contract_nr,
cnt_contract_key,
kamer,
alg_ruimte_key,
omschrijving,
kpn_code_afd,
kpn_code_proj,
prs_kostensoort_refcode,
btw_code,
btw_perc,
bedrag)
SELECT v_betreft,
p_run,
p_periode,
0,
COALESCE (rec.budget_huur, rec.codanr),
rec.achternaam,
rec.naam,
rec.prs_perslid_key,
rec.cnt_contract_nr_versie,
rec.cnt_contract_key,
rec.kamer,
rec.alg_ruimte_key,
oms.fac_usrdata_omschr || ' ' || v_curPeriodeNaam,
rec.kpngrp,
rec.kpn,
rec.kostensoort,
--v_kostensoort,
btw.fac_usrdata_omschr,
fac.safe_to_number (btw.fac_usrdata_code),
-- Te betalen huur = aantal dagen samen met roommate * gedeelde huurprijs
-- + aantal dagen alleen/met partner gehuurd * volle huurprijs
TRUNC (
v_dagen_roommate
/ v_curPeriodeDagen
* rec.huur
/ 2
+ (v_aantal_dagen - v_dagen_roommate)
/ v_curPeriodeDagen
* rec.huur,
2)
FROM fac_usrdata oms, fac_usrdata btw
WHERE oms.fac_usrtab_key = 43
AND btw.fac_usrdata_key = oms.fac_usrdata_parentkey
AND oms.fac_usrdata_code = 'Rent';
--- SERVICEKOSTEN ---
v_errormsg := 'Archiefregel servicekosten aanmaken';
-- Plaats in archief
-- met juiste kostenplaatsen en -soorten, omschrijving
INSERT INTO nybu_huur_buffer (betreft,
datum_export,
periode,
isMutatie,
deb_nr,
achternaam,
naam_full,
prs_perslid_key,
cnt_contract_nr,
cnt_contract_key,
kamer,
alg_ruimte_key,
omschrijving,
kpn_code_afd,
kpn_code_proj,
prs_kostensoort_refcode,
btw_code,
btw_perc,
bedrag)
SELECT v_betreft,
p_run,
p_periode,
0,
COALESCE (rec.budget_service, rec.codanr),
rec.achternaam,
rec.naam,
rec.prs_perslid_key,
rec.cnt_contract_nr_versie,
rec.cnt_contract_key,
rec.kamer,
rec.alg_ruimte_key,
oms.fac_usrdata_omschr || ' ' || v_curPeriodeNaam,
rec.kpngrp,
rec.kpn,
rec.kostensoort,
--v_kostensoort,
btw.fac_usrdata_omschr,
fac.safe_to_number (btw.fac_usrdata_code),
-- Te betalen kosten = aantal dagen samen met roommate * gedeelde servicekosten
-- + aantal dagen alleen/met partner gehuurd * volle servicekosten
TRUNC (
v_dagen_roommate
/ v_curPeriodeDagen
* rec.servicekosten
/ 2
+ (v_aantal_dagen - v_dagen_roommate)
/ v_curPeriodeDagen
* rec.servicekosten,
2)
FROM fac_usrdata oms, fac_usrdata btw
WHERE oms.fac_usrtab_key = 43
AND btw.fac_usrdata_key = oms.fac_usrdata_parentkey
AND oms.fac_usrdata_code = 'ServCost';
--- PARTNERCHARGE ---
IF (v_dagen_roommate > 0 OR rec.partner_naam IS NOT NULL)
THEN
v_errormsg := 'Archiefregel partnercharge aanmaken';
-- Plaats in archief
-- met juiste kostenplaatsen en -soorten, omschrijving
INSERT INTO nybu_huur_buffer (betreft,
datum_export,
periode,
isMutatie,
deb_nr,
achternaam,
naam_full,
prs_perslid_key,
cnt_contract_nr,
cnt_contract_key,
kamer,
alg_ruimte_key,
omschrijving,
kpn_code_afd,
kpn_code_proj,
prs_kostensoort_refcode,
btw_code,
btw_perc,
bedrag)
SELECT v_betreft,
p_run,
p_periode,
0,
COALESCE (rec.budget_partnercharge, rec.codanr),
rec.achternaam,
rec.naam,
rec.prs_perslid_key,
rec.cnt_contract_nr_versie,
rec.cnt_contract_key,
rec.kamer,
rec.alg_ruimte_key,
oms.fac_usrdata_omschr || ' ' || v_curPeriodeNaam,
rec.kpngrp,
rec.kpn,
rec.kostensoort,
-- v_kostensoort,
btw.fac_usrdata_omschr,
fac.safe_to_number (btw.fac_usrdata_code),
-- Te betalen partnercharge = aantal dagen samen met roommate * gedeelde partnercharge
-- + aantal dagen met partner gehuurd * volle partnercharge
TRUNC (
v_dagen_roommate
/ v_curPeriodeDagen
* rec.partnercharge
/ 2
+ DECODE (
rec.partner_naam,
NULL,
0,
(v_aantal_dagen - v_dagen_roommate)
/ v_curPeriodeDagen)
* rec.partnercharge,
2)
FROM fac_usrdata oms, fac_usrdata btw
WHERE oms.fac_usrtab_key = 43
AND btw.fac_usrdata_key =
oms.fac_usrdata_parentkey
AND oms.fac_usrdata_code = 'PartnerCh';
END IF;
--- TELEFOONAANSLUITING ---
IF (rec.telefooncharge IS NOT NULL AND rec.telefooncharge != 0)
THEN
v_errormsg := 'Archiefregel telefoonaansluiting aanmaken';
-- Plaats in archief
-- met juiste kostenplaatsen en -soorten, omschrijving
INSERT INTO nybu_huur_buffer (betreft,
datum_export,
periode,
isMutatie,
deb_nr,
achternaam,
naam_full,
prs_perslid_key,
cnt_contract_nr,
cnt_contract_key,
kamer,
alg_ruimte_key,
omschrijving,
kpn_code_afd,
kpn_code_proj,
prs_kostensoort_refcode,
btw_code,
btw_perc,
bedrag)
SELECT v_betreft,
p_run,
p_periode,
0,
COALESCE (rec.budget_telefoon, rec.codanr),
rec.achternaam,
rec.naam,
rec.prs_perslid_key,
rec.cnt_contract_nr_versie,
rec.cnt_contract_key,
rec.kamer,
rec.alg_ruimte_key,
oms.fac_usrdata_omschr || ' ' || v_curPeriodeNaam,
rec.kpngrp,
rec.kpn,
rec.kostensoort,
-- v_kostensoort,
btw.fac_usrdata_omschr,
fac.safe_to_number (btw.fac_usrdata_code),
-- Te betalen kosten = aantal dagen samen met roommate * gedeelde prijs
-- + aantal dagen alleen/met partner gehuurd * volle prijs
TRUNC (
v_dagen_roommate
/ v_curPeriodeDagen
* rec.telefooncharge
/ 2
+ (v_aantal_dagen - v_dagen_roommate)
/ v_curPeriodeDagen
* rec.telefooncharge,
2)
FROM fac_usrdata oms, fac_usrdata btw
WHERE oms.fac_usrtab_key = 43
AND btw.fac_usrdata_key =
oms.fac_usrdata_parentkey
AND oms.fac_usrdata_code = 'PhoneConn';
END IF;
--- SCHOONMAAKKOSTEN (eenmalig) ---
-- NYBU#32684
IF (rec.schoonmaak IS NOT NULL)
THEN
v_errormsg := 'Archiefregel schoonmaak verhuizing aanmaken';
-- Plaats in archief
-- met juiste kostenplaatsen en -soorten, omschrijving
INSERT INTO nybu_huur_buffer (betreft,
datum_export,
periode,
isMutatie,
deb_nr,
achternaam,
naam_full,
prs_perslid_key,
cnt_contract_nr,
cnt_contract_key,
kamer,
alg_ruimte_key,
omschrijving,
kpn_code_afd,
kpn_code_proj,
prs_kostensoort_refcode,
btw_code,
btw_perc,
bedrag)
VALUES (v_betreft,
p_run,
p_periode,
0,
rec.codanr,
rec.achternaam,
rec.naam,
rec.prs_perslid_key,
rec.cnt_contract_nr_versie,
rec.cnt_contract_key,
rec.kamer,
rec.alg_ruimte_key,
'Cleaning due to relocation '
|| v_curPeriodeNaam,
rec.kpngrp,
rec.kpn,
rec.kostensoort,
-- v_kostensoort,
'VH21',
21,
rec.schoonmaak);
-- Als definitieve export, dan kenmerk leegmaken en loggen.
IF (p_mode = 1)
THEN
-- "Schoonmaak verhuizing" leegmaken
UPDATE cnt_kenmerkcontract
SET cnt_kenmerkcontract_verwijder = SYSDATE
WHERE cnt_kenmerk_key = 941
AND cnt_contract_key = rec.cnt_contract_key
AND cnt_kenmerkcontract_verwijder IS NULL;
-- Tracking
fac.trackaction (
'CNTUPD',
rec.cnt_contract_key,
NULL,
NULL,
'Contract updated'
|| CHR (10)
|| '<EFBFBD>'
|| rec.schoonmaak
|| ' cleaning costs invoiced');
END IF;
END IF;
ELSE
fac.writelog (
p_applname,
'W',
v_aanduiding || ': contract loopt niet in gegeven periode!',
'Periode: ' || v_curPeriodeNaam);
END IF; -- Lopend?
END LOOP;
-- Als huur vooruit betaald, dan aangeven t/m welke periode
-- (kenmerken alleen bijwerken als we ook doorvoeren)
IF (p_mode = 1 AND rec.aantal_periodes > 1)
THEN
-- We hebben nu vooruit gefactureerd; "Bill in advance" leegmaken
UPDATE cnt_kenmerkcontract
SET cnt_kenmerkcontract_verwijder = SYSDATE
WHERE cnt_kenmerk_key = 122
AND cnt_contract_key = rec.cnt_contract_key
AND cnt_kenmerkcontract_verwijder IS NULL;
-- Voorlopig geen facturering; "Contract paid until" vullen
INSERT INTO cnt_kenmerkcontract (cnt_contract_key,
cnt_kenmerk_key,
cnt_kenmerkcontract_waarde)
VALUES (rec.cnt_contract_key, 124, v_curPeriode);
-- Tracking
fac.trackaction (
'CNTUPD',
rec.cnt_contract_key,
NULL,
NULL,
'Contract updated'
|| CHR (10)
|| rec.aantal_periodes
|| ' months billed in advance, until '
|| v_curPeriode);
ELSE
-- (weer) normale facturering; "Contract paid until" leegmaken als gevuld
UPDATE cnt_kenmerkcontract
SET cnt_kenmerkcontract_verwijder = SYSDATE
WHERE cnt_kenmerk_key = 124
AND cnt_contract_key = rec.cnt_contract_key
AND cnt_kenmerkcontract_verwijder IS NULL;
END IF;
-- Er zijn voor dit contract allonges aangemaakt; zet het vinkje weer uit voor een schone lei
IF (p_mode = 1 AND rec.maak_allonge IS NOT NULL)
THEN
-- "Maak allonge(s)" leegmaken
UPDATE cnt_kenmerkcontract
SET cnt_kenmerkcontract_verwijder = SYSDATE
WHERE cnt_kenmerk_key IN
(SELECT cnt_kenmerk_key
FROM cnt_kenmerk
WHERE cnt_srtkenmerk_key = 681
AND cnt_kenmerk_verwijder IS NULL)
AND cnt_contract_key = rec.cnt_contract_key
AND cnt_kenmerkcontract_verwijder IS NULL;
-- Tracking
fac.trackaction (
'CNTUPD',
rec.cnt_contract_key,
NULL,
NULL,
'Contract updated'
|| CHR (10)
|| 'Maak allonge(s): 1 --> (clear)');
END IF;
END IF;
END LOOP;
COMMIT;
-- Aantal dagen in de huidige maand (voor berekening kosten als contract halverwege
-- de maand begint/afloopt
v_curPeriodeDagen :=
CAST (TO_CHAR (LAST_DAY (v_periodeDate), 'DD') AS INT)
- CAST (TO_CHAR (v_periodeDate, 'DD') AS INT)
+ 1;
-- Residences & offices
FOR rec IN ro
LOOP
v_aanduiding :=
rec.cnt_contract_nr_versie
|| '/'
|| rec.prs_perslid_naam
|| '/'
|| rec.alg_ruimte_aanduiding;
-- Als we allongeregels aan het maken zijn (p_mode=2), sla dan alle contracten zonder "Maak allonge(s)" over
IF NOT (p_mode = 2 AND rec.maak_allonge IS NULL)
THEN
v_betreft := rec.betreft;
v_refnr := COALESCE (rec.prs_kostenplaats_nr, rec.codanr);
v_errormsg := 'Archiefregels huur aanmaken';
-- Plaats in archief
-- met juiste kostenplaatsen en -soorten, omschrijving
-- Voor <20><>n contract kunnen in <20><>n keer meerdere regels worden toegevoegd
INSERT INTO nybu_huur_buffer (betreft,
datum_export,
periode,
isMutatie,
deb_nr,
achternaam,
naam_full,
prs_perslid_key,
cnt_contract_nr,
cnt_contract_key,
kamer,
alg_ruimte_key,
omschrijving,
kpn_code_afd,
kpn_code_proj,
prs_kostensoort_refcode,
btw_code,
btw_perc,
bedrag)
SELECT v_betreft,
p_run,
p_periode,
0,
DECODE (
rec.betreft,
'Office',
v_refnr,
CASE
WHEN k.cnt_kenmerk_volgnummer BETWEEN 100 AND 200
THEN
rec.codanr
WHEN k.cnt_kenmerk_volgnummer BETWEEN 200 AND 300
THEN
rec.prs_kostenplaats_nr
WHEN k.cnt_kenmerk_volgnummer > 300
THEN
'salaris'
END)
refnr,
rec.prs_perslid_naam,
rec.prs_perslid_naam_full,
rec.prs_perslid_key,
rec.cnt_contract_nr_versie,
rec.cnt_contract_key,
rec.alg_ruimte_aanduiding,
rec.alg_ruimte_key,
sk.cnt_srtkenmerk_omschrijving || ' ' || v_periodeNaam,
rec.kpngrp,
rec.kpn,
rec.kostensoort,
-- v_kostensoort,
sk.cnt_srtkenmerk_dimensie,
fac.safe_to_number (ud.fac_usrdata_code),
nybu.getAantalDagenInPeriode (
rec.cnt_contract_looptijd_van,
rec.cnt_contract_looptijd_tot,
v_periodeDate)
/ v_curPeriodeDagen
* fac.safe_to_number (kc.cnt_kenmerkcontract_waarde)
--fac.safe_to_number(kc.cnt_kenmerkcontract_waarde) / (1+fac.safe_to_number(ud.fac_usrdata_code)/100)
FROM cnt_kenmerkcontract kc,
cnt_kenmerk k,
cnt_srtkenmerk sk,
fac_usrdata ud
WHERE kc.cnt_contract_key = rec.cnt_contract_key
AND kc.cnt_kenmerkcontract_verwijder IS NULL
AND k.cnt_kenmerk_key = kc.cnt_kenmerk_key
AND k.cnt_kenmerk_verwijder IS NULL
AND k.cnt_kenmerk_volgnummer > 100
AND fac.safe_to_number (kc.cnt_kenmerkcontract_waarde) IS NOT NULL
AND fac.safe_to_number (kc.cnt_kenmerkcontract_waarde) > 0
AND sk.cnt_srtkenmerk_key = k.cnt_srtkenmerk_key
AND sk.cnt_srtkenmerk_verwijder IS NULL
AND sk.cnt_srtkenmerk_kenmerktype = 'N'
AND UPPER (ud.fac_usrdata_omschr) =
UPPER (sk.cnt_srtkenmerk_dimensie)
AND ud.fac_usrtab_key = 42;
-- Er zijn voor dit contract allonges aangemaakt; zet het vinkje weer uit voor een schone lei
IF (p_mode = 1 AND rec.maak_allonge IS NOT NULL)
THEN
-- "Maak allonge(s)" leegmaken
UPDATE cnt_kenmerkcontract
SET cnt_kenmerkcontract_verwijder = SYSDATE
WHERE cnt_kenmerk_key IN
(SELECT cnt_kenmerk_key
FROM cnt_kenmerk
WHERE cnt_srtkenmerk_key = 681
AND cnt_kenmerk_verwijder IS NULL)
AND cnt_contract_key = rec.cnt_contract_key
AND cnt_kenmerkcontract_verwijder IS NULL;
-- Tracking
fac.trackaction (
'CNTUPD',
rec.cnt_contract_key,
NULL,
NULL,
'Contract updated'
|| CHR (10)
|| 'Maak allonge(s): 1 --> (clear)');
END IF;
END IF;
END LOOP;
COMMIT;
FOR rec IN refunds
LOOP
v_aanduiding :=
rec.cnt_contract_nr_versie
|| '/'
|| rec.prs_perslid_naam
|| '/'
|| rec.alg_ruimte_nr;
-- NYBU#34759: Voorheen werden refunds niet meegenomen bij het maken van allongeregels,
-- maar dan kun je refunds niet ongedaan maken
-- NYBU#35710: Alleen allonges voor refunds aanmaken als "Maak allonges" gezet is
-- Als we allongeregels aan het maken zijn (p_mode=2), sla dan alle contracten zonder "Maak allonge(s)" over
IF NOT (p_mode = 2 AND rec.maak_allonge IS NULL)
THEN
v_betreft := rec.betreft;
v_errormsg := 'Refundregels huur aanmaken';
-- Plaats in huurbuffer
-- met juiste kostenplaatsen en -soorten, omschrijving
INSERT INTO nybu_huur_buffer (betreft,
datum_export,
periode,
isMutatie,
deb_nr,
achternaam,
naam_full,
prs_perslid_key,
cnt_contract_nr,
cnt_contract_key,
kamer,
alg_ruimte_key,
omschrijving,
kpn_code_afd,
kpn_code_proj,
prs_kostensoort_refcode,
btw_code,
btw_perc,
bedrag)
VALUES (v_betreft,
p_run,
p_periode,
0,
rec.bill_to,
rec.prs_perslid_naam,
rec.prs_perslid_naam_full,
rec.prs_perslid_key,
rec.cnt_contract_nr_versie,
rec.cnt_contract_key,
rec.alg_ruimte_nr,
rec.alg_ruimte_key,
rec.omschrijving,
rec.kpngrp,
rec.kpn,
rec.kostensoort,
-- v_kostensoort,
rec.btw,
rec.perc,
rec.bedrag);
-- Als we met de definitieve export bezig zijn (p_mode=1),
-- maak dan de refundkenmerken bij deze refundregel leeg, voor een schone lei
IF (p_mode = 1)
THEN
-- Refundvelden leegmaken
UPDATE cnt_kenmerkcontract
SET cnt_kenmerkcontract_verwijder = SYSDATE
WHERE cnt_kenmerk_key IN (rec.omschr_key, rec.bedrag_key)
AND cnt_contract_key = rec.cnt_contract_key
AND cnt_kenmerkcontract_verwijder IS NULL;
-- Tracking
fac.trackaction (
'CNTUPD',
rec.cnt_contract_key,
NULL,
NULL,
'Contract updated'
|| CHR (10)
|| 'Refunded <20>'
|| rec.bedrag
|| ' as '
|| rec.omschrijving
|| ' ('
|| rec.btw
|| ') ');
END IF;
END IF;
END LOOP;
--- NYBU#35517 payments toevoegen conform refunds
FOR rec IN payments
LOOP
v_aanduiding :=
rec.cnt_contract_nr_versie
|| '/'
|| rec.prs_perslid_naam
|| '/'
|| rec.alg_ruimte_nr;
-- NYBU#34759: Voorheen werden refunds niet meegenomen bij het maken van allongeregels,
-- maar dan kun je refunds niet ongedaan maken
-- NYBU#35710: Alleen allonges voor refunds aanmaken als "Maak allonges" gezet is
-- Als we allongeregels aan het maken zijn (p_mode=2), sla dan alle contracten zonder "Maak allonge(s)" over
IF NOT (p_mode = 2 AND rec.maak_allonge IS NULL)
THEN
v_betreft := rec.betreft;
v_errormsg := 'Paymentregels huur aanmaken';
-- Plaats in huurbuffer
-- met juiste kostenplaatsen en -soorten, omschrijving
INSERT INTO nybu_huur_buffer (betreft,
datum_export,
periode,
isMutatie,
deb_nr,
achternaam,
naam_full,
prs_perslid_key,
cnt_contract_nr,
cnt_contract_key,
kamer,
alg_ruimte_key,
omschrijving,
kpn_code_afd,
kpn_code_proj,
prs_kostensoort_refcode,
btw_code,
btw_perc,
bedrag)
VALUES (v_betreft,
p_run,
p_periode,
0,
rec.bill_to,
rec.prs_perslid_naam,
rec.prs_perslid_naam_full,
rec.prs_perslid_key,
rec.cnt_contract_nr_versie,
rec.cnt_contract_key,
rec.alg_ruimte_nr,
rec.alg_ruimte_key,
rec.omschrijving,
rec.kpngrp,
rec.kpn,
rec.kostensoort,
-- v_kostensoort,
rec.btw,
rec.perc,
rec.bedrag);
-- Als we met de definitieve export bezig zijn (p_mode=1),
-- maak dan de paymentkenmerken bij deze paymentregel leeg, voor een schone lei
IF (p_mode = 1)
THEN
-- Refundvelden leegmaken
UPDATE cnt_kenmerkcontract
SET cnt_kenmerkcontract_verwijder = SYSDATE
WHERE cnt_kenmerk_key IN (rec.omschr_key, rec.bedrag_key)
AND cnt_contract_key = rec.cnt_contract_key
AND cnt_kenmerkcontract_verwijder IS NULL;
-- Tracking
fac.trackaction (
'CNTUPD',
rec.cnt_contract_key,
NULL,
NULL,
'Contract updated'
|| CHR (10)
|| 'Payment <20>'
|| rec.bedrag
|| ' as '
|| rec.omschrijving
|| ' ('
|| rec.btw
|| ') ');
END IF;
END IF;
END LOOP;
COMMIT;
-- Als definitief, dan buffer naar archief kopi<70>ren
IF (p_mode = 1)
THEN
INSERT INTO nybu_huur_archief
SELECT *
FROM nybu_huur_buffer
WHERE periode = p_periode;
COMMIT;
-- Als test, dan eventuele nog niet-ge<67>xporteerde allongeregels in de buffer zetten
ELSE
INSERT INTO nybu_huur_buffer
SELECT *
FROM nybu_huur_archief
WHERE periode = p_periode AND ismutatie = 1 AND naar_coda IS NULL;
END IF;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg :=
v_errorhint
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.writelog (p_applname,
'E',
v_aanduiding || v_errormsg,
'Onbekende fout!');
COMMIT;
END nybu_bereken_factuurregels;
/
-- Test-export; bepaalt factuurregels om te kunnen beoordelen of alles klopt
CREATE OR REPLACE PROCEDURE nybu_select_t_huur_coda (
p_applname IN VARCHAR2,
p_applrun IN VARCHAR2)
AS
v_aanduiding VARCHAR2 (200);
v_errorhint VARCHAR2 (1000);
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
-- Individuele facturen voor debiteuren; ook voor sommatieregel met totaalbedrag
-- Bedragen zijn incl BTW
CURSOR c_deb
IS
SELECT deb_nr,
achternaam,
SUM (bedrag) bedrag,
betreft
FROM nybu_huur_buffer
WHERE naar_coda IS NULL
AND deb_nr NOT LIKE 'P%'
AND deb_nr != 'salaris'
GROUP BY deb_nr, achternaam, betreft
ORDER BY deb_nr;
-- Factuurregels voor deze factuur
CURSOR regels (in_deb_nr VARCHAR2)
IS
SELECT *
FROM nybu_huur_buffer
WHERE deb_nr = in_deb_nr AND naar_coda IS NULL
ORDER BY datum_export, omschrijving, bedrag;
-- Individuele facturen voor interne kostenplaatsen; ook voor sommatieregel met totaalbedrag
-- Bedragen zijn INCLUSIEF BTW (NYBU#31139)
CURSOR c_kpn
IS
SELECT deb_nr,
achternaam,
COALESCE (TRIM (SUBSTR (kg.prs_kostenplaatsgrp_oms, 1, 7)),
'ONB')
kpn_grp,
kpn_code_afd,
kpn_code_proj,
SUM (bedrag) bedrag,
betreft
FROM nybu_huur_buffer ha,
prs_v_aanwezigkostenplaats ak,
prs_kostenplaatsgrp kg
WHERE naar_coda IS NULL
AND deb_nr LIKE 'P%'
AND ak.prs_kostenplaats_nr = deb_nr
AND kg.prs_kostenplaatsgrp_key(+) = ak.prs_kostenplaatsgrp_key
GROUP BY deb_nr,
achternaam,
prs_kostenplaatsgrp_oms,
kpn_code_afd,
kpn_code_proj,
betreft
ORDER BY deb_nr, betreft;
CURSOR c_salaris
IS
SELECT COALESCE (prs_perslid_nr, prs_perslid_email) personeelsnr,
achternaam,
kpn_code_afd,
kpn_code_proj,
bedrag,
btw_perc,
omschrijving
FROM nybu_huur_buffer b, prs_perslid p
WHERE naar_coda IS NULL
AND deb_nr = 'salaris'
AND p.prs_perslid_key = b.prs_perslid_key
ORDER BY achternaam, omschrijving;
v_teller NUMBER;
v_rap_count NUMBER;
v_run DATE;
v_lastPeriode VARCHAR (6);
v_periode VARCHAR (6);
v_periodeNaam VARCHAR2 (20);
v_last_period VARCHAR (6);
BEGIN
v_teller := 0;
v_rap_count := 0;
v_aanduiding := 'Init';
v_errormsg := 'Periode bepalen';
-- Deze export gaat over de huur voor volgende maand (periode = laatste export + 1)
-- TODO: wat als nog niets ge<67>xporteerd? Dat zal een NO_DATA_FOUND opleveren...
v_run := TO_DATE (p_applrun, 'YYYY-MM-DD HH24:MI:SS');
SELECT MAX (periode)
INTO v_lastPeriode
FROM nybu_huur_archief
WHERE ismutatie = 0;
v_periode :=
TO_CHAR (ADD_MONTHS (TO_DATE (v_lastPeriode, 'YYYYMM'), 1), 'YYYYMM');
v_periodeNaam := nybu.getPeriodeNaam (v_periode, 'EN');
-- Is deze periode al ge<67>xporteerd?
-- TODO: Niks doen, of wissen en nog een keer draaien?
-- TODO: welke periode ge<67>xporteerd moet worden, werd voorheen bepaald adhv SYSDATE. Nu is dit
-- altijd de laatste periode in het archief + 1, waardoor onderstaande check overbodig is.
SELECT COALESCE (MAX (periode), 'NogNix')
INTO v_last_period
FROM nybu_huur_archief
WHERE ismutatie = 0;
IF (v_last_period = v_periode)
THEN
fac.writelog (
p_applname,
'E',
'Definitieve export is al gedraaid voor periode '
|| v_periode
|| '!',
'Test-export wordt afgebroken');
ELSE
DELETE imp_log
WHERE imp_log_applicatie = p_applname;
DELETE fac_rapport
WHERE fac_rapport_node = p_applname;
-- Genereer factuurregels voor komende maand
nybu_bereken_factuurregels (p_applname,
v_run,
v_periode,
0);
-- Genereer sommatie- en specificatieregels voor debiteuren
FOR rec IN c_deb
LOOP
v_aanduiding :=
v_teller || ': ' || rec.deb_nr || '/' || rec.achternaam;
v_errormsg := 'Sommatieregel aanmaken';
v_teller := v_teller + 1;
v_rap_count := v_rap_count + 1;
-- Sommatieregel
INSERT INTO fac_rapport (fac_rapport_node,
fac_rapport_volgnr,
fac_rapport_regel,
fac_rapport_soort)
VALUES (p_applname,
v_rap_count,
v_teller
|| ';'
|| '10;'
|| '13000;'
|| REPLACE (rec.deb_nr, 'CON', 'DC')
|| ';'
|| ';'
|| TRIM(TO_CHAR (ABS (rec.bedrag),
'99999999D99',
'NLS_NUMERIC_CHARACTERS=,.'))
|| ';'
|| CASE
WHEN rec.bedrag < 0 THEN 'C;'
WHEN rec.bedrag >= 0 THEN 'D;'
END
|| ';'
|| rec.betreft
|| ' '
|| v_periodeNaam
|| ' '
|| rec.achternaam
|| ';'
|| 'Summary;'
|| 'K91200;'
|| 'P991210',
0);
-- Specificatieregels
FOR reg IN regels (rec.deb_nr)
LOOP
v_errormsg := 'Specificatieregel aanmaken';
v_rap_count := v_rap_count + 1;
INSERT INTO fac_rapport (fac_rapport_node,
fac_rapport_volgnr,
fac_rapport_regel,
fac_rapport_soort)
VALUES (p_applname,
v_rap_count,
v_teller
|| ';'
|| '12;'
|| reg.prs_kostensoort_refcode
|| ';'
|| reg.kpn_code_afd
|| ';'
|| reg.kpn_code_proj
|| ';'
|| TRIM(TO_CHAR (ABS (reg.bedrag),
'99999999D99',
'NLS_NUMERIC_CHARACTERS=,.'))
|| ';'
|| CASE
WHEN reg.bedrag < 0 THEN 'D;'
WHEN reg.bedrag >= 0 THEN 'C;'
END
|| reg.btw_code
|| ';'
|| reg.omschrijving
|| ';'
|| 'Analysis;'
|| ';'
|| '',
0);
END LOOP;
END LOOP;
-- Scheidingsregel
v_errormsg := 'Scheidingsregel aanmaken';
v_rap_count := v_rap_count + 1;
INSERT INTO fac_rapport (fac_rapport_node,
fac_rapport_volgnr,
fac_rapport_regel,
fac_rapport_soort)
VALUES (p_applname,
v_rap_count,
'INTERNE KOSTENPLAATSEN;;;;;;;;;;;',
0);
v_teller := 0;
-- Genereer sommatie- en specificatieregels voor interne kostenplaatsen
FOR rec IN c_kpn
LOOP
v_aanduiding :=
v_teller || ': ' || rec.deb_nr || '/' || rec.achternaam;
v_errormsg := 'Sommatieregel KPN aanmaken';
v_teller := v_teller + 1;
v_rap_count := v_rap_count + 1;
-- Sommatieregel
INSERT INTO fac_rapport (fac_rapport_node,
fac_rapport_volgnr,
fac_rapport_regel,
fac_rapport_soort)
VALUES (p_applname,
v_rap_count,
v_teller
|| ';'
|| ';'
|| '56000;'
|| rec.kpn_grp
|| ';'
|| rec.deb_nr
|| ';'
|| TRIM(TO_CHAR (ABS (rec.bedrag),
'99999999D99',
'NLS_NUMERIC_CHARACTERS=,.'))
|| ';'
|| CASE
WHEN rec.bedrag < 0 THEN 'C;'
WHEN rec.bedrag >= 0 THEN 'D;'
END
|| ';'
|| rec.betreft
|| ' '
|| v_periodeNaam
|| ' '
|| rec.achternaam
|| ';'
|| ';'
|| ';'
|| '',
0);
-- Tegenboeking
v_errormsg := 'Tegenboeking aanmaken';
v_rap_count := v_rap_count + 1;
INSERT INTO fac_rapport (fac_rapport_node,
fac_rapport_volgnr,
fac_rapport_regel,
fac_rapport_soort)
VALUES (p_applname,
v_rap_count,
v_teller
|| ';'
|| ';'
|| '76000;'
|| rec.kpn_code_afd
|| ';'
|| rec.kpn_code_proj
|| ';'
|| TRIM(TO_CHAR (ABS (rec.bedrag),
'99999999D99',
'NLS_NUMERIC_CHARACTERS=,.'))
|| ';'
|| CASE
WHEN rec.bedrag < 0 THEN 'D;'
WHEN rec.bedrag >= 0 THEN 'C;'
END
|| ';'
|| rec.betreft
|| ' '
|| v_periodeNaam
|| ' '
|| rec.achternaam
|| ';'
|| ';'
|| ';'
|| '',
0);
END LOOP;
-- Scheidingsregel
v_errormsg := 'Scheidingsregel aanmaken';
v_rap_count := v_rap_count + 1;
INSERT INTO fac_rapport (fac_rapport_node,
fac_rapport_volgnr,
fac_rapport_regel,
fac_rapport_soort)
VALUES (p_applname,
v_rap_count,
'SALARISADMINISTRATIE;;;;;;;;;;;',
0);
v_teller := 0;
-- Genereer specificatieregels voor salarisadministratie
FOR rec IN c_salaris
LOOP
v_aanduiding :=
v_teller || ': ' || rec.personeelsnr || '/' || rec.achternaam;
v_errormsg := 'Sommatieregel salarisadministratie aanmaken';
v_teller := v_teller + 1;
v_rap_count := v_rap_count + 1;
-- Sommatieregel
INSERT INTO fac_rapport (fac_rapport_node,
fac_rapport_volgnr,
fac_rapport_regel,
fac_rapport_soort)
VALUES (p_applname,
v_rap_count,
v_teller
|| ';'
|| rec.personeelsnr
|| ';'
|| rec.achternaam
|| ';'
|| rec.kpn_code_afd
|| ';'
|| rec.kpn_code_proj
|| ';'
|| TRIM(TO_CHAR (ABS (rec.bedrag),
'99999999D99',
'NLS_NUMERIC_CHARACTERS=,.'))
|| ';'
|| rec.btw_perc
|| ';'
|| rec.omschrijving
|| ';'
|| ';'
|| ';'
|| ';'
|| '',
0);
END LOOP;
END IF;
fac.writelog (p_applname,
'S',
'Controleregels facturen gegenereerd',
'Periode ' || v_periode);
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg :=
v_errorhint
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.writelog (p_applname,
'E',
v_aanduiding || v_errormsg,
'Onbekende fout!');
COMMIT;
END nybu_select_t_huur_coda;
/
CREATE OR REPLACE VIEW nybu_v_export_t_huur_coda
AS
SELECT fac_rapport_regel result, fac_rapport_volgnr result_order
FROM fac_rapport
WHERE fac_rapport_node = 'T_HUUR_CODA'
ORDER BY fac_rapport_volgnr;
-- Levert alle factuurregels die naar CODA moeten.
-- Per factuur:
-- - een sommatieregel met totaalbedrag
-- - een regel per item (huurprijs, servicekosten, ...)
CREATE OR REPLACE PROCEDURE nybu_select_huur_coda (p_applname IN VARCHAR2,
p_applrun IN VARCHAR2)
AS
v_aanduiding VARCHAR2 (200);
v_errorhint VARCHAR2 (1000);
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
-- Individuele facturen voor debiteuren; ook voor sommatieregel met totaalbedrag
-- Bedragen zijn incl BTW
CURSOR c_deb
IS
SELECT deb_nr,
achternaam,
SUM (bedrag) bedrag,
betreft
FROM nybu_huur_archief
WHERE naar_coda IS NULL
AND deb_nr NOT LIKE 'P%'
AND deb_nr != 'salaris'
GROUP BY deb_nr, achternaam, betreft
ORDER BY deb_nr;
-- Factuurregels voor deze factuur
CURSOR regels (in_deb_nr VARCHAR2)
IS
SELECT *
FROM nybu_huur_archief
WHERE deb_nr = in_deb_nr AND naar_coda IS NULL
ORDER BY datum_export, omschrijving, bedrag;
-- Individuele facturen voor interne kostenplaatsen; ook voor sommatieregel met totaalbedrag
-- Bedragen zijn INCLUSIEF BTW (NYBU#31139)
CURSOR c_kpn
IS
SELECT deb_nr,
achternaam,
COALESCE (TRIM (SUBSTR (kg.prs_kostenplaatsgrp_oms, 1, 7)),
'ONB')
kpn_grp,
kpn_code_afd,
kpn_code_proj,
SUM (bedrag) bedrag,
betreft
FROM nybu_huur_archief ha,
prs_v_aanwezigkostenplaats ak,
prs_kostenplaatsgrp kg
WHERE naar_coda IS NULL
AND deb_nr LIKE 'P%'
AND ak.prs_kostenplaats_nr = deb_nr
AND kg.prs_kostenplaatsgrp_key(+) = ak.prs_kostenplaatsgrp_key
GROUP BY deb_nr,
achternaam,
prs_kostenplaatsgrp_oms,
kpn_code_afd,
kpn_code_proj,
betreft
ORDER BY deb_nr, betreft;
CURSOR c_salaris
IS
SELECT COALESCE (prs_perslid_nr, prs_perslid_email) personeelsnr,
achternaam,
kpn_code_afd,
kpn_code_proj,
bedrag,
btw_perc,
omschrijving
FROM nybu_huur_archief b, prs_perslid p
WHERE naar_coda IS NULL
AND deb_nr = 'salaris'
AND p.prs_perslid_key = b.prs_perslid_key
ORDER BY achternaam, omschrijving;
v_teller NUMBER;
v_rap_count NUMBER;
v_run DATE;
v_lastPeriode VARCHAR (6);
v_periode VARCHAR (6);
v_periodeNaam VARCHAR2 (20);
v_last_period VARCHAR (6);
BEGIN
v_teller := 0;
v_rap_count := 0;
v_aanduiding := 'Init';
v_errormsg := 'Periode bepalen';
-- Deze export gaat over de huur voor volgende maand (periode = laatste export + 1)
v_run := TO_DATE (p_applrun, 'YYYY-MM-DD HH24:MI:SS');
SELECT MAX (periode)
INTO v_lastPeriode
FROM nybu_huur_archief
WHERE ismutatie = 0;
v_periode :=
TO_CHAR (ADD_MONTHS (TO_DATE (v_lastPeriode, 'YYYYMM'), 1), 'YYYYMM');
v_periodeNaam := nybu.getPeriodeNaam (v_periode, 'EN');
-- Is deze periode al ge<67>xporteerd?
-- TODO: Niks doen, of wissen en nog een keer draaien?
SELECT COALESCE (MAX (periode), 'NogNix')
INTO v_last_period
FROM nybu_huur_archief
WHERE ismutatie = 0;
IF (v_last_period = v_periode)
THEN
fac.writelog (
p_applname,
'E',
'Export is al gedraaid voor periode ' || v_periode || '!',
'Export wordt afgebroken');
ELSE
DELETE imp_log
WHERE imp_log_applicatie = p_applname;
DELETE fac_rapport
WHERE fac_rapport_node = p_applname;
-- Genereer factuurregels voor komende maand
nybu_bereken_factuurregels (p_applname,
v_run,
v_periode,
1);
-- Genereer sommatie- en specificatieregels voor debiteuren
FOR rec IN c_deb
LOOP
v_aanduiding :=
v_teller || ': ' || rec.deb_nr || '/' || rec.achternaam;
v_errormsg := 'Sommatieregel aanmaken';
v_teller := v_teller + 1;
v_rap_count := v_rap_count + 1;
-- Sommatieregel
INSERT INTO fac_rapport (fac_rapport_node,
fac_rapport_volgnr,
fac_rapport_regel,
fac_rapport_soort)
VALUES (p_applname,
v_rap_count,
v_teller
|| ';'
|| '10;'
|| '13000;'
|| REPLACE (rec.deb_nr, 'CON', 'DC')
|| ';'
|| ';'
|| TRIM(TO_CHAR (ABS (rec.bedrag),
'99999999D99',
'NLS_NUMERIC_CHARACTERS=,.'))
|| ';'
|| CASE
WHEN rec.bedrag < 0 THEN 'C;'
WHEN rec.bedrag >= 0 THEN 'D;'
END
|| ';'
|| rec.betreft
|| ' '
|| v_periodeNaam
|| ' '
|| rec.achternaam
|| ';'
|| 'Summary;'
|| 'K91200;'
|| 'P991210',
0);
-- Specificatieregels
FOR reg IN regels (rec.deb_nr)
LOOP
v_errormsg := 'Specificatieregel aanmaken';
v_rap_count := v_rap_count + 1;
INSERT INTO fac_rapport (fac_rapport_node,
fac_rapport_volgnr,
fac_rapport_regel,
fac_rapport_soort)
VALUES (p_applname,
v_rap_count,
v_teller
|| ';'
|| '12;'
|| reg.prs_kostensoort_refcode
|| ';'
|| reg.kpn_code_afd
|| ';'
|| reg.kpn_code_proj
|| ';'
|| TRIM(TO_CHAR (ABS (reg.bedrag),
'99999999D99',
'NLS_NUMERIC_CHARACTERS=,.'))
|| ';'
|| CASE
WHEN reg.bedrag < 0 THEN 'D;'
WHEN reg.bedrag >= 0 THEN 'C;'
END
|| reg.btw_code
|| ';'
|| reg.omschrijving
|| ';'
|| 'Analysis;'
|| ';'
|| '',
0);
END LOOP;
END LOOP;
-- Scheidingsregel
v_errormsg := 'Scheidingsregel aanmaken';
v_rap_count := v_rap_count + 1;
INSERT INTO fac_rapport (fac_rapport_node,
fac_rapport_volgnr,
fac_rapport_regel,
fac_rapport_soort)
VALUES (p_applname,
v_rap_count,
'INTERNE KOSTENPLAATSEN;;;;;;;;;;;',
0);
v_teller := 0;
-- Genereer sommatie- en specificatieregels voor interne kostenplaatsen
FOR rec IN c_kpn
LOOP
v_aanduiding :=
v_teller || ': ' || rec.deb_nr || '/' || rec.achternaam;
v_errormsg := 'Sommatieregel KPN aanmaken';
v_teller := v_teller + 1;
v_rap_count := v_rap_count + 1;
-- Sommatieregel
INSERT INTO fac_rapport (fac_rapport_node,
fac_rapport_volgnr,
fac_rapport_regel,
fac_rapport_soort)
VALUES (p_applname,
v_rap_count,
v_teller
|| ';'
|| ';'
|| '56000;'
|| rec.kpn_grp
|| ';'
|| rec.deb_nr
|| ';'
|| TRIM(TO_CHAR (ABS (rec.bedrag),
'99999999D99',
'NLS_NUMERIC_CHARACTERS=,.'))
|| ';'
|| CASE
WHEN rec.bedrag < 0 THEN 'C;'
WHEN rec.bedrag >= 0 THEN 'D;'
END
|| ';'
|| rec.betreft
|| ' '
|| v_periodeNaam
|| ' '
|| rec.achternaam
|| ';'
|| ';'
|| ';'
|| '',
0);
-- Tegenboeking
v_errormsg := 'Tegenboeking aanmaken';
v_rap_count := v_rap_count + 1;
INSERT INTO fac_rapport (fac_rapport_node,
fac_rapport_volgnr,
fac_rapport_regel,
fac_rapport_soort)
VALUES (p_applname,
v_rap_count,
v_teller
|| ';'
|| ';'
|| '76000;'
|| rec.kpn_code_afd
|| ';'
|| rec.kpn_code_proj
|| ';'
|| TRIM(TO_CHAR (ABS (rec.bedrag),
'99999999D99',
'NLS_NUMERIC_CHARACTERS=,.'))
|| ';'
|| CASE
WHEN rec.bedrag < 0 THEN 'D;'
WHEN rec.bedrag >= 0 THEN 'C;'
END
|| ';'
|| rec.betreft
|| ' '
|| v_periodeNaam
|| ' '
|| rec.achternaam
|| ';'
|| ';'
|| ';'
|| '',
0);
END LOOP;
-- Scheidingsregel
v_errormsg := 'Scheidingsregel aanmaken';
v_rap_count := v_rap_count + 1;
INSERT INTO fac_rapport (fac_rapport_node,
fac_rapport_volgnr,
fac_rapport_regel,
fac_rapport_soort)
VALUES (p_applname,
v_rap_count,
'SALARISADMINISTRATIE;;;;;;;;;;;',
0);
v_teller := 0;
-- Genereer specificatieregels voor salarisadministratie
FOR rec IN c_salaris
LOOP
v_aanduiding :=
v_teller || ': ' || rec.personeelsnr || '/' || rec.achternaam;
v_errormsg := 'Sommatieregel salarisadministratie aanmaken';
v_teller := v_teller + 1;
v_rap_count := v_rap_count + 1;
-- Sommatieregel
INSERT INTO fac_rapport (fac_rapport_node,
fac_rapport_volgnr,
fac_rapport_regel,
fac_rapport_soort)
VALUES (p_applname,
v_rap_count,
v_teller
|| ';'
|| rec.personeelsnr
|| ';'
|| rec.achternaam
|| ';'
|| rec.kpn_code_afd
|| ';'
|| rec.kpn_code_proj
|| ';'
|| TRIM(TO_CHAR (ABS (rec.bedrag),
'99999999D99',
'NLS_NUMERIC_CHARACTERS=,.'))
|| ';'
|| rec.btw_perc
|| ';'
|| rec.omschrijving
|| ';'
|| ';'
|| ';'
|| ';'
|| '',
0);
END LOOP;
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg :=
v_errorhint
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.writelog (p_applname,
'E',
v_aanduiding || v_errormsg,
'Onbekende fout!');
COMMIT;
END nybu_select_huur_coda;
/
CREATE OR REPLACE VIEW nybu_v_export_huur_coda
AS
SELECT fac_rapport_regel result, fac_rapport_volgnr result_order
FROM fac_rapport
WHERE fac_rapport_node = 'HUUR_CODA'
ORDER BY fac_rapport_volgnr;
CREATE OR REPLACE PROCEDURE nybu_export_huur_coda (p_applname IN VARCHAR2,
p_applrun IN VARCHAR2,
p_filedir IN VARCHAR2,
p_filename IN VARCHAR2)
AS
v_aanduiding VARCHAR2 (200);
v_errorhint VARCHAR2 (1000);
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_run DATE;
v_count NUMBER;
BEGIN
v_run := TO_DATE (p_applrun, 'YYYY-MM-DD HH24:MI:SS');
v_aanduiding := 'Init';
v_errormsg := 'Init';
-- Alleen als er iets ge<67>xporteerd is!
SELECT COUNT ( * )
INTO v_count
FROM fac_rapport
WHERE fac_rapport_node = p_applname;
IF (v_count > 0)
THEN
v_errormsg := 'Exportdatum zetten';
-- Exportdatum van alle regels van de laatste export zetten
UPDATE nybu_huur_archief
SET naar_coda = v_run
WHERE naar_coda IS NULL;
END IF;
fac.writelog (p_applname,
'S',
'Factuurregels ge<67>xporteerd',
v_run);
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg :=
v_errorhint
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.writelog (p_applname,
'E',
v_aanduiding || v_errormsg,
'Onbekende fout!');
COMMIT;
END nybu_export_huur_coda;
/
-- Bepaalt mutaties aan contracten in de huidige periode, die in de volgende periode
-- gefactureerd moeten worden. Hiervoor worden op basis van de huidige contractgegevens
-- nieuwe factuurregels gemaakt en <20><>n-op-<2D><>n vergeleken met de al bestaande regels.
-- Voor regels die afwijken worden verschilregels in het factuurarchief gezet, voor de komende
-- periode.
CREATE OR REPLACE PROCEDURE nybu_select_huur_mutaties (
p_applname IN VARCHAR2,
p_applrun IN VARCHAR2)
AS
v_aanduiding VARCHAR2 (200);
v_errorhint VARCHAR2 (1000);
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
-- Mutaties nieuw versus oud (waarbij nieuw het uitgangspunt is ivm kameromschrijving):
-- - oude bedrag != nieuwe bedrag
-- - oud bestaat niet in nieuw
-- - nieuw bestaat niet in oud
-- NYBU#29529: regels ook vergelijken op naam van huurder, ivm deb_nr 'salaris', dat voor
-- verschillende personen natuurlijk hetzelfde is (idem voor P-nummer, trouwens)
CURSOR c (
in_periode VARCHAR2)
IS
WITH nw AS (SELECT *
FROM nybu_huur_buffer
WHERE periode = in_periode),
oud
AS (SELECT a.*
FROM nybu_huur_archief a,
cnt_kenmerkcontract kc,
cnt_kenmerk k
WHERE kc.cnt_contract_key = a.cnt_contract_key
AND kc.cnt_kenmerkcontract_verwijder IS NULL
AND k.cnt_kenmerk_key = kc.cnt_kenmerk_key
AND k.cnt_srtkenmerk_key = 681
AND periode = in_periode
AND naar_coda IS NOT NULL
AND ismutatie = 0)
SELECT nw.*,
COALESCE (oud.bedrag, 0) bedrag_oud,
COALESCE (nw.bedrag, 0) bedrag_new
FROM nw
LEFT OUTER JOIN
oud
ON oud.cnt_contract_key = nw.cnt_contract_key --- Er moet ook naar de versie van het contract gekeken worden
AND oud.deb_nr = nw.deb_nr
AND oud.omschrijving = nw.omschrijving
AND oud.kamer = nw.kamer
AND COALESCE (oud.naam_full, 'apekool') =
COALESCE (nw.naam_full, 'apekool')
WHERE oud.bedrag IS NULL -- nieuw bestaat niet in oud
OR nw.bedrag != oud.bedrag -- nieuw bedrag != oud bedrag
UNION
SELECT oud.*,
COALESCE (oud.bedrag, 0) bedrag_oud,
COALESCE (nw.bedrag, 0) bedrag_new
FROM oud
LEFT OUTER JOIN
nw
ON oud.cnt_contract_key = nw.cnt_contract_key --- Er moet ook naar de versie van het contract gekeken worden
AND oud.deb_nr = nw.deb_nr
AND oud.omschrijving = nw.omschrijving
AND oud.kamer = nw.kamer
AND COALESCE (oud.naam_full, 'apekool') =
COALESCE (nw.naam_full, 'apekool')
WHERE nw.bedrag IS NULL -- oud bestaat niet in nieuw
;
v_run DATE;
v_periode VARCHAR (6);
v_periodeNaam VARCHAR2 (20);
v_next_period VARCHAR (6);
BEGIN
v_aanduiding := 'Init';
v_errormsg := 'Periode bepalen';
-- Deze export maakt correctieregels voor de huur van de laatst ge<67>xporteerde maand
-- TODO: afdwingen dat die periode niet te ver in het verleden ligt?
v_run := TO_DATE (p_applrun, 'YYYY-MM-DD HH24:MI:SS');
SELECT MAX (periode)
INTO v_periode
FROM nybu_huur_archief
WHERE isMutatie = 0;
v_periodeNaam := nybu.getPeriodeNaam (v_periode, 'EN');
-- Mutaties over periode n komen op factuur voor periode n+1
v_next_period :=
TO_CHAR (ADD_MONTHS (TO_DATE (v_periode, 'YYYYMM'), 1), 'YYYYMM');
DELETE imp_log
WHERE imp_log_applicatie = p_applname;
DELETE fac_rapport
WHERE fac_rapport_node = p_applname;
-- Eerder gemaakte mutatieregels voor deze periode verwijderen
DELETE nybu_huur_archief
WHERE isMutatie = 1 AND periode >= v_next_period AND naar_coda IS NULL;
-- Genereer factuurregels voor deze maand (mode 2 = allonges)
nybu_bereken_factuurregels (p_applname,
v_run,
v_periode,
2);
-- Genereer mutatieregels
FOR rec IN c (v_periode)
LOOP
v_aanduiding :=
v_periode
|| '/'
|| rec.deb_nr
|| '/'
|| rec.achternaam
|| '/'
|| rec.omschrijving;
v_errormsg := 'Mutatieregel aanmaken';
INSERT INTO nybu_huur_archief (betreft,
datum_export,
periode,
isMutatie,
deb_nr,
achternaam,
naam_full,
prs_perslid_key,
cnt_contract_nr,
cnt_contract_key,
kamer,
alg_ruimte_key,
omschrijving,
kpn_code_afd,
kpn_code_proj,
prs_kostensoort_refcode,
btw_code,
btw_perc,
bedrag)
VALUES (rec.betreft,
v_run,
v_next_period,
1,
rec.deb_nr,
rec.achternaam,
rec.naam_full,
rec.prs_perslid_key,
rec.cnt_contract_nr,
rec.cnt_contract_key,
rec.kamer,
rec.alg_ruimte_key,
'Correction ' || rec.omschrijving,
rec.kpn_code_afd,
rec.kpn_code_proj,
rec.prs_kostensoort_refcode,
rec.btw_code,
rec.btw_perc,
rec.bedrag_new - rec.bedrag_oud);
fac.writelog (
p_applname,
'I',
'Mutatieregel voor ' || v_aanduiding,
rec.omschrijving || ': ' || (rec.bedrag_new - rec.bedrag_oud));
END LOOP;
-- Verwijder 'niet-mutatie regels' (die zijn in de buffer aangemaakt door nybu_bereken_factuurregels() )
DELETE nybu_huur_buffer
WHERE isMutatie = 0 AND periode = v_periode AND naar_coda IS NULL;
-- Zet allongeregels in huurbuffer
INSERT INTO nybu_huur_buffer
SELECT *
FROM nybu_huur_archief
WHERE periode = v_next_period AND ismutatie = 1 AND naar_coda IS NULL;
fac.writelog (p_applname,
'S',
'Mutatieregels gegenereerd',
'Periode ' || v_periode);
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg :=
v_errorhint
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.writelog (p_applname,
'E',
v_aanduiding || v_errormsg,
'Onbekende fout!');
COMMIT;
END nybu_select_huur_mutaties;
/
----- Rapportages --------------------------------
-- Toont de inhoud van de factuurbuffer (voor controle van gegenereerde factuurregels
CREATE OR REPLACE VIEW nybu_v_rap_factuur_buffer
AS
SELECT h.periode fclt_f_periode,
h.betreft fclt_f_betreft,
h.deb_nr fclt_f_debiteurnr,
DECODE (
h.prs_perslid_key,
NULL,
NULL,
'<a class="details" onclick=''FcltMgr.openDetail("'
|| 'appl/prs/prs_perslid.asp?key='
|| h.prs_perslid_key
|| '")''>'
|| HTF.escape_sc (h.naam_full)
|| '</a>')
html_naam,
h.naam_full fclt_x_naam,
a.prs_afdeling_naam6 afdeling,
'<a class="details" onclick=''FcltMgr.openDetail("'
|| 'appl/cnt/cnt_contract.asp?urole=bo&'
|| 'cnt_key='
|| h.cnt_contract_key
|| '")''>'
|| HTF.escape_sc (
h.cnt_contract_nr || ' - ' || c.cnt_contract_omschrijving)
|| '</a>'
html_contract,
h.cnt_contract_nr fclt_x_contract,
g.alg_gebouw_naam fclt_f_gebouw,
v.alg_verdieping_code fclt_f_verdieping,
DECODE (
h.cnt_contract_key,
NULL,
NULL,
'<a class="details" onclick=''FcltMgr.openDetail("'
|| 'appl/ALG/alg_ruimte.asp?key='
|| h.alg_ruimte_key
|| '")''>'
|| HTF.escape_sc (r.alg_ruimte_nr)
|| '</a>')
html_kamer,
r.alg_ruimte_nr fclt_x_kamer,
sr.alg_srtruimte_omschrijving kamertype,
h.omschrijving fclt_f_omschrijving, -- TODO; alleen kernwoord ("rent", "service costs") eruit pikken
h.bedrag,
DECODE (h.ismutatie, 1, 1, NULL) ismutatie
FROM nybu_huur_buffer h,
cnt_contract c,
alg_ruimte r,
alg_srtruimte sr,
alg_verdieping v,
alg_gebouw g,
prs_perslid p,
prs_v_aanwezigafdeling a
WHERE c.cnt_contract_key = h.cnt_contract_key
AND r.alg_ruimte_key(+) = h.alg_ruimte_key
AND sr.alg_srtruimte_key(+) = r.alg_srtruimte_key
AND v.alg_verdieping_key(+) = r.alg_verdieping_key
AND g.alg_gebouw_key(+) = v.alg_gebouw_key
AND p.prs_perslid_key(+) = h.prs_perslid_key
AND a.prs_afdeling_key(+) = p.prs_afdeling_key;
-- Toont de inhoud van het factuurarchief (huurarchief)
CREATE OR REPLACE VIEW nybu_v_rap_factuur_archief
AS
SELECT h.periode fclt_f_periode,
h.betreft fclt_f_betreft,
h.deb_nr fclt_f_debiteurnr,
DECODE (
h.prs_perslid_key,
NULL,
NULL,
'<a class="details" onclick=''FcltMgr.openDetail("'
|| 'appl/prs/prs_perslid.asp?key='
|| h.prs_perslid_key
|| '")''>'
|| HTF.escape_sc (h.naam_full)
|| '</a>')
html_naam,
h.naam_full fclt_x_naam,
a.prs_afdeling_naam6 afdeling,
'<a class="details" onclick=''FcltMgr.openDetail("'
|| 'appl/cnt/cnt_contract.asp?urole=bo&'
|| 'cnt_key='
|| h.cnt_contract_key
|| '")''>'
|| HTF.escape_sc (
h.cnt_contract_nr || ' - ' || c.cnt_contract_omschrijving)
|| '</a>'
html_contract,
h.cnt_contract_nr fclt_x_contract,
g.alg_gebouw_naam fclt_f_gebouw,
v.alg_verdieping_code fclt_f_verdieping,
DECODE (
h.cnt_contract_key,
NULL,
NULL,
'<a class="details" onclick=''FcltMgr.openDetail("'
|| 'appl/ALG/alg_ruimte.asp?key='
|| h.alg_ruimte_key
|| '")''>'
|| HTF.escape_sc (r.alg_ruimte_nr)
|| '</a>')
html_kamer,
r.alg_ruimte_nr fclt_x_kamer,
sr.alg_srtruimte_omschrijving kamertype,
h.omschrijving fclt_f_omschrijving, -- TODO; alleen kernwoord ("rent", "service costs") eruit pikken
h.bedrag,
DECODE (h.ismutatie, 1, 1, NULL) ismutatie,
DECODE (h.naar_coda, NULL, NULL, 1) geexporteerd
FROM nybu_huur_archief h,
cnt_contract c,
alg_ruimte r,
alg_srtruimte sr,
alg_verdieping v,
alg_gebouw g,
prs_perslid p,
prs_v_aanwezigafdeling a
WHERE c.cnt_contract_key = h.cnt_contract_key
AND r.alg_ruimte_key(+) = h.alg_ruimte_key
AND sr.alg_srtruimte_key(+) = r.alg_srtruimte_key
AND v.alg_verdieping_key(+) = r.alg_verdieping_key
AND g.alg_gebouw_key(+) = v.alg_gebouw_key
AND p.prs_perslid_key(+) = h.prs_perslid_key
AND a.prs_afdeling_key(+) = p.prs_afdeling_key;
CREATE OR REPLACE VIEW nybu_v_rap_vb_coda_export
AS
SELECT volgnr, regel
FROM (SELECT 0 volgnr,
'Nummer;Adm.;Grootboek;Debiteur / Kostenplaats;Project;Bedrag;D/C;BTW;Regelomschrijving;Regeltype;Ext ref 1;Ext ref 2;Fact nummer'
regel
FROM DUAL
UNION ALL
SELECT fac_rapport_volgnr volgnr, fac_rapport_regel regel
FROM fac_rapport
WHERE fac_rapport_node = 'T_HUUR_CODA')
ORDER BY volgnr;
-- Actueel overzicht van huurcontracten studentenkamers, met te-factureren bedragen
-- NYBU#33043: contracten in voorbereiding hoeven niet aan een ruimte gekoppeld te zijn
CREATE OR REPLACE VIEW nybu_v_rap_huurcontracten
AS
SELECT DISTINCT
a.cnt_contract_nummer_intern hide_f_sort,
'<a class="details" onclick=''FcltMgr.openDetail("'
|| 'appl/cnt/cnt_contract.asp?urole=bo&'
|| 'cnt_key='
|| a.cnt_contract_key
|| '")''>'
|| HTF.escape_sc (a.cnt_contract_nummer_intern)
|| '</a>'
html_nr,
a.cnt_contract_nummer_intern fclt_x_nr,
'<a class="details" onclick=''FcltMgr.openDetail("'
|| 'appl/prs/prs_perslid.asp?key='
|| a.prs_perslid_key
|| '")''>'
|| HTF.escape_sc (a.naam)
|| '</a>'
html_naam,
a.codanr fclt_f_debiteur,
a.naam fclt_x_naam,
a.gebouw fclt_f_gebouw,
a.verdieping fclt_f_verdieping,
DECODE (
a.alg_ruimte_key,
NULL,
'(Geen)',
'<a class="details" onclick=''FcltMgr.openDetail("'
|| 'appl/ALG/alg_ruimte.asp?key='
|| a.alg_ruimte_key
|| '")''>'
|| HTF.escape_sc (a.kamer)
|| '</a>')
html_kamer,
COALESCE (a.kamer, '(Geen)') fclt_x_kamer,
a.alg_srtruimte_omschrijving fclt_f_type,
TO_CHAR (a.cnt_contract_looptijd_van, 'YYYY-MM-DD') van,
TO_CHAR (a.cnt_contract_looptijd_tot, 'YYYY-MM-DD') tot,
DECODE (b.prs_perslid_key, NULL, a.huur, a.huur / 2) kale_huur,
DECODE (b.prs_perslid_key,
NULL, a.servicekosten,
a.servicekosten / 2)
servicekosten,
'<a class="details" onclick=''FcltMgr.openDetail("'
|| 'appl/prs/prs_perslid.asp?key='
|| COALESCE (a.partner_key, b.prs_perslid_key)
|| '")''>'
|| HTF.escape_sc (
COALESCE (a.partner_naam, b.prs_perslid_naam_full))
|| '</a>'
html_partner,
DECODE (b.prs_perslid_key,
NULL, DECODE (a.partner_key, NULL, 0, a.partnercharge),
a.partnercharge / 2)
partnertoeslag,
DECODE (b.prs_perslid_key, NULL, a.huur, a.huur / 2)
+ DECODE (b.prs_perslid_key,
NULL, a.servicekosten,
a.servicekosten / 2)
+ DECODE (b.prs_perslid_key,
NULL, DECODE (partner_key, NULL, 0, a.partnercharge),
a.partnercharge / 2)
huurprijs
FROM nybu_v_huurcontracten_student a
LEFT OUTER JOIN
nybu_v_potential_roommates b
ON a.alg_ruimte_key IS NOT NULL
AND b.cnt_contract_key != a.cnt_contract_key
AND b.alg_ruimte_key = a.alg_ruimte_key
AND b.cnt_contract_looptijd_van < a.cnt_contract_looptijd_tot
AND b.cnt_contract_looptijd_tot > a.cnt_contract_looptijd_van
AND b.cnt_contract_looptijd_tot > SYSDATE
WHERE TRUNC (SYSDATE, 'MM') < a.cnt_contract_looptijd_tot;
--"Campuslijst: Studenten adressen huidig bestand: naam, lichting, kamernummer, telefoonnummerkamer en mobielnummer."
-- srtperslid "Student" 1537
-- alg_kenmerk "Telephone number" 1040
-- cnt_kenmerk "Tenant" 81
-- cnt_kenmerk "Student room" 1
--- NYBU#34285 alg_kenmerk "Telephone number" 1040 vervangen door alg_kenmerk "Postal code" 1002
CREATE OR REPLACE VIEW NYBU_V_RAP_CAMPUSLIJST
(
fclt_x_naam,
naam,
tussenvoegsel,
voornaam,
voorletters,
fclt_f_lichting,
fclt_f_gebouw,
fclt_f_verdieping,
fclt_f_kamer,
postcode,
mobiel
)
AS
SELECT pf.prs_perslid_naam_full fclt_f_naam,
p.prs_perslid_naam,
p.prs_perslid_tussenvoegsel,
p.prs_perslid_voornaam,
p.prs_perslid_voorletters,
a.prs_afdeling_naam fclt_f_lichting,
g.alg_gebouw_naam fclt_f_gebouw,
rg.alg_verdieping_code fclt_f_verdieping,
rg.alg_ruimte_nr fclt_f_kamer,
-- kamtelnr.alg_onrgoedkenmerk_waarde telefoon_kamer,
pc.alg_onrgoedkenmerk_waarde postcode,
p.prs_perslid_mobiel mobiel
FROM prs_perslid p,
prs_v_perslid_fullnames pf,
prs_v_aanwezigafdeling a,
cnt_contract c,
alg_v_ruimte_gegevens rg,
alg_gebouw g,
(SELECT *
FROM cnt_kenmerkcontract
WHERE cnt_kenmerk_key = 81
AND cnt_kenmerkcontract_verwijder IS NULL) huurder,
(SELECT *
FROM cnt_kenmerkcontract
WHERE cnt_kenmerk_key = 1
AND cnt_kenmerkcontract_verwijder IS NULL) studkam,
-- (SELECT *
-- FROM alg_onrgoedkenmerk
-- WHERE alg_kenmerk_key = 1040
-- AND alg_onrgoedkenmerk_verwijder IS NULL) kamtelnr
(SELECT *
FROM alg_onrgoedkenmerk
WHERE alg_kenmerk_key = 1002
AND alg_onrgoedkenmerk_verwijder IS NULL) pc
WHERE pf.prs_perslid_key = p.prs_perslid_key
AND fac.safe_to_number (huurder.cnt_kenmerkcontract_waarde) =
p.prs_perslid_key
AND a.prs_afdeling_key = p.prs_afdeling_key
AND c.cnt_contract_key = huurder.cnt_contract_key
AND SYSDATE BETWEEN c.cnt_contract_looptijd_van
AND c.cnt_contract_looptijd_tot
AND studkam.cnt_contract_key = c.cnt_contract_key
AND rg.alg_ruimte_key =
fac.safe_to_number (studkam.cnt_kenmerkcontract_waarde)
--AND kamtelnr.alg_onrgoed_key = rg.alg_ruimte_key
AND pc.alg_onrgoed_key(+) = rg.alg_ruimte_key
AND g.alg_gebouw_key = rg.alg_gebouw_key
AND c.cnt_contract_verwijder is null;
-- "Vertrekkerslijst incl. nieuw adres, borg, eventuele schade, te verrekenen huur (refund),
-- debiteurnummer en bankrekeningnummer"
-- Vertrekker = student met contract met "Contract status" = "Closed" en status = Actief (i.e. niet Gesloten)
-- naam, adres, contractnr, debnr, borgbedrag, damages, verrekening huur ("Refund" obv dagen eerder/later weg).
-- cnt_kenmerk "Tenant" 81
-- cnt_kenmerk "Student room" 1
-- cnt_kenmerk "Deposit amount" 2
-- cnt_kenmerk "Start call of wf" 3
-- cnt_kenmerk "Damages" 41
-- cnt_kenmerk "Refund" 123
-- cnt_kenmerk "Contract status" 141 (waarde 321 = "Closed")
-- cnt_kenmerk "Schoonmaak vertrek" 942
-- prs_kenmerk "Account number" 1029
-- prs_kenmerk "IBAN" 1040
-- prs_kenmerk "BIC" 1041
-- prs_kenmerk "Street" 1022
-- prs_kenmerk "Street (extra)" 1023
-- prs_kenmerk "ZIP/Postal code" 1024
-- prs_kenmerk "City" 1025
-- prs_kenmerk "Country" 1026
-- prs_kenmerk "CODA nr" 1000
-- prs_kenmerk "SAN nr" 1200
-- NYBU#30133 SAN-nummer overruled CODA-nummer (CON-nummer)
-- NYBU#32684 Ook kosten "Schoonmaak bij vertrek" tonen
CREATE OR REPLACE VIEW nybu_v_vertrekkers
AS
SELECT ROW_NUMBER () OVER (ORDER BY pf.prs_perslid_naam_full) AS nummer,
pf.prs_perslid_naam_full naam_full,
p.prs_perslid_naam,
p.prs_perslid_nr studentnr,
c.cnt_contract_nummer_intern contract,
g.alg_gebouw_naam gebouw,
rg.alg_verdieping_code verdieping,
rg.alg_ruimte_nr kamer,
TO_CHAR (c.cnt_contract_looptijd_tot, 'YYYY-MM-DD') einddatum,
street1.prs_kenmerklink_waarde adres,
street2.prs_kenmerklink_waarde adres2,
zip.prs_kenmerklink_waarde postcode,
city.prs_kenmerklink_waarde plaats,
country.prs_kenmerklink_waarde land,
fac.safe_to_number (borgbedr.cnt_kenmerkcontract_waarde) borg,
fac.safe_to_number (workflow.cnt_kenmerkcontract_waarde) workflow,
fac.safe_to_number (schade.cnt_kenmerkcontract_waarde) schade,
fac.safe_to_number (schoonm.cnt_kenmerkcontract_waarde) schoonmaak,
fac.safe_to_number (refund.cnt_kenmerkcontract_waarde) refund,
COALESCE (sannr.prs_kenmerklink_waarde,
codanr.prs_kenmerklink_waarde)
debiteurnr,
reknr.prs_kenmerklink_waarde rekeningnr,
iban.prs_kenmerklink_waarde iban,
bic.prs_kenmerklink_waarde bic
FROM prs_v_perslid_fullnames_all pf,
prs_perslid p,
cnt_contract c,
alg_v_ruimte_gegevens rg,
alg_gebouw g,
(SELECT *
FROM cnt_kenmerkcontract
WHERE cnt_kenmerk_key = 141
AND cnt_kenmerkcontract_verwijder IS NULL) cntstat,
(SELECT *
FROM cnt_kenmerkcontract
WHERE cnt_kenmerk_key = 81
AND cnt_kenmerkcontract_verwijder IS NULL) huurder,
(SELECT *
FROM cnt_kenmerkcontract
WHERE cnt_kenmerk_key = 1
AND cnt_kenmerkcontract_verwijder IS NULL) studkam,
(SELECT *
FROM cnt_kenmerkcontract
WHERE cnt_kenmerk_key = 2
AND cnt_kenmerkcontract_verwijder IS NULL) borgbedr,
(SELECT *
FROM cnt_kenmerkcontract
WHERE cnt_kenmerk_key = 3
AND cnt_kenmerkcontract_verwijder IS NULL) workflow,
(SELECT *
FROM cnt_kenmerkcontract
WHERE cnt_kenmerk_key = 41
AND cnt_kenmerkcontract_verwijder IS NULL) schade,
(SELECT *
FROM cnt_kenmerkcontract
WHERE cnt_kenmerk_key = 123
AND cnt_kenmerkcontract_verwijder IS NULL) refund,
(SELECT *
FROM cnt_kenmerkcontract
WHERE cnt_kenmerk_key = 942
AND cnt_kenmerkcontract_verwijder IS NULL) schoonm,
(SELECT *
FROM prs_kenmerklink
WHERE prs_kenmerk_key = 1000
AND prs_kenmerklink_verwijder IS NULL) codanr,
(SELECT *
FROM prs_kenmerklink
WHERE prs_kenmerk_key = 1200
AND prs_kenmerklink_verwijder IS NULL) sannr,
(SELECT *
FROM prs_kenmerklink
WHERE prs_kenmerk_key = 1029
AND prs_kenmerklink_verwijder IS NULL) reknr,
(SELECT *
FROM prs_kenmerklink
WHERE prs_kenmerk_key = 1140
AND prs_kenmerklink_verwijder IS NULL) iban,
(SELECT *
FROM prs_kenmerklink
WHERE prs_kenmerk_key = 1141
AND prs_kenmerklink_verwijder IS NULL) bic,
(SELECT *
FROM prs_kenmerklink
WHERE prs_kenmerk_key = 1022
AND prs_kenmerklink_verwijder IS NULL) street1,
(SELECT *
FROM prs_kenmerklink
WHERE prs_kenmerk_key = 1023
AND prs_kenmerklink_verwijder IS NULL) street2,
(SELECT *
FROM prs_kenmerklink
WHERE prs_kenmerk_key = 1024
AND prs_kenmerklink_verwijder IS NULL) zip,
(SELECT *
FROM prs_kenmerklink
WHERE prs_kenmerk_key = 1025
AND prs_kenmerklink_verwijder IS NULL) city,
(SELECT *
FROM prs_kenmerklink
WHERE prs_kenmerk_key = 1026
AND prs_kenmerklink_verwijder IS NULL) country
WHERE fac.safe_to_number (cntstat.cnt_kenmerkcontract_waarde) = 321
AND cntstat.cnt_contract_key = c.cnt_contract_key
AND c.cnt_contract_status = 0
AND c.cnt_contract_verwijder IS NULL
AND NOT EXISTS
(SELECT 1
FROM cnt_contract cc, cnt_kenmerkcontract kc
WHERE cc.cnt_contract_key != c.cnt_contract_key
AND cc.cnt_contract_looptijd_tot >=
c.cnt_contract_looptijd_tot
AND cc.cnt_contract_status = 0
AND cc.cnt_contract_verwijder IS NULL
AND kc.cnt_kenmerk_key = 81
AND kc.cnt_contract_key = cc.cnt_contract_key
AND kc.cnt_kenmerkcontract_waarde =
huurder.cnt_kenmerkcontract_waarde)
AND borgbedr.cnt_contract_key(+) = c.cnt_contract_key
AND workflow.cnt_contract_key(+) = c.cnt_contract_key
AND schade.cnt_contract_key(+) = c.cnt_contract_key
AND refund.cnt_contract_key(+) = c.cnt_contract_key
AND schoonm.cnt_contract_key(+) = c.cnt_contract_key
AND studkam.cnt_contract_key = c.cnt_contract_key
AND rg.alg_ruimte_key =
fac.safe_to_number (studkam.cnt_kenmerkcontract_waarde)
AND g.alg_gebouw_key = rg.alg_gebouw_key
AND huurder.cnt_contract_key = c.cnt_contract_key
AND pf.prs_perslid_key =
fac.safe_to_number (huurder.cnt_kenmerkcontract_waarde)
AND p.prs_perslid_key = pf.prs_perslid_key
AND codanr.prs_link_key(+) = pf.prs_perslid_key
AND sannr.prs_link_key(+) = pf.prs_perslid_key
AND reknr.prs_link_key(+) = pf.prs_perslid_key
AND iban.prs_link_key(+) = pf.prs_perslid_key
AND bic.prs_link_key(+) = pf.prs_perslid_key
AND street1.prs_link_key(+) = pf.prs_perslid_key
AND street2.prs_link_key(+) = pf.prs_perslid_key
AND zip.prs_link_key(+) = pf.prs_perslid_key
AND city.prs_link_key(+) = pf.prs_perslid_key
AND country.prs_link_key(+) = pf.prs_perslid_key;
-- Lijst met nieuwkomers, die nog borg moeten betalen
-- cnt_kenmerk "Deposit paid" 43
-- cnt_kenmerk "Contract status" 141 (waarde 221 = "In Preparation")
-- prs_kenmerk "SAN nr" 1200
-- NYBU#30133 SAN-nummer overruled CODA-nummer (CON-nummer)
-- NYBU#33043: contracten in voorbereiding hoeven niet aan een ruimte gekoppeld te zijn
CREATE OR REPLACE VIEW nybu_v_nieuwkomers
AS
SELECT ROW_NUMBER () OVER (ORDER BY pf.prs_perslid_naam_full) AS nummer,
pf.prs_perslid_naam_full naam_full,
p.prs_perslid_naam,
p.prs_perslid_nr studentnr,
c.cnt_contract_nummer_intern contract,
g.alg_gebouw_naam gebouw,
rg.alg_verdieping_code verdieping,
rg.alg_ruimte_nr kamer,
TO_CHAR (c.cnt_contract_looptijd_van, 'YYYY-MM-DD') ingangsdatum,
street1.prs_kenmerklink_waarde adres,
street2.prs_kenmerklink_waarde adres2,
zip.prs_kenmerklink_waarde postcode,
city.prs_kenmerklink_waarde plaats,
country.prs_kenmerklink_waarde land,
fac.safe_to_number (borgbedr.cnt_kenmerkcontract_waarde) borg,
COALESCE (sannr.prs_kenmerklink_waarde,
codanr.prs_kenmerklink_waarde)
debiteurnr,
reknr.prs_kenmerklink_waarde rekeningnr,
iban.prs_kenmerklink_waarde iban,
bic.prs_kenmerklink_waarde bic
FROM prs_v_perslid_fullnames_all pf,
prs_perslid p,
cnt_contract c,
alg_v_ruimte_gegevens rg,
alg_gebouw g,
(SELECT *
FROM cnt_kenmerkcontract
WHERE cnt_kenmerk_key = 141
AND cnt_kenmerkcontract_verwijder IS NULL) cntstat,
(SELECT *
FROM cnt_kenmerkcontract
WHERE cnt_kenmerk_key = 81
AND cnt_kenmerkcontract_verwijder IS NULL) huurder,
(SELECT *
FROM cnt_kenmerkcontract
WHERE cnt_kenmerk_key = 1
AND cnt_kenmerkcontract_verwijder IS NULL) studkam,
(SELECT *
FROM cnt_kenmerkcontract
WHERE cnt_kenmerk_key = 2
AND cnt_kenmerkcontract_verwijder IS NULL) borgbedr,
(SELECT *
FROM cnt_kenmerkcontract
WHERE cnt_kenmerk_key = 43
AND cnt_kenmerkcontract_waarde != '0'
AND cnt_kenmerkcontract_verwijder IS NULL) borgbet,
(SELECT *
FROM prs_kenmerklink
WHERE prs_kenmerk_key = 1000
AND prs_kenmerklink_verwijder IS NULL) codanr,
(SELECT *
FROM prs_kenmerklink
WHERE prs_kenmerk_key = 1200
AND prs_kenmerklink_verwijder IS NULL) sannr,
(SELECT *
FROM prs_kenmerklink
WHERE prs_kenmerk_key = 1029
AND prs_kenmerklink_verwijder IS NULL) reknr,
(SELECT *
FROM prs_kenmerklink
WHERE prs_kenmerk_key = 1140
AND prs_kenmerklink_verwijder IS NULL) iban,
(SELECT *
FROM prs_kenmerklink
WHERE prs_kenmerk_key = 1141
AND prs_kenmerklink_verwijder IS NULL) bic,
(SELECT *
FROM prs_kenmerklink
WHERE prs_kenmerk_key = 1022
AND prs_kenmerklink_verwijder IS NULL) street1,
(SELECT *
FROM prs_kenmerklink
WHERE prs_kenmerk_key = 1023
AND prs_kenmerklink_verwijder IS NULL) street2,
(SELECT *
FROM prs_kenmerklink
WHERE prs_kenmerk_key = 1024
AND prs_kenmerklink_verwijder IS NULL) zip,
(SELECT *
FROM prs_kenmerklink
WHERE prs_kenmerk_key = 1025
AND prs_kenmerklink_verwijder IS NULL) city,
(SELECT *
FROM prs_kenmerklink
WHERE prs_kenmerk_key = 1026
AND prs_kenmerklink_verwijder IS NULL) country
WHERE fac.safe_to_number (cntstat.cnt_kenmerkcontract_waarde) = 221
AND cntstat.cnt_contract_key = c.cnt_contract_key
AND c.cnt_contract_status = 0
AND NOT EXISTS
(SELECT 1
FROM cnt_contract cc, cnt_kenmerkcontract kc
WHERE cc.cnt_contract_key != c.cnt_contract_key
AND cc.cnt_contract_status = 0
AND kc.cnt_kenmerk_key = 81
AND kc.cnt_contract_key = cc.cnt_contract_key
AND kc.cnt_kenmerkcontract_waarde =
huurder.cnt_kenmerkcontract_waarde)
AND borgbedr.cnt_contract_key(+) = c.cnt_contract_key
AND borgbet.cnt_contract_key(+) = c.cnt_contract_key
AND fac.safe_to_number (borgbet.cnt_kenmerkcontract_waarde) IS NULL
AND studkam.cnt_contract_key(+) = c.cnt_contract_key
AND rg.alg_ruimte_key(+) =
fac.safe_to_number (studkam.cnt_kenmerkcontract_waarde)
AND g.alg_gebouw_key(+) = rg.alg_gebouw_key
AND huurder.cnt_contract_key = c.cnt_contract_key
AND pf.prs_perslid_key =
fac.safe_to_number (huurder.cnt_kenmerkcontract_waarde)
AND p.prs_perslid_key = pf.prs_perslid_key
AND codanr.prs_link_key(+) = pf.prs_perslid_key
AND sannr.prs_link_key(+) = pf.prs_perslid_key
AND reknr.prs_link_key(+) = pf.prs_perslid_key
AND iban.prs_link_key(+) = pf.prs_perslid_key
AND bic.prs_link_key(+) = pf.prs_perslid_key
AND street1.prs_link_key(+) = pf.prs_perslid_key
AND street2.prs_link_key(+) = pf.prs_perslid_key
AND zip.prs_link_key(+) = pf.prs_perslid_key
AND city.prs_link_key(+) = pf.prs_perslid_key
AND country.prs_link_key(+) = pf.prs_perslid_key
AND c.cnt_contract_verwijder IS NULL;
-- Rapportage "HUUR: Vertrekkerslijst"
CREATE OR REPLACE VIEW nybu_v_rap_vertrekkers
AS
SELECT naam_full fclt_f_naam,
studentnr,
contract fclt_f_contract,
gebouw,
verdieping,
kamer fclt_f_kamer,
einddatum,
adres,
adres2,
postcode,
plaats,
land,
borg,
TO_CHAR (workflow) workflow,
schade,
schoonmaak,
refund,
debiteurnr,
rekeningnr,
iban,
bic
FROM nybu_v_vertrekkers;
-- Rapportage "HUUR: Nieuwkomers"
CREATE OR REPLACE VIEW nybu_v_rap_nieuwkomers
AS
SELECT naam_full fclt_f_naam,
studentnr,
contract fclt_f_contract,
gebouw,
verdieping,
COALESCE (kamer, '(Geen)') fclt_f_kamer,
ingangsdatum,
adres,
adres2,
postcode,
plaats,
land,
borg,
debiteurnr,
rekeningnr,
iban,
bic
FROM nybu_v_nieuwkomers;
-- CSV-export naar CODA, voor verrekening borgteruggaaf, schoonmaakkosten en schades etc
CREATE OR REPLACE VIEW nybu_v_rap_borg_terug
AS
SELECT nummer,
adm,
grootbk,
debiteurnr,
proj,
bedrag,
dc,
btw,
oms omschrijving,
regeltype,
ref1,
ref2
FROM ( SELECT nummer,
0 idx,
'10' adm,
'13000' grootbk,
REPLACE (debiteurnr, 'CON', 'DC') debiteurnr,
NULL proj,
SUM( COALESCE (borg, 0)
- COALESCE (schade, 0)
- COALESCE (schoonmaak, 0)
+ COALESCE (refund, 0))
bedrag,
CASE
WHEN SUM( COALESCE (borg, 0)
- COALESCE (schade, 0)
- COALESCE (schoonmaak, 0)
+ COALESCE (refund, 0)) < 0
THEN
'D'
ELSE
'C'
END
dc,
NULL btw,
'Deposit ' || prs_perslid_naam oms,
'Summary' regeltype,
'K91200' ref1,
'P991210' ref2
FROM nybu_v_vertrekkers
GROUP BY nummer, debiteurnr, prs_perslid_naam
UNION ALL
SELECT nummer,
1 idx,
'12' adm,
'19140' grootbk,
'K91200' debiteurnr,
'P991210' proj,
borg bedrag,
CASE WHEN borg > 0 THEN 'D' ELSE 'C' END dc,
'VV' btw,
'Deposit ' || prs_perslid_naam oms,
'Analysis' regeltype,
NULL ref1,
NULL ref2
FROM nybu_v_vertrekkers
WHERE borg IS NOT NULL AND borg > 0
UNION ALL
SELECT nummer,
2 idx,
'12' adm,
'84099' grootbk,
'K91200' debiteurnr,
'P991210' proj,
schade bedrag,
CASE WHEN schade > 0 THEN 'C' ELSE 'D' END dc,
'VH21' btw,
'Damages '
|| DECODE (workflow,
NULL, prs_perslid_naam,
'(room check N' || TO_CHAR (workflow) || ')')
oms,
'Analysis' regeltype,
NULL ref1,
NULL ref2
FROM nybu_v_vertrekkers
WHERE schade IS NOT NULL AND schade > 0
UNION ALL
SELECT nummer,
3 idx,
'12' adm,
'84099' grootbk,
'K91200' debiteurnr,
'P991210' proj,
refund bedrag,
CASE WHEN refund > 0 THEN 'C' ELSE 'D' END dc,
'VH21' btw,
'Refund ' || prs_perslid_naam oms,
'Analysis' regeltype,
NULL ref1,
NULL ref2
FROM nybu_v_vertrekkers
WHERE refund IS NOT NULL AND refund > 0
UNION ALL
SELECT nummer,
4 idx,
'12' adm,
'84099' grootbk,
'K91200' debiteurnr,
'P991210' proj,
schoonmaak bedrag,
CASE WHEN schoonmaak > 0 THEN 'C' ELSE 'D' END dc,
'VH21' btw,
'Cleaning ' || prs_perslid_naam oms,
'Analysis' regeltype,
NULL ref1,
NULL ref2
FROM nybu_v_vertrekkers
WHERE schoonmaak IS NOT NULL AND schoonmaak > 0
ORDER BY nummer, idx);
-- CSV-export naar CODA, voor betaling van borg door nieuwe huurders
CREATE OR REPLACE VIEW nybu_v_rap_borg_betalen
AS
SELECT nummer,
'10' adm,
'13000' grootbk,
REPLACE (debiteurnr, 'CON', 'DC') debiteurnr,
NULL proj,
SUM (borg) bedrag,
'D' dc,
NULL btw,
'Deposit ' || prs_perslid_naam omschrijving,
'Summary' regeltype,
'K91200' ref1,
'P991210' ref2
FROM nybu_v_nieuwkomers
GROUP BY nummer, debiteurnr, prs_perslid_naam
UNION ALL
SELECT nummer,
'12' adm,
'19140' grootbk,
'K91200' debiteurnr,
'P991210' proj,
borg bedrag,
'C' dc,
'VV' btw,
'Deposit ' || prs_perslid_naam omschrijving,
'Analysis' regeltype,
NULL ref1,
NULL ref2
FROM nybu_v_nieuwkomers
ORDER BY nummer, regeltype DESC;
-- Basisview voor gestylede rapportages voor afdrukken contract en welkomstbrief
-- Veld fclt_f_tonen biedt de mogelijkheid om alleen de brief, alleen het contract, of beide af te drukken
-- Middels het bedrijf van het contract wordt in de rapportage bepaald of het om een student of een
-- medewerker gaat (voor beide zijn verschillende templates)
-- prs_kenmerk 1022 Street
-- prs_kenmerk 1023 Street (extra)
-- prs_kenmerk 1024 ZIP/Postal code
-- prs_kenmerk 1025 City
-- prs_kenmerk 1200 SAN number
-- cnt_kenmerk 63 Budget nr
-- cnt_kenmerk 64 Bill rent to
-- cnt_kenmerk 65 Bill service costs to
-- cnt_kenmerk 66 Bill telephone to
-- cnt_kenmerk 681 Partnercharge to budgetnr
CREATE OR REPLACE VIEW nybu_v_contract_bon
AS
SELECT a.*,
DECODE (b.prs_perslid_key, NULL, a.huur, a.huur / 2) kale_huur,
DECODE (b.prs_perslid_key, NULL, a.servkost, a.servkost / 2)
servicekosten,
DECODE (b.prs_perslid_key,
NULL, a.telefooncharge,
a.telefooncharge / 2)
telkosten,
DECODE (b.prs_perslid_key,
NULL, DECODE (a.partner_key, NULL, 0, a.partnercharge),
a.partnercharge / 2)
partnertoeslag,
b.roommate_naam,
b.rm_straat1,
b.rm_straat2,
b.rm_postcode,
b.rm_plaats
FROM (SELECT DECODE (
c.cnt_contract_versie,
NULL,
c.cnt_contract_nummer_intern,
c.cnt_contract_nummer_intern
|| '.'
|| c.cnt_contract_versie)
fclt_f_contractnr,
c.cnt_prs_bedrijf_key,
p.prs_perslid_key,
c.naam fclt_f_naam,
p.prs_perslid_nr fclt_f_studentnr,
p.prs_perslid_voornaam voornaam,
straat1.prs_kenmerklink_waarde straat1,
straat2.prs_kenmerklink_waarde straat2,
pc.prs_kenmerklink_waarde postcode,
plaats.prs_kenmerklink_waarde plaats,
san.prs_kenmerklink_waarde san_nr,
a.prs_afdeling_omschrijving fclt_f_opleiding,
r.alg_ruimte_key,
r.alg_ruimte_nr,
c.alg_srtruimte_omschrijving,
v.alg_verdieping_volgnr,
g.alg_gebouw_naam,
pc_kamer.alg_onrgoedkenmerk_waarde postcode_kamer,
telnr.alg_onrgoedkenmerk_waarde telnr,
c.cnt_contract_looptijd_van van,
c.cnt_contract_looptijd_tot tot,
TO_CHAR (c.cnt_contract_looptijd_van, 'DD-MM-YYYY')
looptijd_van,
TO_CHAR (c.cnt_contract_looptijd_tot, 'DD-MM-YYYY')
looptijd_tot,
TO_CHAR (SYSDATE, 'DD-MM-YYYY') printdatum,
DECODE (rent.cnt_kenmerkcontract_waarde,
'442', k.prs_kostenplaats_nr,
'443', 'salaris',
NULL)
rent_to,
DECODE (serv.cnt_kenmerkcontract_waarde,
'442', k.prs_kostenplaats_nr,
'443', 'salaris',
NULL)
serv_to,
DECODE (tel.cnt_kenmerkcontract_waarde,
'442', k.prs_kostenplaats_nr,
'443', 'salaris',
NULL)
tel_to,
DECODE (partnerch.cnt_kenmerkcontract_waarde,
'442', k.prs_kostenplaats_nr,
'443', 'salaris',
NULL)
partnerch_to,
c.partner_key,
c.huur,
c.servicekosten servkost,
c.telefooncharge,
c.partnercharge,
c.borg_tebetalen + c.borg_betaald borg,
PRINT.uitdraai fclt_f_tonen
FROM nybu_v_huurcontracten_student c,
prs_perslid p,
prs_afdeling a,
alg_ruimte r,
alg_verdieping v,
alg_gebouw g,
(SELECT *
FROM alg_onrgoedkenmerk
WHERE alg_onrgoedkenmerk_verwijder IS NULL
AND alg_onrgoed_niveau = 'R'
AND alg_kenmerk_key = 1002) pc_kamer,
(SELECT *
FROM alg_onrgoedkenmerk
WHERE alg_onrgoedkenmerk_verwijder IS NULL
AND alg_onrgoed_niveau = 'R'
AND alg_kenmerk_key = 1040) telnr,
(SELECT *
FROM prs_kenmerklink
WHERE prs_kenmerklink_verwijder IS NULL
AND prs_kenmerklink_niveau = 'P'
AND prs_kenmerk_key = 1022) straat1,
(SELECT *
FROM prs_kenmerklink
WHERE prs_kenmerklink_verwijder IS NULL
AND prs_kenmerklink_niveau = 'P'
AND prs_kenmerk_key = 1023) straat2,
(SELECT *
FROM prs_kenmerklink
WHERE prs_kenmerklink_verwijder IS NULL
AND prs_kenmerklink_niveau = 'P'
AND prs_kenmerk_key = 1024) pc,
(SELECT *
FROM prs_kenmerklink
WHERE prs_kenmerklink_verwijder IS NULL
AND prs_kenmerklink_niveau = 'P'
AND prs_kenmerk_key = 1025) plaats,
(SELECT *
FROM prs_kenmerklink
WHERE prs_kenmerklink_verwijder IS NULL
AND prs_kenmerklink_niveau = 'P'
AND prs_kenmerk_key = 1200) san,
(SELECT *
FROM cnt_kenmerkcontract
WHERE cnt_kenmerk_key = 63
AND cnt_kenmerkcontract_verwijder IS NULL)
budget,
prs_kostenplaats k,
(SELECT *
FROM cnt_kenmerkcontract
WHERE cnt_kenmerk_key = 64
AND cnt_kenmerkcontract_verwijder IS NULL) rent,
(SELECT *
FROM cnt_kenmerkcontract
WHERE cnt_kenmerk_key = 65
AND cnt_kenmerkcontract_verwijder IS NULL) serv,
(SELECT *
FROM cnt_kenmerkcontract
WHERE cnt_kenmerk_key = 66
AND cnt_kenmerkcontract_verwijder IS NULL) tel,
(SELECT *
FROM cnt_kenmerkcontract
WHERE cnt_kenmerk_key = 681
AND cnt_kenmerkcontract_verwijder IS NULL)
partnerch,
(SELECT 'Bevestigingsbrief' uitdraai FROM DUAL
UNION ALL
SELECT 'Contract' uitdraai FROM DUAL) PRINT
WHERE p.prs_perslid_key = c.prs_perslid_key
AND SYSDATE < c.cnt_contract_looptijd_tot
AND r.alg_ruimte_key = c.alg_ruimte_key
AND v.alg_verdieping_key = r.alg_verdieping_key
AND g.alg_gebouw_key = v.alg_gebouw_key
AND pc_kamer.alg_onrgoed_key(+) = r.alg_ruimte_key
AND a.prs_afdeling_key = p.prs_afdeling_key
AND straat1.prs_link_key(+) = p.prs_perslid_key
AND straat2.prs_link_key(+) = p.prs_perslid_key
AND pc.prs_link_key(+) = p.prs_perslid_key
AND plaats.prs_link_key(+) = p.prs_perslid_key
AND san.prs_link_key(+) = p.prs_perslid_key
AND telnr.alg_onrgoed_key(+) = r.alg_ruimte_key
AND budget.cnt_contract_key(+) = c.cnt_contract_key
AND k.prs_kostenplaats_key(+) =
fac.safe_to_number (
budget.cnt_kenmerkcontract_waarde)
AND rent.cnt_contract_key(+) = c.cnt_contract_key
AND serv.cnt_contract_key(+) = c.cnt_contract_key
AND tel.cnt_contract_key(+) = c.cnt_contract_key
AND partnerch.cnt_contract_key(+) = c.cnt_contract_key
AND COALESCE (cnt_contract_versie, 'apekool') =
COALESCE (
(SELECT MAX (cnt_contract_versie)
FROM cnt_contract
WHERE cnt_contract_nummer_intern =
c.cnt_contract_nummer_intern
AND cnt_contract_verwijder IS NULL),
'apekool')) a
LEFT OUTER JOIN
(SELECT pf.prs_perslid_key,
fac.safe_to_number (sk.cnt_kenmerkcontract_waarde)
alg_ruimte_key,
pf.prs_perslid_naam_full roommate_naam,
straat1.prs_kenmerklink_waarde rm_straat1,
straat2.prs_kenmerklink_waarde rm_straat2,
pc.prs_kenmerklink_waarde rm_postcode,
plaats.prs_kenmerklink_waarde rm_plaats,
c.cnt_contract_looptijd_van van,
c.cnt_contract_looptijd_tot tot
FROM cnt_contract c,
(SELECT *
FROM cnt_kenmerkcontract
WHERE cnt_kenmerk_key = 81
AND cnt_kenmerkcontract_verwijder IS NULL) h,
prs_v_perslid_fullnames pf,
(SELECT *
FROM cnt_kenmerkcontract
WHERE cnt_kenmerk_key = 1
AND cnt_kenmerkcontract_verwijder IS NULL) sk,
(SELECT *
FROM prs_kenmerklink
WHERE prs_kenmerklink_verwijder IS NULL
AND prs_kenmerklink_niveau = 'P'
AND prs_kenmerk_key = 1022) straat1,
(SELECT *
FROM prs_kenmerklink
WHERE prs_kenmerklink_verwijder IS NULL
AND prs_kenmerklink_niveau = 'P'
AND prs_kenmerk_key = 1023) straat2,
(SELECT *
FROM prs_kenmerklink
WHERE prs_kenmerklink_verwijder IS NULL
AND prs_kenmerklink_niveau = 'P'
AND prs_kenmerk_key = 1024) pc,
(SELECT *
FROM prs_kenmerklink
WHERE prs_kenmerklink_verwijder IS NULL
AND prs_kenmerklink_niveau = 'P'
AND prs_kenmerk_key = 1025) plaats
WHERE c.ins_discipline_key = 55
AND c.cnt_contract_looptijd_tot > SYSDATE
AND c.cnt_contract_verwijder IS NULL
AND h.cnt_contract_key = c.cnt_contract_key
AND pf.prs_perslid_key =
fac.safe_to_number (h.cnt_kenmerkcontract_waarde)
AND sk.cnt_contract_key = c.cnt_contract_key
AND straat1.prs_link_key(+) = pf.prs_perslid_key
AND straat2.prs_link_key(+) = pf.prs_perslid_key
AND pc.prs_link_key(+) = pf.prs_perslid_key
AND plaats.prs_link_key(+) = pf.prs_perslid_key) b
ON a.alg_ruimte_key = b.alg_ruimte_key
AND a.prs_perslid_key != b.prs_perslid_key
AND b.van < a.tot
AND b.tot > a.van;
-- Rapportageview voor afdrukken huurovereenkomst + bevestigingsbrief STUDENT
-- 1643 = bedrijf "Students"
CREATE OR REPLACE VIEW nybu_v_rap_contract_student
AS
SELECT *
FROM nybu_v_contract_bon
WHERE cnt_prs_bedrijf_key = 1643;
-- Rapportageview voor afdrukken huurovereenkomst + bevestigingsbrief MEDEWERKER
-- (voor tijdelijke verhuur studentenkamers aan medewerkers/stagiairs)
CREATE OR REPLACE VIEW nybu_v_rap_contract_medewerker
AS
SELECT *
FROM nybu_v_contract_bon
WHERE cnt_prs_bedrijf_key != 1643;
-- Gestylede rapportage voor genereren vertrekbrief, o.b.v. workflowmelding en huurcontract
-- Filtering:
-- * stdmelding 941 ("Request roomcheck (Workflow)")
-- * alleen workflows zonder afgewezen meldingen.
-- * met gekozen kamernummer gekoppeld aan campuscontract
-- * melding binnen looptijd contract
-- * alleen actieve (niet-gesloten) contracten
-- mld_kenmerk 502 Date Roomcheck
-- mld_kenmerk 503 Time Roomcheck
-- cnt_kenmerk 1 Student room
-- cnt_kenmerk 81 Tenant
-- alg_kenmerk 1002 Postal code
-- prs_kenmerk 1022 Street
-- prs_kenmerk 1023 Street (extra)
-- prs_kenmerk 1024 ZIP/Postal code
-- prs_kenmerk 1025 City
-- prs_kenmerk 1026 Country
-- prs_kenmerk 1180 Prive emailadres
-- prs_kenmerk 1140 IBAN
CREATE OR REPLACE VIEW nybu_v_rap_vertrekbrief
AS
SELECT m.mld_melding_key,
TO_CHAR (m.mld_melding_key) || ' - ' || pf.prs_perslid_naam_full
fclt_f_melding,
pf.prs_perslid_naam_full fclt_f_naam,
r.alg_ruimte_nr fclt_f_kamer,
TRUNC (m.mld_melding_datum) datum,
chkdatum.mld_kenmerkmelding_waarde chkdatum,
chktijd.mld_kenmerkmelding_waarde chktijd,
c.cnt_contract_key,
DECODE (
c.cnt_contract_versie,
NULL,
c.cnt_contract_nummer_intern,
c.cnt_contract_nummer_intern || '.' || c.cnt_contract_versie)
fclt_f_contract,
TO_CHAR (c.cnt_contract_looptijd_tot, 'DD-MM-YYYY') einddatum,
r.alg_ruimte_key,
r.alg_ruimte_nr kamer,
pc.alg_onrgoedkenmerk_waarde postcode,
p.prs_perslid_key,
p.prs_perslid_naam naam,
p.prs_perslid_tussenvoegsel tussenvoegsel,
p.prs_perslid_voorletters voorletters,
p.prs_perslid_voornaam voornaam,
p.prs_perslid_mobiel mobiel,
p.prs_perslid_telefoonnr telefoonnr,
adres.prs_kenmerklink_waarde adres,
adres2.prs_kenmerklink_waarde extraadres,
zip.prs_kenmerklink_waarde zip,
plaats.prs_kenmerklink_waarde plaats,
land.prs_kenmerklink_waarde land,
email.prs_kenmerklink_waarde email,
iban.prs_kenmerklink_waarde iban
FROM mld_melding m,
(SELECT *
FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL
AND mld_kenmerk_key = 502) chkdatum,
(SELECT *
FROM mld_kenmerkmelding
WHERE mld_kenmerkmelding_verwijder IS NULL
AND mld_kenmerk_key = 503) chktijd,
(SELECT *
FROM cnt_kenmerkcontract
WHERE cnt_kenmerkcontract_verwijder IS NULL
AND cnt_kenmerk_key = 1) kamer,
(SELECT *
FROM cnt_kenmerkcontract
WHERE cnt_kenmerkcontract_verwijder IS NULL
AND cnt_kenmerk_key = 81) student,
(SELECT *
FROM cnt_contract c
WHERE cnt_contract_verwijder IS NULL
AND COALESCE (cnt_contract_versie, '0') =
(SELECT COALESCE (MAX (cnt_contract_versie), '0')
FROM cnt_contract
WHERE cnt_contract_verwijder IS NULL
AND cnt_contract_nummer_intern =
c.cnt_contract_nummer_intern)) c,
alg_ruimte r,
(SELECT *
FROM alg_onrgoedkenmerk
WHERE alg_onrgoedkenmerk_verwijder IS NULL
AND alg_kenmerk_key = 1002) pc,
prs_perslid p,
prs_v_perslid_fullnames pf,
(SELECT *
FROM prs_kenmerklink
WHERE prs_kenmerklink_verwijder IS NULL
AND prs_kenmerk_key = 1022) adres,
(SELECT *
FROM prs_kenmerklink
WHERE prs_kenmerklink_verwijder IS NULL
AND prs_kenmerk_key = 1023) adres2,
(SELECT *
FROM prs_kenmerklink
WHERE prs_kenmerklink_verwijder IS NULL
AND prs_kenmerk_key = 1024) zip,
(SELECT *
FROM prs_kenmerklink
WHERE prs_kenmerklink_verwijder IS NULL
AND prs_kenmerk_key = 1025) plaats,
(SELECT *
FROM prs_kenmerklink
WHERE prs_kenmerklink_verwijder IS NULL
AND prs_kenmerk_key = 1026) land,
(SELECT *
FROM prs_kenmerklink
WHERE prs_kenmerklink_verwijder IS NULL
AND prs_kenmerk_key = 1180) email,
(SELECT *
FROM prs_kenmerklink
WHERE prs_kenmerklink_verwijder IS NULL
AND prs_kenmerk_key = 1140) iban
WHERE m.mld_stdmelding_key = 941
AND m.mld_melding_status IN (0, 2, 3, 4, 7, 99)
AND NOT EXISTS
(SELECT mld_melding_key
FROM mld_melding
WHERE mld_melding_status = 1
AND mld_melding_start_key = m.mld_melding_key)
AND c.cnt_contract_status = 0
AND c.cnt_contract_key = kamer.cnt_contract_key
AND fac.safe_to_number (kamer.cnt_kenmerkcontract_waarde(+)) =
m.mld_alg_onroerendgoed_keys
AND chkdatum.mld_melding_key(+) = m.mld_melding_key
AND chktijd.mld_melding_key(+) = m.mld_melding_key
AND r.alg_ruimte_key(+) = m.mld_alg_onroerendgoed_keys
AND pc.alg_onrgoed_key(+) = r.alg_ruimte_key
AND student.cnt_contract_key(+) = kamer.cnt_contract_key
AND p.prs_perslid_key(+) =
fac.safe_to_number (student.cnt_kenmerkcontract_waarde)
AND pf.prs_perslid_key(+) = p.prs_perslid_key
AND adres.prs_link_key(+) = p.prs_perslid_key
AND adres2.prs_link_key(+) = p.prs_perslid_key
AND zip.prs_link_key(+) = p.prs_perslid_key
AND plaats.prs_link_key(+) = p.prs_perslid_key
AND land.prs_link_key(+) = p.prs_perslid_key
AND email.prs_link_key(+) = p.prs_perslid_key
AND iban.prs_link_key(+) = p.prs_perslid_key
ORDER BY m.mld_melding_key, c.cnt_contract_key, p.prs_perslid_naam;
-- Voorbeeldrapportje CODA-export huurregistratie
CREATE OR REPLACE VIEW nybu_v_rap_vb_coda_export
AS
SELECT volgnr hide_f_volgnr, regel
FROM (SELECT 0 volgnr,
'Nummer;Adm.;Grootboek;Debiteur / Kostenplaats;Project;Bedrag;D/C;BTW;Regelomschrijving;Regeltype;Ext ref 1;Ext ref 2;Fact nummer'
regel
FROM DUAL
UNION ALL
SELECT fac_rapport_volgnr volgnr, fac_rapport_regel regel
FROM fac_rapport
WHERE fac_rapport_node = 'HUUR_CODA')
ORDER BY volgnr;
-- Rapportage van logging huurexports
CREATE OR REPLACE VIEW nybu_v_rap_huur_exports
AS
SELECT imp_log_applicatie fclt_f_export,
TO_CHAR (imp_log_datum, 'YYYY-MM-DD HH24:MI') fclt_f_datum,
imp_log_status fclt_f_status,
imp_log_omschrijving omschrijving,
imp_log_hint hint
FROM imp_log
WHERE imp_log_applicatie IN ('T_HUUR_CODA', 'HUUR_CODA', 'HUUR_MUTATIES');
------- WERKPLEKDOORBELASTING --------------------------------------------------
-- View en rapportages werkplekdoorbelasting
-- Personen kunnen voor meerdere afdelingen (kostenplaatsen) werken.
-- Deze afdelingen en FTE per afdeling zijn in flexkenmerken bij personen geregistreerd
-- Kosten per werkplek per afdeling per persoon = FTE * m2 * tarief ruimtesoort
CREATE OR REPLACE VIEW nybu_v_werkplekken
AS
SELECT wpg.*,
COALESCE (fac.safe_to_number (fte.prs_kenmerklink_waarde), 1) fte
FROM (SELECT p.prs_perslid_key,
p.prs_perslid_nr,
pf.prs_perslid_naam_full,
kl.prs_kenmerk_key,
rb.bez_totaal,
wg.alg_ruimte_bruto_vloeropp
* pw.prs_perslidwerkplek_bezetting
/ rb.bez_totaal
wpopp,
wg.alg_ruimte_bruto_vloeropp,
wg.alg_gebouw_upper,
wg.alg_verdieping_code,
wg.alg_ruimte_key,
wg.alg_ruimte_nr,
wg.alg_ruimte_aanduiding,
sr.alg_srtruimte_prijs,
pw.prs_perslidwerkplek_bezetting,
kpn.prs_kostenplaats_nr,
pf2.prs_perslid_naam_full budgethouder,
kpg.prs_kostenplaatsgrp_oms,
sr.alg_srtruimte_prijs * wg.alg_ruimte_bruto_vloeropp
ruimte_prijs,
sr.alg_srtruimte_prijs
* wg.alg_ruimte_bruto_vloeropp
* pw.prs_perslidwerkplek_bezetting
/ rb.bez_totaal
wp_prijs
FROM prs_perslid p,
prs_v_perslid_fullnames pf,
prs_v_perslid_fullnames pf2,
prs_perslidwerkplek pw,
prs_v_werkplek_gegevens wg,
( SELECT alg_ruimte_key,
SUM (prs_perslidwerkplek_bezetting) bez_totaal
FROM prs_v_werkplek_gegevens wg,
prs_perslidwerkplek pw
WHERE pw.prs_werkplek_key = wg.prs_werkplek_key
GROUP BY alg_ruimte_key, alg_ruimte_bruto_vloeropp) rb,
alg_ruimte r,
alg_srtruimte sr,
(SELECT *
FROM prs_kenmerklink
WHERE prs_kenmerk_key IN (1061, 1063, 1065, 1067)
AND prs_kenmerklink_verwijder IS NULL) kl,
prs_kostenplaats kpn,
prs_kostenplaatsgrp kpg
WHERE p.prs_perslid_naam NOT LIKE 'INACTIEF%'
AND pf.prs_perslid_key = p.prs_perslid_key
AND kpn.prs_perslid_key = pf2.prs_perslid_key(+)
AND kpn.prs_kostenplaatsgrp_key =
kpg.prs_kostenplaatsgrp_key(+)
AND pw.prs_perslid_key(+) = p.prs_perslid_key
AND wg.prs_werkplek_key(+) = pw.prs_werkplek_key
AND rb.alg_ruimte_key(+) = wg.alg_ruimte_key
AND r.alg_ruimte_key(+) = wg.alg_ruimte_key
AND r.alg_srtruimte_key NOT IN (56, 43, 58, 39, 121)
AND sr.alg_srtruimte_key(+) = r.alg_srtruimte_key
AND kl.prs_link_key(+) = p.prs_perslid_key
AND kpn.prs_kostenplaats_key(+) =
fac.safe_to_number (kl.prs_kenmerklink_waarde))
wpg
LEFT OUTER JOIN
(SELECT * FROM prs_kenmerklink) fte
ON fte.prs_link_key = wpg.prs_perslid_key
AND fte.prs_kenmerk_key =
DECODE (wpg.prs_kenmerk_key,
1061, 1062,
1063, 1064,
1065, 1066,
1067, 1068);
CREATE OR REPLACE VIEW nybu_v_rap_werkplekken
AS
SELECT prs_perslid_nr || prs_kostenplaats_nr hide_f_sort,
prs_perslid_nr fclt_f_personeelsnummer,
prs_perslid_naam_full fclt_x_naam,
'<a class="details" onclick=''FcltMgr.openDetail("appl/prs/prs_perslid.asp?prs_key='
|| w1.prs_perslid_key
|| '")''>'
|| HTF.escape_sc (prs_perslid_naam_full)
|| '</a>'
html_naam,
prs_kostenplaats_nr fclt_f_kostenplaats,
budgethouder fclt_f_budgethouder,
prs_kostenplaatsgrp_oms fclt_f_kostenplaatsgroep,
alg_gebouw_upper fclt_f_gebouw,
alg_verdieping_code fclt_f_verdieping,
alg_ruimte_aanduiding fclt_x_ruimte,
'<a class="details" onclick=''FcltMgr.openDetail("appl/ALG/alg_ruimte.asp?key='
|| alg_ruimte_key
|| '")''>'
|| HTF.escape_sc (alg_ruimte_nr)
|| '</a>'
html_ruimte,
alg_ruimte_bruto_vloeropp ruimte_m2,
prs_perslidwerkplek_bezetting BEZETTINGSPERC,
ROUND (DECODE (totaal, NULL, wpopp * fte, wpopp * (fte / totaal)),
2)
m2_kostenplaats,
wp_prijs prijs_werkplek,
COALESCE (totaal, 1) fte_totaal,
fte fte_kostenplaats,
alg_srtruimte_prijs prijs_pm2_pmaand,
ROUND (
DECODE (totaal, NULL, wp_prijs * fte, wp_prijs * (fte / totaal)),
2)
prijs
FROM nybu_v_werkplekken w1,
( SELECT prs_link_key prs_perslid_key,
SUM(COALESCE (fac.safe_to_number (prs_kenmerklink_waarde),
0))
totaal
FROM prs_kenmerklink
WHERE prs_kenmerk_key IN (1062, 1064, 1066, 1068)
AND prs_kenmerklink_waarde IS NOT NULL
AND fac.safe_to_number (prs_kenmerklink_waarde) > 0
GROUP BY prs_link_key) w2
WHERE w1.prs_perslid_key = w2.prs_perslid_key(+);
CREATE OR REPLACE VIEW nybu_v_rap_werkplekken_totaal
AS
SELECT fclt_f_kostenplaats kostenplaats, ROUND (SUM (prijs), 2) bedrag
FROM nybu_v_rap_werkplekken
GROUP BY fclt_f_kostenplaats;
------- IMPORT DEELTIJDPERCENTAGES MEDEWERKERS ---------------------------------
CREATE OR REPLACE PROCEDURE nybu_import_kpnprs (p_import_key IN NUMBER)
IS
c_fielddelimitor VARCHAR2 (1) := ';';
c_headerline VARCHAR (1000)
:= 'Pers.nr.;Kostenpl;Naam samengesteld;Kostendr;Oms functie';
v_newline VARCHAR2 (1000); -- Input line
v_header VARCHAR2 (1000);
v_aanduiding VARCHAR2 (200);
v_errorhint VARCHAR2 (1000);
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
header_is_valid NUMBER := 0;
v_ongeldig NUMBER (1);
v_count_tot NUMBER (10);
v_count_import NUMBER (10);
v_count NUMBER;
-- De importvelden:
v_prs_perslid_nr VARCHAR2 (256);
v_prs_kostenplaats_nr VARCHAR2 (256);
v_prs_perslid_naamfull VARCHAR2 (256);
v_prs_project_nr VARCHAR2 (256);
v_prs_srtperslid_oms VARCHAR2 (256);
v_fte VARCHAR2 (256);
v_fte_num NUMBER (6, 4);
v_last_perslid_nr VARCHAR2 (256);
v_last_perslid_naamfull VARCHAR2 (256);
v_dummy VARCHAR2 (256);
v_regel NUMBER (2);
CURSOR c1
IS
SELECT *
FROM fac_imp_file
WHERE fac_import_key = p_import_key
ORDER BY fac_imp_file_index;
BEGIN
DELETE FROM nybu_imp_kpnprs;
COMMIT;
v_count_tot := 0;
v_count_import := 0;
v_regel := 1;
FOR rec1 IN c1
LOOP
BEGIN
v_newline := rec1.fac_imp_file_line;
v_header := v_newline;
v_aanduiding := '';
v_errorhint := 'Fout bij opvragen te importeren rij';
v_ongeldig := 0;
-- Lees alle veldwaarden
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_perslid_nr); -- Pers.nr.
fac.imp_getfield (v_newline,
c_fielddelimitor,
v_prs_kostenplaats_nr); -- Kostenpl
fac.imp_getfield (v_newline,
c_fielddelimitor,
v_prs_perslid_naamfull); -- Naam samengesteld
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_project_nr); -- Kostendr
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_srtperslid_oms); -- Oms functie
fac.imp_getfield (v_newline, c_fielddelimitor, v_dummy); -- %FTE
fac.imp_getfield (v_newline, c_fielddelimitor, v_fte); -- % LV * %FTE
v_aanduiding :=
'['
|| v_prs_perslid_nr
|| '|'
|| v_prs_perslid_naamfull
|| '|'
|| v_prs_kostenplaats_nr
|| '/'
|| v_prs_project_nr
|| '] ';
-- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen
-- de juiste kolomkop. Ik controleer daarbij ALLE kolommen!
-- Ik negeer alles totdat ik een geldige header ben gepasseerd.
IF (header_is_valid = 0)
THEN
IF UPPER (v_header) LIKE UPPER (c_headerline || '%')
THEN
header_is_valid := 1;
END IF;
ELSE
-- Lege regels aan het einde van het importbestand negeren
IF (v_prs_perslid_nr IS NULL AND v_prs_perslid_naamfull IS NULL)
THEN
CONTINUE;
END IF;
v_count_tot := v_count_tot + 1;
-- Controleer alle veldwaarden
v_errorhint := 'Ongeldig personeelsnummer';
v_prs_perslid_nr := TRIM (v_prs_perslid_nr);
IF LENGTH (v_prs_perslid_nr) > 16
THEN
v_prs_perslid_nr := SUBSTR (v_prs_perslid_nr, 1, 16);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Personeelsnummer te lang',
'Personeelsnummer wordt afgebroken tot ['
|| v_prs_perslid_nr
|| ']');
ELSE
-- Niet iedere regel bevat het personeelsnummer. Dan het laatste hergebruiken.
IF v_prs_perslid_nr IS NULL
THEN
IF (v_prs_perslid_naamfull = v_last_perslid_naamfull)
THEN
v_prs_perslid_nr := v_last_perslid_nr;
-- Extra regel bij zelfde persoon
v_regel := v_regel + 1;
ELSE
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Personeelsnummer ontbreekt',
'Eerste regel van persoon moet personeelsnummer bevatten');
END IF;
ELSE
-- Nieuwe persoon; dus eerste regel
v_regel := 1;
END IF;
END IF;
-- Bewaar personeelsnummer voor volgende regel (personen die voor meerdere
-- P-nummers werken, komen vaker voor in het bestand, maar alleen de eerste
-- regel bevat het personeelsnummer)
v_last_perslid_nr := v_prs_perslid_nr;
v_last_perslid_naamfull := v_prs_perslid_naamfull;
v_errorhint := 'Ongeldige kostenplaatscode';
v_prs_kostenplaats_nr := TRIM (v_prs_kostenplaats_nr);
IF (v_prs_kostenplaats_nr IS NULL)
THEN
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Kostenplaatscode ontbreekt',
'Verwerken zal fout opleveren');
ELSIF LENGTH (v_prs_kostenplaats_nr) > 30
THEN
v_prs_kostenplaats_nr := SUBSTR (v_prs_kostenplaats_nr, 1, 30);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Kostenplaatscode te lang',
'Kostenplaatscode wordt afgebroken tot ['
|| v_prs_kostenplaats_nr
|| ']');
END IF;
v_errorhint := 'Ongeldig projectnummer';
v_prs_project_nr := TRIM (v_prs_project_nr);
IF (v_prs_project_nr IS NULL)
THEN
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || 'Projectnummer ontbreekt',
'Verwerken zal fout opleveren');
ELSIF LENGTH (v_prs_project_nr) > 30
THEN
v_prs_project_nr := SUBSTR (v_prs_project_nr, 1, 30);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Projectnummer te lang',
'Projectnummer wordt afgebroken tot ['
|| v_prs_project_nr
|| ']');
END IF;
v_errorhint := 'Functieomschrijving te lang';
v_prs_srtperslid_oms := TRIM (v_prs_srtperslid_oms);
IF LENGTH (v_prs_srtperslid_oms) > 60
THEN
v_prs_srtperslid_oms := SUBSTR (v_prs_srtperslid_oms, 1, 60);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || v_errorhint,
'Functieomschrijving wordt afgebroken tot ['
|| v_prs_srtperslid_oms
|| ']');
END IF;
v_errorhint := 'Deeltijdpercentage ongeldig';
v_fte_num := fac.safe_to_number (TRIM (REPLACE (v_fte, ',', '.')));
IF (v_fte_num IS NULL)
THEN
v_ongeldig := 1;
fac.imp_writelog (
p_import_key,
'E',
v_aanduiding || v_errorhint,
'Regel wordt overgeslagen (waarde: '
|| v_fte_num
|| '/'
|| v_fte
|| ')');
-- Percentage 0 betekent nul-urencontract. Inlezen als 0,01, zodat wel wordt doorbelast.
-- ( dergelijke personen werken maar voor <20><>n afdeling en 0,01 / 0,01 = 1,
-- dus werkplek wordt dan volledig doorbelast)
ELSIF (v_fte_num = 0)
THEN
v_fte_num := 0.01;
fac.imp_writelog (p_import_key,
'I',
v_aanduiding || 'Deeltijdpercentage is nul',
'Wordt ingelezen als 0,01%');
END IF;
-- Insert geformatteerde import record
IF v_ongeldig = 0
THEN
BEGIN
v_errorhint :=
'Fout bij toevoegen regel aan importtabel NYBU_IMP_KPNPRS';
INSERT INTO nybu_imp_kpnprs (fac_import_key,
prs_perslid_nr,
prs_perslid_naamfull,
prs_kostenplaats_nr,
prs_project_nr,
prs_srtperslid_omschrijving,
fte,
regel)
VALUES (p_import_key,
v_prs_perslid_nr,
v_prs_perslid_naamfull,
v_prs_kostenplaats_nr,
v_prs_project_nr,
v_prs_srtperslid_oms,
v_fte_num,
v_regel);
COMMIT;
v_count_import := v_count_import + 1;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg :=
v_errorhint
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (
p_import_key,
'E',
v_aanduiding || v_errormsg,
'Ingelezen regel kan niet worden weggeschreven!');
COMMIT;
END;
END IF;
END IF; -- header_valid
END;
END LOOP;
IF (header_is_valid = 1)
THEN
fac.imp_writelog (p_import_key,
'S',
'Aantal ingelezen regels: ' || TO_CHAR (v_count_tot),
'');
fac.imp_writelog (
p_import_key,
'S',
'Aantal ongeldige importregels: '
|| TO_CHAR (v_count_tot - v_count_import),
'');
ELSE
fac.imp_writelog (
p_import_key,
'E',
'Ongeldige headerregel!',
SUBSTR ('Moet zijn: "' || c_headerline || '..."', 1, 1000));
END IF;
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.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
v_errorhint);
COMMIT;
END nybu_import_kpnprs;
/
-- prs_kenmerk Account 1 1061
-- prs_kenmerk FTE 1 1062
-- prs_kenmerk Account 2 1063
-- prs_kenmerk FTE 2 1064
-- prs_kenmerk Account 3 1065
-- prs_kenmerk FTE 3 1066
-- prs_kenmerk Account 4 1067
-- prs_kenmerk FTE 4 1068
CREATE OR REPLACE PROCEDURE nybu_update_kpnprs (p_import_key IN NUMBER)
IS
-- Maximaal percentage aan nieuwe medewerkers tov. actieve medewerkers met een nummer
c_max_delta_percentage NUMBER (10) := 20;
v_aanduiding VARCHAR2 (200);
v_errorhint VARCHAR2 (1000);
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_count_tot NUMBER (10);
v_count_error NUMBER (10);
v_count NUMBER (10);
--
v_perslid_key NUMBER (10);
v_project_key NUMBER (10);
v_flex_account_key NUMBER (10);
v_flex_fte_key NUMBER (10);
v_account_old prs_kostenplaats.prs_kostenplaats_nr%TYPE;
v_fte_old nybu_imp_kpnprs.fte%TYPE;
-- Eerst checken: staat er projectnummer-kostenplaats-combinaties in de import
-- die niet in FACILITOR bestaan?
CURSOR c_check_kpn
IS
SELECT prs_perslid_nr,
prs_perslid_naamfull,
prs_project_nr,
prs_kostenplaats_nr
FROM nybu_imp_kpnprs i
WHERE NOT EXISTS
(SELECT ak.prs_kostenplaats_nr, kg.prs_kostenplaatsgrp_nr
FROM prs_v_aanwezigkostenplaats ak, prs_kostenplaatsgrp kg
WHERE kg.prs_kostenplaatsgrp_key =
ak.prs_kostenplaatsgrp_key
AND ak.prs_kostenplaats_nr = i.prs_project_nr
AND kg.prs_kostenplaatsgrp_nr = i.prs_kostenplaats_nr);
-- Ook checken: staan er personeelsnummers in de import die niet in FACILITOR bestaan,
-- of die vaker voorkomen in FACILITOR?
CURSOR c_check_prsnr
IS
SELECT DISTINCT i.prs_perslid_nr, i.prs_perslid_naamfull
FROM nybu_imp_kpnprs i
WHERE prs_perslid_nr NOT IN ( SELECT prs_perslid_nr
FROM prs_v_aanwezigperslid
GROUP BY prs_perslid_nr
HAVING COUNT ( * ) = 1);
-- Verwijderen: deeltijdpercentages van personen met personeelsnummer in
-- FACILITOR die niet (meer) voorkomen in de import.
CURSOR c_del
IS
SELECT p.prs_perslid_nr,
pf.prs_perslid_naam_full,
k.prs_kostenplaats_nr prs_project_nr,
fac.safe_to_number (f.prs_kenmerklink_waarde) fte,
p.prs_perslid_key,
a.prs_kenmerk_key accnt_key,
f.prs_kenmerk_key fte_key
FROM prs_kenmerklink a,
prs_kenmerklink f,
prs_kostenplaats k,
prs_perslid p,
prs_v_perslid_fullnames pf
WHERE a.prs_kenmerk_key IN (1061, 1063, 1065, 1067)
AND f.prs_kenmerk_key =
DECODE (a.prs_kenmerk_key,
1061, 1062,
1063, 1064,
1065, 1066,
1067, 1068)
AND a.prs_kenmerklink_verwijder IS NULL
AND f.prs_kenmerklink_verwijder IS NULL
AND f.prs_link_key = a.prs_link_key
AND p.prs_perslid_key = a.prs_link_key
AND p.prs_perslid_nr IS NOT NULL
AND pf.prs_perslid_key = a.prs_link_key
AND k.prs_kostenplaats_key =
fac.safe_to_number (a.prs_kenmerklink_waarde)
AND NOT EXISTS (SELECT *
FROM nybu_imp_kpnprs
WHERE prs_perslid_nr = p.prs_perslid_nr)
ORDER BY p.prs_perslid_nr, k.prs_kostenplaats_nr;
-- Deeltijdpercentages (max 4) per medewerker
-- Gegeven alle unieke personen in het bestand, haal alle deelpercentages met
-- projectnummer en kostenplaatsnummer op.
CURSOR c_accounts
IS
SELECT prs_perslid_nr,
prs_perslid_naamfull,
prs_project_nr,
prs_kostenplaats_nr,
fte,
regel
FROM (WITH pers
AS (SELECT DISTINCT
prs_perslid_nr, prs_perslid_naamfull
FROM nybu_imp_kpnprs)
SELECT i.prs_perslid_nr,
i.prs_perslid_naamfull,
i.prs_project_nr,
i.prs_kostenplaats_nr,
i.fte,
1 regel
FROM pers p, (SELECT *
FROM nybu_imp_kpnprs
WHERE regel = 1) i
WHERE i.prs_perslid_nr(+) = p.prs_perslid_nr
AND i.prs_perslid_naamfull(+) = p.prs_perslid_naamfull
UNION ALL
SELECT p.prs_perslid_nr,
p.prs_perslid_naamfull,
i.prs_project_nr,
i.prs_kostenplaats_nr,
i.fte,
2 regel
FROM pers p, (SELECT *
FROM nybu_imp_kpnprs
WHERE regel = 2) i
WHERE i.prs_perslid_nr(+) = p.prs_perslid_nr
AND i.prs_perslid_naamfull(+) = p.prs_perslid_naamfull
UNION ALL
SELECT p.prs_perslid_nr,
p.prs_perslid_naamfull,
i.prs_project_nr,
i.prs_kostenplaats_nr,
i.fte,
3 regel
FROM pers p, (SELECT *
FROM nybu_imp_kpnprs
WHERE regel = 3) i
WHERE i.prs_perslid_nr(+) = p.prs_perslid_nr
AND i.prs_perslid_naamfull(+) = p.prs_perslid_naamfull
UNION ALL
SELECT p.prs_perslid_nr,
p.prs_perslid_naamfull,
i.prs_project_nr,
i.prs_kostenplaats_nr,
i.fte,
4 regel
FROM pers p, (SELECT *
FROM nybu_imp_kpnprs
WHERE regel = 4) i
WHERE i.prs_perslid_nr(+) = p.prs_perslid_nr
AND i.prs_perslid_naamfull(+) = p.prs_perslid_naamfull)
ORDER BY prs_perslid_nr, prs_perslid_naamfull, regel;
BEGIN
v_count_tot := 0;
v_count_error := 0;
-- Check of alle projectnummers/kostenplaatsen bestaan in FACILITOR
FOR rec IN c_check_kpn
LOOP
v_aanduiding :=
'[' || rec.prs_perslid_nr || '|' || rec.prs_perslid_naamfull || ']';
fac.imp_writelog (
p_import_key,
'E',
'Projectnr '
|| rec.prs_project_nr
|| ' bestaat niet! (binnen kostenplaats '
|| rec.prs_kostenplaats_nr
|| ')',
v_aanduiding);
v_count_error := v_count_error + 1;
END LOOP;
IF (v_count_error > 0)
THEN
fac.imp_writelog (
p_import_key,
'S',
v_count_error
|| ' onbekende project-/kostenplaatsnummer(s) gevonden.',
'Import wordt afgebroken.');
END IF;
-- Check of alle personeelsnummers bestaan in FACILITOR
FOR rec IN c_check_prsnr
LOOP
v_aanduiding :=
'[' || rec.prs_perslid_nr || '|' || rec.prs_perslid_naamfull || ']';
fac.imp_writelog (p_import_key,
'E',
'Personeelsnr niet gevonden!',
v_aanduiding);
v_count_error := v_count_error + 1;
END LOOP;
IF (v_count_error > 0)
THEN
fac.imp_writelog (
p_import_key,
'S',
v_count_error || ' onbekende personeelsnummer(s) gevonden.',
'Import wordt afgebroken.');
END IF;
-- Alleen verder gaan als alle stamgegevens (kpn's, persnr's) matchen
IF (v_count_error = 0)
THEN
-- Verwijder alle niet meer aanwezige deeltijdpercentages
-- D.i. alle combinaties van een persoon en een projectnummer in FACILITOR
-- die niet in het importbestand voorkomen.
FOR rec IN c_del
LOOP
BEGIN
v_aanduiding :=
'['
|| rec.prs_perslid_nr
|| '|'
|| rec.prs_perslid_naam_full
|| '] - ';
v_errorhint :=
'Fout bij verwijderen kenmerk Account'
|| (rec.accnt_key - 1059) / 2;
prs.upsertkenmerk (rec.accnt_key, rec.prs_perslid_key, NULL);
v_errorhint :=
'Fout bij verwijderen kenmerk FTE' || (rec.fte_key - 1060) / 2;
prs.upsertkenmerk (rec.fte_key, rec.prs_perslid_key, NULL);
DBMS_OUTPUT.PUT_LINE( v_aanduiding
|| ': '
|| 'Deeltijdpercentage '
|| rec.prs_project_nr
|| ' ('
|| TO_CHAR (rec.fte)
|| ') verwijderd');
fac.imp_writelog (
p_import_key,
'I',
'Deeltijdpercentage '
|| rec.prs_project_nr
|| ' ('
|| TO_CHAR (rec.fte)
|| ') verwijderd',
v_aanduiding || 'niet gevonden in importbestand');
EXCEPTION
WHEN NO_DATA_FOUND
THEN
v_count_error := v_count_error + 1;
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || 'Persoon niet gevonden',
v_errorhint);
WHEN TOO_MANY_ROWS
THEN
v_count_error := v_count_error + 1;
fac.imp_writelog (
p_import_key,
'E',
v_aanduiding
|| 'Meerdere personen met hetzelfde personeelsnummer',
v_errorhint);
WHEN OTHERS
THEN
v_count_error := v_count_error + 1;
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
'OTHERS (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
v_errorhint);
--COMMIT;
END;
END LOOP;
FOR rec IN c_accounts
LOOP
BEGIN
v_count_tot := v_count_tot + 1;
v_aanduiding :=
'['
|| rec.prs_perslid_nr
|| '|'
|| rec.prs_perslid_naamfull
|| '] - ['
|| rec.prs_project_nr
|| '/'
|| rec.prs_kostenplaats_nr
|| ']';
-- Vind persoon met personeelsnummer. Niet of meermalen gevonden? Next!
v_errorhint := 'Fout bij bepalen persoon; wordt overgeslagen.';
SELECT ap.prs_perslid_key
INTO v_perslid_key
FROM prs_v_aanwezigperslid ap
WHERE UPPER (ap.prs_perslid_nr) = UPPER (rec.prs_perslid_nr);
-- Als een eenduidig persoon is gevonden, dan kunnen we verder.
-- Bepalen over welke flexkenmerken we het hebben
SELECT DECODE (rec.regel, 1, 1061, 2, 1063, 3, 1065, 4, 1067)
accnt,
DECODE (rec.regel, 1, 1062, 2, 1064, 3, 1066, 4, 1068) fte
INTO v_flex_account_key, v_flex_fte_key
FROM DUAL;
-- Als geen projnr/kpn/fte, dan was dit geen regel in het importbestand en
-- moeten alleen eventueel aanwezige kenmerken geleegd worden
IF ( rec.prs_project_nr IS NULL
AND rec.prs_kostenplaats_nr IS NULL
AND rec.fte IS NULL)
THEN
v_project_key := NULL;
ELSE
v_errorhint :=
'Fout bij bepalen project '
|| rec.prs_project_nr
|| ' binnen kostenplaats '
|| rec.prs_kostenplaats_nr;
SELECT proj.prs_kostenplaats_key
INTO v_project_key
FROM prs_kostenplaats proj, prs_kostenplaatsgrp kpn
WHERE proj.prs_kostenplaats_verwijder IS NULL
AND proj.prs_kostenplaats_upper =
UPPER (rec.prs_project_nr)
AND kpn.prs_kostenplaatsgrp_key =
proj.prs_kostenplaatsgrp_key
AND UPPER (kpn.prs_kostenplaatsgrp_nr) =
UPPER (rec.prs_kostenplaats_nr);
END IF;
-- Is er een gevuld kenmerk?
v_errorhint :=
'Fout bij bepalen deeltijdpercentage Account ' || rec.regel;
SELECT COUNT ( * )
INTO v_count
FROM prs_kenmerklink
WHERE prs_kenmerk_key IN (v_flex_account_key, v_flex_fte_key)
AND prs_kenmerklink_verwijder IS NULL
AND prs_link_key = v_perslid_key;
IF (v_count >= 2)
THEN
v_errorhint :=
'Fout bij ophalen deeltijdpercentage Account ' || rec.regel;
SELECT k.prs_kostenplaats_nr,
fac.safe_to_number (fte.prs_kenmerklink_waarde)
INTO v_account_old, v_fte_old
FROM prs_kostenplaats k,
prs_kenmerklink accnt,
prs_kenmerklink fte
WHERE accnt.prs_kenmerk_key = v_flex_account_key
AND accnt.prs_kenmerklink_verwijder IS NULL
AND accnt.prs_link_key = v_perslid_key
AND fte.prs_kenmerk_key = v_flex_fte_key
AND fte.prs_kenmerklink_verwijder IS NULL
AND fte.prs_link_key = v_perslid_key
AND k.prs_kostenplaats_key =
fac.safe_to_number (accnt.prs_kenmerklink_waarde);
ELSE
v_account_old := NULL;
v_fte_old := NULL;
END IF;
-- Als de importwaarden afwijken van de huidige, dan bijwerken
IF (COALESCE (v_account_old, 'apekool') !=
COALESCE (rec.prs_project_nr, 'apekool')
OR COALESCE (v_fte_old, -1) != COALESCE (rec.fte, -1))
THEN
v_errorhint :=
'Fout bij aanmaken/bijwerken/verwijderen kenmerk Account '
|| rec.regel;
prs.upsertkenmerk (v_flex_account_key,
v_perslid_key,
TO_CHAR (v_project_key));
v_errorhint :=
'Fout bij aanmaken/bijwerken/verwijderen kenmerk FTE '
|| rec.regel;
prs.upsertkenmerk (v_flex_fte_key,
v_perslid_key,
TO_CHAR (rec.fte));
IF (v_project_key IS NOT NULL)
THEN
DBMS_OUTPUT.PUT_LINE( v_aanduiding
|| ': '
|| 'Deeltijdpercentage '
|| rec.prs_project_nr
|| ' = '
|| TO_CHAR (rec.fte)
|| ' (was '
|| v_account_old
|| ' = '
|| v_fte_old
|| ')');
fac.imp_writelog (
p_import_key,
'I',
'Deeltijdpercentage '
|| rec.prs_project_nr
|| ' = '
|| TO_CHAR (rec.fte)
|| ' (was '
|| v_account_old
|| ' = '
|| v_fte_old
|| ')',
v_aanduiding);
ELSE
DBMS_OUTPUT.PUT_LINE( v_aanduiding
|| ': '
|| 'Deeltijdpercentage '
|| v_account_old
|| ' verwijderd'
|| ' (was '
|| v_fte_old
|| ')');
fac.imp_writelog (
p_import_key,
'I',
'Deeltijdpercentage '
|| v_account_old
|| ' verwijderd'
|| ' (was '
|| v_fte_old
|| ')',
v_aanduiding);
END IF;
END IF;
v_count := v_count + 1;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
v_count_error := v_count_error + 1;
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || 'Geen data gevonden',
v_errorhint);
WHEN TOO_MANY_ROWS
THEN
v_count_error := v_count_error + 1;
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || 'Meerdere records gevonden',
v_errorhint);
WHEN OTHERS
THEN
v_count_error := v_count_error + 1;
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
'OTHERS (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
v_errorhint);
COMMIT;
END;
END LOOP;
fac.imp_writelog (
p_import_key,
'S',
'Verwerkte regels zonder foutmelding: '
|| TO_CHAR (v_count_tot - v_count_error),
'');
fac.imp_writelog (
p_import_key,
'S',
'Verwerkte regels met foutmelding: ' || TO_CHAR (v_count_error),
'');
END IF;
--COMMIT;
END nybu_update_kpnprs;
/
------- KOPPELING SENTIDO (Reserveringen) --------------------------------------
CREATE OR REPLACE VIEW nybu_v_res_sentido
AS
SELECT TO_CHAR (van, 'YYYY-MM-DD HH24:MI')
|| ' '
|| TO_CHAR (tot, 'HH24:MI')
srt,
res_nr,
res_ruimte_nr,
oms,
TO_CHAR (van, 'DD/MM/YYYY HH24:MI') van,
TO_CHAR (tot, 'DD/MM/YYYY HH24:MI') tot
FROM (WITH r
AS -- 1<> Show on info screen
(SELECT rr.res_rsv_ruimte_key,
rr.res_reservering_key res_nr,
r.res_ruimte_nr,
COALESCE (
alt_desc.res_kenmerkreservering_waarde,
rr.res_rsv_ruimte_omschrijving)
oms,
rr.res_rsv_ruimte_van van,
alt_start.res_kenmerkreservering_waarde alt_van,
rr.res_rsv_ruimte_tot tot,
alt_end.res_kenmerkreservering_waarde alt_tot
FROM res_rsv_ruimte rr,
res_ruimte_opstelling ro,
res_ruimte r,
res_kenmerkwaarde kw,
res_kenmerk k,
-- 2<> Alt. start time
(SELECT kw.*
FROM res_kenmerkwaarde kw, res_kenmerk k
WHERE kw.res_kenmerk_key = k.res_kenmerk_key
AND k.res_srtkenmerk_key = 2
AND kw.res_kenmerkreservering_waarde IS NOT NULL)
alt_start,
-- 3<> Alt. end time
(SELECT kw.*
FROM res_kenmerkwaarde kw, res_kenmerk k
WHERE kw.res_kenmerk_key = k.res_kenmerk_key
AND k.res_srtkenmerk_key = 3
AND kw.res_kenmerkreservering_waarde IS NOT NULL)
alt_end,
-- 4<> Alt. description
(SELECT kw.*
FROM res_kenmerkwaarde kw, res_kenmerk k
WHERE kw.res_kenmerk_key = k.res_kenmerk_key
AND k.res_srtkenmerk_key = 4
AND kw.res_kenmerkreservering_waarde IS NOT NULL)
alt_desc
WHERE kw.res_rsv_ruimte_key = rr.res_rsv_ruimte_key
AND kw.res_kenmerkreservering_waarde IS NOT NULL
AND kw.res_kenmerkreservering_waarde = '1'
AND k.res_kenmerk_key = kw.res_kenmerk_key
AND k.res_srtkenmerk_key = 1
AND ro.res_ruimte_opstel_key =
rr.res_ruimte_opstel_key
AND r.res_ruimte_key = ro.res_ruimte_key
AND rr.res_rsv_ruimte_verwijder IS NULL
AND rr.res_status_fo_key NOT IN (3, 4)
AND TRUNC (rr.res_rsv_ruimte_van) BETWEEN TRUNC(SYSDATE)
AND TRUNC(SYSDATE
+ 3)
AND alt_desc.res_rsv_ruimte_key(+) =
rr.res_rsv_ruimte_key
AND alt_start.res_rsv_ruimte_key(+) =
rr.res_rsv_ruimte_key
AND alt_end.res_rsv_ruimte_key(+) =
rr.res_rsv_ruimte_key)
SELECT r.res_nr,
r.res_ruimte_nr,
r.oms,
DECODE (
r.alt_van,
NULL,
r.van,
TO_DATE (TO_CHAR (r.van, 'DD/MM/YYYY ') || r.alt_van,
'DD/MM/YYYY HH24:MI'))
van,
DECODE (
r.alt_tot,
NULL,
r.tot,
TO_DATE (TO_CHAR (r.tot, 'DD/MM/YYYY ') || r.alt_tot,
'DD/MM/YYYY HH24:MI'))
tot
FROM r
UNION ALL
SELECT r.res_nr,
r.res_ruimte_nr,
ext1_desc.res_kenmerkreservering_waarde oms,
TO_DATE (
TO_CHAR (r.van, 'DD/MM/YYYY ')
|| ext1_start.res_kenmerkreservering_waarde,
'DD/MM/YYYY HH24:MI')
van,
TO_DATE (
TO_CHAR (r.tot, 'DD/MM/YYYY ')
|| ext1_end.res_kenmerkreservering_waarde,
'DD/MM/YYYY HH24:MI')
tot
FROM r,
-- 7<> Extra description 1
(SELECT kw.*
FROM res_kenmerkwaarde kw, res_kenmerk k
WHERE kw.res_kenmerk_key = k.res_kenmerk_key
AND k.res_srtkenmerk_key = 7
AND kw.res_kenmerkreservering_waarde IS NOT NULL)
ext1_desc,
-- 8<> Extra start time 1
(SELECT kw.*
FROM res_kenmerkwaarde kw, res_kenmerk k
WHERE kw.res_kenmerk_key = k.res_kenmerk_key
AND k.res_srtkenmerk_key = 8
AND kw.res_kenmerkreservering_waarde IS NOT NULL)
ext1_start,
-- 9<> Extra end time 1
(SELECT kw.*
FROM res_kenmerkwaarde kw, res_kenmerk k
WHERE kw.res_kenmerk_key = k.res_kenmerk_key
AND k.res_srtkenmerk_key = 9
AND kw.res_kenmerkreservering_waarde IS NOT NULL)
ext1_end
WHERE ext1_desc.res_rsv_ruimte_key = r.res_rsv_ruimte_key
AND ext1_start.res_rsv_ruimte_key = r.res_rsv_ruimte_key
AND ext1_end.res_rsv_ruimte_key = r.res_rsv_ruimte_key
UNION ALL
SELECT r.res_nr,
r.res_ruimte_nr,
ext2_desc.res_kenmerkreservering_waarde oms,
TO_DATE (
TO_CHAR (r.van, 'DD/MM/YYYY ')
|| ext2_start.res_kenmerkreservering_waarde,
'DD/MM/YYYY HH24:MI')
van,
TO_DATE (
TO_CHAR (r.tot, 'DD/MM/YYYY ')
|| ext2_end.res_kenmerkreservering_waarde,
'DD/MM/YYYY HH24:MI')
tot
FROM r,
--10<EFBFBD> Extra description 2
(SELECT kw.*
FROM res_kenmerkwaarde kw, res_kenmerk k
WHERE kw.res_kenmerk_key = k.res_kenmerk_key
AND k.res_srtkenmerk_key = 10
AND kw.res_kenmerkreservering_waarde IS NOT NULL)
ext2_desc,
--11<EFBFBD> Extra start time 2
(SELECT kw.*
FROM res_kenmerkwaarde kw, res_kenmerk k
WHERE kw.res_kenmerk_key = k.res_kenmerk_key
AND k.res_srtkenmerk_key = 11
AND kw.res_kenmerkreservering_waarde IS NOT NULL)
ext2_start,
--12<EFBFBD> Extra end time 2
(SELECT kw.*
FROM res_kenmerkwaarde kw, res_kenmerk k
WHERE kw.res_kenmerk_key = k.res_kenmerk_key
AND k.res_srtkenmerk_key = 12
AND kw.res_kenmerkreservering_waarde IS NOT NULL)
ext2_end
WHERE ext2_desc.res_rsv_ruimte_key = r.res_rsv_ruimte_key
AND ext2_start.res_rsv_ruimte_key = r.res_rsv_ruimte_key
AND ext2_end.res_rsv_ruimte_key = r.res_rsv_ruimte_key);
------- KOPPELING CODA (Reserveringen) -----------------------------------------
-- Externe reserveringen die moeten worden doorbelast
-- discipline 581 Verbruiksartikel Inhuur Voorzieningen
-- discipline 462 Verbruiksartikel Hotelkamers
-- res_srtkenmerk 202 Exportdatum
-- res_srtkenmerk 81 Company
-- fac_usrtab 42 CODA BTW-tarieven
-- NYBU#30023: deze view haalt nu ook reserveringen op met totaalprijs 0, omdat die
-- wel gecrediteerd kunnen worden (de export bepaalt per creditering of die in- of extern
-- is door 'm tegen de rsv_ruimte_keys in deze view te houden)
-- Facturatie is inclusief BTW.
-- Korting gaat alleen van rsv_ruimte af, omdat catering door Vermaat wordt gefactureerd.
-- Ruimteprijs is excl BTW, dus korting ook.
CREATE OR REPLACE VIEW nybu_v_res_factuur_extern
AS
SELECT COALESCE (b.prs_bedrijf_naam, k.prs_kostenplaats_omschrijving)
klant,
xyz.res_rsv_ruimte_van,
TO_CHAR (xyz.res_rsv_ruimte_van, 'YYYYMM') periode,
xyz.prs_kostensoort_oms grootboek,
kg.prs_kostenplaatsgrp_key kostenplaats_key,
TRIM (SUBSTR (kg.prs_kostenplaatsgrp_oms, 1, 7)) kostenplaats,
b.prs_leverancier_nr deb_nr,
k.prs_kostenplaats_key proj_key,
k.prs_kostenplaats_nr proj,
xyz.btw,
xyz.prs_kostensoort_btw,
btwc.fac_usrdata_omschr btw_code,
xyz.res_reservering_key res_key,
xyz.res_rsv_ruimte_volgnr res_volgnr,
kref.res_kenmerkreservering_waarde referentie,
xyz.reservering,
xyz.res_rsv_ruimte_key,
DECODE (kref.res_kenmerkreservering_waarde,
NULL, '',
kref.res_kenmerkreservering_waarde || ' ')
|| xyz.res_rsv_ruimte_omschrijving
descr,
xyz.aantal,
xyz.omschrijving,
xyz.soort,
-- deelresprijs excl = zaal_excl + deel_excl + artikel_excl
-- = (zaal - korting)(excl) + deel(excl) + artikel(excl)
DECODE (xyz.prs_kostensoort_btw,
1, xyz.prijs / (1 + xyz.btw / 100),
xyz.prijs)
prijs_ex,
-- deelresprijs incl = zaal_incl + deel_incl + artikel_incl
-- = (zaal - korting)(incl) + deel(incl) + artikel(incl)
DECODE (xyz.prs_kostensoort_btw,
1, xyz.prijs,
xyz.prijs * (1 + xyz.btw / 100))
prijs_inc,
-- btw laag = ruimte_btw_laag + deel_btw_laag + artikel_btw_laag
-- = if(6%) artikel_btw (ruimte en deel zijn altijd 21%, maar dat gaat vanzelf goed)
DECODE (
xyz.btw,
6,
DECODE (xyz.prs_kostensoort_btw,
1, xyz.prijs / (100 + xyz.btw) * xyz.btw,
xyz.prijs / 100 * xyz.btw),
0)
btw_laag,
-- btw hoog = ruimte_btw + deel_btw_hoog + artikel_btw_hoog
-- = (zaal - korting)(excl) * 21% + if(21%) deel_btw + if(21%) artikel_btw
DECODE (
xyz.btw,
21,
DECODE (xyz.prs_kostensoort_btw,
1, xyz.prijs / (100 + xyz.btw) * xyz.btw,
xyz.prijs / 100 * xyz.btw),
0)
btw_hoog,
xyz.korting,
1 inex
FROM (SELECT 'ruimte' soort,
rr.*,
ks.prs_kostensoort_oms,
ks.prs_kostensoort_btw,
21 btw,
rr.res_reservering_key || '/' || rr.res_rsv_ruimte_volgnr
reservering,
1 aantal,
r.res_ruimte_nr omschrijving,
res.getruimteprijs (rr.res_rsv_ruimte_key)
- COALESCE (res_rsv_ruimte_korting, 0)
prijs,
COALESCE (res_rsv_ruimte_korting, 0) korting
FROM res_rsv_ruimte rr,
res_ruimte_opstelling ro,
res_ruimte r,
res_discipline di,
prs_kostensoort ks
WHERE ro.res_ruimte_opstel_key = rr.res_ruimte_opstel_key
AND r.res_ruimte_key = ro.res_ruimte_key
AND di.ins_discipline_key = r.res_discipline_key
AND ks.prs_kostensoort_key(+) = di.prs_kostensoort_key
UNION ALL
SELECT 'artikel' soort,
rr.*,
ks.prs_kostensoort_oms,
ks.prs_kostensoort_btw,
COALESCE (a.res_artikel_btw, 0) btw,
rr.res_reservering_key || '/' || rr.res_rsv_ruimte_volgnr
reservering,
ra.res_rsv_artikel_aantal aantal,
a.res_artikel_omschrijving omschrijving,
res.getartikelprijs (ra.res_rsv_artikel_key) prijs,
0 korting
FROM res_rsv_ruimte rr,
res_rsv_artikel ra,
res_artikel a,
res_discipline di,
prs_kostensoort ks
WHERE ra.res_rsv_ruimte_key = rr.res_rsv_ruimte_key
AND res.getartikelprijs (ra.res_rsv_artikel_key) != 0
AND a.res_artikel_key = ra.res_artikel_key
AND di.ins_discipline_key = a.res_discipline_key
AND di.ins_discipline_key IN (581, 462)
AND ks.prs_kostensoort_key(+) = di.prs_kostensoort_key
UNION ALL
SELECT 'deel' soort,
rr.*,
ks.prs_kostensoort_oms,
ks.prs_kostensoort_btw,
21 btw,
rr.res_reservering_key || '/' || rr.res_rsv_ruimte_volgnr
reservering,
rd.res_rsv_deel_aantal aantal,
d.res_deel_omschrijving,
res.getdeelprijs (rd.res_rsv_deel_key) prijs,
0 korting
FROM res_rsv_ruimte rr,
res_rsv_deel rd,
res_deel d,
res_discipline di,
prs_kostensoort ks
WHERE rd.res_rsv_ruimte_key = rr.res_rsv_ruimte_key
AND d.res_deel_key = rd.res_deel_key
AND res.getdeelprijs (rd.res_rsv_deel_key) != 0
AND di.ins_discipline_key = d.res_discipline_key
AND ks.prs_kostensoort_key(+) = di.prs_kostensoort_key) xyz,
prs_kostenplaats k,
prs_kostenplaatsgrp kg,
(SELECT kw.*
FROM res_kenmerkwaarde kw, res_kenmerk k
WHERE k.res_srtkenmerk_key = 121
AND kw.res_kenmerk_key = k.res_kenmerk_key
AND kw.res_kenmerkwaarde_verwijder IS NULL
AND k.res_kenmerk_verwijder IS NULL) kref,
(SELECT kw.*
FROM res_kenmerkwaarde kw, res_kenmerk k
WHERE k.res_srtkenmerk_key = 81
AND kw.res_kenmerk_key = k.res_kenmerk_key
AND kw.res_kenmerkwaarde_verwijder IS NULL
AND k.res_kenmerk_verwijder IS NULL) comp,
prs_bedrijf b,
(SELECT *
FROM fac_usrdata
WHERE fac_usrtab_key = 42) btwc
WHERE k.prs_kostenplaats_extern = 1
AND kg.prs_kostenplaatsgrp_key = k.prs_kostenplaatsgrp_key
AND xyz.prs_kostenplaats_key = k.prs_kostenplaats_key
AND xyz.res_rsv_ruimte_dirtlevel = 0
AND kref.res_rsv_ruimte_key(+) = xyz.res_rsv_ruimte_key
AND comp.res_rsv_ruimte_key(+) = xyz.res_rsv_ruimte_key
AND b.prs_bedrijf_key(+) =
fac.safe_to_number (comp.res_kenmerkreservering_waarde)
AND fac.safe_to_number (btwc.fac_usrdata_code) = xyz.btw
AND ( (xyz.res_rsv_ruimte_verwijder IS NULL
AND xyz.res_status_bo_key = 5)
OR ( xyz.res_rsv_ruimte_verwijder IS NOT NULL
AND xyz.res_status_fo_key = 4
AND xyz.res_status_bo_key != 6))
-- Geen exportdatum
AND NOT EXISTS
(SELECT 1
FROM res_kenmerkwaarde kw, res_kenmerk k
WHERE k.res_srtkenmerk_key = 202
AND kw.res_kenmerk_key = k.res_kenmerk_key
AND kw.res_kenmerkwaarde_verwijder IS NULL
AND k.res_kenmerk_verwijder IS NULL
AND kw.res_rsv_ruimte_key = xyz.res_rsv_ruimte_key);
-- Interne reserveringen die doorbelast moeten worden. View levert ook reserveringen met
-- totaalprijs 0, zodat we daar de crediteringen tegenaan kunnen houden
-- res_srtkenmerk 202 Exportdatum
-- Interne doorbelasting is exclusief BTW
-- deelresprijs excl = zaal(excl) - korting(excl)
CREATE OR REPLACE VIEW nybu_v_res_factuur_intern
AS
SELECT k.prs_kostenplaats_omschrijving klant,
rr.res_rsv_ruimte_van,
TO_CHAR (rr.res_rsv_ruimte_van, 'YYYYMM') periode,
ks.prs_kostensoort_oms grootboek,
kg.prs_kostenplaatsgrp_key kostenplaats_key,
TRIM (SUBSTR (kg.prs_kostenplaatsgrp_oms, 1, 7)) kostenplaats,
k.prs_kostenplaats_nr deb_nr,
k.prs_kostenplaats_key proj_key,
k.prs_kostenplaats_nr proj,
0 btw,
ks.prs_kostensoort_btw,
btwc.fac_usrdata_omschr btw_code,
rr.res_reservering_key res_key,
rr.res_rsv_ruimte_volgnr res_volgnr,
NULL referentie,
rr.res_reservering_key || '/' || rr.res_rsv_ruimte_volgnr
reservering,
rr.res_rsv_ruimte_key,
rr.res_rsv_ruimte_omschrijving descr,
1 aantal,
r.res_ruimte_nr omschrijving,
'ruimte' soort,
COALESCE (res.getruimteprijs (rr.res_rsv_ruimte_key), 0)
- COALESCE (rr.res_rsv_ruimte_korting, 0)
prijs_ex,
COALESCE (res.getruimteprijs (rr.res_rsv_ruimte_key), 0)
- COALESCE (rr.res_rsv_ruimte_korting, 0)
prijs_inc,
0 btw_laag,
0 btw_hoog,
COALESCE (rr.res_rsv_ruimte_korting, 0) korting,
0 inex
FROM res_rsv_ruimte rr,
prs_kostenplaats k,
prs_kostenplaatsgrp kg,
res_ruimte_opstelling ro,
res_ruimte r,
res_discipline di,
prs_kostensoort ks,
(SELECT MAX (fac_usrdata_omschr) fac_usrdata_omschr
FROM fac_usrdata
WHERE fac_usrtab_key = 42 AND fac_usrdata_code = '0') btwc
WHERE COALESCE (k.prs_kostenplaats_extern, 0) = 0
AND kg.prs_kostenplaatsgrp_key = k.prs_kostenplaatsgrp_key
AND rr.prs_kostenplaats_key = k.prs_kostenplaats_key
AND rr.res_rsv_ruimte_dirtlevel = 0
AND ( (rr.res_rsv_ruimte_verwijder IS NULL
AND rr.res_status_bo_key = 5)
OR ( res_rsv_ruimte_verwijder IS NOT NULL
AND rr.res_status_fo_key = 4
AND rr.res_status_bo_key != 6))
AND ro.res_ruimte_opstel_key = rr.res_ruimte_opstel_key
AND r.res_ruimte_key = ro.res_ruimte_key
AND di.ins_discipline_key = r.res_discipline_key
AND ks.prs_kostensoort_key = di.prs_kostensoort_key
AND ks.prs_kostensoort_key = 23 -- 84010 Zaalhuur
-- Geen exportdatum
AND NOT EXISTS
(SELECT 1
FROM res_kenmerkwaarde kw, res_kenmerk k
WHERE k.res_srtkenmerk_key = 202
AND kw.res_kenmerk_key = k.res_kenmerk_key
AND kw.res_kenmerkwaarde_verwijder IS NULL
AND k.res_kenmerk_verwijder IS NULL
AND kw.res_rsv_ruimte_key = rr.res_rsv_ruimte_key);
-- NYBU#30645: berekent verkoopfactuurregels voor reserveringen en plaatst die in fin_verkoopfactuur.
-- Gebruikt door nybu_select_res_coda().
-- fin_verkoopfactuur_n1 = intern/extern (0/1)
-- fin_verkoopfactuur_n2 = creditering nee/ja (0/1)
-- fin_verkoopfactuur_c1 = reserveringnummer
-- fin_verkoopfactuur_c2 = klantnaam
-- fin_verkoopfactuur_c3 = klantreferentie
-- fin_verkoopfactuur_c4 = type verkoopfactuur {'catering', 'ruimte/voorz'}
-- fin_verkoopfactuur_d1 = rsv_ruimte_datum_van
CREATE OR REPLACE PROCEDURE nybu_res_verkoopfacturen (
p_applname IN VARCHAR2,
p_applrun IN VARCHAR2)
AS
v_aanduiding VARCHAR2 (200);
v_errorhint VARCHAR2 (1000);
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
-- Alle factuurregels voor zowel interne als externe reserveringen
-- Intern worden alleen ruimtes gefactureerd, extern alles behalve catering van Vermaat
CURSOR c_regels
IS
SELECT *
FROM nybu_v_res_factuur_extern
WHERE prijs_inc != 0
UNION ALL
SELECT *
FROM nybu_v_res_factuur_intern
WHERE prijs_ex != 0;
-- Te crediteren verkoopfactuurregels. Per deelreservering wordt met vinkje "Te crediteren" aangegeven
-- dat deze gecrediteerd moet worden. Van deze deelreserveringen worden de laatst
-- ge<67>xporteerde regels in fin_verkoopfactuur opgezocht. Die worden vervolgens met negatieve
-- bedragen in dezelfde tabel gezet (zodat origineel bedrag + creditbedrag = 0).
-- res_srtkenmerk 202 Exportdatum
-- res_srtkenmerk 203 Te crediteren
CURSOR c_credits
IS
SELECT vf.*
FROM res_kenmerkwaarde kw, res_kenmerk k, fin_verkoopfactuur vf
WHERE k.res_srtkenmerk_key = 203
AND kw.res_kenmerk_key = k.res_kenmerk_key
AND kw.res_kenmerkwaarde_verwijder IS NULL
AND k.res_kenmerk_verwijder IS NULL
AND kw.res_kenmerkreservering_waarde = '1'
AND vf.fin_verkoopfactuur_refkey = kw.res_rsv_ruimte_key
AND vf.fin_verkoopfactuur_xmlnode = 'reservering'
AND vf.fin_verkoopfactuur_c4 = 'ruimte/voorz'
AND vf.fin_verkoopfactuur_datum IS NOT NULL
AND vf.fin_verkoopfactuur_datum =
(SELECT MAX (fin_verkoopfactuur_datum)
FROM fin_verkoopfactuur
WHERE fin_verkoopfactuur_refkey = kw.res_rsv_ruimte_key
AND fin_verkoopfactuur_xmlnode = 'reservering')
-- Geen exportdatum
AND NOT EXISTS
(SELECT 1
FROM res_kenmerkwaarde kw1, res_kenmerk k1
WHERE k1.res_srtkenmerk_key = 202
AND kw1.res_kenmerk_key = k1.res_kenmerk_key
AND kw1.res_kenmerkwaarde_verwijder IS NULL
AND k1.res_kenmerk_verwijder IS NULL
AND kw1.res_rsv_ruimte_key = kw.res_rsv_ruimte_key);
v_debnr VARCHAR2 (60);
BEGIN
v_aanduiding := 'Init';
v_errormsg := 'Init';
DELETE imp_log
WHERE imp_log_applicatie = p_applname;
DELETE fin_verkoopfactuur vf
WHERE vf.fin_verkoopfactuur_datum IS NULL
AND vf.fin_verkoopfactuur_c4 = 'ruimte/voorz';
-- Genereer verkoopfactuurregels voor externe reserveringen
FOR rec IN c_regels
LOOP
v_errormsg := 'Regels';
v_debnr := COALESCE (rec.deb_nr, rec.klant);
v_aanduiding :=
v_debnr
|| '/'
|| rec.proj
|| ' ('
|| rec.periode
|| '): '
|| rec.reservering
|| ' ('
|| rec.inex
|| ')';
-- TODO algemeen:
-- facturatie-views hebben nu <20><>n regel met twee BTW-percentages. Dat splitsen.
-- creditering doet excl/laag/hoog zelfs helemaal apart, maar dat kan straks anders.
-- TODO specifiek:
-- prs_kostenplaats_key
-- regel per BTW-percentage
INSERT INTO fin_verkoopfactuur (fin_verkoopfactuur_id,
fin_verkoopfactuur_datum,
fin_verkoopfactuur_omschr,
fin_verkoopfactuur_xmlnode,
fin_verkoopfactuur_refkey,
prs_kostenplaats_nr,
prs_kostenplaats_omschrijving,
prs_kostenplaatsgrp_oms,
prs_kostensoort_oms,
prs_debiteur_naam,
fin_verkoopfactuur_bedrag,
fin_verkoopfactuur_btw,
fin_btwtabelwaarde_code,
fin_btwtabelwaarde_oms,
fin_btwtabelwaarde_perc,
fin_verkoopfactuur_maand,
fin_verkoopfactuur_n1,
fin_verkoopfactuur_n2,
fin_verkoopfactuur_c1,
fin_verkoopfactuur_c2,
fin_verkoopfactuur_c3,
fin_verkoopfactuur_c4,
fin_verkoopfactuur_d1)
VALUES (TO_CHAR (SYSDATE, 'YYYY-MM-DD'),
NULL,
DECODE (rec.soort,
'ruimte', rec.omschrijving,
TO_CHAR (rec.aantal) || 'x ' || rec.omschrijving),
'reservering',
rec.res_rsv_ruimte_key,
rec.proj,
rec.proj,
rec.kostenplaats,
rec.grootboek,
v_debnr,
rec.prijs_ex,
COALESCE (rec.btw_hoog, rec.btw_laag),
rec.btw_code,
rec.btw_code,
rec.btw,
rec.periode,
rec.inex,
0, -- debet
rec.reservering,
rec.klant,
rec.referentie,
'ruimte/voorz',
rec.res_rsv_ruimte_van);
fac.writelog (p_applname,
'D',
v_aanduiding,
'regels');
END LOOP;
COMMIT;
-- Genereer creditfactuurregels voor ex- en interne reserveringen
FOR rec IN c_credits
LOOP
v_errormsg := 'Regels';
v_debnr := rec.prs_debiteur_naam;
v_aanduiding :=
v_debnr
|| '/'
|| rec.prs_kostenplaats_nr
|| ' ('
|| rec.fin_verkoopfactuur_maand
|| '): '
|| rec.fin_verkoopfactuur_omschr;
INSERT INTO fin_verkoopfactuur (fin_verkoopfactuur_id,
fin_verkoopfactuur_datum,
fin_verkoopfactuur_omschr,
fin_verkoopfactuur_xmlnode,
fin_verkoopfactuur_refkey,
prs_kostenplaats_nr,
prs_kostenplaats_omschrijving,
prs_kostenplaatsgrp_oms,
prs_kostensoort_oms,
prs_debiteur_naam,
fin_verkoopfactuur_bedrag,
fin_verkoopfactuur_btw,
fin_btwtabelwaarde_code,
fin_btwtabelwaarde_oms,
fin_btwtabelwaarde_perc,
fin_verkoopfactuur_maand,
fin_verkoopfactuur_n1,
fin_verkoopfactuur_n2,
fin_verkoopfactuur_c1,
fin_verkoopfactuur_c2,
fin_verkoopfactuur_c3,
fin_verkoopfactuur_c4,
fin_verkoopfactuur_d1)
VALUES (TO_CHAR (SYSDATE, 'YYYY-MM-DD'),
NULL,
'Correctie ' || rec.fin_verkoopfactuur_omschr,
rec.fin_verkoopfactuur_xmlnode,
rec.fin_verkoopfactuur_refkey,
rec.prs_kostenplaats_nr,
rec.prs_kostenplaats_omschrijving,
rec.prs_kostenplaatsgrp_oms,
rec.prs_kostensoort_oms,
rec.prs_debiteur_naam,
- (rec.fin_verkoopfactuur_bedrag),
- (rec.fin_verkoopfactuur_btw),
rec.fin_btwtabelwaarde_code,
rec.fin_btwtabelwaarde_oms,
rec.fin_btwtabelwaarde_perc,
rec.fin_verkoopfactuur_maand,
rec.fin_verkoopfactuur_n1,
1, -- credit
rec.fin_verkoopfactuur_c1,
rec.fin_verkoopfactuur_c2,
rec.fin_verkoopfactuur_c3,
'ruimte/voorz',
rec.fin_verkoopfactuur_d1);
fac.writelog (p_applname,
'D',
v_aanduiding,
'credits');
END LOOP;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg :=
v_errorhint
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.writelog (p_applname,
'E',
v_aanduiding || v_errormsg,
'Onbekende fout!');
COMMIT;
END nybu_res_verkoopfacturen;
/
-- Genereert exportbestand voor CODA over externe en interne reserveringen
-- Voor externe reserveringen worden factuurregels gegenereerd, voor interne doorbelastingsregels.
-- Beide soorten komen in <20><>n bestand, met een scheidingsregel ertussen.
-- Alle ge<67>xporteerde rsv_ruimtes worden gemarkeerd met "In laatste export"; alleen die reserveringen
-- worden verwerkt door de verwerk-export
-- res_srtkenmerk 241 Laatste export
-- fin_verkoopfactuur_n1 = intern/extern (0/1)
-- fin_verkoopfactuur_n2 = credit nee/ja (0/1)
-- fin_verkoopfactuur_c1 = reserveringnummer
-- fin_verkoopfactuur_c2 = klantnaam
-- fin_verkoopfactuur_c3 = klantreferentie
-- fin_verkoopfactuur_d1 = res_rsv_ruimte_van
-- fin_verkoopfactuur_d2 = periode_tot (alleen voor catering)
CREATE OR REPLACE PROCEDURE nybu_select_res_coda (p_applname IN VARCHAR2,
p_applrun IN VARCHAR2)
AS
v_aanduiding VARCHAR2 (200);
v_errorhint VARCHAR2 (1000);
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
-- Individuele facturen voor debiteuren; ook voor sommatieregel met totaalbedrag
-- Bedragen zijn incl BTW
-- NYBU#30023: expliciet filteren op soort = ruimte, want creditering alleen op
-- rsv_ruimte en niet ook nog op bijbehorende rsv_deel'en en rsv_artikel'en
-- Ik ben alleen ge<67>nteresseerd in rsv_ruimtes m<>t kosten <20>f m<>t een creditbedrag
CURSOR c_deb
IS
SELECT deb_nr,
periode,
kostenplaats,
proj,
SUM (bedrag) bedrag,
SUM (credit) credit
FROM (SELECT COALESCE (prs_debiteur_naam, fin_verkoopfactuur_c1)
deb_nr,
fin_verkoopfactuur_maand periode,
prs_kostenplaatsgrp_oms kostenplaats,
prs_kostenplaats_nr proj,
ROUND (
DECODE (
fin_verkoopfactuur_n2,
0,
fin_verkoopfactuur_bedrag
+ COALESCE (fin_verkoopfactuur_btw, 0),
0),
2)
bedrag,
ROUND (
DECODE (
fin_verkoopfactuur_n2,
1,
- (fin_verkoopfactuur_bedrag
+ COALESCE (fin_verkoopfactuur_btw, 0)),
0),
2)
credit
FROM fin_verkoopfactuur
WHERE fin_verkoopfactuur_n1 = 1 -- extern
AND fin_verkoopfactuur_datum IS NULL
AND COALESCE (fin_verkoopfactuur_c4, 'NOP') =
'ruimte/voorz')
WHERE bedrag != 0 OR credit != 0
GROUP BY deb_nr,
periode,
kostenplaats,
proj
ORDER BY deb_nr,
periode,
kostenplaats,
proj;
-- Factuurregels voor deze factuur (ook crediteringen)
-- NYBU#30023: expliciet filteren op prijs != 0
-- NYBU#31401: expliciet filteren op prijs_ex + btw != 0, anders vallen regels met alleen BTW weg
-- (dat zijn dan credits voor 'oude' exportregels waar de totalen ex_btw, btw_hoog en btw_laag
-- werden ge<67>xporteerd)
CURSOR regels (
in_deb_nr VARCHAR2,
in_periode VARCHAR2,
in_proj VARCHAR2)
IS
SELECT *
FROM fin_verkoopfactuur
WHERE COALESCE (prs_debiteur_naam, fin_verkoopfactuur_c1) = in_deb_nr
AND fin_verkoopfactuur_maand = in_periode
AND prs_kostenplaats_nr = in_proj
AND fin_verkoopfactuur_datum IS NULL
AND fin_verkoopfactuur_bedrag + fin_verkoopfactuur_btw != 0
AND COALESCE (fin_verkoopfactuur_c4, 'NOP') = 'ruimte/voorz';
-- Individuele facturen voor interne kostenplaatsen, gesommeerd per P-nummer (project)
-- (Crediteringen gaan apart)
-- Bedragen zijn excl BTW
-- NYBU#30023: expliciet filteren op prijs != 0
CURSOR c_intern
IS
SELECT deb_nr,
periode,
kostenplaats,
proj,
SUM (bedrag) bedrag,
SUM (credit) credit
FROM (SELECT COALESCE (prs_debiteur_naam, fin_verkoopfactuur_c1)
deb_nr,
fin_verkoopfactuur_maand periode,
prs_kostenplaatsgrp_oms kostenplaats,
prs_kostenplaats_nr proj,
ROUND (
DECODE (
fin_verkoopfactuur_n2,
0,
fin_verkoopfactuur_bedrag
+ COALESCE (fin_verkoopfactuur_btw, 0),
0),
2)
bedrag,
ROUND (
DECODE (
fin_verkoopfactuur_n2,
1,
- (fin_verkoopfactuur_bedrag
+ COALESCE (fin_verkoopfactuur_btw, 0)),
0),
2)
credit
FROM fin_verkoopfactuur
WHERE fin_verkoopfactuur_n1 = 0 -- intern
AND fin_verkoopfactuur_datum IS NULL
AND COALESCE (fin_verkoopfactuur_c4, 'NOP') =
'ruimte/voorz')
WHERE bedrag != 0 OR credit != 0
GROUP BY deb_nr,
periode,
kostenplaats,
proj
ORDER BY deb_nr,
periode,
kostenplaats,
proj;
CURSOR regels_intern (
in_deb_nr VARCHAR2,
in_periode VARCHAR2,
in_proj VARCHAR2)
IS
SELECT *
FROM fin_verkoopfactuur
WHERE COALESCE (prs_debiteur_naam, fin_verkoopfactuur_c1) = in_deb_nr
AND fin_verkoopfactuur_maand = in_periode
AND prs_kostenplaats_nr = in_proj
AND fin_verkoopfactuur_datum IS NULL
AND fin_verkoopfactuur_bedrag + fin_verkoopfactuur_btw != 0
AND COALESCE (fin_verkoopfactuur_c4, 'NOP') = 'ruimte/voorz';
-- Voor markeren van de externe + interne reserveringen die we net gefactureerd/doorbelast/gecrediteerd
-- hebben. (Daarvoor zetten we het kenmerk "In laatste export")
-- Dat zijn: alle reserveringen in nybu_v_res_factuur_ex-/intern, ook met prijs = 0
-- (dus dat is inclusief alle gecrediteerde reserveringen)
CURSOR c_markeren
IS
SELECT DISTINCT res_rsv_ruimte_key, reservering
FROM nybu_v_res_factuur_extern
UNION ALL
SELECT DISTINCT res_rsv_ruimte_key, reservering
FROM nybu_v_res_factuur_intern;
v_teller NUMBER;
v_rap_count NUMBER;
v_kenmerk_key_laatste NUMBER;
BEGIN
v_teller := 0;
v_rap_count := 0;
v_aanduiding := 'Init';
v_errormsg := 'Periode bepalen';
DELETE imp_log
WHERE imp_log_applicatie = p_applname;
DELETE fac_rapport
WHERE fac_rapport_node = p_applname;
-- Boekhouding: markering "In laatste export" verwijderen, zodat we met een schone lei beginnen
DELETE res_kenmerkwaarde
WHERE res_kenmerk_key IN (SELECT res_kenmerk_key
FROM res_kenmerk
WHERE res_srtkenmerk_key = 241);
-- Vul tabel fin_verkoopfactuur met nieuwe regels (procedure verwijdert oude regels zelf al)
nybu_res_verkoopfacturen (p_applname, p_applrun);
-- Genereer headerregel
INSERT INTO fac_rapport (fac_rapport_node,
fac_rapport_volgnr,
fac_rapport_regel,
fac_rapport_soort)
VALUES (p_applname,
v_rap_count,
'"NUMMER";"ADM";"GROOTBK";"DEB / KPL";"PROJ";"BEDRAG (INCL BTW)";"D/C";"BTW";"DATUM (DD-MM) + OMSCHRIJVING";"(EXT REF 2)";"(EXT REF 3)";"KLANTREFERENTIE (EXT REF 1)";"COMMENTAAR (EXT REF 4)";"EXTRA VELD (EXT REF 5)";"REGELTYPE";"DOCNR"',
0);
-- Genereer sommatie-, specificatie- en creditregels voor debiteuren
FOR rec IN c_deb
LOOP
v_errormsg := 'Sommatieregel aanmaken';
v_teller := v_teller + 1;
v_aanduiding :=
v_teller
|| ': '
|| rec.deb_nr
|| '/'
|| rec.proj
|| ' ('
|| rec.periode
|| ')';
v_rap_count := v_rap_count + 1;
-- Sommatieregel
INSERT INTO fac_rapport (fac_rapport_node,
fac_rapport_volgnr,
fac_rapport_regel,
fac_rapport_soort)
VALUES (p_applname,
v_rap_count,
v_teller
|| ';'
|| -- nummer
'10;'
|| -- adm
'13000;'
|| -- grootbk
rec.deb_nr
|| ';'
|| -- deb/kpl
';'
|| -- proj
TRIM(TO_CHAR (
ABS (rec.bedrag - COALESCE (rec.credit, 0)),
'99999999D99',
'NLS_NUMERIC_CHARACTERS=,.'))
|| ';'
|| -- bedrag
CASE
WHEN rec.bedrag - COALESCE (rec.credit, 0) < 0
THEN
'C;'
WHEN rec.bedrag - COALESCE (rec.credit, 0) >= 0
THEN
'D;'
END
|| -- d/c
';'
|| -- btw
SUBSTR (
'Zaalhuur '
|| nybu.getPeriodeNaam (rec.periode, 'NL'),
1,
36)
|| ';'
|| -- datum + omschrijving
rec.proj
|| ';'
|| -- ext ref 2
';'
|| -- ext ref 3
rec.kostenplaats
|| ';'
|| -- klantreferentie (ext ref 1)
';'
|| -- commentaar (ext ref 4)
';'
|| -- extra veld (ext ref 5)
'Summary;'
|| -- regeltype
'', -- docnr
0);
IF rec.credit != 0
THEN
fac.writelog (
p_applname,
'S',
'Externe facturen: '
|| rec.deb_nr
|| ' ('
|| rec.proj
|| ')'
|| ' totaal <20>'
|| TO_CHAR (rec.bedrag)
|| ' - <20>'
|| TO_CHAR (rec.credit)
|| ' incl BTW',
'extern');
ELSE
fac.writelog (
p_applname,
'S',
'Externe facturen: '
|| rec.deb_nr
|| ' ('
|| rec.proj
|| ')'
|| ' totaal <20>'
|| TO_CHAR (rec.bedrag)
|| ' incl BTW',
'extern');
END IF;
-- Specificatieregels
FOR reg IN regels (rec.deb_nr, rec.periode, rec.proj)
LOOP
v_errormsg := 'Specificatieregel aanmaken';
v_aanduiding :=
v_teller
|| ': '
|| rec.deb_nr
|| '/'
|| rec.proj
|| ' - '
|| reg.fin_verkoopfactuur_c1
|| ' ('
|| rec.periode
|| ')';
v_rap_count := v_rap_count + 1;
INSERT INTO fac_rapport (fac_rapport_node,
fac_rapport_volgnr,
fac_rapport_regel,
fac_rapport_soort)
VALUES (p_applname,
v_rap_count,
v_teller
|| ';'
|| -- nummer
'12;'
|| -- adm
reg.prs_kostensoort_oms
|| ';'
|| -- grootbk
reg.prs_kostenplaatsgrp_oms
|| ';'
|| -- deb/kpl
reg.prs_kostenplaats_nr
|| ';'
|| -- proj
TRIM(TO_CHAR (
ROUND (
ABS(reg.fin_verkoopfactuur_bedrag
+ reg.fin_verkoopfactuur_btw),
2),
'99999999D99',
'NLS_NUMERIC_CHARACTERS=,.'))
|| ';'
|| -- bedrag
CASE
WHEN reg.fin_verkoopfactuur_bedrag
+ reg.fin_verkoopfactuur_btw < 0
THEN
'D;'
WHEN reg.fin_verkoopfactuur_bedrag
+ reg.fin_verkoopfactuur_btw >= 0
THEN
'C;'
END
|| -- d/c
reg.fin_btwtabelwaarde_code
|| ';'
|| -- btw
'"'
|| SUBSTR (
TO_CHAR (reg.fin_verkoopfactuur_d1, 'DD-MM ')
|| reg.fin_verkoopfactuur_omschr,
1,
36)
|| '";'
|| -- datum + omschrijving
';'
|| -- ext ref 2
';'
|| -- ext ref 3
DECODE (reg.fin_verkoopfactuur_c3,
NULL, ';',
'"' || reg.fin_verkoopfactuur_c3 || '";')
|| -- klantreferente (ext ref 1)
'"Info: Sales &'
|| ' Events 0346-291544";'
|| -- commentaar (ext ref 4)
'"Periode: '
|| nybu.getPeriodeNaam (reg.fin_verkoopfactuur_maand,
'NL')
|| '";'
|| -- extra veld (ext ref 5)
'Analysis;'
|| -- regeltype
reg.fin_verkoopfactuur_c1, -- docnr
0);
END LOOP;
END LOOP;
-- Scheidingsregel
v_errormsg := 'Scheidingsregel aanmaken';
v_rap_count := v_rap_count + 1;
INSERT INTO fac_rapport (fac_rapport_node,
fac_rapport_volgnr,
fac_rapport_regel,
fac_rapport_soort)
VALUES (p_applname,
v_rap_count,
'"Nummer";"Adm.";"Grootboek";"Kostenplaats";"Project";"Medewerker";"Bedrag";"D/C";"Regelomschrijving"',
0);
v_teller := 0;
-- Genereer regels voor interne kostenplaatsen
-- Tegenboekingsregel (opbrengsten-boeking)
v_errormsg := 'Opbrengsten-regel aanmaken';
v_rap_count := v_rap_count + 1;
INSERT INTO fac_rapport (fac_rapport_node,
fac_rapport_volgnr,
fac_rapport_regel,
fac_rapport_soort)
SELECT p_applname,
v_rap_count,
'1;'
|| ';'
|| ks.prs_kostensoort_oms
|| ';'
|| TRIM (SUBSTR (kg.prs_kostenplaatsgrp_oms, 1, 7))
|| ';'
|| k.prs_kostenplaats_nr
|| ';'
|| ';'
|| TRIM(TO_CHAR (ABS (vf.bedrag),
'99999999D99',
'NLS_NUMERIC_CHARACTERS=,.'))
|| ';'
|| CASE
WHEN vf.bedrag < 0 THEN 'D'
WHEN vf.bedrag >= 0 THEN 'C'
END
|| ';'
|| '"Zaalhuur '
|| nybu.getPeriodeNaam (vf.periode, 'NL')
|| '"',
0
FROM prs_kostensoort ks,
prs_kostenplaats k,
prs_kostenplaatsgrp kg,
(SELECT SUM (fin_verkoopfactuur_bedrag) bedrag,
MAX (fin_verkoopfactuur_maand) periode
FROM fin_verkoopfactuur
WHERE fin_verkoopfactuur_datum IS NULL
AND fin_verkoopfactuur_n1 = 0 -- intern
AND COALESCE (fin_verkoopfactuur_c4, 'NOP') =
'ruimte/voorz') vf
WHERE ks.prs_kostensoort_oms = '76015'
AND k.prs_kostenplaats_key = ks.prs_kostenplaats_key
AND kg.prs_kostenplaatsgrp_key = k.prs_kostenplaatsgrp_key;
-- Genereer specificatieregels voor interne kostenplaatsen
FOR rec IN c_intern
LOOP
IF rec.credit != 0
THEN
fac.writelog (
p_applname,
'S',
'Externe facturen: '
|| rec.deb_nr
|| ' ('
|| rec.proj
|| ')'
|| ' totaal <20>'
|| TO_CHAR (rec.bedrag)
|| ' - <20>'
|| TO_CHAR (rec.credit)
|| ' incl BTW',
'extern');
ELSE
fac.writelog (
p_applname,
'S',
'Externe facturen: '
|| rec.deb_nr
|| ' ('
|| rec.proj
|| ')'
|| ' totaal <20>'
|| TO_CHAR (rec.bedrag)
|| ' incl BTW',
'extern');
END IF;
-- Specificatieregels
FOR reg IN regels_intern (rec.deb_nr, rec.periode, rec.proj)
LOOP
v_errormsg := 'Specificatieregel aanmaken';
v_aanduiding :=
v_teller
|| ': '
|| rec.deb_nr
|| '/'
|| rec.proj
|| ' - '
|| reg.fin_verkoopfactuur_c1
|| ' ('
|| rec.periode
|| ')';
v_rap_count := v_rap_count + 1;
INSERT INTO fac_rapport (fac_rapport_node,
fac_rapport_volgnr,
fac_rapport_regel,
fac_rapport_soort)
VALUES (p_applname,
v_rap_count,
v_teller || ';' -- nummer
|| ';' -- adm
|| '56015;' -- grootbk
|| rec.kostenplaats || ';' ---kostenplaats
|| rec.proj || ';' -- project
|| ';' --- medewerker
|| TRIM(TO_CHAR (
ROUND (
ABS(reg.fin_verkoopfactuur_bedrag
+ reg.fin_verkoopfactuur_btw),
2),
'99999999D99',
'NLS_NUMERIC_CHARACTERS=,.')) || ';'
||
CASE
WHEN reg.fin_verkoopfactuur_bedrag+ reg.fin_verkoopfactuur_btw >= 0 THEN 'D;'
WHEN reg.fin_verkoopfactuur_bedrag+ reg.fin_verkoopfactuur_btw < 0 THEN 'C;'
END
||
SUBSTR (
TO_CHAR (reg.fin_verkoopfactuur_d1, 'DD-MM ')
|| reg.fin_verkoopfactuur_omschr,
1,
36)
|| ';'
|| -- datum + omschrijving
'"Periode: '
|| nybu.getPeriodeNaam (reg.fin_verkoopfactuur_maand,
'NL')
|| '";'
|| -- extra veld (ext ref 5)
'Analysis;'
|| -- regeltype
reg.fin_verkoopfactuur_c1, -- docnr
0);
END LOOP;
END LOOP;
-- Boekhouding: markeer alle reserveringen die we net gefactureerd hebben
FOR rec IN c_markeren
LOOP
v_aanduiding := rec.reservering;
v_errormsg := 'Kenmerk "In laatste export" bepalen';
-- Vind kenmerk bij kenmerksoort voor activiteit van rsv_ruimte
SELECT res_kenmerk_key
INTO v_kenmerk_key_laatste
FROM res_kenmerk k, res_rsv_ruimte rr
WHERE k.res_srtkenmerk_key = 241
AND rr.res_activiteit_key = k.res_activiteit_key
AND rr.res_rsv_ruimte_key = rec.res_rsv_ruimte_key;
v_errormsg := 'Reservering markeren';
nybu.upsertkenmerk_res (v_kenmerk_key_laatste,
rec.res_rsv_ruimte_key,
'1');
END LOOP;
fac.writelog (p_applname,
'S',
'Factuurregels gegenereerd',
'');
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg :=
v_errorhint
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.writelog (p_applname,
'E',
v_aanduiding || v_errormsg,
'Onbekende fout!');
COMMIT;
END nybu_select_res_coda;
/
CREATE OR REPLACE VIEW nybu_v_export_res_coda
AS
SELECT fac_rapport_regel result, fac_rapport_volgnr result_order
FROM fac_rapport
WHERE fac_rapport_node = 'RES_CODA'
ORDER BY fac_rapport_volgnr;
-- Zet status van de met RES_CODA ge<67>xporteerde reserveringen op Verwerkt.
-- res_srtkenmerk 202 Exportdatum
-- res_srtkenmerk 261 Ge<47>xporteerd bedrag
-- res_srtkenmerk 203 Te crediteren
-- res_srtkenmerk 241 In laatste export
-- fin_verkoopfactuur_n1 = intern/extern (0/1)
-- fin_verkoopfactuur_n2 = credit nee/ja (0/1)
-- fin_verkoopfactuur_c1 = reserveringnummer
-- NB: "In laatste export" wordt door de verwerk-export niet gereset
CREATE OR REPLACE PROCEDURE nybu_export_res_verwerk (
p_applname IN VARCHAR2,
p_applrun IN VARCHAR2,
p_filedir IN VARCHAR2,
p_filename IN VARCHAR2)
AS
v_aanduiding VARCHAR2 (200);
v_errorhint VARCHAR2 (1000);
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
-- Alle doorbelaste rsv_ruimtes
-- NYBU#30023: niet meer verwerken, maar exportdatum + bedragen zetten
-- TODO: 6 maanden na dato verwerken?
CURSOR c_rsv
IS
SELECT DISTINCT res_rsv_ruimte_key, reservering
FROM nybu_v_res_factuur_extern
WHERE 1 = 0
UNION ALL
SELECT DISTINCT
rr.res_rsv_ruimte_key,
rr.res_reservering_key || '/' || rr.res_rsv_ruimte_volgnr volgnr
FROM res_rsv_ruimte rr, prs_kostenplaats k
WHERE 1 = 0
AND COALESCE (k.prs_kostenplaats_extern, 0) = 0
AND rr.prs_kostenplaats_key = k.prs_kostenplaats_key
AND ( (rr.res_rsv_ruimte_verwijder IS NULL
AND rr.res_status_bo_key = 5)
OR ( res_rsv_ruimte_verwijder IS NOT NULL
AND rr.res_status_bo_key < 6
AND rr.res_status_fo_key = 4));
-- Gefactureerde externe + interne reserveringen in laatste export
-- Bepaal gefactureerde bedragen per en leg vast bij deelreservering
-- O.b.v. kenmerk "In laatste export" alleen reserveringen uit laatste export
CURSOR c_fact
IS
SELECT ei.*, COALESCE (vf.prijs, 0) prijs
FROM (SELECT DISTINCT fe.res_rsv_ruimte_key,
reservering,
'extern' inex,
'incl' inclexcl
FROM nybu_v_res_factuur_extern fe,
res_kenmerkwaarde kw,
res_kenmerk k
WHERE kw.res_rsv_ruimte_key = fe.res_rsv_ruimte_key
AND kw.res_kenmerkreservering_waarde = '1'
AND kw.res_kenmerkwaarde_verwijder IS NULL
AND k.res_kenmerk_key = kw.res_kenmerk_key
AND k.res_srtkenmerk_key = 241
AND k.res_kenmerk_verwijder IS NULL
UNION ALL
SELECT DISTINCT fi.res_rsv_ruimte_key,
reservering,
'intern' inex,
'excl' inclexcl
FROM nybu_v_res_factuur_intern fi,
res_kenmerkwaarde kw,
res_kenmerk k
WHERE kw.res_rsv_ruimte_key = fi.res_rsv_ruimte_key
AND kw.res_kenmerkreservering_waarde = '1'
AND kw.res_kenmerkwaarde_verwijder IS NULL
AND k.res_kenmerk_key = kw.res_kenmerk_key
AND k.res_srtkenmerk_key = 241
AND k.res_kenmerk_verwijder IS NULL) ei
LEFT OUTER JOIN
( SELECT fac.safe_to_number (vf.fin_verkoopfactuur_refkey)
res_rsv_ruimte_key,
ROUND (
SUM(fin_verkoopfactuur_bedrag
+ fin_verkoopfactuur_btw),
2)
prijs
FROM fin_verkoopfactuur vf
WHERE vf.fin_verkoopfactuur_datum IS NULL
AND vf.fin_verkoopfactuur_c4 = 'ruimte/voorz'
AND vf.fin_verkoopfactuur_n2 = 0 -- geen creditering
GROUP BY fin_verkoopfactuur_refkey) vf
ON vf.res_rsv_ruimte_key = ei.res_rsv_ruimte_key;
-- Gecrediteerde reserveringen in laatste export
-- Wis vink "Te crediteren"
CURSOR c_cred
IS
SELECT rr.res_rsv_ruimte_key,
rr.res_reservering_key || '/' || rr.res_rsv_ruimte_volgnr
reservering,
COALESCE (vf.credit, 0) credit,
vf.inex,
vf.inclexcl
FROM res_rsv_ruimte rr,
(SELECT kw.*
FROM res_kenmerkwaarde kw, res_kenmerk k
WHERE k.res_srtkenmerk_key = 203
AND kw.res_kenmerk_key = k.res_kenmerk_key
AND kw.res_kenmerkwaarde_verwijder IS NULL
AND k.res_kenmerk_verwijder IS NULL
AND kw.res_kenmerkreservering_waarde = '1') te_cred,
(SELECT kw.*
FROM res_kenmerkwaarde kw, res_kenmerk k
WHERE k.res_srtkenmerk_key = 241
AND k.res_kenmerk_key = kw.res_kenmerk_key
AND kw.res_kenmerkwaarde_verwijder IS NULL
AND k.res_kenmerk_verwijder IS NULL
AND kw.res_kenmerkreservering_waarde = '1') in_laatste,
( SELECT fac.safe_to_number (fin_verkoopfactuur_refkey)
res_rsv_ruimte_key,
fin_verkoopfactuur_c1 reservering,
ROUND (
SUM(fin_verkoopfactuur_bedrag
+ fin_verkoopfactuur_btw),
2)
* -1
credit,
DECODE (fin_verkoopfactuur_n1, 0, 'intern', 1, 'extern')
inex,
DECODE (fin_verkoopfactuur_n1, 0, 'excl', 1, 'incl')
inclexcl
FROM fin_verkoopfactuur
WHERE fin_verkoopfactuur_datum IS NULL
AND fin_verkoopfactuur_n2 = 1 -- creditering
GROUP BY fin_verkoopfactuur_refkey,
fin_verkoopfactuur_n1,
fin_verkoopfactuur_c1) vf
WHERE te_cred.res_rsv_ruimte_key = rr.res_rsv_ruimte_key
AND in_laatste.res_rsv_ruimte_key = rr.res_rsv_ruimte_key
AND vf.res_rsv_ruimte_key(+) = rr.res_rsv_ruimte_key
-- Geen exportdatum
AND NOT EXISTS
(SELECT 1
FROM res_kenmerkwaarde kw, res_kenmerk k
WHERE k.res_srtkenmerk_key = 202
AND kw.res_kenmerk_key = k.res_kenmerk_key
AND kw.res_kenmerkwaarde_verwijder IS NULL
AND k.res_kenmerk_verwijder IS NULL
AND kw.res_rsv_ruimte_key = rr.res_rsv_ruimte_key);
v_periode VARCHAR (6);
v_periodeNaam VARCHAR2 (20);
v_kenmerk_key_cred NUMBER;
v_kenmerk_key_datum NUMBER;
v_kenmerk_key_geexp NUMBER;
v_trackmessage VARCHAR2 (100);
BEGIN
v_aanduiding := 'Init';
v_errormsg := 'Periode bepalen';
-- Deze export gaat over de maand-van-de-meest-recente-reserveringsdatum.
SELECT TO_CHAR (MAX (res_rsv_ruimte_van), 'YYYYMM')
INTO v_periode
FROM nybu_v_res_factuur_extern;
v_periodeNaam := nybu.getPeriodeNaam (v_periode, 'NL');
DELETE imp_log
WHERE imp_log_applicatie = p_applname;
-- Gecrediteerde facturen: wis vinkje "Te crediteren" en ge<67>xporteerde bedragen, maak tracking
FOR rec IN c_cred
LOOP
v_aanduiding := rec.reservering;
v_errorhint := 'Kenmerk "Te crediteren" bepalen';
-- Vind kenmerk bij kenmerksoort voor activiteit van rsv_ruimte
SELECT cred.res_kenmerk_key, geexp.res_kenmerk_key
INTO v_kenmerk_key_cred, v_kenmerk_key_geexp
FROM res_kenmerk cred, res_kenmerk geexp, res_rsv_ruimte rr
WHERE cred.res_srtkenmerk_key = 203
AND geexp.res_srtkenmerk_key = 261
AND cred.res_kenmerk_verwijder IS NULL
AND geexp.res_kenmerk_verwijder IS NULL
AND rr.res_activiteit_key = cred.res_activiteit_key
AND rr.res_activiteit_key = geexp.res_activiteit_key
AND rr.res_rsv_ruimte_key = rec.res_rsv_ruimte_key;
v_errormsg := 'Reset "Te crediteren"';
nybu.upsertkenmerk_res (v_kenmerk_key_cred,
rec.res_rsv_ruimte_key,
NULL);
v_errormsg := 'Reset bedrag';
nybu.upsertkenmerk_res (v_kenmerk_key_geexp,
rec.res_rsv_ruimte_key,
NULL);
fac.trackaction (
'RESUPD',
rec.res_rsv_ruimte_key,
NULL,
SYSDATE,
'<EFBFBD>'
|| TO_CHAR (rec.credit)
|| ' '
|| rec.inclexcl
|| ' BTW gecrediteerd');
fac.writelog (
p_applname,
'I',
rec.reservering
|| ': <20>'
|| TO_CHAR (rec.credit)
|| ' '
|| rec.inclexcl
|| ' BTW gecrediteerd',
rec.inex);
END LOOP;
-- Externe + interne reserveringen: zet exportdatum en gefactureerd bedrag (incl resp excl BTW)
-- En zet exportdatum in verkoopfactuurtabel
FOR rec IN c_fact
LOOP
v_aanduiding := rec.reservering;
v_errorhint := 'Kenmerken bepalen';
-- Vind kenmerk bij kenmerksoort voor activiteit van rsv_ruimte
SELECT datum.res_kenmerk_key, geexp.res_kenmerk_key
INTO v_kenmerk_key_datum, v_kenmerk_key_geexp
FROM res_kenmerk datum, res_kenmerk geexp, res_rsv_ruimte rr
WHERE datum.res_srtkenmerk_key = 202
AND geexp.res_srtkenmerk_key = 261
AND datum.res_kenmerk_verwijder IS NULL
AND geexp.res_kenmerk_verwijder IS NULL
AND rr.res_activiteit_key = datum.res_activiteit_key
AND rr.res_activiteit_key = geexp.res_activiteit_key
AND rr.res_rsv_ruimte_key = rec.res_rsv_ruimte_key;
v_aanduiding := rec.reservering;
v_errorhint := 'Update kenmerken (' || rec.inex || ')';
nybu.upsertkenmerk_res (v_kenmerk_key_datum,
rec.res_rsv_ruimte_key,
TO_CHAR (SYSDATE, 'DD-MM-YYYY'));
IF (rec.prijs != 0)
THEN
nybu.upsertkenmerk_res (v_kenmerk_key_geexp,
rec.res_rsv_ruimte_key,
TO_CHAR (rec.prijs));
v_trackmessage :=
'<EFBFBD>'
|| TO_CHAR (rec.prijs)
|| ' '
|| rec.inclexcl
|| ' BTW gefactureerd';
ELSE
v_trackmessage := 'Exportdatum gezet (geen kosten bij reservering)';
END IF;
fac.trackaction ('RESUPD',
rec.res_rsv_ruimte_key,
NULL,
SYSDATE,
v_trackmessage);
fac.writelog (p_applname,
'I',
rec.reservering || ': ' || v_trackmessage,
rec.inex);
v_errorhint := 'Zet exportdatum in verkoopfactuur';
UPDATE fin_verkoopfactuur
SET fin_verkoopfactuur_datum = SYSDATE
WHERE fac.safe_to_number (fin_verkoopfactuur_refkey) =
rec.res_rsv_ruimte_key;
END LOOP;
FOR rec IN c_rsv
LOOP
v_aanduiding :=
'Reservering '
|| rec.reservering
|| ' ('
|| rec.res_rsv_ruimte_key
|| ')';
v_errormsg := 'Verbruiksartikelen verwerken';
UPDATE res_rsv_artikel
SET res_status_bo_key = 6
WHERE res_rsv_ruimte_key = rec.res_rsv_ruimte_key;
v_errormsg := 'Voorzieningen verwerken';
UPDATE res_rsv_deel
SET res_status_bo_key = 6
WHERE res_rsv_ruimte_key = rec.res_rsv_ruimte_key;
v_errormsg := 'Ruimte verwerken';
UPDATE res_rsv_ruimte
SET res_status_bo_key = 6
WHERE res_rsv_ruimte_key = rec.res_rsv_ruimte_key;
fac.writelog (p_applname,
'I',
'Reservering verwerkt',
rec.reservering);
fac.trackaction ('RESVER',
rec.res_rsv_ruimte_key,
NULL,
NULL,
NULL);
END LOOP;
fac.writelog (p_applname,
'S',
'Reserveringen verwerkt',
'Periode ' || v_periodeNaam);
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
ROLLBACK;
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg :=
v_errorhint
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.writelog (p_applname,
'E',
v_aanduiding || v_errormsg,
'Onbekende fout! Niets verwerkt.');
COMMIT;
END nybu_export_res_verwerk;
/
-- Genereert exportbestand voor doorbelasting catering over interne reserveringen
-- fin_verkoopfactuur_n1 = intern/extern (0 = intern)
-- fin_verkoopfactuur_n2 = credit nee/ja (0 = nee)
-- fin_verkoopfactuur_c1 = reserveringnummer
-- fin_verkoopfactuur_c2 = klantnaam
-- fin_verkoopfactuur_c3 = klantreferentie
-- fin_verkoopfactuur_c4 = catering
-- fin_verkoopfactuur_d1 = res_rsv_ruimte_van
-- fin_verkoopfactuur_d2 = periode_tot (alleen voor catering)
CREATE OR REPLACE PROCEDURE nybu_select_res_cat (p_applname IN VARCHAR2,
p_applrun IN VARCHAR2)
AS
v_aanduiding VARCHAR2 (200);
v_errorhint VARCHAR2 (1000);
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
CURSOR c (c_tot DATE)
IS
SELECT klant,
res_rsv_ruimte_van,
periode,
grootboek,
kostenplaats_key,
kostenplaats,
deb_nr,
proj_key,
proj,
btw,
prs_kostensoort_btw,
res_key,
res_volgnr,
referentie,
res_rsv_ruimte_key,
descr,
aantal,
omschrijving,
soort,
btw_code,
SUM (prijs_ex) prijs_ex,
SUM (prijs_inc) prijs_inc,
SUM (btw_laag) btw_laag,
SUM (btw_hoog) btw_hoog,
SUM (korting) korting,
SUM (inex) inex
FROM (SELECT k.prs_kostenplaats_omschrijving klant,
rr.res_rsv_ruimte_van,
TO_CHAR (rr.res_rsv_ruimte_van, 'YYYYMM') periode,
ks.prs_kostensoort_oms grootboek,
kg.prs_kostenplaatsgrp_key kostenplaats_key,
TRIM (SUBSTR (kg.prs_kostenplaatsgrp_oms, 1, 7))
kostenplaats,
k.prs_kostenplaats_nr deb_nr,
k.prs_kostenplaats_key proj_key,
k.prs_kostenplaats_nr proj,
btw.perc btw,
ks.prs_kostensoort_btw,
btw.btw_code,
rr.res_reservering_key res_key,
rr.res_rsv_ruimte_volgnr res_volgnr,
NULL referentie,
rr.res_reservering_key
|| '/'
|| rr.res_rsv_ruimte_volgnr
reservering,
rr.res_rsv_ruimte_key,
rr.res_rsv_ruimte_omschrijving descr,
1 aantal,
COALESCE (
(SELECT r.res_ruimte_nr
FROM res_ruimte_opstelling ro, res_ruimte r
WHERE ro.res_ruimte_opstel_key =
rr.res_ruimte_opstel_key
AND r.res_ruimte_key = ro.res_ruimte_key),
(SELECT 'Kamer '
|| alg_ruimte_nr
|| ' ('
|| alg_ruimte_omschrijving
|| ')'
FROM alg_v_ruimte_gegevens rg
WHERE rg.alg_ruimte_key = rr.alg_ruimte_key))
omschrijving,
'catering' soort,
(rra.res_rsv_artikel_prijs / (btw.perc + 100)) * 100
prijs_ex,
rra.res_rsv_artikel_prijs prijs_inc,
DECODE (
btw.perc,
6,
rra.res_rsv_artikel_prijs
* btw.perc
/ (100 + btw.perc),
0)
btw_laag,
DECODE (
btw.perc,
21,
rra.res_rsv_artikel_prijs
* btw.perc
/ (100 + btw.perc),
0)
btw_hoog,
0 korting,
0 inex
FROM res_rsv_ruimte rr,
prs_kostenplaats k,
prs_kostenplaatsgrp kg,
res_rsv_artikel rra,
res_artikel ra,
res_discipline di,
prs_kostensoort ks,
(SELECT fac.safe_to_number (fac_usrdata_upper) perc,
fac_usrdata_omschr btw_code
FROM fac_usrdata
WHERE fac_usrtab_key = 42
AND fac_usrdata_verwijder IS NULL) btw
WHERE COALESCE (k.prs_kostenplaats_extern, 0) = 0
AND kg.prs_kostenplaatsgrp_key =
k.prs_kostenplaatsgrp_key
AND rr.prs_kostenplaats_key = k.prs_kostenplaats_key
AND rr.res_rsv_ruimte_dirtlevel = 0
AND rr.res_rsv_ruimte_afgerond = 1
AND rr.res_rsv_ruimte_verwijder IS NULL
AND rra.res_rsv_ruimte_key = rr.res_rsv_ruimte_key
AND rra.res_artikel_key = ra.res_artikel_key
AND ra.res_discipline_key = di.ins_discipline_key
AND ks.prs_kostensoort_key = di.prs_kostensoort_key
AND di.ins_discipline_key NOT IN (462, 581, 741) -- hotelkamers, inhuur voorzieningen, linnen
AND ra.res_artikel_btw = btw.perc
AND rra.res_rsv_artikel_prijs <> 0
AND rra.res_rsv_artikel_levering < c_tot
AND NOT EXISTS -- flag reservering bevat catering op externe kostenplaats is niet gezet.
(SELECT res_kenmerkwaarde_key
FROM res_kenmerkwaarde kw, res_kenmerk k
WHERE kw.res_kenmerk_key = k.res_kenmerk_key
AND k.res_srtkenmerk_key = 321 -- Reservering bevat catering op externe kostenpaats.
AND kw.res_rsv_ruimte_key =
rr.res_rsv_ruimte_key
AND fac.safe_to_number (
kw.res_kenmerkreservering_waarde) =
1)
AND NOT EXISTS -- entry komt nog niet voor in de verkoopfactuurtabel
(SELECT fin_verkoopfactuur_key
FROM fin_verkoopfactuur vf
WHERE vf.fin_verkoopfactuur_xmlnode =
'reservering'
AND vf.fin_verkoopfactuur_refkey =
rr.res_rsv_ruimte_key
AND COALESCE (vf.fin_verkoopfactuur_c4,
'NOP') = 'catering'))
GROUP BY klant,
res_rsv_ruimte_van,
periode,
grootboek,
kostenplaats_key,
kostenplaats,
deb_nr,
proj_key,
proj,
btw,
prs_kostensoort_btw,
res_key,
res_volgnr,
referentie,
res_rsv_ruimte_key,
descr,
aantal,
omschrijving,
soort,
btw_code
ORDER BY res_rsv_ruimte_key, btw_code;
v_teller NUMBER;
v_rap_count NUMBER;
v_kenmerk_key_laatste NUMBER;
v_ruimte_key_prev NUMBER;
v_verkoopfactuurkop_key NUMBER;
v_tot DATE;
v_van DATE;
BEGIN
v_teller := 0;
v_rap_count := 0;
v_aanduiding := 'Init';
v_errormsg := 'Periode bepalen';
SELECT TRUNC (MAX (fin_verkoopfactuur_d2))
INTO v_van
FROM fin_verkoopfactuur
WHERE fin_verkoopfactuur_datum IS NOT NULL
AND fin_verkoopfactuur_c4 = 'catering';
-- We rekenen met periodes van 4 weken. Dit in overleg met Vermaat John Hendriksen.
v_tot := v_van + 28;
DELETE imp_log
WHERE imp_log_applicatie = p_applname;
-- verwijder regels die nog niet verwerkt zijn
DELETE fin_verkoopfactuurkop
WHERE fin_verkoopfactuurkop_key IN
(SELECT fin_verkoopfactuurkop_key
FROM fin_verkoopfactuur
WHERE fin_verkoopfactuur_datum IS NULL
AND fin_verkoopfactuur_c4 = 'catering');
DELETE fin_verkoopfactuur
WHERE fin_verkoopfactuur_datum IS NULL
AND fin_verkoopfactuur_c4 = 'catering';
v_ruimte_key_prev := -1;
FOR rec IN c (v_tot)
LOOP
IF rec.res_rsv_ruimte_key <> v_ruimte_key_prev
THEN
v_ruimte_key_prev := rec.res_rsv_ruimte_key;
INSERT INTO fin_verkoopfactuurkop (fin_verkoopfactuurkop_id)
VALUES (rec.res_key || '/' || rec.res_volgnr || '-c')
RETURNING fin_verkoopfactuurkop_key
INTO v_verkoopfactuurkop_key;
END IF;
INSERT INTO fin_verkoopfactuur (fin_verkoopfactuurkop_key,
fin_verkoopfactuur_id,
fin_verkoopfactuur_datum,
fin_verkoopfactuur_omschr,
fin_verkoopfactuur_xmlnode,
fin_verkoopfactuur_refkey,
prs_kostenplaats_nr,
prs_kostenplaats_omschrijving,
prs_kostenplaatsgrp_oms,
prs_kostensoort_oms,
prs_debiteur_naam,
fin_verkoopfactuur_bedrag,
fin_verkoopfactuur_btw,
fin_btwtabelwaarde_code,
fin_btwtabelwaarde_oms,
fin_btwtabelwaarde_perc,
fin_verkoopfactuur_maand,
fin_verkoopfactuur_n1,
fin_verkoopfactuur_n2,
fin_verkoopfactuur_c1,
fin_verkoopfactuur_c2,
fin_verkoopfactuur_c3,
fin_verkoopfactuur_c4,
fin_verkoopfactuur_d1,
fin_verkoopfactuur_d2)
VALUES (v_verkoopfactuurkop_key,
TO_CHAR (SYSDATE, 'YYYY-MM-DD'),
NULL,
rec.omschrijving,
'reservering',
rec.res_rsv_ruimte_key,
rec.proj,
rec.proj,
rec.kostenplaats,
rec.grootboek,
rec.deb_nr,
rec.prijs_ex,
rec.btw_hoog + rec.btw_laag,
rec.btw_code,
rec.btw_code,
rec.btw,
rec.periode,
rec.inex,
0, -- debet
rec.res_key || '/' || rec.res_volgnr,
rec.klant,
rec.referentie,
'catering',
rec.res_rsv_ruimte_van,
v_tot);
END LOOP;
fac.writelog (p_applname,
'S',
'Factuurregels gegenereerd',
'');
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg :=
v_errorhint
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.writelog (p_applname,
'E',
v_aanduiding || v_errormsg,
'Onbekende fout!');
COMMIT;
END nybu_select_res_cat;
/
CREATE OR REPLACE VIEW nybu_v_exp_res_cat
(
project,
kostenplaats,
kostensoort,
bedrag,
btw,
btwcode,
opmerking
)
AS
SELECT prs_kostenplaats_nr,
prs_kostenplaatsgrp_oms,
prs_kostensoort_oms,
COALESCE (fin_verkoopfactuur_bedrag, 0),
COALESCE (fin_verkoopfactuur_btw, 0),
fin_btwtabelwaarde_code,
DECODE (
TRUNC (fin_verkoopfactuur_datum),
NULL,
'Leeg',
'Vermaat '
|| TO_CHAR (fin_verkoopfactuur_d2 - 28, 'dd/mm')
|| '-'
|| TO_CHAR (fin_verkoopfactuur_d2 - 1, 'dd/mm'))
FROM fin_verkoopfactuur v
WHERE fin_verkoopfactuur_c4 = 'catering'
AND fin_verkoopfactuur_c1 <> 'dummy';
CREATE OR REPLACE VIEW nybu_v_rap_factuur_cateraar
(
kostenplaats,
project,
bedrag,
btw,
bedragibtw,
btwcode,
regelomschrijving
)
AS
SELECT 'K90000' kostenplaats,
'P990000' project,
SUM (bedrag) bedrag,
SUM (btw) btw,
SUM (bedrag) + SUM (btw) bedragibtw,
btwcode,
opmerking
FROM nybu_v_exp_res_cat
GROUP BY btwcode, opmerking;
CREATE OR REPLACE VIEW nybu_v_rap_doorbelasting_cat
(
nummer,
adm,
grootboek,
kostenplaats,
project,
medewerker,
bedrag,
d_c,
regelomschrijving
)
AS
SELECT TO_CHAR (NULL) nummer,
TO_CHAR (NULL) adm,
kostensoort,
kostenplaats,
project,
TO_CHAR (NULL) medewerker,
SUM (bedrag) + SUM (btw),
'D',
opmerking
FROM nybu_v_exp_res_cat
GROUP BY kostensoort,
kostenplaats,
project,
opmerking
UNION ALL
SELECT TO_CHAR (NULL) nummer,
TO_CHAR (NULL) adm,
kostensoort,
'K90000' kostenplaats,
'P990000' project,
TO_CHAR (NULL) medewerker,
SUM (bedrag) + SUM (btw),
'C',
opmerking
FROM nybu_v_exp_res_cat
GROUP BY kostensoort, opmerking;
-- Zet status van de met RES_CODA ge<67>xporteerde reserveringen op Verwerkt.
-- res_srtkenmerk 202 Exportdatum
-- res_srtkenmerk 261 Ge<47>xporteerd bedrag
-- res_srtkenmerk 203 Te crediteren
-- res_srtkenmerk 241 In laatste export
-- fin_verkoopfactuur_n1 = intern/extern (0/1)
-- fin_verkoopfactuur_n2 = credit nee/ja (0/1)
-- fin_verkoopfactuur_c1 = reserveringnummer
-- NB: "In laatste export" wordt door de verwerk-export niet gereset
CREATE OR REPLACE PROCEDURE nybu_export_res_cat_verwerk (
p_applname IN VARCHAR2,
p_applrun IN VARCHAR2,
p_filedir IN VARCHAR2,
p_filename IN VARCHAR2)
AS
v_aanduiding VARCHAR2 (200);
v_errorhint VARCHAR2 (1000);
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_periode VARCHAR (6);
v_periodeNaam VARCHAR2 (20);
v_kenmerk_key_cred NUMBER;
v_kenmerk_key_datum NUMBER;
v_kenmerk_key_geexp NUMBER;
v_trackmessage VARCHAR2 (100);
BEGIN
v_aanduiding := 'Init';
v_errormsg := 'Aanpassen facturdatum';
UPDATE fin_verkoopfactuur
SET fin_verkoopfactuur_datum = SYSDATE
WHERE fin_verkoopfactuur_datum IS NULL
AND fin_verkoopfactuur_c4 = 'catering';
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
ROLLBACK;
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg :=
v_errorhint
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.writelog (p_applname,
'E',
v_aanduiding || v_errormsg,
'Onbekende fout! Niets verwerkt.');
COMMIT;
END nybu_export_res_cat_verwerk;
/
-- NYBU#30645: Rapportage voor inzage in verkoopfactuurtabel
-- fin_verkoopfactuur_n1 = intern/extern (0/1)
-- fin_verkoopfactuur_n2 = creditering nee/ja (0/1)
-- fin_verkoopfactuur_c1 = reserveringnummer
-- fin_verkoopfactuur_c2 = klantnaam
-- fin_verkoopfactuur_c3 = klantreferentie
-- fin_verkoopfactuur_d1 = res_rsv_ruimte_van
-- fin_verkoopfactuur_d2 = periode_tot (alleen voor catering)
CREATE OR REPLACE VIEW nybu_v_rap_fin_verkoopfactuur
AS
SELECT fin_verkoopfactuur_maand
|| fin_verkoopfactuur_id
|| fin_verkoopfactuur_c1
|| REPLACE (fin_verkoopfactuur_omschr, 'Correctie ', ' ')
hide_f_sort,
fin_verkoopfactuur_maand fclt_f_periode,
fin_verkoopfactuur_id fclt_f_factuur_id,
fin_verkoopfactuur_c1 fclt_x_reservering,
'<a class="details" onclick=''FcltMgr.openDetail("appl/res/res_reservering.asp?urole=fo&'
|| 'rsv_ruimte_key='
|| rr.res_rsv_ruimte_key
|| '")''>'
|| fin_verkoopfactuur_c1
|| '</a>'
html_reservering,
fin_verkoopfactuur_omschr,
prs_kostenplaats_nr fclt_f_project,
prs_kostenplaatsgrp_oms fclt_f_kostenplaats,
prs_kostensoort_oms fclt_f_kostensoort,
prs_debiteur_naam || ' ' || fin_verkoopfactuur_c2 fclt_f_debiteur,
fin_verkoopfactuur_c3 fclt_f_klantref,
fin_verkoopfactuur_bedrag bedrag_ex,
fin_verkoopfactuur_btw btw_bedrag,
fin_btwtabelwaarde_code
|| ' ('
|| TO_CHAR (fin_btwtabelwaarde_perc)
|| '%)'
btw_perc,
DECODE (fin_verkoopfactuur_n1, 0, 'intern', 1, 'extern')
fclt_f_inextern,
DECODE (fin_verkoopfactuur_n2, 0, '', 1, 'credit') fclt_f_credit
FROM fin_verkoopfactuur vf, res_rsv_ruimte rr
WHERE vf.fin_verkoopfactuur_xmlnode = 'reservering'
AND vf.fin_verkoopfactuur_c4 = 'ruimte/voorz'
AND rr.res_rsv_ruimte_key = fin_verkoopfactuur_refkey;
------- Rapportages Reserveringen ----------------------------------------------
-- Backoffice-looplijst voor General Services / schoonmaak
-- NYBU#27920: Catalogus "Catering room" (key 242) wegfilteren
CREATE OR REPLACE VIEW nybu_v_rap_res_looplijst
AS
SELECT DISTINCT
TO_CHAR (rr.res_rsv_ruimte_van, 'yyyy-mm-dd')
|| rg.alg_gebouw_upper
|| TO_CHAR (rr.res_rsv_ruimte_van, 'hh24:mi')
hide_f_srt,
rr.res_reservering_key || '/' || rr.res_rsv_ruimte_volgnr nr,
rg.alg_gebouw_omschrijving fclt_f_gebouw,
rr.res_rsv_ruimte_van datum,
TO_CHAR (rr.res_rsv_ruimte_van, 'hh24:mi') begintijd,
TO_CHAR (rr.res_rsv_ruimte_tot, 'hh24:mi') eindtijd,
r.res_ruimte_nr fclt_f_ruimte,
o.res_opstelling_omschrijving opstelling,
rr.res_rsv_ruimte_bezoekers aantal,
rr.res_rsv_ruimte_omschrijving omschrijving,
mld.aant Meldingen,
voorzieningen,
rr.res_rsv_ruimte_key
FROM res_rsv_ruimte rr,
res_ruimte_opstelling ro,
res_opstelling o,
res_ruimte r,
res_alg_ruimte ar,
alg_v_ruimte_gegevens rg,
( SELECT res_rsv_ruimte_key,
'Ja (' || COUNT (res_rsv_ruimte_key) || ')' aant
FROM mld_melding
WHERE res_rsv_ruimte_key IS NOT NULL
GROUP BY res_rsv_ruimte_key) mld,
( SELECT res_rsv_ruimte_key,
LISTAGG (voorziening, CHR (13) || CHR (10))
WITHIN GROUP (ORDER BY voorziening)
AS Voorzieningen
FROM (SELECT res_rsv_ruimte_key,
res_deel_omschrijving voorziening
FROM res_deel rd, res_rsv_deel rrd
WHERE RES_RSV_DEEL_verwijder IS NULL
AND rd.res_deel_key = rrd.res_deel_key
AND res_rsv_ruimte_key IS NOT NULL)
GROUP BY res_rsv_ruimte_key) voorz
WHERE rr.res_rsv_ruimte_verwijder IS NULL
AND ro.res_ruimte_opstel_key = rr.res_ruimte_opstel_key
AND o.res_opstelling_key = ro.res_opstelling_key
AND r.res_ruimte_key = ro.res_ruimte_key
AND r.res_discipline_key != 242
AND ar.res_ruimte_key = r.res_ruimte_key
AND ar.res_alg_ruimte_verwijder IS NULL
AND rg.alg_ruimte_key = ar.alg_ruimte_key
AND mld.res_rsv_ruimte_key(+) = rr.res_rsv_ruimte_key
AND voorz.res_rsv_ruimte_key(+) = rr.res_rsv_ruimte_key;
-- voor mobiel beperkt tot vandaag
CREATE OR REPLACE VIEW nybu_v_rap_mob_looplijst
AS
SELECT *
FROM nybu_v_rap_res_looplijst
WHERE TRUNC (datum) = TRUNC (SYSDATE);
-- Overzicht van reserveringen voor de komende 7 dagen die vandaag toegevoegd/gewijzigd zijn (tbv backoffice).
CREATE OR REPLACE VIEW nybu_v_rap_res_lastminutes
AS
SELECT ROUND (fac.safe_to_number (SYSDATE - t.fac_tracking_datum), 5)
|| rr.res_reservering_key
|| '/'
|| res_rsv_ruimte_volgnr
hide_f_srt,
TO_CHAR (t.fac_tracking_datum, 'DD-MM-YYYY') fclt_d_datum,
DECODE (
fac.safe_to_number (
TRUNC (SYSDATE) - TRUNC (t.fac_tracking_datum)),
0,
TO_CHAR (t.fac_tracking_datum, 'HH24:MI'),
TO_CHAR (t.fac_tracking_datum, 'DD-MM-YYYY HH24:MI'))
tijd,
pf.prs_perslid_naam_full door,
DECODE (sn.fac_srtnotificatie_code,
'RESUPD', 'Wijziging',
'RESNEW', 'Nieuw',
'RESDEL', 'Verwijderd')
fclt_f_actie,
'<a class="details" onclick=''FcltMgr.openDetail("appl/res/res_reservering.asp?urole=fo&'
|| 'rsv_ruimte_key='
|| rr.res_rsv_ruimte_key
|| '")''>'
|| rr.res_reservering_key
|| '/'
|| res_rsv_ruimte_volgnr
|| '</a>'
html_reservering,
TO_CHAR (rr.res_rsv_ruimte_van, 'DD-MM-YYYY HH24:MI') aanvang,
rr.res_rsv_ruimte_omschrijving omschrijving,
t.fac_tracking_oms logtekst,
k.prs_kostenplaats_nr || ' - ' || k.prs_kostenplaats_omschrijving
pnummer
FROM fac_tracking t,
fac_srtnotificatie sn,
res_rsv_ruimte rr,
prs_v_perslid_fullnames pf,
prs_kostenplaats k
WHERE sn.fac_srtnotificatie_code IN ('RESUPD', 'RESNEW', 'RESDEL')
AND t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key
AND pf.prs_perslid_key = t.prs_perslid_key
AND rr.res_rsv_ruimte_key = t.fac_tracking_refkey
AND k.prs_kostenplaats_key = rr.prs_kostenplaats_key
AND TRUNC (fac_tracking_datum) >= TRUNC (SYSDATE - 21)
AND TRUNC (rr.res_rsv_ruimte_van) BETWEEN TRUNC (SYSDATE)
AND TRUNC (SYSDATE) + 14;
CREATE OR REPLACE VIEW nybu_v_rap_res_mut_events
AS
-- Verwijderde reserveringen
SELECT ROUND (fac.safe_to_number (SYSDATE - t.fac_tracking_datum), 5)
|| rr.res_reservering_key
|| '/'
|| res_rsv_ruimte_volgnr
hide_f_srt,
TO_CHAR (t.fac_tracking_datum, 'DD-MM-YYYY') fclt_d_datum,
DECODE (
fac.safe_to_number (
TRUNC (SYSDATE) - TRUNC (t.fac_tracking_datum)),
0,
TO_CHAR (t.fac_tracking_datum, 'HH24:MI'),
TO_CHAR (t.fac_tracking_datum, 'DD-MM-YYYY HH24:MI'))
tijd,
pf.prs_perslid_naam_full door,
'Verwijderd' fclt_f_actie,
'<a class="details" onclick=''FcltMgr.openDetail("appl/res/res_reservering.asp?urole=fo&'
|| 'rsv_ruimte_key='
|| rr.res_rsv_ruimte_key
|| '")''>'
|| rr.res_reservering_key
|| '/'
|| res_rsv_ruimte_volgnr
|| '</a>'
html_reservering,
-- TO_CHAR(rr.res_rsv_ruimte_van, 'DD-MM-YYYY HH24:MI') aanvang,
sf.res_status_fo_omschrijving fclt_f_status,
rr.res_rsv_ruimte_omschrijving omschrijving,
COALESCE (t.fac_tracking_oms, lx.oms) logtekst,
NULL fclt_f_voorziening
FROM fac_tracking t,
fac_srtnotificatie sn,
res_rsv_ruimte rr,
prs_v_perslid_fullnames pf,
res_status_fo sf,
(SELECT fac_locale_xsl_label,
COALESCE (fac_locale_xsl_cust, fac_locale_xsl_tekst) oms
FROM fac_locale_xsl
WHERE fac_locale_xsl_label LIKE 'lcl_res_is_%'
AND fac_locale_xsl_lang = lcl.getuserlanguage ()) lx
WHERE sn.fac_srtnotificatie_code = 'RESDEL'
AND t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key
AND lx.fac_locale_xsl_label(+) =
'lcl_res_is_' || LOWER (sn.fac_srtnotificatie_code)
AND rr.res_rsv_ruimte_key = t.fac_tracking_refkey
AND pf.prs_perslid_key = t.prs_perslid_key
AND sf.res_status_fo_key = rr.res_status_fo_key
AND TRUNC (fac_tracking_datum) >= TRUNC (SYSDATE - 61)
UNION ALL
-- Mutaties/verwijdering hotelkamers + inhuur voorzieningen
SELECT ROUND (fac.safe_to_number (SYSDATE - t.fac_tracking_datum), 5)
|| rr.res_reservering_key
|| '/'
|| res_rsv_ruimte_volgnr
hide_f_srt,
TO_CHAR (t.fac_tracking_datum, 'DD-MM-YYYY') fclt_d_datum,
DECODE (
fac.safe_to_number (
TRUNC (SYSDATE) - TRUNC (t.fac_tracking_datum)),
0,
TO_CHAR (t.fac_tracking_datum, 'HH24:MI'),
TO_CHAR (t.fac_tracking_datum, 'DD-MM-YYYY HH24:MI'))
tijd,
pf.prs_perslid_naam_full door,
DECODE (sn.fac_srtnotificatie_code,
'RESUPD', 'Wijziging/Nieuw',
'RESNEW', 'Nieuw',
'RESDEL', 'Verwijderd')
actie,
'<a class="details" onclick=''FcltMgr.openDetail("appl/res/res_reservering.asp?urole=fo&'
|| 'rsv_ruimte_key='
|| rr.res_rsv_ruimte_key
|| '")''>'
|| rr.res_reservering_key
|| '/'
|| res_rsv_ruimte_volgnr
|| '</a>'
html_reservering,
-- TO_CHAR(rr.res_rsv_ruimte_van, 'DD-MM-YYYY HH24:MI') aanvang,
sf.res_status_fo_omschrijving fclt_f_status,
rr.res_rsv_ruimte_omschrijving,
COALESCE (t.fac_tracking_oms, lx.oms),
ra.ins_discipline_omschrijving
|| ' / '
|| ra.res_artikel_omschrijving
FROM fac_tracking t,
fac_srtnotificatie sn,
res_rsv_ruimte rr,
prs_v_perslid_fullnames pf,
res_status_fo sf,
(SELECT fac_locale_xsl_label,
COALESCE (fac_locale_xsl_cust, fac_locale_xsl_tekst) oms
FROM fac_locale_xsl
WHERE fac_locale_xsl_label LIKE 'lcl_res_is_%'
AND fac_locale_xsl_lang = lcl.getuserlanguage ()) lx,
(SELECT ins_discipline_omschrijving, res_artikel_omschrijving
FROM res_artikel a, res_discipline d
WHERE a.res_discipline_key IN (462, 581)
AND d.ins_discipline_key = a.res_discipline_key) ra
WHERE sn.fac_srtnotificatie_code LIKE 'RES%'
AND t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key
AND lx.fac_locale_xsl_label(+) =
'lcl_res_is_' || LOWER (sn.fac_srtnotificatie_code)
AND rr.res_rsv_ruimte_key = t.fac_tracking_refkey
AND pf.prs_perslid_key = t.prs_perslid_key
AND sf.res_status_fo_key = rr.res_status_fo_key
AND TRUNC (fac_tracking_datum) >= TRUNC (SYSDATE - 61)
AND fac_tracking_oms LIKE
'%Arti___ %' || ra.res_artikel_omschrijving || '%';
-- Lijst externe reserveringen, met link om offerte uit te draaien
-- alleen voor kostenplaatsen externe reserveringen
CREATE OR REPLACE VIEW nybu_v_rap_res_offertes
AS
SELECT rr.res_reservering_key hide_f_srt,
TO_CHAR (rr.res_reservering_key) fclt_f_reservering,
TO_CHAR (rr.res_rsv_ruimte_van, 'YYYY-MM-DD') datum,
rr.res_rsv_ruimte_omschrijving omschrijving,
k.prs_kostenplaats_nr fclt_f_budgetnr,
'<a class="details" onclick=''FcltMgr.openDetail("appl/fac/fac_report.asp?usrrap_key=282&mode=list&fclt_f_reservering='
|| rr.res_reservering_key
|| '", "Offerte '
|| rr.res_reservering_key
|| '")''>Print offerte</a>'
html_offerte
FROM res_rsv_ruimte rr,
prs_kostenplaats k,
( SELECT res_reservering_key, MIN (res_rsv_ruimte_volgnr) volgnr
FROM res_rsv_ruimte rrr, prs_kostenplaats pk
WHERE res_rsv_ruimte_van >= SYSDATE
AND res_status_bo_key IN (2)
AND rrr.res_status_fo_key IN (1, 2, 3)
AND res_rsv_ruimte_verwijder IS NULL
AND rrr.prs_kostenplaats_key = pk.prs_kostenplaats_key
AND pk.prs_kostenplaats_extern = 1
GROUP BY res_reservering_key) eerste
WHERE rr.res_reservering_key = eerste.res_reservering_key
AND rr.res_rsv_ruimte_volgnr = eerste.volgnr
AND k.prs_kostenplaats_key = rr.prs_kostenplaats_key;
-- Alle gegevens van een externe reservering die nodig zijn om een offerte-bon te kunnen maken.
-- kenmerk 201 = Bedrijf klant
-- kenmerk 141 = Contactpersoon bedrijf klant
-- kenmerk 55 = Alternative description
-- kenmerk 281 = referentie/kenmerk klant (bedrijf)
CREATE OR REPLACE VIEW nybu_v_rap_res_offerte
AS
SELECT *
FROM (SELECT *
FROM ( -- reservering
SELECT rr.res_reservering_key fclt_key,
TO_CHAR (rr.res_reservering_key)
fclt_f_reservering,
COALESCE (
altdesc.res_kenmerkreservering_waarde,
rr.res_rsv_ruimte_omschrijving)
omschrijving,
TO_CHAR (rr.res_rsv_ruimte_van, 'DD') dag,
TO_CHAR (rr.res_rsv_ruimte_van, 'MM') maand,
TO_CHAR (rr.res_rsv_ruimte_van, 'YYYY') jaar,
rr.res_rsv_ruimte_bezoekers totaal_aantal,
cp.prs_contactpersoon_naam_full
bedrijf_contactpersoon,
b.prs_bedrijf_naam bedrijf_naam,
b.prs_bedrijf_post_adres bedrijf_adres,
b.prs_bedrijf_post_postcode bedrijf_pc,
b.prs_bedrijf_post_plaats bedrijf_plaats,
b.prs_bedrijf_post_land bedrijf_land,
km.res_kenmerkreservering_waarde
bedrijf_kenmerk,
prog.res_kenmerkreservering_waarde programma,
p.prs_perslid_voornaam user_voornaam,
p.prs_perslid_tussenvoegsel user_tv,
p.prs_perslid_naam user_naam
FROM res_rsv_ruimte rr,
prs_bedrijf b,
nybu_v_contactpersoon cp,
(SELECT *
FROM res_kenmerkwaarde
WHERE res_kenmerkwaarde_verwijder IS NULL
AND res_kenmerk_key = 201) bedr,
(SELECT *
FROM res_kenmerkwaarde
WHERE res_kenmerkwaarde_verwijder IS NULL
AND res_kenmerk_key = 141) cont,
(SELECT *
FROM res_kenmerkwaarde
WHERE res_kenmerkwaarde_verwijder IS NULL
AND res_kenmerk_key = 55) altdesc,
(SELECT *
FROM res_kenmerkwaarde
WHERE res_kenmerkwaarde_verwijder IS NULL
AND res_kenmerk_key = 281) km,
(SELECT *
FROM res_kenmerkwaarde
WHERE res_kenmerkwaarde_verwijder IS NULL
AND res_kenmerk_key = 243) prog,
prs_perslid p
WHERE rr.res_rsv_ruimte_verwijder IS NULL
AND bedr.res_rsv_ruimte_key(+) =
rr.res_rsv_ruimte_key
AND b.prs_bedrijf_key(+) =
fac.safe_to_number (
bedr.res_kenmerkreservering_waarde)
AND cont.res_rsv_ruimte_key(+) =
rr.res_rsv_ruimte_key
AND cp.prs_contactpersoon_key(+) =
fac.safe_to_number (
cont.res_kenmerkreservering_waarde)
AND altdesc.res_rsv_ruimte_key(+) =
rr.res_rsv_ruimte_key
AND km.res_rsv_ruimte_key(+) =
rr.res_rsv_ruimte_key
AND prog.res_rsv_ruimte_key(+) =
rr.res_rsv_ruimte_key
AND rr.res_rsv_ruimte_key =
(SELECT MIN (res_rsv_ruimte_key)
FROM res_rsv_ruimte
WHERE res_reservering_key =
rr.res_reservering_key
AND res_rsv_ruimte_verwijder IS NULL)
AND p.prs_perslid_key =
rr.res_rsv_ruimte_contact_key) r1
LEFT OUTER JOIN
( -- ruimtes
SELECT 'ruimte' soort,
reservering,
ruimte,
max_bez,
aantal,
datum,
van,
tot,
disc,
opstel,
ROUND (
DECODE (btw_incl,
0, prijs,
1, prijs / (1 + (btw_perc / 100))),
2)
prijs_ex,
ROUND (
DECODE (btw_incl,
0, prijs * (1 + (btw_perc / 100)),
1, prijs),
2)
prijs_in
FROM (SELECT rr.res_reservering_key reservering,
rog.res_ruimte_nr ruimte,
rog.res_ruimte_opstel_bezoekers max_bez,
rr.res_rsv_ruimte_bezoekers aantal,
TO_CHAR (rr.res_rsv_ruimte_van,
'DD-MM-YYYY')
datum,
TO_CHAR (rr.res_rsv_ruimte_van,
'HH24:MI')
van,
TO_CHAR (rr.res_rsv_ruimte_tot,
'HH24:MI')
tot,
d.ins_discipline_key disc,
rog.res_opstelling_omschrijving opstel,
res.getruimteprijs (
rr.res_rsv_ruimte_key)
- COALESCE (res_rsv_ruimte_korting, 0)
prijs,
21 btw_perc,
COALESCE (ks.prs_kostensoort_btw, 1)
btw_incl
FROM res_rsv_ruimte rr,
res_v_ruimte_opstel_gegevens rog,
res_ruimte r,
res_discipline d,
prs_kostensoort ks
WHERE rr.res_rsv_ruimte_verwijder IS NULL
AND rog.res_ruimte_opstel_key =
rr.res_ruimte_opstel_key
AND r.res_ruimte_key =
rog.res_ruimte_key
AND d.ins_discipline_key =
r.res_discipline_key
AND ks.prs_kostensoort_key(+) =
d.prs_kostensoort_key)
UNION ALL
-- objecten
SELECT 'deel' soort,
reservering,
deel,
NULL bez_max,
aantal,
datum,
van,
tot,
disc,
NULL opstel,
ROUND (
DECODE (btw_incl,
0, prijs,
1, prijs / (1 + (btw_perc / 100))),
2)
prijs_ex,
ROUND (
DECODE (btw_incl,
0, prijs * (1 + (btw_perc / 100)),
1, prijs),
2)
prijs_in
FROM (SELECT rr.res_reservering_key reservering,
d.res_deel_omschrijving deel,
rd.res_rsv_deel_aantal aantal,
TO_CHAR (rr.res_rsv_ruimte_van,
'DD-MM-YYYY')
datum,
TO_CHAR (rd.res_rsv_deel_van, 'HH24:MI')
van,
TO_CHAR (rd.res_rsv_deel_tot, 'HH24:MI')
tot,
d.ins_discipline_key disc,
res.getdeelprijs (rd.res_rsv_deel_key)
prijs,
21 btw_perc,
COALESCE (ks.prs_kostensoort_btw, 1)
btw_incl
FROM res_rsv_ruimte rr,
res_rsv_deel rd,
res_deel d,
res_discipline d,
prs_kostensoort ks
WHERE rr.res_rsv_ruimte_verwijder IS NULL
AND rd.res_rsv_ruimte_key =
rr.res_rsv_ruimte_key
AND rd.res_rsv_deel_verwijder IS NULL
AND d.res_deel_key = rd.res_deel_key
AND d.ins_discipline_key =
d.res_discipline_key
AND ks.prs_kostensoort_key(+) =
d.prs_kostensoort_key)
UNION ALL
-- artikelen
SELECT 'artikel' soort,
reservering,
artikel,
volgnr bez_max,
aantal,
datum,
van,
NULL tot,
disc,
NULL opstel,
ROUND (
DECODE (btw_incl,
0, prijs,
1, prijs / (1 + (btw_perc / 100))),
2)
prijs_ex,
ROUND (
DECODE (btw_incl,
0, prijs * (1 + (btw_perc / 100)),
1, prijs),
2)
prijs_in
FROM (SELECT rr.res_reservering_key reservering,
a.res_artikel_omschrijving artikel,
ra.res_rsv_artikel_aantal aantal,
TO_CHAR (ra.res_rsv_artikel_levering,
'DD-MM-YYYY')
datum,
TO_CHAR (ra.res_rsv_artikel_levering,
'HH24:MI')
van,
d.ins_discipline_key disc,
a.res_artikel_volgnummer volgnr,
res.getartikelprijs (
ra.res_rsv_artikel_key)
prijs,
COALESCE (a.res_artikel_btw, 0) btw_perc,
COALESCE (ks.prs_kostensoort_btw, 1)
btw_incl
FROM res_rsv_ruimte rr,
res_rsv_artikel ra,
res_artikel a,
res_discipline d,
prs_kostensoort ks
WHERE rr.res_rsv_ruimte_verwijder IS NULL
AND ra.res_rsv_ruimte_key =
rr.res_rsv_ruimte_key
AND ra.res_rsv_artikel_verwijder IS NULL
AND a.res_artikel_key =
ra.res_artikel_key
AND d.ins_discipline_key =
a.res_discipline_key
AND ks.prs_kostensoort_key(+) =
d.prs_kostensoort_key)) r2
ON r1.fclt_key = r2.reservering);
------- Overig Reserveringen ---------------------------------------------------
-- Voor kenmerkdomein contactpersoon (RES)
CREATE OR REPLACE VIEW nybu_v_contactpersoon
AS
SELECT prs_contactpersoon_key,
DECODE (prs_contactpersoon_aanhef,
NULL, 'dhr/mevr ',
prs_contactpersoon_aanhef || ' ')
|| DECODE (prs_contactpersoon_voorletters,
NULL, '',
prs_contactpersoon_voorletters || ' ')
|| DECODE (prs_contactpersoon_tussenv,
NULL, '',
prs_contactpersoon_tussenv || ' ')
|| prs_contactpersoon_naam
prs_contactpersoon_naam_full,
b.prs_bedrijf_naam
FROM prs_contactpersoon p, prs_bedrijf b
WHERE p.prs_bedrijf_key = b.prs_bedrijf_key;
-- Notificatiejob res_reminder: 4 weken voor aanvang (obv 24/7)
CREATE OR REPLACE VIEW nybu_v_noti_resreminder
(
CODE,
SENDER,
RECEIVER,
TEXT,
KEY,
XKEY
)
AS
SELECT 'RESINF',
NULL,
rsvr.res_rsv_ruimte_contact_key,
'Reservering '
|| res.res_reservering_key
|| ': U heeft op '
|| TO_CHAR (rsvr.res_rsv_ruimte_van, 'DD-MM')
|| ' van '
|| TO_CHAR (rsvr.res_rsv_ruimte_van, 'HH24:MI')
|| ' tot '
|| TO_CHAR (rsvr.res_rsv_ruimte_tot, 'HH24:MI')
|| ' ruimte '
|| r.res_ruimte_nr
|| ' gereserveerd.',
res.res_reservering_key,
rsvr.res_rsv_ruimte_key
FROM res_v_aanwezigreservering res,
res_v_aanwezigrsv_ruimte rsvr,
res_ruimte_opstelling opst,
res_disc_params rdp,
res_ruimte r
WHERE r.res_discipline_key = rdp.res_ins_discipline_key
AND rdp.res_disc_params_noti_dagen IS NOT NULL
AND res.res_reservering_key = rsvr.res_reservering_key
AND opst.res_ruimte_opstel_key = rsvr.res_ruimte_opstel_key
AND opst.res_ruimte_key = r.res_ruimte_key
AND rsvr.res_status_fo_key <= 5
AND rsvr.res_rsv_ruimte_van BETWEEN SYSDATE
+ res_disc_params_noti_dagen
AND SYSDATE
+ res_disc_params_noti_dagen
+ 1
AND rsvr.res_rsv_ruimte_van >= SYSDATE
UNION ALL
SELECT 'RESINF',
NULL,
res_rsv_ruimte_contact_key,
'Reservering '
|| res_reservering_key
|| ': U heeft op '
|| TO_CHAR (MIN (van), 'dd-mm')
|| DECODE (
MIN (van),
MAX (tot),
' om ' || TO_CHAR (MIN (van), 'hh24:mi'),
' van '
|| TO_CHAR (MIN (van), 'hh24:mi')
|| ' tot '
|| TO_CHAR (MAX (tot), 'hh24:mi'))
|| ' in ruimte ('
|| (SELECT alg_gebouw_code
|| '-'
|| alg_verdieping_code
|| '-'
|| alg_ruimte_nr
FROM alg_v_onroerendgoed_gegevens arg
WHERE arg.alg_ruimte_key = ruimte_key)
|| ') '
|| COUNT (res_reservering_key)
|| ' voorziening(en) gereserveerd.',
res_reservering_key,
res_rsv_ruimte_key
FROM (SELECT rsvr.res_rsv_ruimte_contact_key,
res.res_reservering_key,
rsvd.res_rsv_deel_van van,
rsvd.res_rsv_deel_tot tot,
rsvr.res_rsv_ruimte_key,
rsvr.alg_ruimte_key ruimte_key
FROM res_v_aanwezigreservering res,
res_v_aanwezigrsv_ruimte rsvr,
res_disc_params rdp,
res_rsv_deel rsvd,
res_deel rd
WHERE rsvd.res_rsv_ruimte_key = rsvr.res_rsv_ruimte_key
AND rd.res_deel_key = rsvd.res_deel_key
AND rd.res_discipline_key = rdp.res_ins_discipline_key
AND rdp.res_disc_params_noti_dagen IS NOT NULL
AND res.res_reservering_key = rsvr.res_reservering_key
AND rsvr.res_ruimte_opstel_key IS NULL
AND rsvr.res_status_fo_key <= 5
AND rsvd.res_rsv_deel_verwijder IS NULL
AND rsvd.res_rsv_deel_van BETWEEN SYSDATE
+ res_disc_params_noti_dagen
AND SYSDATE
+ res_disc_params_noti_dagen
+ 1
AND rsvd.res_rsv_deel_van >= SYSDATE
UNION ALL
SELECT rsvr.res_rsv_ruimte_contact_key,
res.res_reservering_key,
rsva.res_rsv_artikel_levering van,
rsva.res_rsv_artikel_levering tot,
rsvr.res_rsv_ruimte_key,
rsvr.alg_ruimte_key ruimte_key
FROM res_v_aanwezigreservering res,
res_v_aanwezigrsv_ruimte rsvr,
res_disc_params rdp,
res_rsv_artikel rsva,
res_artikel ra
WHERE rsva.res_rsv_ruimte_key = rsvr.res_rsv_ruimte_key
AND ra.res_discipline_key = rdp.res_ins_discipline_key
AND rsva.res_artikel_key = ra.res_artikel_key
AND rdp.res_disc_params_noti_dagen IS NOT NULL
AND res.res_reservering_key = rsvr.res_reservering_key
AND rsvr.res_ruimte_opstel_key IS NULL
AND rsvr.res_status_fo_key <= 5
AND rsva.res_rsv_artikel_verwijder IS NULL
AND rsva.res_rsv_artikel_levering BETWEEN SYSDATE
+ res_disc_params_noti_dagen
AND SYSDATE
+ res_disc_params_noti_dagen
+ 1
AND rsva.res_rsv_artikel_levering >= SYSDATE)
GROUP BY res_rsv_ruimte_contact_key,
res_reservering_key,
res_rsv_ruimte_key,
ruimte_key;
-- Alle door Vermaat geleverde artikelen
-- - N<> 1-1-2014, want pas sinds die datum leverancier
-- - Met 3D-scoping op catalogi
CREATE OR REPLACE VIEW nybu_v_vermaat
AS
SELECT res_reservering_key,
res_rsv_ruimte_volgnr,
res_rsv_ruimte_key,
res_rsv_ruimte_van,
res_rsv_artikel_levering,
TO_CHAR (res_rsv_artikel_levering, 'DD-MM-YYYY') datum,
TO_CHAR (res_rsv_artikel_levering, 'HH24:MI') tijd,
res_srtactiviteit_key,
res_artikel_key,
artikelnr,
artikeloms,
ins_discipline_key,
catalogus,
status,
aantal,
res_rsv_artikel_prijs,
res_artikel_prijs,
eenheid,
eenheidsprijs,
res_artikel_btw,
btw,
DECODE (prs_kostensoort_btw, 0, totaalprijs, 1, totaalprijs / btw)
totaalprijs_ex,
DECODE (prs_kostensoort_btw, 0, totaalprijs * btw, 1, totaalprijs)
totaalprijs_in,
DECODE (prs_kostensoort_btw,
0, totaalprijs * (btw - 1),
1, totaalprijs - totaalprijs / btw)
totaal_btw,
prs_kostenplaats_nr,
prs_kostenplaats_omschrijving,
SUBSTR (prs_kostenplaatsgrp_oms,
1,
INSTR (prs_kostenplaatsgrp_oms, ' - ') - 1)
kpngrp_nr,
SUBSTR (prs_kostenplaatsgrp_oms,
INSTR (prs_kostenplaatsgrp_oms, ' - ') + 3)
kpngrp_oms,
prs_perslid_key,
prs_perslid_naam_full
FROM (SELECT rr.res_reservering_key,
rr.res_rsv_ruimte_volgnr,
rr.res_rsv_ruimte_key,
rr.res_rsv_ruimte_van,
ra.res_rsv_artikel_levering,
act.res_srtactiviteit_key,
a.res_artikel_key,
a.res_artikel_nr artikelnr,
a.res_artikel_omschrijving artikeloms,
d.ins_discipline_key,
d.ins_discipline_omschrijving catalogus,
ra.res_status_bo_key status,
ra.res_rsv_artikel_aantal aantal,
ra.res_rsv_artikel_prijs,
a.res_artikel_prijs,
a.res_artikel_eenheid eenheid,
a.res_artikel_prijs eenheidsprijs,
a.res_artikel_btw,
COALESCE (1 + (a.res_artikel_btw / 100), 1) btw,
res.getartikelprijs (ra.res_rsv_artikel_key) totaalprijs,
k.prs_kostenplaats_nr,
k.prs_kostenplaats_omschrijving,
kg.prs_kostenplaatsgrp_oms,
ks.prs_kostensoort_btw,
pf.prs_perslid_key,
pf.prs_perslid_naam_full
FROM res_rsv_artikel ra,
res_artikel a,
res_discipline d,
res_rsv_ruimte rr,
res_activiteit act,
prs_kostenplaats k,
prs_kostenplaatsgrp kg,
prs_kostensoort ks,
prs_v_perslid_fullnames pf
WHERE ra.res_rsv_artikel_verwijder IS NULL
AND ra.res_rsv_artikel_levering >=
TO_DATE ('01-01-2014', 'DD-MM-YYYY')
AND a.res_artikel_key = ra.res_artikel_key
AND d.ins_discipline_key = a.res_discipline_key
AND d.ins_discipline_min_level = 2
AND d.ins_discipline_key NOT IN (462, 581)
AND rr.res_rsv_ruimte_key = ra.res_rsv_ruimte_key
AND act.res_activiteit_key = rr.res_activiteit_key
AND k.prs_kostenplaats_key = rr.prs_kostenplaats_key
AND kg.prs_kostenplaatsgrp_key(+) =
k.prs_kostenplaatsgrp_key
AND ks.prs_kostensoort_key(+) = d.prs_kostensoort_key
AND pf.prs_perslid_key = rr.res_rsv_ruimte_contact_key);
CREATE OR REPLACE VIEW nybu_v_rap_vermaat
AS
SELECT res_rsv_artikel_levering hide_f_sort,
res_reservering_key || '/' || res_rsv_ruimte_volgnr
fclt_f_reservering,
datum fclt_d_datum,
tijd,
artikelnr,
artikeloms fclt_f_artikel,
catalogus fclt_f_catalogus,
aantal,
eenheid,
eenheidsprijs,
ROUND (totaalprijs_ex, 2) totaalprijs_excl,
ROUND (totaalprijs_in, 2) totaalprijs_incl,
prs_kostenplaats_nr || ' - ' || prs_kostenplaats_omschrijving
fclt_f_pnummer,
kpngrp_nr || ' - ' || kpngrp_oms fclt_f_kostenplaats,
ins_discipline_key fclt_3d_discipline_key
FROM nybu_v_vermaat;
CREATE OR REPLACE VIEW nybu_v_rap_vermaat_cumulatief
AS
SELECT datum fclt_d_datum,
TO_CHAR (res_rsv_artikel_levering, 'YYYY-MM-DD') hide_f_levering,
catalogus || artikeloms hide_f_regel,
artikelnr,
artikeloms fclt_f_artikel,
eenheid,
catalogus fclt_f_catalogus,
COALESCE (SUM (totaalprijs_ex), 0) totaalprijs_ex,
COALESCE (SUM (totaalprijs_in), 0) totaalprijs_in,
ins_discipline_key fclt_3d_discipline_key
FROM nybu_v_vermaat
GROUP BY datum,
TO_CHAR (res_rsv_artikel_levering, 'YYYY-MM-DD'),
artikelnr,
artikeloms,
eenheid,
catalogus,
ins_discipline_key;
CREATE OR REPLACE VIEW nybu_v_rap_vermaat_kpn
AS
SELECT datum fclt_d_datum,
TO_CHAR (res_rsv_artikel_levering, 'YYYY-MM-DD') hide_f_levering,
prs_kostenplaats_nr || artikeloms hide_f_regel,
artikelnr,
artikeloms fclt_f_artikel,
eenheid,
prs_kostenplaats_nr || ' - ' || prs_kostenplaats_omschrijving
fclt_f_pnummer,
kpngrp_nr || ' - ' || kpngrp_oms fclt_f_kostenplaats,
COALESCE (SUM (totaalprijs_ex), 0) totaalprijs_ex,
COALESCE (SUM (totaalprijs_in), 0) totaalprijs_in,
ins_discipline_key fclt_3d_discipline_key
FROM nybu_v_vermaat
GROUP BY datum,
TO_CHAR (res_rsv_artikel_levering, 'YYYY-MM-DD'),
artikelnr,
artikeloms,
eenheid,
prs_kostenplaats_nr,
prs_kostenplaats_omschrijving,
kpngrp_nr,
kpngrp_oms,
ins_discipline_key;
--res_srtkenmerk External contact 41
--res_srtkenmerk Company 81
--res_srtkenmerk Referentie klant 121
--res_srtactiviteit Extern 10
CREATE OR REPLACE VIEW nybu_v_rap_vermaat_facturatie
AS
SELECT TO_CHAR (r.res_rsv_ruimte_van, 'YYYYMMDDHH24MI-')
|| r.res_reservering_key
|| '/'
|| res_rsv_ruimte_volgnr
hide_f_sort,
r.res_reservering_key || '/' || res_rsv_ruimte_volgnr
fclt_f_reservering,
r.prs_kostenplaats_nr || ' - ' || r.prs_kostenplaats_omschrijving
fclt_x_pnummer,
r.kpngrp_nr || ' - ' || r.kpngrp_oms fclt_x_kostenplaats,
r.prs_kostenplaats_nr pnummer,
r.prs_kostenplaats_omschrijving pnummer_oms,
r.kpngrp_nr kostenplaats,
r.kpngrp_oms kostenplaats_oms,
r.datum fclt_d_datum,
REPLACE (r.prs_perslid_naam_full, 'INACTIEF: ', '')
fclt_f_contactpersoon,
ROUND (COALESCE (l.ex_btw, 0), 2) excl_btw_laag,
ROUND (COALESCE (l.btw, 0), 2) btw_laag,
ROUND (COALESCE (h.ex_btw, 0), 2) excl_btw_hoog,
ROUND (COALESCE (h.btw, 0), 2) btw_hoog,
ROUND (COALESCE (l.ex_btw, 0) + COALESCE (h.ex_btw, 0), 2)
totaal_excl,
ROUND (COALESCE (l.btw, 0) + COALESCE (h.btw, 0), 2) totaal_btw,
ROUND (COALESCE (l.totaal, 0) + COALESCE (h.totaal, 0), 2)
totaal_incl,
-- a.totaal chck,
res_kenmerkreservering_waarde referentie_klant,
prs_contactpersoon_aanhef klant_aanhef,
prs_contactpersoon_voorletters klant_voorletters,
prs_contactpersoon_voornaam klant_voornaam,
prs_contactpersoon_tussenv klant_tussenvoegsel,
prs_contactpersoon_naam klant_achternaam,
prs_contactpersoon_telefoon_1 klant_tel1,
prs_contactpersoon_telefoon_2 klant_tel2,
prs_contactpersoon_email klant_email,
prs_bedrijf_naam bedrijf_naam,
prs_bedrijf_post_adres bedrijf_postadres,
prs_bedrijf_post_postcode bedrijf_postcode,
prs_bedrijf_post_plaats bedrijf_plaats,
prs_bedrijf_post_land bedrijf_land,
prs_bedrijf_telefoon bedrijf_tel,
prs_bedrijf_email bedrijf_email,
prs_leverancier_nr bedrijf_debiteurnr
FROM (SELECT DISTINCT res_rsv_ruimte_key,
res_reservering_key,
res_rsv_ruimte_volgnr,
res_rsv_ruimte_van,
prs_kostenplaats_nr,
prs_kostenplaats_omschrijving,
kpngrp_nr,
kpngrp_oms,
datum,
prs_perslid_naam_full,
'Extern' extern,
cp.prs_contactpersoon_aanhef,
cp.prs_contactpersoon_voorletters,
cp.prs_contactpersoon_tussenv,
cp.prs_contactpersoon_naam,
cp.prs_contactpersoon_voornaam,
cp.prs_contactpersoon_telefoon_1,
cp.prs_contactpersoon_telefoon_2,
cp.prs_contactpersoon_email,
b.prs_bedrijf_naam,
b.prs_bedrijf_post_adres,
b.prs_bedrijf_post_postcode,
b.prs_bedrijf_post_plaats,
b.prs_bedrijf_post_land,
b.prs_bedrijf_telefoon,
b.prs_bedrijf_email,
b.prs_leverancier_nr,
rf.res_kenmerkreservering_waarde
FROM nybu_v_vermaat v,
(SELECT kw.res_rsv_ruimte_key cp_rsv_ruimte_key, p.*
FROM res_kenmerkwaarde kw,
res_kenmerk k,
prs_contactpersoon p
WHERE kw.res_kenmerkwaarde_verwijder IS NULL
AND k.res_kenmerk_verwijder IS NULL
AND k.res_kenmerk_key = kw.res_kenmerk_key
AND k.res_srtkenmerk_key = 41
AND p.prs_contactpersoon_key =
fac.safe_to_number (
kw.res_kenmerkreservering_waarde)) cp,
(SELECT kw.res_rsv_ruimte_key b_rsv_ruimte_key, b.*
FROM res_kenmerkwaarde kw,
res_kenmerk k,
prs_v_aanwezigbedrijf b
WHERE kw.res_kenmerkwaarde_verwijder IS NULL
AND k.res_kenmerk_verwijder IS NULL
AND k.res_kenmerk_key = kw.res_kenmerk_key
AND k.res_srtkenmerk_key = 81
AND b.prs_bedrijf_key =
fac.safe_to_number (
kw.res_kenmerkreservering_waarde)) b,
(SELECT kw.res_rsv_ruimte_key rf_rsv_ruimte_key,
res_kenmerkreservering_waarde
FROM res_kenmerkwaarde kw, res_kenmerk k
WHERE kw.res_kenmerkwaarde_verwijder IS NULL
AND k.res_kenmerk_verwijder IS NULL
AND k.res_kenmerk_key = kw.res_kenmerk_key
AND k.res_srtkenmerk_key = 121) rf
WHERE v.res_srtactiviteit_key = 10
AND cp.cp_rsv_ruimte_key(+) = v.res_rsv_ruimte_key
AND b.b_rsv_ruimte_key(+) = v.res_rsv_ruimte_key
AND rf.rf_rsv_ruimte_key(+) = v.res_rsv_ruimte_key
UNION ALL
SELECT DISTINCT res_rsv_ruimte_key,
res_reservering_key,
res_rsv_ruimte_volgnr,
res_rsv_ruimte_van,
prs_kostenplaats_nr,
prs_kostenplaats_omschrijving,
kpngrp_nr,
kpngrp_oms,
datum,
prs_perslid_naam_full,
'Intern' extern,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL
FROM nybu_v_vermaat
WHERE res_srtactiviteit_key != 10) r
LEFT OUTER JOIN ( SELECT res_rsv_ruimte_key,
SUM (totaalprijs_ex) ex_btw,
SUM (totaal_btw) btw,
SUM (totaalprijs_in) totaal
FROM nybu_v_vermaat
WHERE res_artikel_btw = 6
GROUP BY res_rsv_ruimte_key) l
ON l.res_rsv_ruimte_key = r.res_rsv_ruimte_key
LEFT OUTER JOIN ( SELECT res_rsv_ruimte_key,
SUM (totaalprijs_ex) ex_btw,
SUM (totaal_btw) btw,
SUM (totaalprijs_in) totaal
FROM nybu_v_vermaat
WHERE res_artikel_btw = 21
GROUP BY res_rsv_ruimte_key) h
ON h.res_rsv_ruimte_key = r.res_rsv_ruimte_key
-- LEFT OUTER JOIN (
-- SELECT res_rsv_ruimte_key,
-- SUM(totaalprijs_ex) ex_btw,
-- SUM(totaal_btw) btw,
-- SUM(totaalprijs_in) totaal
-- FROM nybu_v_vermaat
-- GROUP BY res_rsv_ruimte_key
-- ) a
-- ON a.res_rsv_ruimte_key = r.res_rsv_ruimte_key
;
---------------------------------------------------------------------------------
-- Rapportages goedkeuring catering
--
CREATE OR REPLACE VIEW nybu_v_res_approve
(
hide_f_srt,
datum,
contact_key,
collega_key,
contact,
rsv_ruimte_key,
goedgekeurd,
melding,
html_nieuwe_opmerking,
bedrag,
catering,
status,
export,
html_reservering,
html_reservering_bo,
aanvang,
omschrijving,
pnummer,
intern_extern
)
AS
SELECT ROUND (fac.safe_to_number (SYSDATE - res_rsv_ruimte_van), 5)
|| rr.res_reservering_key
|| '/'
|| res_rsv_ruimte_volgnr
hide_f_srt,
res_rsv_ruimte_van datum,
rr.res_rsv_ruimte_contact_key,
c.prs_perslid_key_alt collega_key,
pfc.prs_perslid_naam_friendly contact,
rr.res_rsv_ruimte_key,
DECODE (rr.res_rsv_ruimte_afgerond, 1, 'Ja', 'Nee') goedgekeurd,
mld_melding_key,
'<a class="details" onclick=''FcltMgr.openDetail("default.asp?u=YDsGBTulSHsSiCwP&amp;rsv_ruimte_key='
|| rr.res_rsv_ruimte_key
|| '&amp;txt=Opmerking over reservering: '
|| rr.res_reservering_key
|| '/'
|| res_rsv_ruimte_volgnr
|| '")''>Opmerking</a>'
nieuwe_opmerking,
res.getdeelresprijs (rr.res_rsv_ruimte_key) bedrag,
COALESCE (
(SELECT SUM (res.getartikelprijs (res_rsv_artikel_key))
FROM res_rsv_artikel rra, res_artikel ra
WHERE res_rsv_artikel_verwijder IS NULL
AND rra.res_artikel_key = ra.res_artikel_key
AND ra.res_discipline_key NOT IN (462, 581, 741) -- hotelkamers, inhuur voorzieningen, linnen
AND rra.res_rsv_ruimte_key = rr.res_rsv_ruimte_key),
0)
catering,
DECODE (res_kenmerkreservering_waarde,
NULL, s.res_status_bo_omschrijving,
'Verwerkt')
status,
res_kenmerkreservering_waarde export,
'<a class="details" onclick=''FcltMgr.openDetail("appl/res/res_reservering.asp?urole=fe&'
|| 'rsv_ruimte_key='
|| rr.res_rsv_ruimte_key
|| '")''>'
|| rr.res_reservering_key
|| '/'
|| res_rsv_ruimte_volgnr
|| '</a>'
html_reservering,
'<a class="details" onclick=''FcltMgr.openDetail("appl/res/res_reservering.asp?urole=fo&'
|| 'rsv_ruimte_key='
|| rr.res_rsv_ruimte_key
|| '")''>'
|| rr.res_reservering_key
|| '/'
|| res_rsv_ruimte_volgnr
|| '</a>'
html_reservering_bo,
TO_CHAR (rr.res_rsv_ruimte_van, 'DD-MM-YYYY HH24:MI') aanvang,
rr.res_rsv_ruimte_omschrijving omschrijving,
k.prs_kostenplaats_nr || ' - ' || k.prs_kostenplaats_omschrijving
pnummer,
DECODE (
(SELECT res_kenmerkwaarde_key
FROM res_kenmerkwaarde kw, res_kenmerk k
WHERE kw.res_kenmerk_key = k.res_kenmerk_key
AND k.res_srtkenmerk_key = 321 -- Reservering bevat catering op externe kostenpaats.
AND kw.res_rsv_ruimte_key = rr.res_rsv_ruimte_key
AND fac.safe_to_number (
kw.res_kenmerkreservering_waarde) = 1),
NULL,
DECODE (prs_kostenplaats_extern, 0, 'Intern', 'Extern'),
'Extern')
bevatextcat
FROM res_rsv_ruimte rr,
(SELECT prs_perslid_key_alt, prs_perslid_key FROM prs_collega
UNION ALL
SELECT prs_perslid_key, prs_perslid_key FROM prs_perslid) c,
prs_v_perslid_fullnames pfc,
prs_kostenplaats k,
res_status_bo s,
( SELECT res_rsv_ruimte_key, MAX (mld_melding_key) mld_melding_key
FROM mld_melding
WHERE mld_stdmelding_key = 1301
GROUP BY res_rsv_ruimte_key) m, -- opmerking over catering
(SELECT res_kenmerkreservering_waarde, res_rsv_ruimte_key
FROM res_kenmerkwaarde kw, res_kenmerk k
WHERE kw.res_kenmerk_key = k.res_kenmerk_key
AND k.res_srtkenmerk_key = 202) e,
( SELECT MIN (res_status_bo_key) res_status_bo_key,
res_rsv_ruimte_key
FROM (SELECT res_status_bo_key, rr1.res_rsv_ruimte_key
FROM res_rsv_ruimte rr1
WHERE rr1.res_rsv_ruimte_verwijder IS NULL
UNION ALL
SELECT res_status_bo_key, rd1.res_rsv_ruimte_key
FROM res_rsv_deel rd1
WHERE rd1.res_rsv_deel_verwijder IS NULL
UNION ALL
SELECT res_status_bo_key, ra1.res_rsv_ruimte_key
FROM res_rsv_artikel ra1
WHERE ra1.res_rsv_artikel_verwijder IS NULL)
GROUP BY res_rsv_ruimte_key) bo_stat
WHERE rr.res_rsv_ruimte_verwijder IS NULL
AND rr.res_rsv_ruimte_contact_key = c.prs_perslid_key
AND pfc.prs_perslid_key = rr.res_rsv_ruimte_contact_key
AND k.prs_kostenplaats_key = rr.prs_kostenplaats_key
AND bo_stat.res_status_bo_key = s.res_status_bo_key
AND bo_stat.res_rsv_ruimte_key = rr.res_rsv_ruimte_key
AND rr.res_rsv_ruimte_key = e.res_rsv_ruimte_key(+)
AND m.res_rsv_ruimte_key(+) = rr.res_rsv_ruimte_key
AND s.res_status_bo_key = 5
AND NOT EXISTS
(SELECT fin_verkoopfactuur_refkey
FROM fin_verkoopfactuur
WHERE fin_verkoopfactuur_datum IS NOT NULL
AND COALESCE (fin_verkoopfactuur_c4, 'NOP') =
'catering'
AND fin_verkoopfactuur_refkey = rr.res_rsv_ruimte_key)
AND rr.res_rsv_ruimte_van > TO_DATE ('20160101', 'yyyymmdd');
CREATE OR REPLACE VIEW nybu_v_rap_res_approve
AS
SELECT *
FROM nybu_v_res_approve
WHERE catering > 0;
-- notificatie naar contactpersoon als de reservering goedgekeurd moet worden. De mail wordt
-- drie werkdagen na de reservering verzonden. Aangezien er ook in het weekend gereserveerd
-- kan worden controleert de view of dezelfde notificatie ook gisteren verstuurd zou zijn.
CREATE OR REPLACE VIEW nybu_v_noti_goedkeuring_cat
(
CODE,
SENDER,
RECEIVER,
TEXT,
KEY,
XKEY
)
AS
SELECT 'CUST01',
NULL,
res_rsv_ruimte_contact_key,
'Akkoord cateringkosten',
res_rsv_ruimte_key,
NULL
FROM res_rsv_ruimte rrr
WHERE fac.datumtijdplusuitvoertijd (TRUNC (SYSDATE),
-4,
'DAGEN',
0,
24,
1) <>
fac.datumtijdplusuitvoertijd (TRUNC (SYSDATE - 1),
-4,
'DAGEN',
0,
24,
1)
AND res_rsv_ruimte_tot BETWEEN fac.datumtijdplusuitvoertijd (
TRUNC (SYSDATE - 1),
-4,
'DAGEN',
0,
24,
1)
AND fac.datumtijdplusuitvoertijd (
TRUNC (SYSDATE),
-4,
'DAGEN',
0,
24,
1)
AND COALESCE (
(SELECT SUM (res.getartikelprijs (res_rsv_artikel_key))
FROM res_rsv_artikel rra, res_artikel ra
WHERE res_rsv_artikel_verwijder IS NULL
AND rra.res_artikel_key = ra.res_artikel_key
AND ra.res_discipline_key NOT IN (462, 581, 741) -- hotelkamers, inhuur voorzieningen, linnen
AND rra.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key),
0) > 0;
---------------------------------------------------------------------------------
-- Koppeling met VIPS.
-- Deze view wordt gebruikt in soap-service: zie FSN#29345.
CREATE OR REPLACE VIEW nybu_v_vips_koppeling
AS
SELECT rr.res_reservering_key,
rr.res_rsv_ruimte_volgnr,
rr.res_rsv_ruimte_key,
r.res_ruimte_key,
r.res_ruimte_nr,
l.alg_locatie_code,
l.alg_locatie_omschrijving,
g.alg_gebouw_code,
g.alg_gebouw_naam,
v.alg_verdieping_volgnr,
v.alg_verdieping_omschrijving,
ar.alg_ruimte_nr,
ar.alg_ruimte_omschrijving,
op.res_opstelling_key,
op.res_opstelling_omschrijving,
rr.res_rsv_ruimte_van,
rr.res_rsv_ruimte_omschrijving,
rr.res_rsv_ruimte_opmerking,
rr.res_rsv_ruimte_bezoekers,
rr.res_status_fo_key,
rr.res_status_bo_key,
ra.res_rsv_artikel_levering,
TO_CHAR (ra.res_rsv_artikel_levering, 'DD-MM-YYYY') datum,
TO_CHAR (ra.res_rsv_artikel_levering, 'HH24:MI') tijd,
ra.res_rsv_artikel_aantal aantal,
a.res_artikel_key,
a.res_artikel_nr artikelnr,
a.res_artikel_omschrijving artikeloms,
d.ins_discipline_key,
d.ins_discipline_omschrijving catalogus,
ra.res_rsv_artikel_prijs,
a.res_artikel_prijs,
a.res_artikel_prijs eenheidsprijs,
res.getartikelprijs (ra.res_rsv_artikel_key) totaalprijs,
c.prs_perslid_naam contact_naam,
c.prs_perslid_tussenvoegsel contact_tussenvoegsel,
c.prs_perslid_voorletters contact_voorletters,
c.prs_perslid_voornaam contact_voornaam,
DECODE (c.prs_perslid_geslacht, 0, 'V', 1, 'M', '')
contact_geslacht,
c.prs_perslid_email contact_email,
c.prs_perslid_telefoonnr contact_telefoonnr,
c.prs_perslid_mobiel contact_mobiel,
h.prs_perslid_naam host_naam,
h.prs_perslid_tussenvoegsel host_tussenvoegsel,
h.prs_perslid_voorletters host_voorletters,
h.prs_perslid_voornaam host_voornaam,
DECODE (h.prs_perslid_geslacht, 0, 'V', 1, 'M', '') host_geslacht,
h.prs_perslid_email host_email,
h.prs_perslid_telefoonnr host_telefoonnr,
h.prs_perslid_mobiel host_mobiel,
k.prs_kostenplaats_nr,
(SELECT w.res_kenmerkreservering_waarde
FROM res_kenmerkwaarde w, res_kenmerk k
WHERE w.res_rsv_ruimte_key = rr.res_rsv_ruimte_key
AND w.res_kenmerk_key = k.res_kenmerk_key
AND k.res_srtkenmerk_key = 161
AND w.res_kenmerkwaarde_verwijder IS NULL)
Dieet_wensen,
(SELECT w.res_kenmerkreservering_waarde
FROM res_kenmerkwaarde w, res_kenmerk k
WHERE w.res_rsv_ruimte_key = rr.res_rsv_ruimte_key
AND w.res_kenmerk_key = k.res_kenmerk_key
AND k.res_srtkenmerk_key = 102
AND w.res_kenmerkwaarde_verwijder IS NULL)
Aanvullende_wensen,
(SELECT w.res_kenmerkreservering_waarde
FROM res_kenmerkwaarde w, res_kenmerk k
WHERE w.res_rsv_ruimte_key = rr.res_rsv_ruimte_key
AND w.res_kenmerk_key = k.res_kenmerk_key
AND k.res_srtkenmerk_key = 101
AND w.res_kenmerkwaarde_verwijder IS NULL)
Programmatijden,
(SELECT b.prs_bedrijf_naam
FROM PRS_V_AANWEZIGBEDRIJF b, res_kenmerkwaarde w, res_kenmerk k
WHERE b.prs_bedrijf_key =
fac.safe_to_number (w.res_kenmerkreservering_waarde)
AND w.res_rsv_ruimte_key = rr.res_rsv_ruimte_key
AND w.res_kenmerk_key = k.res_kenmerk_key
AND k.res_srtkenmerk_key = 81
AND w.res_kenmerkwaarde_verwijder IS NULL)
extern_bedrijf,
(SELECT cp.prs_contactpersoon_naam_full
FROM NYBU_V_CONTACTPERSOON cp,
res_kenmerkwaarde w,
res_kenmerk k
WHERE cp.prs_contactpersoon_key =
fac.safe_to_number (w.res_kenmerkreservering_waarde)
AND w.res_rsv_ruimte_key = rr.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)
extern_contact
FROM res_rsv_artikel ra,
res_artikel a,
res_discipline d,
res_rsv_ruimte rr,
res_ruimte_opstelling ro,
res_opstelling op,
res_ruimte r,
alg_ruimte ar,
alg_verdieping v,
alg_gebouw g,
alg_locatie l,
prs_perslid c,
prs_kostenplaats k,
prs_perslid h
WHERE rr.res_rsv_ruimte_verwijder IS NULL
AND rr.res_rsv_ruimte_van >= SYSDATE - (4 * 7 * 24) / 24
AND rr.res_rsv_ruimte_van <= SYSDATE + (4 * 7 * 24) / 24
AND a.res_artikel_key = ra.res_artikel_key
AND d.ins_discipline_key = a.res_discipline_key
AND d.ins_discipline_key NOT IN (462, 581)
AND d.ins_discipline_min_level = 2
AND rr.res_rsv_ruimte_key = ra.res_rsv_ruimte_key
AND rr.res_ruimte_opstel_key = ro.res_ruimte_opstel_key(+)
AND ro.res_ruimte_key = r.res_ruimte_key(+)
AND ro.res_opstelling_key = op.res_opstelling_key(+)
AND rr.alg_ruimte_key = ar.alg_ruimte_key(+)
AND ar.alg_verdieping_key = v.alg_verdieping_key(+)
AND v.alg_gebouw_key = g.alg_gebouw_key(+)
AND g.alg_locatie_key = l.alg_locatie_key(+)
AND rr.res_rsv_ruimte_contact_key = c.prs_perslid_key
AND k.prs_kostenplaats_key = rr.prs_kostenplaats_key
AND rr.res_rsv_ruimte_host_key = h.prs_perslid_key
AND rr.res_rsv_ruimte_dirtlevel = 0;
---------------------------------------------------------------------------------
-- notificatiejob voor Delivery at Servicepoint (stdmelding 961)
CREATE OR REPLACE VIEW nybu_v_noti_deliveryreminder
(
CODE,
SENDER,
RECEIVER,
TEXT,
KEY,
XKEY
)
AS
SELECT 'MLDINF',
NULL,
prs_perslid_key_voor,
'Reminder: Delivery at Servicepoint',
mld_melding_key,
NULL
FROM mld_melding
WHERE mld_stdmelding_key = 961
AND mld_melding_status IN (0, 2, 3, 4, 7)
AND TRUNC (mld_melding_datum) = TRUNC (SYSDATE - 7);
------- USRGRAPHS ---------------------------------------------------------------
CREATE OR REPLACE VIEW nybu_v_graph_mld_ppi_uitv
(
FCLT_XAS_AANTAL,
FCLT_YAS_TOTAAL,
FCLT_3D_DISCIPLINE_KEY
)
AS
SELECT TO_CHAR (SUM (uitvoeringoptijd)) aantal,
COUNT (mld_key) totaal,
MAX (ins_discipline_key)
FROM (SELECT DISTINCT
m.mld_melding_key mld_key,
md.ins_discipline_key,
CASE
WHEN fac.gettrackingdate ('MLDREJ', m.mld_melding_key) IS NULL
THEN
CASE SIGN(fac.datumtijdplusuitvoertijd (
m.mld_melding_datum,
m.mld_melding_t_uitvoertijd.tijdsduur,
m.mld_melding_t_uitvoertijd.eenheid)
- COALESCE (
fac.gettrackingdate (
'MLDREJ',
m.mld_melding_key),
fac.gettrackingdate (
'MLDAFM',
m.mld_melding_key),
SYSDATE))
WHEN -1
THEN
0
ELSE
1
END
ELSE
1
END
uitvoeringoptijd
FROM mld_melding m,
mld_discipline md,
mld_stdmelding std,
fac_groeprechten gr
WHERE md.ins_discipline_key = std.mld_ins_discipline_key
AND std.mld_stdmelding_key = m.mld_stdmelding_key
AND mld_melding_status IN (2, 3, 4, 7, 0)
AND gr.ins_discipline_key = std.mld_ins_discipline_key
AND gr.fac_groep_key = 21
AND gr.fac_functie_key = 33);
CREATE OR REPLACE VIEW nybu_v_graph_mld_ppi_accept
(
FCLT_XAS_AANTAL,
FCLT_YAS_TOTAAL,
FCLT_3D_DISCIPLINE_KEY
)
AS
SELECT -- ROUND ( (SUM (acceptoptijd) / COUNT (mld_key)) * 100) acceptoptijd,
TO_CHAR (SUM (acceptoptijd)) aantal,
COUNT (mld_key) totaal,
MAX (ins_discipline_key)
FROM (SELECT DISTINCT
m.mld_melding_key mld_key,
md.ins_discipline_key,
CASE SIGN(fac.datumtijdplusuitvoertijd (
fac.gettrackingdate ('MLDNEW',
m.mld_melding_key),
std.mld_stdmelding_t_accepttijd.tijdsduur,
std.mld_stdmelding_t_accepttijd.eenheid)
- SYSDATE)
WHEN -1
THEN
0
ELSE
1
END
acceptoptijd
FROM mld_melding m,
mld_discipline md,
mld_stdmelding std,
fac_groeprechten gr
WHERE md.ins_discipline_key = std.mld_ins_discipline_key
AND std.mld_stdmelding_key = m.mld_stdmelding_key
AND mld_melding_status IN (2, 3)
AND gr.ins_discipline_key = std.mld_ins_discipline_key
AND gr.fac_groep_key = 21
AND gr.fac_functie_key = 33);
CREATE OR REPLACE VIEW nybu_v_graph_busyxdiscipline
(
FCLT_XAS_,
FCLT_YAS_,
FCLT_URL,
FCLT_3D_DISCIPLINE_KEY
)
AS
SELECT discipline_omschrijving,
SUM (aantal),
'appl/mld/mld_search.asp?urole=bo&autosearch=1&chkSelf=1&chkNew=0&disc_key_str='
|| ins_discipline_key,
ins_discipline_key
FROM (SELECT d.ins_discipline_key,
sd.ins_srtdiscipline_prefix
|| '-'
|| d.ins_discipline_omschrijving
discipline_omschrijving,
aantal
FROM ( SELECT mld_stdmelding_key, COUNT ( * ) aantal
FROM mld_melding
WHERE mld_melding_status IN (4, 7, 0)
GROUP BY mld_stdmelding_key) m2,
mld_stdmelding std,
ins_tab_discipline d,
ins_srtdiscipline sd
WHERE m2.mld_stdmelding_key(+) = std.mld_stdmelding_key
AND std.mld_ins_discipline_key = d.ins_discipline_key
AND d.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
AND aantal IS NOT NULL)
GROUP BY discipline_omschrijving, ins_discipline_key;
-- Aantal open (te behandelen) meldingen per discipline
CREATE OR REPLACE VIEW nybu_v_graph_todoxdiscipline
(
FCLT_XAS_,
FCLT_YAS_,
FCLT_URL,
FCLT_3D_DISCIPLINE_KEY
)
AS
SELECT discipline_omschrijving,
SUM (aantal),
'appl/mld/mld_search.asp?urole=bo&autosearch=1&disc_key_str='
|| ins_discipline_key,
ins_discipline_key
FROM (SELECT d.ins_discipline_key,
sd.ins_srtdiscipline_prefix
|| '-'
|| d.ins_discipline_omschrijving
discipline_omschrijving,
aantal
FROM ( SELECT mld_stdmelding_key, COUNT ( * ) aantal
FROM mld_melding
WHERE mld_melding_status IN (2, 3)
GROUP BY mld_stdmelding_key) m2,
mld_stdmelding std,
ins_tab_discipline d,
ins_srtdiscipline sd
WHERE m2.mld_stdmelding_key(+) = std.mld_stdmelding_key
AND std.mld_ins_discipline_key = d.ins_discipline_key
AND d.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
AND aantal IS NOT NULL)
GROUP BY discipline_omschrijving, ins_discipline_key;
CREATE OR REPLACE VIEW nybu_v_graph_mldnieuw_verloop
(
FCLT_XAS_,
FCLT_YAS_
)
AS
SELECT tijd || ':00', 0
FROM ( SELECT TRIM (TO_CHAR (LEVEL, '09')) tijd, LEVEL nivo
FROM DUAL
CONNECT BY LEVEL <= 24)
WHERE nivo >= 7 AND nivo <= 19
AND NOT EXISTS
(SELECT ''
FROM mld_melding m
WHERE TRUNC (m.mld_melding_datum) = TRUNC (SYSDATE)
AND TO_CHAR (m.mld_melding_datum, 'hh24') = tijd)
UNION
SELECT TO_CHAR (m.mld_melding_datum, 'hh24') || ':00', COUNT ( * ) aantal
FROM mld_melding m, fac_groeprechten gr, mld_stdmelding s
WHERE TRUNC (m.mld_melding_datum) = TRUNC (SYSDATE)
AND gr.fac_groep_key = 21
AND gr.fac_functie_key = 33
AND gr.ins_discipline_key = s.mld_ins_discipline_key
AND m.mld_stdmelding_key = s.mld_stdmelding_key
GROUP BY TO_CHAR (m.mld_melding_datum, 'hh24');
CREATE OR REPLACE VIEW nybu_v_graph_aanafgemeld
(
FCLT_XAS_,
FCLT_YAS_AANGEMELD,
FCLT_YAS2_AFGEMELD,
DATUM
)
AS
-- 21 "ICT Servicedesk"
-- 33 WEB_MLDBOF
SELECT TO_CHAR (dt.datum, 'DD-MM') datum_label,
COALESCE (aan.aantal, 0) aangemeld,
COALESCE (af.aantal, 0) afgemeld,
dt.datum datum
FROM ( SELECT TRUNC (SYSDATE + 1 - ROWNUM) datum
FROM DUAL
CONNECT BY ROWNUM <= (SYSDATE - ADD_MONTHS (SYSDATE, -1))) dt
LEFT OUTER JOIN ( -- 36 = MLDAFM, 41 = MLDREJ
SELECT TRUNC (t.fac_tracking_datum) datum,
COUNT ( * ) aantal
FROM fac_tracking t,
mld_melding m,
fac_groeprechten gr,
mld_stdmelding s
WHERE fac_srtnotificatie_key IN (36, 41)
AND TRUNC (fac_tracking_datum) BETWEEN ADD_MONTHS (
SYSDATE,
-1)
AND TRUNC(SYSDATE)
AND m.mld_melding_key =
t.fac_tracking_refkey
AND m.mld_stdmelding_key =
s.mld_stdmelding_key
AND gr.ins_discipline_key =
s.mld_ins_discipline_key
AND gr.fac_groep_key = 21
AND gr.fac_functie_key = 33
GROUP BY TRUNC (fac_tracking_datum)) af
ON af.datum = dt.datum
LEFT OUTER JOIN ( SELECT TRUNC (m.mld_melding_datum) datum,
COUNT ( * ) aantal
FROM mld_melding m,
fac_groeprechten gr,
mld_stdmelding s
WHERE gr.fac_groep_key = 21
AND gr.fac_functie_key = 33
AND gr.ins_discipline_key =
s.mld_ins_discipline_key
AND m.mld_stdmelding_key =
s.mld_stdmelding_key
AND TRUNC (m.mld_melding_datum) BETWEEN ADD_MONTHS (
SYSDATE,
-1)
AND TRUNC(SYSDATE)
GROUP BY TRUNC (m.mld_melding_datum)) aan
ON aan.datum = dt.datum
ORDER BY datum;
CREATE OR REPLACE VIEW nybu_v_graph_aanaf_vandaag
(
FCLT_XAS_,
FCLT_YAS_,
FCLT_YAS2_
)
AS
SELECT 'Aangemeld', fclt_yas_aangemeld, 0 af
FROM nybu_v_graph_aanafgemeld
WHERE datum = TRUNC (SYSDATE)
UNION ALL
SELECT 'Afgemeld', 0, fclt_yas2_afgemeld
FROM nybu_v_graph_aanafgemeld
WHERE datum = TRUNC (SYSDATE);
CREATE OR REPLACE VIEW nybu_v_budgethouders
(
perslid_key,
naam
)
AS
SELECT prs_perslid_key, prs_perslid_naam_full
FROM prs_v_perslid_fullnames
WHERE prs_perslid_key IN
(SELECT DISTINCT k.prs_perslid_key
FROM prs_kostenplaats k
WHERE K.PRS_KOSTENPLAATS_VERWIJDER IS NULL
AND (TRUNC (K.PRS_KOSTENPLAATS_EIND) >
TRUNC (SYSDATE)
OR K.PRS_KOSTENPLAATS_EIND IS NULL));
CREATE OR REPLACE VIEW NYBU_V_ICT_LEVERANCIERS
(
bedrijf_key,
naam_leverancier
)
AS
SELECT b.prs_bedrijf_key, b.prs_bedrijf_naam
FROM prs_v_leverancierbedrijf b, prs_kenmerklink k
WHERE K.PRS_LINK_KEY = B.PRS_BEDRIJF_KEY AND K.PRS_KENMERK_KEY = 1260;
CREATE OR REPLACE VIEW NYBU_V_RAP_WIJZIGINGSVERZOEKEN
(
MELDINGNR,
MELDING,
DATUM,
STATUS,
AANVRAGER,
APPLICATIE,
ONDERWERP,
URGENTIE,
BEHANDELAAR
)
AS
SELECT m.mld_melding_key meldingnr,
m.mld_melding_key melding,
TO_DATE (m.mld_melding_datum) datum,
CASE m.mld_melding_status
WHEN 1 THEN 'Afgewezen'
WHEN 2 THEN 'Nieuw'
WHEN 3 THEN 'Te accepteren'
WHEN 4 THEN 'In behandeling'
WHEN 5 THEN 'Afgemeld'
WHEN 6 THEN 'Historie'
WHEN 7 THEN 'Uitgegeven'
END
status,
a.prs_perslid_naam_friendly aanvrager,
appl.fac_usrdata_code applicatie,
ond.mld_kenmerkmelding_waarde onderwerp,
urgw.fac_usrdata_code urgentie,
B.PRS_PERSLID_NAAM_FRIENDLY behandelaar
FROM mld_melding m,
prs_v_perslid_fullnames_all b,
prs_v_perslid_fullnames_all a,
mld_kenmerkmelding ka,
fac_usrdata appl,
mld_kenmerkmelding ond,
mld_kenmerkmelding urg,
fac_usrdata urgw
WHERE m.mld_stdmelding_key = 1821 --- wijzigingsverzoek
AND m.prs_perslid_key_voor = a.prs_perslid_key
AND m.mld_melding_behandelaar_key = b.prs_perslid_key(+)
AND ka.mld_melding_key = m.mld_melding_key
AND ka.mld_kenmerk_key = 1801 --- applicatie
AND ka.mld_kenmerkmelding_waarde = appl.fac_usrdata_key
AND ond.mld_melding_key = m.mld_melding_key
AND ond.mld_kenmerk_key = 1803 ---onderwerp
AND urg.mld_melding_key = m.mld_melding_key
AND urg.mld_kenmerk_key = 1805 --- urentie
AND urg.mld_kenmerkmelding_waarde = urgw.fac_usrdata_key;
CREATE OR REPLACE VIEW NYBU_V_RAP_ADV_WIJZIGINGSVERZ
(
MELDINGNR,
MELDING,
DATUM,
STATUS,
AANVRAGER,
APPLICATIE,
ONDERWERP,
URGENTIE,
BEHANDELAAR,
CATEGORIE
)
AS
SELECT m.mld_melding_key,
m.mld_melding_key meldingnr,
TO_DATE (m.mld_melding_datum) datum,
CASE m.mld_melding_status
WHEN 1 THEN 'Afgewezen'
WHEN 2 THEN 'Nieuw'
WHEN 3 THEN 'Te accepteren'
WHEN 4 THEN 'In behandeling'
WHEN 5 THEN 'Afgemeld'
WHEN 6 THEN 'Historie'
WHEN 7 THEN 'Uitgegeven'
END
status,
p.prs_perslid_naam_friendly aanvrager,
applw.fac_usrdata_code applicatie,
ond.mld_kenmerkmelding_waarde onderwerp,
urgw.fac_usrdata_code urgentie,
b.prs_perslid_naam_friendly behandelaar,
CASE cat.mld_kenmerkmelding_waarde
WHEN '921' THEN 'Categorie 1 - functioneel beheerder beslist'
WHEN '922' THEN 'Categorie 2 - het wijzigingsoverleg beslist'
WHEN '923' THEN 'Categorie 3 - College van Bestuur beslist'
END
categorie
FROM mld_melding m,
prs_v_perslid_fullnames_all p,
prs_v_perslid_fullnames_all b,
mld_kenmerkmelding appl,
fac_usrdata applw,
mld_kenmerkmelding ond,
mld_kenmerkmelding urg,
fac_usrdata urgw,
mld_kenmerkmelding cat
WHERE m.mld_stdmelding_key = 1821 --- wijzigingsverzoek
AND p.prs_perslid_key = m.prs_perslid_key_voor
AND b.prs_perslid_key(+) = m.mld_melding_behandelaar_key
AND appl.mld_melding_key = m.mld_melding_key
AND appl.mld_kenmerk_key = 1801 --- applicatie
AND appl.mld_kenmerkmelding_waarde = applw.fac_usrdata_key
AND ond.mld_melding_key = m.mld_melding_key
AND ond.mld_kenmerk_key = 1803 ---onderwerp
AND urg.mld_melding_key = m.mld_melding_key
AND urg.mld_kenmerk_key = 1805 --- urentie
AND urg.mld_kenmerkmelding_waarde = urgw.fac_usrdata_key
AND cat.mld_melding_key = m.mld_melding_key
AND cat.mld_kenmerk_key = 1861 --- categorie
AND NOT EXISTS
(SELECT besw.fac_usrdata_code besluit
FROM mld_kenmerkmelding bes, fac_usrdata besw
WHERE bes.mld_melding_key(+) = m.mld_melding_key
AND bes.mld_kenmerk_key = 1862
AND bes.mld_kenmerkmelding_waarde =
besw.fac_usrdata_key);
-- NYBU#36783 controle rapport facturatieproces reserveringen
CREATE OR REPLACE VIEW NYBU_V_RAP_CONTR_FACT_RESV
(
EXP,
TAAK,
UITGEVOERD
)
AS
select
CASE S.IMP_SCHEDULE_NAME
WHEN 'RES_CODA' THEN 'Zaalhuur'
WHEN 'RES_VERWERK' THEN 'Zaalhuur'
WHEN 'RES_CAT' THEN 'Catering'
WHEN 'RES_CAT_VERWERK' THEN 'Catering'
WHEN 'T_HUUR_CODA' THEN 'Campus'
WHEN 'HUUR_CODA' THEN 'Campus'
END
EXPORT,
CASE S.IMP_SCHEDULE_NAME
WHEN 'RES_CODA' THEN 'Export Coda'
WHEN 'RES_VERWERK' THEN 'Afsluiten facturatie'
WHEN 'RES_CAT' THEN 'Export Coda'
WHEN 'RES_CAT_VERWERK' THEN 'Afsluiten facturatie'
WHEN 'T_HUUR_CODA' THEN 'Controle factuuregels'
WHEN 'HUUR_CODA' THEN 'Export Coda'
END
TAAK,
S.IMP_SCHEDULE_DONE UITGEVOERD
from IMP_SCHEDULE s
where S.IMP_SCHEDULE_NAME in ('RES_CODA', 'RES_VERWERK', 'RES_CAT', 'RES_CAT_VERWERK', 'T_HUUR_CODA', 'HUUR_CODA')
order by EXPORT, S.IMP_SCHEDULE_DONE desc;
CREATE OR REPLACE FORCE VIEW NYBU_V_RAP_WERKPLEKKEN_KPLGRP
(
KOSTENPLAATSGROEP,
BEDRAG
)
AS
SELECT fclt_f_kostenplaatsgroep kostenplaatsgroep, ROUND (SUM (prijs), 2) bedrag
FROM nybu_v_rap_werkplekken
GROUP BY fclt_f_kostenplaatsgroep;
CREATE OR REPLACE VIEW NYBU_V_RAP_RESERVERING_INT_EXT
(
KEY,
NUMMER,
RES_OMSCHRIJVING,
INVOERDATUM,
DATUM,
GASTHEER,
CONTACT,
INVOERDER,
KOSTENSOORTGROEP,
KOSTENSOORT,
KPN,
KPN_OMSCHRIJVING,
KNP_EXTERN,
FCLT_3D_AFDELING_KEY,
AFDELING_CODE,
AFDELING_OMSCHRIJVING,
REGIO_OMSCHRIJVING,
DISTRICT_OMSCHIJVING,
FCLT_3D_LOCATIE_KEY,
LOCATIE,
LOCATIE_OMSCHRIJVING,
LOCATIE_PLAATS,
GEBOUW,
VERDIEPING,
RUIMTE,
OPSTELLING,
CAPACITEIT,
NO_SHOW,
MANDAAT,
PERSONEELSNR,
FCLT_3D_DISCIPLINE_KEY,
CATALOGUS_KEY,
CATALOGUS,
RESERVEERBARE_RUIMTE,
BEZOEKERS,
VAN,
TOT,
DUUR,
STATUS,
BOSTATUS,
ACTIVITEIT,
SRTACTIVITEIT_KEY,
ACTIVITEITSOORT,
VOORZIENING_DISCIPLINE_KEY,
VOORZIENING_TYPE,
VOORZIENING_CATALOGUS,
VOORZIENING_PRODUCT_KEY,
VOORZIENING_PRODUCT,
VOORZIENING_TOTAALPRIJS,
VOORZIENING_VAN,
VOORZIENING_TOT,
VOORZIENING_AANTAL,
VOORZIENING_PRIJS
)
AS
SELECT rrr.res_rsv_ruimte_key,
res.res_reservering_key || '/' || rrr.res_rsv_ruimte_volgnr,
rrr.res_rsv_ruimte_omschrijving,
COALESCE (rrr.res_rsv_ruimte_aanmaak, voorz.van),
COALESCE (rrr.res_rsv_ruimte_van, voorz.van),
(SELECT prs_perslid_naam_full
FROM prs_v_perslid_fullnames_all pf
WHERE pf.prs_perslid_key = rrr.res_rsv_ruimte_host_key),
(SELECT prs_perslid_naam_full
FROM prs_v_perslid_fullnames_all pf
WHERE pf.prs_perslid_key = rrr.res_rsv_ruimte_contact_key),
(SELECT pf.prs_perslid_naam_full
FROM fac_tracking tr,
fac_srtnotificatie str,
prs_v_perslid_fullnames_all pf
WHERE tr.prs_perslid_key = pf.prs_perslid_key
AND str.fac_srtnotificatie_code = 'RESNEW'
AND tr.fac_srtnotificatie_key = str.fac_srtnotificatie_key
AND tr.fac_tracking_refkey = rrr.res_rsv_ruimte_key),
(SELECT ksg.prs_kostensoortgrp_oms
FROM prs_kostensoortgrp ksg, prs_kostensoort ks
WHERE ksg.prs_kostensoortgrp_key = ks.prs_kostensoortgrp_key
AND ks.prs_kostensoort_key =
(SELECT disc.prs_kostensoort_key
FROM res_discipline disc
WHERE disc.ins_discipline_key =
COALESCE (
voorz.ins_discipline_key,
(SELECT ins_discipline_key
FROM ins_tab_discipline d,
res_ruimte_opstelling ro,
res_ruimte rr
WHERE rrr.res_ruimte_opstel_key =
ro.res_ruimte_opstel_key
AND ro.res_ruimte_key =
rr.res_ruimte_key
AND rr.res_discipline_key =
d.ins_discipline_key))))
kostensoortgroep,
(SELECT ks.prs_kostensoort_oms
FROM prs_kostensoort ks
WHERE ks.prs_kostensoort_key =
(SELECT disc.prs_kostensoort_key
FROM res_discipline disc
WHERE disc.ins_discipline_key =
COALESCE (
voorz.ins_discipline_key,
(SELECT ins_discipline_key
FROM ins_tab_discipline d,
res_ruimte_opstelling ro,
res_ruimte rr
WHERE rrr.res_ruimte_opstel_key =
ro.res_ruimte_opstel_key
AND ro.res_ruimte_key =
rr.res_ruimte_key
AND rr.res_discipline_key =
d.ins_discipline_key))))
kostensoort,
k.prs_kostenplaats_nr,
k.prs_kostenplaats_omschrijving,
DECODE (k.prs_kostenplaats_extern,
0, 'Intern',
1, 'Extern',
'Intern'),
a.prs_afdeling_key,
a.prs_afdeling_naam,
a.prs_afdeling_omschrijving,
(SELECT rg.alg_regio_omschrijving
FROM alg_regio rg,
alg_district d,
alg_locatie l,
alg_gebouw G,
alg_verdieping v,
alg_ruimte r
WHERE rg.alg_regio_key = d.alg_regio_key
AND d.alg_district_key = l.alg_district_key
AND l.alg_locatie_key = g.alg_locatie_key
AND g.alg_gebouw_key = v.alg_gebouw_key
AND v.alg_verdieping_key = r.alg_verdieping_key
AND r.alg_ruimte_key = r2a.alg_ruimte_key),
(SELECT d.alg_district_omschrijving
FROM alg_district d,
alg_locatie l,
alg_gebouw G,
alg_verdieping v,
alg_ruimte r
WHERE d.alg_district_key = l.alg_district_key
AND l.alg_locatie_key = g.alg_locatie_key
AND g.alg_gebouw_key = v.alg_gebouw_key
AND v.alg_verdieping_key = r.alg_verdieping_key
AND r.alg_ruimte_key = r2a.alg_ruimte_key),
(SELECT l.alg_locatie_key
FROM alg_locatie l,
alg_gebouw G,
alg_verdieping v,
alg_ruimte r
WHERE l.alg_locatie_key = g.alg_locatie_key
AND g.alg_gebouw_key = v.alg_gebouw_key
AND v.alg_verdieping_key = r.alg_verdieping_key
AND r.alg_ruimte_key = r2a.alg_ruimte_key),
(SELECT alg_locatie_code
FROM alg_locatie l,
alg_gebouw G,
alg_verdieping v,
alg_ruimte r
WHERE l.alg_locatie_key = g.alg_locatie_key
AND g.alg_gebouw_key = v.alg_gebouw_key
AND v.alg_verdieping_key = r.alg_verdieping_key
AND r.alg_ruimte_key = r2a.alg_ruimte_key),
(SELECT alg_locatie_omschrijving
FROM alg_locatie l,
alg_gebouw G,
alg_verdieping v,
alg_ruimte r
WHERE l.alg_locatie_key = g.alg_locatie_key
AND g.alg_gebouw_key = v.alg_gebouw_key
AND v.alg_verdieping_key = r.alg_verdieping_key
AND r.alg_ruimte_key = r2a.alg_ruimte_key),
(SELECT alg_locatie_plaats
FROM alg_locatie l,
alg_gebouw G,
alg_verdieping v,
alg_ruimte r
WHERE l.alg_locatie_key = g.alg_locatie_key
AND g.alg_gebouw_key = v.alg_gebouw_key
AND v.alg_verdieping_key = r.alg_verdieping_key
AND r.alg_ruimte_key = r2a.alg_ruimte_key),
(SELECT alg_gebouw_code
FROM alg_gebouw G, alg_verdieping v, alg_ruimte r
WHERE g.alg_gebouw_key = v.alg_gebouw_key
AND v.alg_verdieping_key = r.alg_verdieping_key
AND r.alg_ruimte_key = r2a.alg_ruimte_key),
(SELECT alg_verdieping_code
FROM alg_verdieping v, alg_ruimte r
WHERE v.alg_verdieping_key = r.alg_verdieping_key
AND r.alg_ruimte_key = r2a.alg_ruimte_key),
r2a.ruimte_nr,
r2a.opstelling,
r2a.capaciteit,
rrr.res_rsv_ruimte_noshow,
NVL ( (SELECT pr.fac_profiel_limiet
FROM fac_profiel pr
WHERE p.fac_profiel_key = pr.fac_profiel_key), 0),
prs_perslid_nr,
COALESCE (
voorz.ins_discipline_key,
(SELECT ins_discipline_key
FROM ins_tab_discipline d,
res_ruimte_opstelling ro,
res_ruimte rr
WHERE rrr.res_ruimte_opstel_key = ro.res_ruimte_opstel_key
AND ro.res_ruimte_key = rr.res_ruimte_key
AND rr.res_discipline_key = d.ins_discipline_key)),
(SELECT ins_discipline_key
FROM ins_tab_discipline d,
res_ruimte_opstelling ro,
res_ruimte rr
WHERE rrr.res_ruimte_opstel_key = ro.res_ruimte_opstel_key
AND ro.res_ruimte_key = rr.res_ruimte_key
AND rr.res_discipline_key = d.ins_discipline_key),
(SELECT ins_discipline_omschrijving
FROM ins_tab_discipline d,
res_ruimte_opstelling ro,
res_ruimte rr
WHERE rrr.res_ruimte_opstel_key = ro.res_ruimte_opstel_key
AND ro.res_ruimte_key = rr.res_ruimte_key
AND rr.res_discipline_key = d.ins_discipline_key),
DECODE (rrr.alg_ruimte_key, NULL, 'Ja', 'Nee'),
rrr.res_rsv_ruimte_bezoekers,
rrr.res_rsv_ruimte_van,
rrr.res_rsv_ruimte_tot,
COALESCE ( (rrr.res_rsv_ruimte_tot - rrr.res_rsv_ruimte_van) * 24,
0),
(SELECT res_status_fo_omschrijving
FROM res_status_fo rs
WHERE rs.res_status_fo_key = rrr.res_status_fo_key),
(SELECT res_status_bo_omschrijving
FROM res_status_bo rs
WHERE rs.res_status_bo_key = rrr.res_status_bo_key),
ra.res_activiteit_omschrijving,
rsa.res_srtactiviteit_key,
rsa.res_srtactiviteit_omschrijving,
voorz.ins_discipline_key,
voorz.vtype,
voorz.catalogus,
voorz.product_key,
voorz.product,
voorz.totaalprijs,
TO_CHAR (voorz.van, 'hh24:mi'),
TO_CHAR (voorz.tot, 'hh24:mi'),
voorz.aantal,
voorz.prijs
FROM res_v_aanwezigrsv_ruimte rrr,
res_activiteit ra,
res_srtactiviteit rsa,
res_reservering res,
prs_kostenplaats K,
prs_perslid P,
prs_afdeling A,
( SELECT res_rsv_ruimte_key,
MAX (o.res_opstelling_omschrijving) opstelling,
MAX (ro.res_ruimte_opstel_bezoekers) capaciteit,
MAX (ra.alg_ruimte_key) alg_ruimte_key,
MAX (rr.res_ruimte_nr) ruimte_nr
FROM res_rsv_ruimte r,
res_ruimte_opstelling ro,
res_opstelling o,
res_ruimte rr,
res_alg_ruimte ra
WHERE r.res_rsv_ruimte_verwijder IS NULL
AND r.res_ruimte_opstel_key = ro.res_ruimte_opstel_key
AND ro.res_ruimte_key = rr.res_ruimte_key
AND ro.res_opstelling_key = o.res_opstelling_key
AND rr.res_ruimte_key = ra.res_ruimte_key
GROUP BY res_rsv_ruimte_key
UNION ALL
SELECT res_rsv_ruimte_key,
'' opstelling,
NULL capaciteit,
rrr.alg_ruimte_key,
r.alg_ruimte_nr
FROM res_rsv_ruimte rrr, alg_ruimte r
WHERE rrr.alg_ruimte_key IS NOT NULL
AND r.alg_ruimte_key = rrr.alg_ruimte_key) r2a,
(SELECT rrd.res_rsv_ruimte_key res_rsv_ruimte_key,
-rd.res_deel_key product_key,
rd.res_deel_omschrijving product,
DECODE (
rd.res_deel_prijs_vast,
1,
NVL (rrd.res_rsv_deel_prijs, rd.res_deel_prijs),
(rrd.res_rsv_deel_tot - rrd.res_rsv_deel_van)
* 24
* NVL (rrd.res_rsv_deel_prijs, rd.res_deel_prijs))
totaalprijs,
rrd.res_rsv_deel_van van,
rrd.res_rsv_deel_tot tot,
(rrd.res_rsv_deel_tot - rrd.res_rsv_deel_van) * 24 aantal,
NVL (rrd.res_rsv_deel_prijs, rd.res_deel_prijs) prijs,
c.ins_discipline_key ins_discipline_key,
c.ins_discipline_omschrijving catalogus,
'object' vtype
FROM res_v_aanwezigrsv_deel rrd,
res_deel rd,
ins_deel d,
ins_tab_discipline C
WHERE rrd.res_deel_key = rd.res_deel_key
AND d.ins_deel_key = rd.res_ins_deel_key
AND rrd.res_rsv_ruimte_key IS NOT NULL
AND c.ins_discipline_key = rd.res_discipline_key
UNION ALL
SELECT rra.res_rsv_ruimte_key res_rsv_ruimte_key,
ra.res_artikel_key product_key,
ra.res_artikel_omschrijving product,
NVL (rra.res_rsv_artikel_prijs,
rra.res_rsv_artikel_aantal * res_artikel_prijs)
totaalprijs,
rra.res_rsv_artikel_levering van,
NULL tot,
rra.res_rsv_artikel_aantal aantal,
NVL (
rra.res_rsv_artikel_prijs / rra.res_rsv_artikel_aantal,
res_artikel_prijs)
prijs,
c.ins_discipline_key ins_discipline_key,
c.ins_discipline_omschrijving catalogus,
'consumable' vtype
FROM res_v_aanwezigrsv_artikel rra,
res_artikel ra,
ins_tab_discipline C
WHERE rra.res_artikel_key = ra.res_artikel_key
AND ra.res_discipline_key = c.ins_discipline_key) voorz
WHERE rrr.res_reservering_key = res.res_reservering_key
AND rrr.res_rsv_ruimte_key = r2a.res_rsv_ruimte_key(+)
AND rrr.prs_kostenplaats_key = k.prs_kostenplaats_key(+)
AND rrr.res_rsv_ruimte_key = voorz.res_rsv_ruimte_key(+)
AND rrr.res_activiteit_key = ra.res_activiteit_key
AND ra.res_srtactiviteit_key = rsa.res_srtactiviteit_key
AND rrr.res_rsv_ruimte_host_key = p.prs_perslid_key
AND p.prs_afdeling_key = a.prs_afdeling_key
AND (rrr.res_ruimte_opstel_key IS NOT NULL
OR voorz.res_rsv_ruimte_key IS NOT NULL)
AND rrr.res_rsv_ruimte_van >= TO_DATE ('01-01-2009', 'DD-MM-YYYY');
------ 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