Js form
$('#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 + "%");
});

Leave a Reply

Your email address will not be published. Required fields are marked *