JS FORM inutec

$('#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
  
  
      // m3
      let gestell;
    
      if (dachart === "Flachdach/Freiaufstellung") {
        gestell = F8 * 125;
      } else if (dachart === "Dachziegel") {
        gestell = F8 * 110;
      } else if (dachart === "Trapezblechdach") {
        gestell = F8 * 50;
      } else {
        gestell = ""; 
      }
      // m3
      // n3 //
        // cost 
        var n3_cost =  F8* 140;
        //n3_premium
        var n3_premium =  F8* 170;
      // n3 //
  
      if (F8 <= 10) {
        o3_cost = F8 * 170;
      } else if (F8 <= 15) {
        o3_cost = F8 * 150;
      } else if (F8 <= 20) {
        o3_cost = F8 * 130;
      } else {
        o3_cost = F8 * 115;
      }
      let o3_premium;
      if (F8 <= 10) {
        o3_premium = F8 * 220;
      } else if (F8 <= 15) {
        o3_premium = F8 * 200;
      } else if (F8 <= 20) {
        o3_premium = F8 * 180;
      } else {
        o3_premium = F8 * 165;
      }
       //u
      let eigenmontage;
      if (eigenmontage_input == "Ja") {
        eigenmontage = 0;
      
      } else {
        eigenmontage = F8 * 180;
      }
      //u
      //p 
      let p_cost;
      if (F8 <= 6) {
        p_cost = 200 * F8;
      } else {
        const cappedF8 = Math.min(F8, 25);
        const discountSteps = Math.min(Math.floor((cappedF8 - 10) / 5), 3); 
        const discountRate = 0.05 * discountSteps; // 
        p_cost = 300 * (1 - discountRate) * F8;
      }
      const cappedF8 = Math.min(F8, 25);
      const discountSteps = Math.min(Math.floor((cappedF8 - 10) / 5), 3); 
      const discountRate = 0.03 * discountSteps; 
      const p_premium = 410 * (1 - discountRate) * F8;
      //p 
      //q 
      var q= 1300;
      var r =1000; 
      //s
      let s_minValue;
      if (F8 * 2.5 <= 30) {
        s_minValue = F8 * 2.5;
      } else {
        s_minValue = 30;
      }
      
      let s_multiplier;
      if (dachart === "Flachdach/Freiaufstellung") {
        s_multiplier = 3;
      } else {
        s_multiplier = 1;
      }
      
      let s;
      s = s_minValue * 4.5 * s_multiplier * 9;
      //s
      let t;
  
      if (eigenmontage_input === "Ja") {
        t = 250;
      } else {
        t = 500;
      }
  
      const sum_M3_to_U3 =
      (parseFloat(gestell) || 0) +
      (parseFloat(n3_cost) || 0) +
      (parseFloat(o3_cost) || 0) +
      (parseFloat(eigenmontage) || 0) +
      (parseFloat(p_cost) || 0) +
      (parseFloat(q) || 0) +
      (parseFloat(r) || 0) +
      (parseFloat(s) || 0);
  
      const c_cost = 250 * Math.ceil(sum_M3_to_U3 / 250);
  
  
      const M3 = parseFloat(gestell) || 0;
      const N4 = parseFloat(n3_premium) || 0;
      const O4 = parseFloat(o3_premium) || 0;
      const P4 = parseFloat(p_premium) || 0;
      const Q3 = parseFloat(q) || 0;
      const R3 = parseFloat(r) || 0;
      const S3 = parseFloat(s) || 0;
      const T3 = parseFloat(t) || 0;
      const U3 = parseFloat(eigenmontage) || 0; 
  
      const sum_c_premium =
        M3 + N4 + O4 + P4 + Q3 + R3 + S3 + T3 + U3;
      const c_premium = 250 * Math.round(sum_c_premium / 250);
  
  
    let amortisation_premium = 0;
    if (jahrlicher_uberschuss_premium > 0) {
      amortisation_premium = c_premium / 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 = c_cost / 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 / c_premium;
    var rendite_percent = Math.round(jahresrendite_premium * 100);
    $(".jahresrendite_premium").text(rendite_percent + "%");
  
    var jahresrendite_standard = jahrlicher_uberschuss_standard / c_cost;
    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;
  
  if (adjustedPercent > 100) {
    $(".anteil_premium").html('100' + "%");
    $(".anteil_standard").html('100' + "%");
  }
  else{
    $(".anteil_premium").html(adjustedPercent + "%");
    $(".anteil_standard").html(adjustedPercent + "%");
  }
  
  });

  function toggleInputs() {
    const dachflacheValue = $('.dachflache_input').val().trim();
    const darstellungsartValue = $('.darstellungsart_input').val().trim();

    if (dachflacheValue) {
      $('.formElement_3').hide(); // hide darstellungsart input
      $('.formElement_2').show(); // ensure dachflache input is visible
    } else if (darstellungsartValue) {
      $('.formElement_2').hide(); // hide dachflache input
      $('.formElement_3').show(); // ensure darstellungsart input is visible
    } else {
      // If both are empty, show both again
      $('.formElement_2, .formElement_3').show();
    }
  }

  // Listen to input changes
  $('.dachflache_input, .darstellungsart_input').on('input', toggleInputs);
  

Leave a Reply

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