Skip to content
Snippets Groups Projects
Commit da509432 authored by Daniel Lorych's avatar Daniel Lorych :cookie:
Browse files

Restructure ConifugrationResult class

parent d40e28d1
No related branches found
No related tags found
No related merge requests found
......@@ -4,6 +4,26 @@ using System.ComponentModel;
namespace Helios.Models
{
public class ConfiguratorResult
{
public List<RoofResults> RoofResults { get; set; }
public ConfiguratorResult() {
RoofResults = new List<RoofResults>();
}
}
public class RoofResults
{
public List<PanelPerformance> Panels { get; set; }
public double RoofAngle { get; set; }
public double RoofArea { get; set; }
public RoofResults() {
Panels = new List<PanelPerformance>();
}
}
public class PanelPerformance
{
public double RoofArea { get; set; }
public double RoofAngle { get; set; }
......@@ -29,9 +49,7 @@ namespace Helios.Models
[DisplayName("Is Within Budget")]
public bool WithinBudget { get; set; }
public ConfiguratorResult()
{
}
public PanelPerformance() { }
}
}
......@@ -18,37 +18,47 @@ namespace Helios.Source
this._maxElevation = GetSunElevation();
}
public List<ConfiguratorResult> GetResults(ConfiguratorInput input)
public ConfiguratorResult GetResults(ConfiguratorInput input)
{
List<ConfiguratorResult> results = new List<ConfiguratorResult>();
ConfiguratorResult result = new ConfiguratorResult();
foreach (SolarPanel panel in _solarPanels)
{
foreach (Roof roof in input.Roofs)
{
ConfiguratorResult result = new ConfiguratorResult();
RoofResults roofResult = new RoofResults();
roofResult.RoofAngle = roof.Elevation;
roofResult.RoofArea = roof.Area;
foreach (SolarPanel panel in _solarPanels)
{
PanelPerformance performance = new PanelPerformance();
int summerElevationAngle = roof.GetElevationAngle(_maxElevation.SummerElevation);
int winterElevationAngle = roof.GetElevationAngle(_maxElevation.WinterElevation);
result.RoofArea = roof.Area;
result.RoofAngle = roof.Elevation;
result.PanelEfficiency = panel.Efficiency * 100;
result.InstallationCost = panel.GetInstallationCost(roof.Area);
result.PowerGeneratedSummer = Math.Round(panel.GetPowerOutput(1000, roof.Area, summerElevationAngle), 2);
result.PowerGeneratedWinter = Math.Round(panel.GetPowerOutput(1000, roof.Area, winterElevationAngle), 2);
result.GeneratesRequiredPower = GeneratesRequiredPower(input.PowerRequired, result.PowerGeneratedWinter);
result.ExceedsMaximumPower = ExceedsPowerLimit(input.MaximumPower, result.PowerGeneratedWinter);
result.WithinBudget = WithinBudget(input.Budget, result.InstallationCost);
if (result.RoofAngle != 0)
performance.RoofArea = roof.Area;
performance.RoofAngle = roof.Elevation;
performance.PanelEfficiency = panel.Efficiency * 100;
performance.InstallationCost = panel.GetInstallationCost(roof.Area);
performance.PowerGeneratedSummer = Math.Round(panel.GetPowerOutput(1000, roof.Area, summerElevationAngle), 2);
performance.PowerGeneratedWinter = Math.Round(panel.GetPowerOutput(1000, roof.Area, winterElevationAngle), 2);
performance.GeneratesRequiredPower = GeneratesRequiredPower(input.PowerRequired, performance.PowerGeneratedWinter);
performance.ExceedsMaximumPower = ExceedsPowerLimit(input.MaximumPower, performance.PowerGeneratedWinter);
performance.WithinBudget = WithinBudget(input.Budget, performance.InstallationCost);
if (performance.RoofAngle != 0)
{
results.Add(result);
roofResult.Panels.Add(performance);
}
}
if (roofResult.Panels.Count != 0)
{
result.RoofResults.Add(roofResult);
}
}
return results;
return result;
}
private bool WithinBudget(int budget, double installationCost)
......
@model IEnumerable<Helios.Models.ConfiguratorResult>
@model Helios.Models.ConfiguratorResult
@{
ViewData["Title"] = "Configuration Results";
}
<h4>Configurator Results</h4>
<hr />
@foreach (var roofResult in Model.RoofResults)
{
<h5>Results for roof:</h5>
<ul>
<li>
Area: @roofResult.RoofArea
</li>
<li>
Angle: @roofResult.RoofAngle
</li>
</ul>
<table class="table">
<tr>
<th>
@Html.DisplayNameFor(model => model.PanelEfficiency)
@Html.DisplayNameFor(panelResult => panelResult.RoofResults[0].Panels[0].PanelEfficiency)
</th>
<th>
@Html.DisplayNameFor(model => model.InstallationCost)
@Html.DisplayNameFor(panelResult => panelResult.RoofResults[0].Panels[0].InstallationCost)
</th>
<th>
@Html.DisplayNameFor(model => model.PowerGeneratedSummer)
@Html.DisplayNameFor(panelResult => panelResult.RoofResults[0].Panels[0].PowerGeneratedSummer)
</th>
<th>
@Html.DisplayNameFor(model => model.PowerGeneratedWinter)
@Html.DisplayNameFor(panelResult => panelResult.RoofResults[0].Panels[0].PowerGeneratedWinter)
</th>
<th>
@Html.DisplayNameFor(model => model.GeneratesRequiredPower)
@Html.DisplayNameFor(panelResult => panelResult.RoofResults[0].Panels[0].GeneratesRequiredPower)
</th>
<th>
@Html.DisplayNameFor(model => model.ExceedsMaximumPower)
@Html.DisplayNameFor(panelResult => panelResult.RoofResults[0].Panels[0].ExceedsMaximumPower)
</th>
<th>
@Html.DisplayNameFor(model => model.WithinBudget)
@Html.DisplayNameFor(panelResult => panelResult.RoofResults[0].Panels[0].WithinBudget)
</th>
<th></th>
</tr>
@foreach (var item in Model)
@foreach (var panel in roofResult.Panels)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.PanelEfficiency)
@panel.PanelEfficiency
</td>
<td>
@Html.DisplayFor(modelItem => item.InstallationCost)
@panel.InstallationCost
</td>
<td>
@Html.DisplayFor(modelItem => item.PowerGeneratedSummer)
@panel.PowerGeneratedSummer
</td>
<td>
@Html.DisplayFor(modelItem => item.PowerGeneratedWinter)
@panel.PowerGeneratedWinter
</td>
<td>
@Html.DisplayFor(modelItem => item.GeneratesRequiredPower)
@panel.GeneratesRequiredPower
</td>
<td>
@Html.DisplayFor(modelItem => item.ExceedsMaximumPower)
@panel.ExceedsMaximumPower
</td>
<td>
@Html.DisplayFor(modelItem => item.WithinBudget)
@panel.WithinBudget
</td>
</tr>
}
</table>
}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment