From 9ceefa820cf91b4524ab90a1d26d6f5d1381208b Mon Sep 17 00:00:00 2001
From: "harald.martini@student.tugraz.at" <harald.martini@student.tugraz.at>
Date: Wed, 2 Jun 2021 11:19:14 +0200
Subject: [PATCH]  Added empty heatpump configurations to error list in
 auxiliary viewmodel

---
 .../InterimStageBusVehicleViewModel_v2_8.cs   |  6 +--
 .../MultistageAuxiliariesViewModel.cs         | 53 +++++++++++++++++--
 .../MultistageJobViewModel_v0_1.cs            | 48 ++++++++++++++---
 3 files changed, 93 insertions(+), 14 deletions(-)

diff --git a/VECTO3GUI2020/ViewModel/MultiStage/Implementation/InterimStageBusVehicleViewModel_v2_8.cs b/VECTO3GUI2020/ViewModel/MultiStage/Implementation/InterimStageBusVehicleViewModel_v2_8.cs
index 40816aa329..0ca13d0fff 100644
--- a/VECTO3GUI2020/ViewModel/MultiStage/Implementation/InterimStageBusVehicleViewModel_v2_8.cs
+++ b/VECTO3GUI2020/ViewModel/MultiStage/Implementation/InterimStageBusVehicleViewModel_v2_8.cs
@@ -1063,19 +1063,19 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation
 				switch (propertyName) {
 					case nameof(Manufacturer):
 						if (string.IsNullOrWhiteSpace(Manufacturer)) {
-							result = "Manufacturer cannot be empty";
+							result = "Manufacturer must not be empty";
 						}
 						
 						break;
 					case nameof(ManufacturerAddress):
 						if (string.IsNullOrWhiteSpace(ManufacturerAddress))
 						{
-							result = "Manufacturer address cannot be empty";
+							result = "Manufacturer address must not be empty";
 						}
 						break;
 					case nameof(VIN):
 						if (string.IsNullOrEmpty(VIN)) {
-							result = "VIN cannot be empty";
+							result = "VIN must not be empty";
 						}
 						break;
 					case nameof(AirdragModifiedEnum):
diff --git a/VECTO3GUI2020/ViewModel/MultiStage/Implementation/MultistageAuxiliariesViewModel.cs b/VECTO3GUI2020/ViewModel/MultiStage/Implementation/MultistageAuxiliariesViewModel.cs
index 997d39e5c4..1a6f3eae23 100644
--- a/VECTO3GUI2020/ViewModel/MultiStage/Implementation/MultistageAuxiliariesViewModel.cs
+++ b/VECTO3GUI2020/ViewModel/MultiStage/Implementation/MultistageAuxiliariesViewModel.cs
@@ -515,12 +515,30 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation
 							break;
 					}
 
+					if (result == null)
+					{
+						if (Errors.ContainsKey(columnName))
+							Errors.Remove(columnName);
+					}
+					else
+					{
+						Errors[columnName] = result;
+					}
+
+
 
 					return result;
 				}
 			}
 
-			string IDataErrorInfo.Error => throw new NotImplementedException();
+			private Dictionary<string, string> Errors { get; } = new Dictionary<string, string>();
+
+			public bool HasErrors
+			{
+				get => !Errors.IsNullOrEmpty();
+
+			}
+			string IDataErrorInfo.Error => String.Join(",", Errors.Values);
 
 			#endregion
 		}
@@ -797,12 +815,41 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation
 			}
 		}
 
-		public string Error { get => String.Join(",", Errors.Values); }
+		public string Error
+		{
+			get
+			{
+				string result = string.Empty;
+				var auxVmError = String.Join(",", Errors.Values);
+				result = auxVmError;
+				if (HeatPumpConfigurationsPassenger != null) {
+					foreach (var heatPumpConfiguration in HeatPumpConfigurationsPassenger) {
+						if (heatPumpConfiguration.HasErrors) {
+							result += "," + ((IDataErrorInfo)heatPumpConfiguration).Error;
+						}
+					}
+				}
+
+				return result;
+			}
+		}
+
 		public bool HasErrors
 		{
 			get
 			{
-				return !Error.IsNullOrEmpty();
+				var auxVmHasErrors = !Error.IsNullOrEmpty();
+				var passengerHeatPumpsHaveError = false;
+				if (HeatPumpConfigurationsPassenger != null) {
+					foreach (var heatPump in HeatPumpConfigurationsPassenger) {
+						if (heatPump.HasErrors) {
+							passengerHeatPumpsHaveError = true;
+							break;
+						}
+					}
+				}
+
+				return auxVmHasErrors || passengerHeatPumpsHaveError;
 			}
 		}
 
diff --git a/VECTO3GUI2020/ViewModel/MultiStage/Implementation/MultistageJobViewModel_v0_1.cs b/VECTO3GUI2020/ViewModel/MultiStage/Implementation/MultistageJobViewModel_v0_1.cs
index cc970c9f52..2c30de1641 100644
--- a/VECTO3GUI2020/ViewModel/MultiStage/Implementation/MultistageJobViewModel_v0_1.cs
+++ b/VECTO3GUI2020/ViewModel/MultiStage/Implementation/MultistageJobViewModel_v0_1.cs
@@ -1,6 +1,7 @@
 using System;
 using System.CodeDom;
 using System.Collections.Generic;
+using System.ComponentModel;
 using System.Diagnostics;
 using System.IO;
 using System.Linq;
@@ -10,6 +11,7 @@ using System.Windows.Input;
 using System.Windows.Navigation;
 using System.Xml;
 using System.Xml.Linq;
+using Castle.Core.Internal;
 using TUGraz.VectoCommon.InputData;
 using TUGraz.VectoCommon.Models;
 using TUGraz.VectoCore.InputData.FileIO.JSON;
@@ -104,11 +106,25 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation
 				return _saveVifCommand ?? new RelayCommand(() => {
 					if (_manufacturingStageViewModel.Vehicle is IMultistageVehicleViewModel vehicleViewModel)
 					{
-						if (vehicleViewModel.HasErrors)
-						{
-							_dialogHelper.Value.ShowMessageBox("Vehicle\n" + string.Join("\n", vehicleViewModel.Errors.Values) 
-																			+ (vehicleViewModel.MultistageAuxiliariesViewModel.HasErrors ? ("\nAuxiliaries\n" + string.Join("\n", vehicleViewModel.MultistageAuxiliariesViewModel.Errors.Values)) : ""),
-								"Error");
+						if (vehicleViewModel.HasErrors) {
+							var errorMessage = "Vehicle\n";
+							var vehicleErrorInfo = vehicleViewModel as IDataErrorInfo;
+							errorMessage += vehicleErrorInfo.Error.Replace(",", "\n");
+
+							var auxiliariesErrorInfo =
+								vehicleViewModel.MultistageAuxiliariesViewModel as IDataErrorInfo;
+							if (!auxiliariesErrorInfo.Error.IsNullOrEmpty()) {
+								errorMessage += "Auxiliaries\n";
+								errorMessage += auxiliariesErrorInfo.Error.Replace(",", "\n");
+							}
+
+
+							//_dialogHelper.Value.ShowMessageBox("Vehicle\n" + string.Join("\n", vehicleViewModel.Errors.Values) 
+							//												+ (vehicleViewModel.MultistageAuxiliariesViewModel.HasErrors ? ("\nAuxiliaries\n" + string.Join("\n", vehicleViewModel.MultistageAuxiliariesViewModel.Errors.Values)) : ""),
+								//"Error");
+
+							_dialogHelper.Value.ShowMessageBox(errorMessage, "Error", MessageBoxButton.OK,
+									MessageBoxImage.Error);
 							return;
 						}
 					} else {
@@ -203,9 +219,25 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation
 			if(_manufacturingStageViewModel.Vehicle is IMultistageVehicleViewModel vehicleViewModel)
 			{
 				if (vehicleViewModel.HasErrors) {
-					_dialogHelper.Value.ShowMessageBox("Vehicle\n" + string.Join("\n", vehicleViewModel.Errors.Values)
-																	+ (vehicleViewModel.MultistageAuxiliariesViewModel.HasErrors ? ("\nAuxiliaries\n" + string.Join("\n", vehicleViewModel.MultistageAuxiliariesViewModel.Errors.Values)) : ""),
-						"Error");
+					var errorMessage = "Vehicle\n";
+					var vehicleErrorInfo = vehicleViewModel as IDataErrorInfo;
+					errorMessage += vehicleErrorInfo.Error.Replace(",", "\n");
+
+					var auxiliariesErrorInfo =
+						vehicleViewModel.MultistageAuxiliariesViewModel as IDataErrorInfo;
+					if (!auxiliariesErrorInfo.Error.IsNullOrEmpty())
+					{
+						errorMessage += "\n Auxiliaries \n";
+						errorMessage += auxiliariesErrorInfo.Error.Replace(",", "\n");
+					}
+
+					_dialogHelper.Value.ShowMessageBox(errorMessage, "Error", MessageBoxButton.OK,
+						MessageBoxImage.Error);
+					return;
+
+					//_dialogHelper.Value.ShowMessageBox("Vehicle\n" + string.Join("\n", vehicleViewModel.Errors.Values)
+					//												+ (vehicleViewModel.MultistageAuxiliariesViewModel.HasErrors ? ("\nAuxiliaries\n" + string.Join("\n", vehicleViewModel.MultistageAuxiliariesViewModel.Errors.Values)) : ""),
+					//	"Error");
 					return;
 				}
 			}
-- 
GitLab