NYBU#33043 Rapport huurovereenkomst student geeft AiAi

NYBU#32684 Campus: schoonmaakkosten bij vertrek
NYBU#33330 Huurlijst: bedrag klopt niet als roommate halverwege de maand vertrekt

svn path=/Customer/trunk/; revision=25810
This commit is contained in:
Peter Koerhuis
2015-08-03 12:52:51 +00:00
parent c72a0094cb
commit cee2b86d96

View File

@@ -18,9 +18,10 @@ AS
p_lang IN VARCHAR2)
RETURN VARCHAR2;
FUNCTION getPrijsFactor(p_van IN DATE,
p_tot IN DATE,
p_maand IN DATE)
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,
@@ -76,56 +77,64 @@ AS
RETURN v_naam;
END getPeriodeNaam;
-- Bepaal aantal dagen in begin- of eindmaand waarvoor huur betaald moet worden
FUNCTION getPrijsFactor(p_van IN DATE,
p_tot IN DATE,
p_maand IN DATE)
-- 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_prijsfactor NUMBER(6,5);
v_maand_dagen NUMBER(6,4);
o_aantal_dagen NUMBER(4);
v_periode_tot DATE;
v_van DATE;
v_tot DATE;
BEGIN
o_prijsfactor := 1;
-- Aantal dagen in gegeven maand
v_maand_dagen := CAST( TO_CHAR( LAST_DAY(p_maand), 'DD') AS INT);
-- 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) );
-- 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 (maand)
IF (v_van IS NULL OR v_van < p_maand)
-- dan zet op begin-/einddatum van de periode (periode)
IF (v_van IS NULL OR v_van < p_periode_van)
THEN
v_van := p_maand;
v_van := p_periode_van;
END IF;
IF (v_tot IS NULL OR v_tot > LAST_DAY(p_maand))
IF (v_tot IS NULL OR v_tot > v_periode_tot)
THEN
v_tot := LAST_DAY(p_maand);
v_tot := v_periode_tot;
END IF;
-- Is de ingangsmaand van het contract volledig, of beginnen/eindigen we halverwege?
-- Beslaat het contract de volledige periode, of beginnen/eindigen we halverwege?
-- DAN:
-- - ingangsmaand is huidige periode
-- - ingangsdag is niet de eerste dag van de maand (periode)
-- - ingangsmaand is hetzelfde als van huidige periode
-- - ingangsdag is later dan de eerste dag van de periode
-- EN/OF:
-- - eindmaand is huidige periode
-- - einddag is niet de laatste dag van de maand (periode)
IF ( ( TRUNC(v_van, 'MM') = p_maand
AND TRUNC(v_van, 'DD') != p_maand )
OR ( TRUNC(v_tot, 'MM') = p_maand
AND TRUNC(v_tot, 'DD') != LAST_DAY(p_maand) ) )
-- - 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_maand
-- = einddag - begindag + 1 / aantal_dagen_in_deze_maand
o_prijsfactor := ( CAST( TO_CHAR(v_tot, 'DD') AS INT)
- CAST( TO_CHAR(v_van, 'DD') AS INT)
+ 1 )
/ v_maand_dagen;
-- 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_prijsfactor;
RETURN o_aantal_dagen;
END;
-- Overzicht van beschikbare studentenkamers (zonder huidig/toekomstig contract)
@@ -2276,6 +2285,7 @@ AS
-- 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
@@ -2283,10 +2293,15 @@ AS
-- 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 DISTINCT a.*,
b.prs_perslid_key roommate,
b.cnt_contract_key roommate_cnt_key,
b.cnt_contract_looptijd_van roommate_cnt_van,
b.cnt_contract_looptijd_tot roommate_cnt_tot,
DECODE (b.prs_perslid_key,
NULL, a.huur,
a.huur/2)
@@ -2308,10 +2323,13 @@ AS
FROM
(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,
c.cnt_contract_versie,
kp.prs_kostenplaats_nr kpn,
SUBSTR(kg.prs_kostenplaatsgrp_oms, 1, 7) kpngrp,
r.alg_ruimte_key,
@@ -2368,6 +2386,7 @@ AS
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
@@ -2426,6 +2445,9 @@ AS
(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
@@ -2445,10 +2467,11 @@ AS
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 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
@@ -2463,8 +2486,8 @@ AS
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 sr.alg_srtruimte_key = r.alg_srtruimte_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 ) a
@@ -2487,11 +2510,12 @@ AS
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') ) b
ON b.cnt_contract_key != a.cnt_contract_key
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
WHERE codanr IS NOT NULL;
WHERE codanr IS NOT NULL;
----- Exports ------------------------------------
@@ -2508,6 +2532,7 @@ AS
-- 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
@@ -2544,7 +2569,7 @@ AS
-- Student room
-- Alle verhuurcontracten waarbij de huidige periode (deels) binnen de looptijd valt
-- TRUNC op maand cq LAST_DAY, omdat contracten halverwege de maand kunnen beginnen/eindigen
-- TRUNC op maand, omdat contracten halverwege de maand kunnen beginnen/eindigen
CURSOR sr
IS
SELECT c.*
@@ -2552,7 +2577,8 @@ AS
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 TRUNC(c.cnt_contract_looptijd_tot, 'MM')
AND alg_ruimte_key IS NOT NULL;
-- Residence/office
CURSOR ro
@@ -2564,6 +2590,10 @@ AS
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,
@@ -2703,6 +2733,9 @@ AS
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,
p.prs_perslid_key,
@@ -2755,6 +2788,9 @@ AS
'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,
p.prs_perslid_key,
@@ -2813,7 +2849,11 @@ AS
THEN 'salaris'
END ) bill_to,
prs_perslid_naam, prs_perslid_naam_full, prs_perslid_key,
cnt_contract_nummer_intern, r.cnt_contract_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,
@@ -2834,13 +2874,18 @@ AS
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_prijsfactor NUMBER(6,5);
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;
@@ -2863,8 +2908,8 @@ BEGIN
v_betreft := 'Campus';
FOR rec IN sr
LOOP
v_aanduiding := rec.cnt_contract_nummer_intern||'/'||rec.naam;
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
@@ -2878,16 +2923,19 @@ BEGIN
END IF;
FOR cntr IN 1..rec.aantal_periodes
LOOP
-- 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 een prijsfactor
v_prijsfactor := 1;
-- 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_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')
@@ -2897,14 +2945,16 @@ BEGIN
-- (alleen checken bij ingangsmaand contract)
IF (TRUNC(rec.cnt_contract_looptijd_van, 'MM') = v_curPeriodeDate)
THEN
v_prijsfactor := nybu.getPrijsFactor(rec.cnt_contract_looptijd_van, rec.cnt_contract_looptijd_tot, v_curPeriodeDate);
IF (v_prijsfactor != 1)
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,
'Prijsfactor = '||v_prijsfactor);
'Aantal dagen = '||v_aantal_dagen);
END IF;
END IF;
@@ -2913,14 +2963,49 @@ BEGIN
-- 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_prijsfactor := nybu.getPrijsFactor(rec.cnt_contract_looptijd_van, rec.cnt_contract_looptijd_tot, v_curPeriodeDate);
v_aantal_dagen := nybu.getAantalDagenInPeriode(rec.cnt_contract_looptijd_van,
rec.cnt_contract_looptijd_tot,
v_curPeriodeDate);
IF (v_prijsfactor != 1)
IF (v_aantal_dagen != v_curPeriodeDagen)
THEN
fac.writelog (
p_applname, 'I',
v_aanduiding || ': contract eindigt halverwege '||v_curPeriodeNaam,
'Prijsfactor = '||v_prijsfactor);
'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
-- Eerst checken of er wel een roommate is
IF (rec.roommate IS NULL)
THEN
v_dagen_roommate := 0;
ELSE
v_dagen_roommate := v_aantal_dagen;
IF ( TRUNC(rec.roommate_cnt_van, 'MM') = v_curPeriodeDate
OR TRUNC(rec.roommate_cnt_tot, 'MM') = v_curPeriodeDate)
THEN
-- Bepaal overlap looptijden huurder en roommate, binnen de huidige maand
v_per_van := GREATEST(rec.cnt_contract_looptijd_van, v_curPeriodeDate);
v_per_tot := LEAST(rec.cnt_contract_looptijd_tot, LAST_DAY(v_curPeriodeDate));
v_dagen_roommate := nybu.getAantalDagenInPeriode(rec.roommate_cnt_van,
rec.roommate_cnt_tot,
v_per_van,
v_per_tot);
IF (v_dagen_roommate != v_aantal_dagen)
THEN
fac.writelog (
p_applname, 'I',
v_aanduiding || ': contract roommate begint/eindigt tijdens looptijd contract huurder',
'Aantal dagen overlap = '||v_dagen_roommate);
END IF;
END IF;
END IF;
@@ -2942,7 +3027,7 @@ BEGIN
p_periode, 0,
COALESCE (rec.budget_huur, rec.codanr),
rec.achternaam, rec.naam, rec.prs_perslid_key,
rec.cnt_contract_nummer_intern, rec.cnt_contract_key,
rec.cnt_contract_nr_versie, rec.cnt_contract_key,
rec.kamer, rec.alg_ruimte_key,
oms.fac_usrdata_omschr||' '||v_curPeriodeNaam,
rec.kpngrp,
@@ -2950,7 +3035,11 @@ BEGIN
v_kostensoort,
btw.fac_usrdata_omschr,
fac.safe_to_number(btw.fac_usrdata_code),
TRUNC(v_prijsfactor * rec.huur_werkelijk, 2)
-- 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_werkelijk
+ (v_aantal_dagen - v_dagen_roommate) / v_curPeriodeDagen * rec.huur
, 2)
FROM fac_usrdata oms,
fac_usrdata btw
WHERE oms.fac_usrtab_key = 43
@@ -2975,7 +3064,7 @@ BEGIN
p_periode, 0,
COALESCE (rec.budget_service, rec.codanr),
rec.achternaam, rec.naam, rec.prs_perslid_key,
rec.cnt_contract_nummer_intern, rec.cnt_contract_key,
rec.cnt_contract_nr_versie, rec.cnt_contract_key,
rec.kamer, rec.alg_ruimte_key,
oms.fac_usrdata_omschr||' '||v_curPeriodeNaam,
rec.kpngrp,
@@ -2983,7 +3072,11 @@ BEGIN
v_kostensoort,
btw.fac_usrdata_omschr,
fac.safe_to_number(btw.fac_usrdata_code),
TRUNC(v_prijsfactor * rec.servicekosten_werkelijk, 2)
-- 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_werkelijk
+ (v_aantal_dagen - v_dagen_roommate) / v_curPeriodeDagen * rec.servicekosten
, 2)
FROM fac_usrdata oms,
fac_usrdata btw
WHERE oms.fac_usrtab_key = 43
@@ -2994,6 +3087,7 @@ BEGIN
IF (rec.roommate IS NOT NULL 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 (
@@ -3010,7 +3104,7 @@ BEGIN
p_periode, 0,
COALESCE (rec.budget_partnercharge, rec.codanr),
rec.achternaam, rec.naam, rec.prs_perslid_key,
rec.cnt_contract_nummer_intern, rec.cnt_contract_key,
rec.cnt_contract_nr_versie, rec.cnt_contract_key,
rec.kamer, rec.alg_ruimte_key,
oms.fac_usrdata_omschr||' '||v_curPeriodeNaam,
rec.kpngrp,
@@ -3018,7 +3112,14 @@ BEGIN
v_kostensoort,
btw.fac_usrdata_omschr,
fac.safe_to_number(btw.fac_usrdata_code),
TRUNC(v_prijsfactor * rec.partnercharge_werkelijk, 2)
-- Te betalen partnercharge = aantal dagen samen met roommate * gedeelde partnercharge
-- + aantal dagen met partner gehuurd * werkelijke partnercharge
TRUNC( v_dagen_roommate / v_curPeriodeDagen * rec.partnercharge_werkelijk
+ DECODE(rec.partner_naam,
NULL, 0,
(v_aantal_dagen - v_dagen_roommate) / v_curPeriodeDagen)
* rec.partnercharge_werkelijk
, 2)
FROM fac_usrdata oms,
fac_usrdata btw
WHERE oms.fac_usrtab_key = 43
@@ -3046,7 +3147,7 @@ BEGIN
p_periode, 0,
COALESCE (rec.budget_telefoon, rec.codanr),
rec.achternaam, rec.naam, rec.prs_perslid_key,
rec.cnt_contract_nummer_intern, rec.cnt_contract_key,
rec.cnt_contract_nr_versie, rec.cnt_contract_key,
rec.kamer, rec.alg_ruimte_key,
oms.fac_usrdata_omschr||' '||v_curPeriodeNaam,
rec.kpngrp,
@@ -3054,13 +3155,69 @@ BEGIN
v_kostensoort,
btw.fac_usrdata_omschr,
fac.safe_to_number(btw.fac_usrdata_code),
TRUNC(v_prijsfactor * rec.telefooncharge_werkelijk, 2)
-- 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_werkelijk
+ (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,
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,
4, -- _FACILITOR
NULL,
'Contract updated'|| chr(10) ||
'<EFBFBD>'||rec.schoonmaak||' cleaning costs invoiced');
END IF;
END IF;
ELSE
fac.writelog (
@@ -3130,17 +3287,22 @@ BEGIN
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_key||'/'||rec.prs_perslid_naam||'/'||rec.alg_ruimte_aanduiding;
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_prijsfactor := 1;
v_errormsg := 'Archiefregels huur aanmaken';
-- Plaats in archief
@@ -3173,7 +3335,7 @@ BEGIN
END)
refnr,
rec.prs_perslid_naam, rec.prs_perslid_naam_full, rec.prs_perslid_key,
rec.cnt_contract_nummer_intern, rec.cnt_contract_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,
@@ -3181,7 +3343,8 @@ BEGIN
v_kostensoort,
sk.cnt_srtkenmerk_dimensie,
fac.safe_to_number(ud.fac_usrdata_code),
nybu.getPrijsFactor(rec.cnt_contract_looptijd_van, rec.cnt_contract_looptijd_tot, v_periodeDate)
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,
@@ -3228,7 +3391,7 @@ BEGIN
FOR rec IN refunds
LOOP
v_aanduiding := rec.cnt_contract_key||'/'||rec.prs_perslid_naam||'/'||rec.alg_ruimte_nr;
v_aanduiding := rec.cnt_contract_nr_versie||'/'||rec.prs_perslid_naam||'/'||rec.alg_ruimte_nr;
-- Alleen refunds maken als we GEEN allongeregels aan het maken zijn (p_mode=2)
IF NOT (p_mode = 2)
@@ -3255,7 +3418,7 @@ BEGIN
p_periode, 0,
rec.bill_to,
rec.prs_perslid_naam, rec.prs_perslid_naam_full, rec.prs_perslid_key,
rec.cnt_contract_nummer_intern, rec.cnt_contract_key,
rec.cnt_contract_nr_versie, rec.cnt_contract_key,
rec.alg_ruimte_nr, rec.alg_ruimte_key,
rec.omschrijving,
rec.kpngrp, rec.kpn,
@@ -4516,7 +4679,8 @@ AS
-- cnt_kenmerk "Start call of wf" 3
-- cnt_kenmerk "Damages" 41
-- cnt_kenmerk "Refund" 123
-- cnt_kenmerk "Contract status" 141
-- 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
@@ -4528,6 +4692,7 @@ AS
-- 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,
@@ -4547,6 +4712,7 @@ AS
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,
@@ -4578,6 +4744,9 @@ AS
(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,
@@ -4627,6 +4796,7 @@ AS
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
@@ -4646,8 +4816,10 @@ AS
-- 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,
@@ -4735,9 +4907,9 @@ AS
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 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
@@ -4751,7 +4923,7 @@ AS
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;
AND c.cnt_contract_verwijder IS NULL;
-- Rapportage "HUUR: Vertrekkerslijst"
CREATE OR REPLACE VIEW nybu_v_rap_vertrekkers
@@ -4771,6 +4943,7 @@ AS
borg,
TO_CHAR(workflow) workflow,
schade,
schoonmaak,
refund,
debiteurnr,
rekeningnr,
@@ -4786,7 +4959,7 @@ AS
contract fclt_f_contract,
gebouw,
verdieping,
kamer fclt_f_kamer,
COALESCE(kamer, '<Geen>') fclt_f_kamer,
ingangsdatum,
adres,
adres2,
@@ -4967,8 +5140,9 @@ AS
b.rm_postcode,
b.rm_plaats
FROM (
SELECT c.cnt_contract_nummer_intern fclt_f_contractnr,
c.cnt_contract_versie,
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,
@@ -5200,7 +5374,9 @@ AS
chkdatum.mld_kenmerkmelding_waarde chkdatum,
chktijd.mld_kenmerkmelding_waarde chktijd,
c.cnt_contract_key,
c.cnt_contract_nummer_intern fclt_f_contract,
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,
@@ -7555,9 +7731,11 @@ AS
AND rg.alg_ruimte_key = ar.alg_ruimte_key;
-- voor mobiel beperkt tot vandaag
CREATE OR REPLACE VIEW NYBU_V_RAP_MOB_LOOPLIJST
CREATE OR REPLACE VIEW nybu_v_rap_mob_looplijst
AS
(SELECT * FROM nybu_v_rap_res_looplijst WHERE fclt_d_datum = TO_CHAR(SYSDATE, 'DD-MM-YYYY'));
SELECT *
FROM nybu_v_rap_res_looplijst
WHERE fclt_d_datum = TO_CHAR(SYSDATE, 'DD-MM-YYYY');
-- Overzicht van reserveringen voor de komende 7 dagen die vandaag toegevoegd/gewijzigd zijn (tbv backoffice).
CREATE OR REPLACE VIEW nybu_v_rap_res_lastminutes
@@ -8708,7 +8886,7 @@ AS
BEGIN adm.systrackscriptId('$Id$', 0); END;
/
BEGIN fac.registercustversion ('nybu', 26); END;
BEGIN fac.registercustversion ('nybu', 27); END;
/
COMMIT;