$('#nextBtn').on('click', function() {
let dachVal = parseFloat($('.dachflache_input').val());
let modulVal = parseFloat($('.darstellungsart_input').val());
let F8 = !isNaN(modulVal) ? modulVal : (!isNaN(dachVal) ? (dachVal < 15 ? dachVal * 0.2 : dachVal * 0.22) : 0);
const E3_n = 5000;
const irradiance = 950;
const monthlyData = [
{ sun: 0.02, consumption: 0.09, days: 31 },
{ sun: 0.03, consumption: 0.08, days: 28 },
{ sun: 0.07, consumption: 0.08, days: 31 },
{ sun: 0.10, consumption: 0.07, days: 30 },
{ sun: 0.13, consumption: 0.08, days: 31 },
{ sun: 0.16, consumption: 0.07, days: 30 },
{ sun: 0.16, consumption: 0.09, days: 31 },
{ sun: 0.13, consumption: 0.08, days: 31 },
{ sun: 0.08, consumption: 0.08, days: 30 },
{ sun: 0.07, consumption: 0.10, days: 31 },
{ sun: 0.03, consumption: 0.09, days: 30 },
{ sun: 0.02, consumption: 0.09, days: 31 }
];
let total_n = 0;
for (let i = 0; i < 12; i++) {
const m = monthlyData[i];
const produced = F8 * irradiance * m.sun * 0.9;
const consumptionLimit = E3_n * m.consumption * 0.35;
const min1 = Math.min(produced, consumptionLimit);
const remaining = produced - min1;
const min2 = Math.min(
remaining * 0.9,
F8 * m.days * 0.9,
E3_n * m.consumption * (1 - 0.35)
);
total_n += min1 + min2;
}
const percent = F8 > 0 ? total_n / (F8 * irradiance) : 0;
const roundedPercent = Math.round(percent * 100);
// dachflache_input
const dachflache_input = $('.dachflache_input').val();
$('.input-dachflaeche td[colspan="2"]').text(dachflache_input);
// dachart_input
const dachart = $('.dachart').val();
$('.input-dachart td[colspan="2"]').text(dachart);
// stromverbrauch
const stromverbrauch_input = $('.stromverbrauch_input').val();
$('.input-stromverbrauch td[colspan="2"]').text(stromverbrauch_input);
// eigenmontage_input
let eigenmontage_input = $('.eigenmontage_input').is(':checked') ? "Ja" : "Nein";
$('.input-eigenmontage td[colspan="2"]').text(eigenmontage_input);
//Mögliche Darstellungsart:
const darstellungsart_input = $('.darstellungsart_input').val();
$('.input-darstellungsart td[colspan="2"]').text(darstellungsart_input);
// Eigenverbrauch
const B3 = F8;
const E3 = 5000;
const factor = 950;
const tax = 0.9;
const base = B3 * factor;
const months = [
{ percent: 0.02, eRate: 0.09, days: 31 },
{ percent: 0.03, eRate: 0.08, days: 28 },
{ percent: 0.07, eRate: 0.08, days: 31 },
{ percent: 0.10, eRate: 0.07, days: 30 },
{ percent: 0.13, eRate: 0.08, days: 31 },
{ percent: 0.16, eRate: 0.07, days: 30 },
{ percent: 0.16, eRate: 0.09, days: 31 },
{ percent: 0.13, eRate: 0.08, days: 31 },
{ percent: 0.08, eRate: 0.08, days: 30 },
{ percent: 0.07, eRate: 0.10, days: 31 },
{ percent: 0.03, eRate: 0.09, days: 30 },
{ percent: 0.02, eRate: 0.09, days: 31 },
];
let total = 0;
months.forEach(({ percent, eRate, days }) => {
const part1 = B3 * factor * percent * tax;
const part2 = E3 * eRate * 0.35;
const min1 = Math.min(part1, part2);
const remainder = part1 - min1;
const safeRemainder = remainder > 0 ? remainder : 0;
const part3 = safeRemainder * tax;
const part4 = B3 * days * tax;
const part5 = E3 * eRate * (1 - 0.35);
const min2 = Math.min(part3, part4, part5);
total += min1 + min2;
});
const result = total / base + 0.01;
const gen = Math.round(result * 100) / 100;
const darstellungsart = F8;
const genutzter_total = Math.round(950 * darstellungsart * gen * 0.32);
const formatted_total = genutzter_total.toLocaleString('de-DE') + '€';
$('.erloese-eigenverbrauch-total').text(formatted_total);
// Neue Formel einspeiseertrag_mit_total
const einspeiseertrag_mit_total = Math.round(950 * darstellungsart * (1 - gen) * 0.12 + darstellungsart * 20 * 0.15);
const formatted_einspeiseertrag = einspeiseertrag_mit_total.toLocaleString('de-DE') + '€';
$('.erloese-einspeiseertrag-total').text(formatted_einspeiseertrag);
// Neue Formel mehrwert_total
const mehrwert_total = Math.round(950 * darstellungsart * (1 - gen) * 0.038 + darstellungsart * 2.9);
const formatted_mehrwert = mehrwert_total.toLocaleString('de-DE') + '€';
$('.erloese-mehrwert-total').text(formatted_mehrwert);
// summe_jahres_total
const summe_jahres_total = Math.round(
darstellungsart * 950 * gen * 0.32 +
darstellungsart * 950 * (1 - gen) * 0.12 +
600 * 0.07 +
225 * 0.2
);
const formatted_summe = summe_jahres_total.toLocaleString('de-DE') + '€';
$('.summe-jahres-total').text(formatted_summe);
// O4 Premium
const o4 = F8;
// Custom Excel-like Calculation
let o4Premium = 0;
if (o4 <= 10) {
o4Premium = o4 * 170;
} else if (o4 <= 15) {
o4Premium = o4 * 150;
} else if (o4 <= 20) {
o4Premium = o4 * 130;
} else {
o4Premium = o4 * 115;
}
let o4Standard = 0;
if (o4 <= 10) {
o4Standard = o4 * 220;
} else if (o4 <= 15) {
o4Standard = o4 * 200;
} else if (o4 <= 20) {
o4Standard = o4 * 180;
} else {
o4Standard = o4 * 165;
}
// P3 Premium
let p3Premium = 0;
if (o4 <= 6) {
p3Premium = 200 * o4;
} else {
const capped = Math.min(o4, 25);
const steps = Math.min(Math.floor((capped - 10) / 5), 3);
const multiplier = 1 - 0.05 * steps;
p3Premium = 300 * multiplier * o4;
}
let p3Standard = 0;
const capped = Math.min(o4, 25);
const steps = Math.min(Math.floor((capped - 10) / 5), 3);
const multiplier = 1 - 0.03 * steps;
p3Standard = 410 * multiplier * o4;
// Instandhaltungspauschale
const instandhaltungspauschale_standard = Math.round((o4Premium + p3Premium) * 0.1);
const instandhaltungspauschale_premium = Math.round((o4Standard + p3Standard) * 0.1);
const formatted_instandhaltungspauschale_standard = instandhaltungspauschale_standard.toLocaleString('de-DE') + '€';
const formatted_instandhaltungspauschale_premium = instandhaltungspauschale_premium.toLocaleString('de-DE') + '€';
$('.instandhaltungspauschale_premium').text(formatted_instandhaltungspauschale_premium );
$('.instandhaltungspauschale_standard').text(formatted_instandhaltungspauschale_standard);
// Jährlicher Überschuss (nach Instandhaltung) – Premium
const jahrlicher_uberschuss_premium = genutzter_total + einspeiseertrag_mit_total - instandhaltungspauschale_premium;
const formatted_jahrlicher_uberschuss_premium = jahrlicher_uberschuss_premium.toLocaleString('de-DE') + '€';
$('.jahrlicher_uberschuss_premium').text(formatted_jahrlicher_uberschuss_premium);
// Jährlicher Überschuss (nach Instandhaltung) – Standard
const jahrlicher_uberschuss_standard = genutzter_total + einspeiseertrag_mit_total - instandhaltungspauschale_standard;
const formatted_jahrlicher_uberschuss_standard = jahrlicher_uberschuss_standard.toLocaleString('de-DE') + '€';
$('.jahrlicher_uberschuss_standard').text(formatted_jahrlicher_uberschuss_standard);
//Amortisation Premium
let amortisation_premium = 0;
if (jahrlicher_uberschuss_premium > 0) {
amortisation_premium = 15000 / jahrlicher_uberschuss_premium;
} else {
amortisation_premium = 0;
}
const formatted_amortisation_premium = amortisation_premium.toLocaleString('de-DE', {minimumFractionDigits: 1, maximumFractionDigits: 1}) + '€';
$('.amortisation_premium').text(formatted_amortisation_premium);
//Amortisation Standard
let amortisation_standard= 0;
if (jahrlicher_uberschuss_standard > 0) {
amortisation_standard = 13000 / jahrlicher_uberschuss_standard;
} else {
amortisation_standard = 0;
}
const formatted_amortisation_standard = amortisation_standard.toLocaleString('de-DE', {minimumFractionDigits: 1, maximumFractionDigits: 1}) + '€';
$('.amortisation_standard').text(formatted_amortisation_standard);
//Jahresrendite
var jahresrendite_premium = jahrlicher_uberschuss_premium / 15000;
var rendite_percent = Math.round(jahresrendite_premium * 100);
$(".jahresrendite_premium").text(rendite_percent + "%");
var jahresrendite_standard = jahrlicher_uberschuss_standard / 13000;
var rendite_percent_standard = Math.round(jahresrendite_standard * 100);
$(".jahresrendite_standard").text(rendite_percent_standard + "%");
// Sparen
var sparen_premium = jahrlicher_uberschuss_premium * 20;
const formatted_sparen_premium = sparen_premium.toLocaleString('de-DE') + '€';
$(".sparen_premium").text(formatted_sparen_premium);
var sparen_standard = jahrlicher_uberschuss_standard * 20;
const formatted_sparen__standard = sparen_standard.toLocaleString('de-DE') + '€';
$(".sparen_standard").text(formatted_sparen__standard);
// CO₂-Einsparung Premium
const co2_premium = o4 * 950 * 0.4 * 20;
const formatted_co2_premium = co2_premium.toLocaleString('de-DE') + ' kg';
$('.co2_premium').text(formatted_co2_premium);
$('.co2_standard').text(formatted_co2_premium)
const percentResult = result * 100;
const percentResultRounded = Math.round(percentResult)
$(".gen_p").html(percentResultRounded + "%");
$(".gen_s").html(percentResultRounded + "%");
// Each item represents [percentage of B3, percentage of E3, number of days]
const data = [
[0.02, 0.09, 31],
[0.03, 0.08, 28],
[0.07, 0.08, 31],
[0.10, 0.07, 30],
[0.13, 0.08, 31],
[0.16, 0.07, 30],
[0.16, 0.09, 31],
[0.13, 0.08, 31],
[0.08, 0.08, 30],
[0.07, 0.10, 31],
[0.03, 0.09, 30],
[0.02, 0.09, 31],
];
let sum = 0;
// Loop through each set of values to calculate the total
data.forEach(([bPercent, ePercent, days]) => {
const base = o4 * 950 * bPercent * 0.9;
// Limit based on E3 * ePercent * 0.35
const eBase = E3 * ePercent * 0.35;
// First part: the minimum between base and eBase
const part1 = Math.min(base, eBase);
// Remaining value after subtracting part1
const remain = base - part1;
// Alternative limits for second part
const alt1 = remain * 0.9;
const alt2 = o4 * days * 0.9;
const alt3 = E3 * ePercent * 0.65; // since 1 - 0.35 = 0.65
// Second part: minimum among the 3 options
const part2 = Math.min(alt1, alt2, alt3);
// Add both parts to the total sum
sum += part1 + part2;
});
// Final percentage result, rounded
const resultPercent = Math.round((sum / E3) * 100);
const adjustedPercent = resultPercent + 2;
$(".anteil_premium").html(adjustedPercent + "%");
$(".anteil_standard").html(adjustedPercent + "%");
});
Js form