From e4ff424d2772ac31f28e8e20aa77d0f880ac1711 Mon Sep 17 00:00:00 2001
From: Dan <daniel2.lorych@live.uwe.ac.uk>
Date: Sun, 1 May 2022 19:56:15 +0100
Subject: [PATCH] Update to add ConfiguratorInput class

---
 Helios/Controllers/ConfiguratorController.cs |  9 +++++
 Helios/Models/ConfiguratorInput.cs           | 24 +++++++++++++
 Helios/Models/Roof.cs                        |  5 ++-
 Helios/Program.cs                            |  3 ++
 Helios/Source/ConfiguratorService.cs         | 38 ++++++++++----------
 5 files changed, 57 insertions(+), 22 deletions(-)
 create mode 100644 Helios/Models/ConfiguratorInput.cs

diff --git a/Helios/Controllers/ConfiguratorController.cs b/Helios/Controllers/ConfiguratorController.cs
index 9060e96..ac9b7e0 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 0000000..bc10b3a
--- /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 636d4e8..15fe5d1 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 3d467e3..3873c5c 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 749a519..8b26f0e 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)
-- 
GitLab