refactor jahresabrechnung
This commit is contained in:
@ -1,14 +1,14 @@
|
||||
create or replace view abrechnung1 as
|
||||
select b.jahr as jahr,
|
||||
(b.betrag / o.flaeche * w.flaeche) as anteil,
|
||||
o.shortname as objekt,
|
||||
w.shortname as wohnung,
|
||||
concat(m.vorname, ' ', m.nachname) as mieter,
|
||||
m.id as mieter_id,
|
||||
create or replace view betriebskosten_anteil_mieter as
|
||||
select (b.betrag / o.flaeche * w.flaeche) as anteil,
|
||||
o.id as objekt,
|
||||
w.id as wohnung,
|
||||
m.id as mieter,
|
||||
b.id as abrechnung,
|
||||
(timestampdiff(month,
|
||||
if (year(m.einzug) = b.jahr, m.einzug, makedate(b.jahr, 1)),
|
||||
if (m.auszug is not null, m.auszug, last_day(makedate(b.jahr, 365)))
|
||||
) + 1) as nutzungszeit
|
||||
) + 1) as nutzungszeit,
|
||||
b. jahr as jahr
|
||||
from betriebskosten_abrechnung b,
|
||||
objekt o,
|
||||
wohnung w,
|
||||
@ -18,36 +18,31 @@ create or replace view abrechnung1 as
|
||||
m.wohnung = w.id and
|
||||
(year(m.einzug) = b.jahr or year(m.auszug) = b.jahr);
|
||||
|
||||
create or replace view abrechnung2 as
|
||||
select jahr,
|
||||
anteil / 12 * nutzungszeit as anteil,
|
||||
objekt,
|
||||
wohnung,
|
||||
mieter,
|
||||
mieter_id
|
||||
from abrechnung1;
|
||||
|
||||
create or replace view abrechnung3 as
|
||||
select a.jahr as jahr,
|
||||
a.anteil as anteil,
|
||||
a.objekt as objekt,
|
||||
a.wohnung as wohnung,
|
||||
m.vorname as vorname,
|
||||
m.nachname as nachname,
|
||||
m.anrede as anrede,
|
||||
m.strasse as strasse,
|
||||
m.plz as plz,
|
||||
m.ort as ort
|
||||
from abrechnung2 a,
|
||||
mieter m
|
||||
where m.id = a.mieter_id;
|
||||
|
||||
select * from abrechnung3 where jahr = '2020';
|
||||
|
||||
create table jahresabrechnung_summary (
|
||||
id integer unsigned not null auto_increment,
|
||||
abrechnung integer unsigned not null,
|
||||
mieter integer unsigned not null,
|
||||
nutzungszeit integer not null,
|
||||
anteil_pro_flaeche decimal(20, 10) not null,
|
||||
anteil_pro_flaeche_nutzungszeit decimal(20, 10) not null,
|
||||
vorauszahlung decimal(20, 2) not null,
|
||||
nachzahlung decimal(20, 2) not null,
|
||||
summe_zahlungen decimal(20, 2) not null,
|
||||
summe_zahlungen_anteil_miete decimal(20, 2) not null,
|
||||
constraint primary key(id),
|
||||
constraint unique key uk_jahresabrechnung_summary_mieter_abrechnung (abrechnung, mieter),
|
||||
constraint foreign key fk_jahresabrechnung_summary_betriebskosten_abrechnung (abrechnung)
|
||||
references betriebskosten_abrechnung(id)
|
||||
on delete restrict
|
||||
on update cascade,
|
||||
constraint foreign key fk_jahresabrechnung_summary_mieter (mieter)
|
||||
references mieter(id)
|
||||
on delete restrict
|
||||
on update cascade
|
||||
) engine=InnoDB;
|
||||
|
||||
delimiter //
|
||||
|
||||
|
||||
create or replace procedure jahresabrechnung(in p_year year)
|
||||
modifies sql data
|
||||
begin
|
||||
@ -59,26 +54,14 @@ begin
|
||||
declare v_error_message varchar(128);
|
||||
declare c_anteil_mieter
|
||||
cursor (cp_year year) for
|
||||
select (b.betrag / o.flaeche * w.flaeche) as anteil,
|
||||
o.id as objekt,
|
||||
w.id as wohnung,
|
||||
m.id as mieter,
|
||||
(timestampdiff(month,
|
||||
if (year(m.einzug) = b.jahr, m.einzug, makedate(b.jahr, 1)),
|
||||
if (m.auszug is not null, m.auszug, last_day(makedate(b.jahr, 365)))
|
||||
) + 1) as nutzungszeit
|
||||
from betriebskosten_abrechnung b,
|
||||
objekt o,
|
||||
wohnung w,
|
||||
mieter m
|
||||
where b.objekt = o.id and
|
||||
w.objekt = o.id and
|
||||
m.wohnung = w.id and
|
||||
(year(m.einzug) = b.jahr or year(m.auszug) = b.jahr) and
|
||||
b.jahr = cp_year;
|
||||
select anteil, objekt, wohnung, mieter, abrechnung,
|
||||
nutzungszeit, jahr
|
||||
from betriebskosten_anteil_mieter
|
||||
where jahr = cp_year;
|
||||
|
||||
for rec in c_anteil_mieter(p_year) do
|
||||
set v_anteil_mieter_nutzungszeit = rec.anteil / 12 * rec.nutzungszeit;
|
||||
|
||||
select sum(betrag) into v_summe_zahlungen
|
||||
from zahlung
|
||||
where mieter = rec.mieter and
|
||||
@ -87,31 +70,25 @@ begin
|
||||
set v_error_message = concat('No Zahlungen for Mieter ', rec.mieter);
|
||||
signal sqlstate '45000' set message_text = v_error_message;
|
||||
end if;
|
||||
|
||||
select sum(anteil_miete) into v_summe_mietforderungen
|
||||
from forderung
|
||||
where mieter = rec.mieter and
|
||||
year(datum) = p_year;
|
||||
|
||||
set v_summe_betriebskosten_zahlungen = v_summe_zahlungen - v_summe_mietforderungen;
|
||||
set v_betriebskosten_nachzahlung = v_anteil_mieter_nutzungszeit - v_summe_betriebskosten_zahlungen;
|
||||
|
||||
insert into forderung (mieter, datum, betrag, anteil_betriebskosten_nachzahlung, ref_wohnung)
|
||||
values(rec.mieter, curdate(), v_betriebskosten_nachzahlung, v_betriebskosten_nachzahlung, rec.wohnung);
|
||||
|
||||
call log(concat('Mieter: ',
|
||||
cast(rec.mieter as char),
|
||||
', Anteil: ',
|
||||
cast(v_anteil_mieter_nutzungszeit as char),
|
||||
', Zahlungen: ',
|
||||
cast(v_summe_zahlungen as char),
|
||||
', Mietforderungen: ',
|
||||
cast(v_summe_mietforderungen as char),
|
||||
', Betriebskostenvorauszahlung: ',
|
||||
cast(v_summe_betriebskosten_zahlungen as char),
|
||||
', Rest: ',
|
||||
cast(v_betriebskosten_nachzahlung as char)
|
||||
)
|
||||
);
|
||||
insert into jahresabrechnung_summary (abrechnung, mieter, nutzungszeit, anteil_pro_flaeche,
|
||||
anteil_pro_flaeche_nutzungszeit, vorauszahlung,
|
||||
nachzahlung, summe_zahlungen, summe_zahlungen_anteil_miete)
|
||||
values(rec.abrechnung, rec.mieter, rec.nutzungszeit, rec.anteil,
|
||||
v_anteil_mieter_nutzungszeit, v_summe_betriebskosten_zahlungen,
|
||||
v_betriebskosten_nachzahlung, v_summe_zahlungen, v_summe_mietforderungen);
|
||||
end for;
|
||||
end;
|
||||
//
|
||||
|
||||
delimiter ;
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user