diff --git a/Helios/Controllers/ConfiguratorController.cs b/Helios/Controllers/ConfiguratorController.cs index 9060e96608d18bba3dfc204a06545f9424459c40..ac9b7e0e6560feaaaa9361337d16d911857c91c2 100644 --- a/Helios/Controllers/ConfiguratorController.cs +++ b/Helios/Controllers/ConfiguratorController.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; +using Helios.Models; using Helios.Source; using Microsoft.AspNetCore.Mvc; @@ -22,6 +23,14 @@ namespace Helios.Controllers { return View(); } + + public ActionResult SubmitSystem(ConfiguratorInput input) + { + _service.GetResults(input); + + return View("Index"); + } + } } diff --git a/Helios/Models/ConfiguratorInput.cs b/Helios/Models/ConfiguratorInput.cs new file mode 100644 index 0000000000000000000000000000000000000000..bc10b3a5915bfd94a666d9002352917a4db4dc67 --- /dev/null +++ b/Helios/Models/ConfiguratorInput.cs @@ -0,0 +1,24 @@ +using System; +using System.ComponentModel; + +namespace Helios.Models +{ + public class ConfiguratorInput + { + public Roof Roof { get; set; } + + [DisplayName("Energy usage in KwH?")] + public int PowerRequired { get; set; } + + [DisplayName("Maximum energy to be generated")] + public int MaximumPower { get; set; } + + [DisplayName("Budget (£)")] + public int Budget { get; set; } + + public ConfiguratorInput() + { + } + } +} + diff --git a/Helios/Models/Roof.cs b/Helios/Models/Roof.cs index 636d4e8e9e47e6b5327fc2d59916579dd422235d..15fe5d182298a41129c3bc3c68f3adfdb19c3d50 100644 --- a/Helios/Models/Roof.cs +++ b/Helios/Models/Roof.cs @@ -5,7 +5,6 @@ namespace Helios.Models { public int Elevation { get; set; } public double Area { get; set; } - public int SunAngle { get; set; } public Roof(int elevation, double area) { @@ -13,14 +12,14 @@ namespace Helios.Models this.Area = area; } + public Roof() { } + public int GetElevationAngle(int sunAngle) { int elevationAngle; elevationAngle = this.Elevation + sunAngle; - this.SunAngle = elevationAngle; - return elevationAngle; } } diff --git a/Helios/Program.cs b/Helios/Program.cs index 3d467e3fbf9e6292208a38c188c00e991976ac0d..3873c5c71dad36132c0d50c4eea47b729415713b 100644 --- a/Helios/Program.cs +++ b/Helios/Program.cs @@ -8,6 +8,9 @@ builder.Services.AddControllersWithViews(); builder.Services.AddTransient<LoginService>(provider => new LoginService(builder.Configuration.GetConnectionString("default"))); +builder.Services.AddTransient<ConfiguratorService>(provider + => new ConfiguratorService(builder.Configuration.GetConnectionString("default"))); + var app = builder.Build(); // Configure the HTTP request pipeline. diff --git a/Helios/Source/ConfiguratorService.cs b/Helios/Source/ConfiguratorService.cs index 749a519de39674cf935d56c4dd9d4bc6444292ff..8b26f0e0de851e08f791b31fa0fc5a6ae35e9c8a 100644 --- a/Helios/Source/ConfiguratorService.cs +++ b/Helios/Source/ConfiguratorService.cs @@ -18,36 +18,36 @@ namespace Helios.Source this._maxElevation = GetSunElevation(); } - public List<ConfiguratorResult> GetResults(List<Roof> roofs, int requiredPower, int maxPower, int budget) + public List<ConfiguratorResult> GetResults(ConfiguratorInput input) { List<ConfiguratorResult> results = new List<ConfiguratorResult>(); - foreach (var roof in roofs) + foreach (SolarPanel panel in _solarPanels) { - foreach (SolarPanel panel in _solarPanels) - { - ConfiguratorResult result = new ConfiguratorResult(); - - result.RoofArea = roof.Area; - result.RoofAngle = roof.Elevation; - result.PanelEfficiency = panel.Efficiency; - result.InstallationCost = panel.GetInstallationCost(roof.Area); - result.PowerGeneratedSummer = panel.GetPowerOutput(roof.Area, _maxElevation.SummerElevation); - result.PowerGeneratedWinter = panel.GetPowerOutput(roof.Area, _maxElevation.WinterElevation); - result.GeneratesRequiredPower = GeneratesRequiredPower(requiredPower, result.PowerGeneratedWinter); - result.ExceedsMaximumPower = ExceedsPowerLimit(maxPower, result.PowerGeneratedWinter); - result.WithinBudget = WithinBudget(budget, result.InstallationCost); + ConfiguratorResult result = new ConfiguratorResult(); + + int summerElevationAngle = input.Roof.GetElevationAngle(_maxElevation.SummerElevation); + int winterElevationAngle = input.Roof.GetElevationAngle(_maxElevation.WinterElevation); + + result.RoofArea = input.Roof.Area; + result.RoofAngle = input.Roof.Elevation; + result.PanelEfficiency = panel.Efficiency; + result.InstallationCost = panel.GetInstallationCost(input.Roof.Area); + result.PowerGeneratedSummer = panel.GetPowerOutput(input.Roof.Area, summerElevationAngle); + result.PowerGeneratedWinter = panel.GetPowerOutput(input.Roof.Area, winterElevationAngle); + result.GeneratesRequiredPower = GeneratesRequiredPower(input.PowerRequired, result.PowerGeneratedWinter); + result.ExceedsMaximumPower = ExceedsPowerLimit(input.MaximumPower, result.PowerGeneratedWinter); + result.WithinBudget = WithinBudget(input.Budget, result.InstallationCost); - results.Add(result); - } - } + results.Add(result); + } return results; } private bool WithinBudget(int budget, double installationCost) { - return installationCost > budget; + return installationCost < budget; } private bool GeneratesRequiredPower(int requiredPower, double powerGenerated)