jahresabrechnung

This commit is contained in:
2021-01-21 16:23:52 +01:00
parent 53ce100253
commit a39c011ba5
2 changed files with 79 additions and 2 deletions

View File

@ -44,3 +44,74 @@ create or replace view abrechnung3 as
select * from abrechnung3 where jahr = '2020';
delimiter //
create or replace procedure jahresabrechnung(in p_year year)
modifies sql data
begin
declare v_anteil_mieter_nutzungszeit decimal(20, 10);
declare v_summe_zahlungen decimal(20, 10);
declare v_summe_mietforderungen decimal(20, 10);
declare v_summe_betriebskosten_zahlungen decimal(20, 10);
declare v_betriebskosten_nachzahlung decimal(20, 10);
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;
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
year(datum_soll) = p_year;
if (v_summe_zahlungen is null) then
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)
)
);
end for;
end;
//