Blazor webassembly with radzen setup
This commit is contained in:
86
Services/ReportGenerator.cs
Normal file
86
Services/ReportGenerator.cs
Normal file
@@ -0,0 +1,86 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using BatteryCostAnalysis.Models;
|
||||
|
||||
namespace BatteryCostAnalysis.Services
|
||||
{
|
||||
public class ReportGenerator
|
||||
{
|
||||
public static void GenerateReport(List<EnergyData> originalData, Dictionary<int, List<BatteryDayResult>> scenarios)
|
||||
{
|
||||
using (var writer = new StreamWriter("../../../BatteryAnalysisReport.md"))
|
||||
{
|
||||
writer.WriteLine("# Battery Cost Analysis Report\n");
|
||||
|
||||
// Original data summary
|
||||
writer.WriteLine("## Original Data Summary");
|
||||
var totalConsumption = originalData.Sum(d => d.DayConsumption + d.NightConsumption);
|
||||
var totalProduction = originalData.Sum(d => d.DayProduction + d.NightProduction);
|
||||
writer.WriteLine($"Total Consumption: {totalConsumption:F2} kWh");
|
||||
writer.WriteLine($"Total Production: {totalProduction:F2} kWh\n");
|
||||
|
||||
// Generate graph data
|
||||
writer.WriteLine("### Energy Consumption and Production\n");
|
||||
writer.WriteLine("```");
|
||||
writer.WriteLine("Date,Total Production,Total Consumption");
|
||||
foreach (var day in originalData)
|
||||
{
|
||||
var prod = day.DayProduction + day.NightProduction;
|
||||
var cons = day.DayConsumption + day.NightConsumption;
|
||||
writer.WriteLine($"{day.Date:yyyy-MM-dd},{prod:F2},{cons:F2}");
|
||||
}
|
||||
writer.WriteLine("```\n");
|
||||
|
||||
writer.WriteLine("");
|
||||
writer.WriteLine("(Graph showing total production in green and total consumption in red)\n");
|
||||
|
||||
// Scenario analysis
|
||||
foreach (var scenario in scenarios)
|
||||
{
|
||||
var batteryCount = scenario.Key;
|
||||
var results = scenario.Value;
|
||||
|
||||
writer.WriteLine($"## Scenario with {batteryCount} Battery{(batteryCount > 1 ? "ies" : "")}");
|
||||
writer.WriteLine($"Battery Capacity: {batteryCount * 2.6} kWh\n");
|
||||
|
||||
var totalReducedConsumption = results.Sum(r => r.ReducedConsumption);
|
||||
var totalReducedProduction = results.Sum(r => r.ReducedProduction);
|
||||
var savings = totalReducedConsumption * 0.30; // Assuming €0.30 per kWh
|
||||
|
||||
writer.WriteLine($"Total Reduced Consumption: {totalReducedConsumption:F2} kWh");
|
||||
writer.WriteLine($"Total Reduced Production: {totalReducedProduction:F2} kWh");
|
||||
writer.WriteLine($"Estimated Annual Savings: €{savings:F2}\n");
|
||||
|
||||
// Generate scenario graph data
|
||||
writer.WriteLine($"### Battery Performance for {batteryCount} Battery{(batteryCount > 1 ? "ies" : "")}\n");
|
||||
writer.WriteLine("```");
|
||||
writer.WriteLine("Date,Charged Energy,Used Energy,Remaining Energy");
|
||||
foreach (var result in results)
|
||||
{
|
||||
writer.WriteLine($"{result.Date:yyyy-MM-dd},{result.ChargedEnergy:F2},{result.UsedEnergy:F2},{result.RemainingEnergy:F2}");
|
||||
}
|
||||
writer.WriteLine("```\n");
|
||||
|
||||
writer.WriteLine($"");
|
||||
writer.WriteLine("(Graph showing charged energy in blue, used energy in orange, and remaining energy in gray)\n");
|
||||
|
||||
// Detailed daily results
|
||||
writer.WriteLine("### Daily Results");
|
||||
writer.WriteLine("| Date | Charged (kWh) | Used (kWh) | Remaining (kWh) |");
|
||||
writer.WriteLine("|------|---------------|------------|-----------------|");
|
||||
|
||||
foreach (var result in results.Take(10)) // Show first 10 days
|
||||
{
|
||||
writer.WriteLine($"| {result.Date:yyyy-MM-dd} | {result.ChargedEnergy:F2} | {result.UsedEnergy:F2} | {result.RemainingEnergy:F2} |");
|
||||
}
|
||||
|
||||
writer.WriteLine("\n---\n");
|
||||
}
|
||||
}
|
||||
|
||||
Console.WriteLine("Report generated: BatteryAnalysisReport.md");
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user