/// <summary> /// Calculation method for Water heating with a primary Boiler /// </summary> /// <param name="package"></param> /// <returns>EEICalculationResult which contains the variables used for the calculation, /// the energy effiency index and the calculation method used </returns> public EEICalculationResult CalculateEEI(PackagedSolution package) { _package = package; _packageData = new PackageDataManager(_package); if (PrimaryData == null) { return(null); } var data = WaterHeater ?? PrimaryData; _result.WaterHeatingEffciency = data.WaterHeatingEffiency; _result.WaterHeatingUseProfile = data.UseProfile; var qref = _qref[_result.WaterHeatingUseProfile]; var qaux = SolCalMethodQaux(); var qnonsol = SolCalMethodQnonsol(); var I = _result.WaterHeatingEffciency; var II = Math.Abs(qnonsol) > 0 ? (220 * qref) / qnonsol : 0; var III = Math.Abs(qaux) > 0 ? (float)(((qaux * 2.5) / (220 * qref)) * 100) : 0; _result.SolarHeatContribution = qaux.Equals(0) || qnonsol.Equals(0) ? 0 : (1.1f * I - 10) * II - III - I; _result.EEI = (float)Math.Round(_result.SolarHeatContribution + I); _result.PackagedSolutionAtColdTemperaturesAFUE = _result.EEI - 0.2f * _result.SolarHeatContribution; _result.PackagedSolutionAtWarmTemperaturesAFUE = _result.EEI + 0.4f * _result.SolarHeatContribution; _result.CalculationType = _packageData.CalculationStrategyType(_package, _result); _result.EEICharacters = EEICharLabelChooser.EEIChar(_result.WaterHeatingUseProfile, _result.EEI, 1.5f)[0]; _result.ToNextLabel = EEICharLabelChooser.EEIChar(_result.WaterHeatingUseProfile, _result.EEI, 1.5f)[1]; _result.ProceedingEEICharacter = EEICharLabelChooser.EEIChar(_result.WaterHeatingUseProfile, _result.EEI, 1.5f)[2]; return(_result); }
public EEICalculationResult CalculateEEI(PackagedSolution package) { _package = package; _packageData = new PackageDataManager(_package); //setting starting AFUE value _results.PrimaryHeatingUnitAFUE = _packageData.PrimaryUnit.AFUE; //finding effect of temperatur regulator _results.EffectOfTemperatureRegulatorClass = _packageData.TempControllerBonus; //Calculating effect of secondary boiler _results.SecondaryBoilerAFUE = _packageData.SupplementaryBoiler?.AFUE ?? 0; _results.EffectOfSecondaryBoiler = SecBoilerEffect(); //Calculating effect of solarcollector _results.SolarHeatContribution = SolarContribution(); //finalizing the EEI Calculation _results.EEI = (float)Math.Round(_results.PrimaryHeatingUnitAFUE + _results.EffectOfTemperatureRegulatorClass - _results.EffectOfSecondaryBoiler + _results.SolarHeatContribution); _results.EEICharacters = EEICharLabelChooser.EEIChar(PrimaryUnitType, _results.EEI, 1)[0]; _results.ToNextLabel = EEICharLabelChooser.EEIChar(PrimaryUnitType, _results.EEI, 1)[1]; _results.ProceedingEEICharacter = EEICharLabelChooser.EEIChar(PrimaryUnitType, _results.EEI, 1)[2]; //Calculating for colder and warmer climates if (PrimaryUnitType != ApplianceTypes.CHP) { _results.PackagedSolutionAtColdTemperaturesAFUE = _results.EEI - (_packageData.PrimaryUnit.AFUE - _packageData.PrimaryUnit.AFUEColdClima); _results.PackagedSolutionAtWarmTemperaturesAFUE = _results.EEI + (_packageData.PrimaryUnit.AFUEWarmClima - _packageData.PrimaryUnit.AFUE); } _results.CalculationType = _packageData.CalculationStrategyType(_package, _results); return(_results); }
public static void ExportEnergyLabel(PackagedSolution packaged) { if (packaged.EnergyLabel.Count <= 0) { return; } var fixedDoc = new FixedDocument(); var v = new LabelLayout(); var vm = new LabelExportViewModel(packaged); fixedDoc.Pages.Add(CreatePageContent(v, vm)); var calculationLayout = new CalculationLayout(); var calculationViewModel = new CalculationViewModel(packaged.EnergyLabel); calculationViewModel.Setup(); fixedDoc.Pages.Add(CreatePageContent(calculationLayout, calculationViewModel)); if (packaged.EnergyLabel.Count > 1) { calculationLayout = new CalculationLayout(); calculationViewModel = new CalculationViewModel(packaged.EnergyLabel); calculationViewModel.SetupSpecialPage(); fixedDoc.Pages.Add(CreatePageContent(calculationLayout, calculationViewModel)); } IDocumentPaginatorSource dps = fixedDoc; RunSaveDialog(fixedDoc.DocumentPaginator, packaged.Name); }
public LabelExportViewModel(PackagedSolution packaged) { using (var ctx = new AssistantContext()) { var companyInfo = ctx.CompanyInformation.FirstOrDefault(); if (companyInfo == null) { throw new CompanyInformationNotFoundException("Ingen firmaoplysninger er indtastet."); } CompNameText = companyInfo.CompanyName; } switch (packaged.EnergyLabel.Count) { case 1: SetupLabelOne(packaged.EnergyLabel[0]); break; case 2: SetupLabelTwo(packaged.EnergyLabel); break; default: return; } SolarIncluded = packaged.ApplianceInstances.Any(item => item.Appliance.Type == ApplianceTypes.SolarPanel) ? "Visible" : "Hidden"; WatertankIncluded = packaged.ApplianceInstances.Any(item => item.Appliance.Type == ApplianceTypes.Container) ? "Visible" : "Hidden"; TempControleIncluded = packaged.ApplianceInstances.Any(item => item.Appliance.Type == ApplianceTypes.TemperatureController) ? "Visible" : "Hidden"; HeaterIncluded = (packaged.EnergyLabel[0].SecondaryBoilerAFUE > 0 || packaged.EnergyLabel[0].SecondaryHeatPumpAFUE > 0) ? "Visible" : "Hidden"; }
/// <summary> /// Prompt the user to confirm action /// Remove the current packaged solution from the view /// Initialize new packaged solution /// </summary> private async void CreateNewPackagedSolution() { // Run message dialog and await response var result = await _dialogCoordinator.ShowMessageAsync(this, "Ny pakkeløsning", "Hvis du opretter en ny pakkeløsning mister du arbejdet på din nuværende pakkeløsning. Vil du fortsætte?", MessageDialogStyle.AffirmativeAndNegative, new MetroDialogSettings() { NegativeButtonText = "Afbryd" }); // If negative button was pressed => return if (result == MessageDialogResult.Negative) { return; } // Clear the appliance list for the current packaged solution AppliancesInPackagedSolution.Clear(); // Reset collections and results PackagedSolution = new PackagedSolution(); EeiResultsRoomHeating = new EEICalculationResult(); EeiResultsWaterHeating = new EEICalculationResult(); // Update the EEI (=> 0) UpdateEei(); }
/// <summary> /// EEI Calculation for packaged solution with a boiler as primary heating unit /// </summary> /// <param name="package"></param> /// <returns>EEICalculationResult which are the EEI and all the varibales in between</returns> public EEICalculationResult CalculateEEI(PackagedSolution package) { _package = package; _packageData = new PackageDataManager(_package); if (PrimaryBoiler == null) { return(null); } _result.PrimaryHeatingUnitAFUE = PrimaryBoiler.AFUE; _result.SecondaryBoilerAFUE = _packageData.SupplementaryBoiler?.AFUE ?? 0; _result.EffectOfTemperatureRegulatorClass = _packageData.TempControllerBonus; _result.EffectOfSecondaryBoiler = (_packageData.SupplementaryBoiler?.AFUE - _result.PrimaryHeatingUnitAFUE) * 0.1f ?? 0; _result.SolarHeatContribution = SolarContribution(); _result.SecondaryHeatPumpAFUE = _packageData.SupplementaryHeatPump?.AFUE ?? 0; _result.EffectOfSecondaryHeatPump = -HeatpumpContribution(_packageData.HasNonSolarContainer()); _result.AdjustedContribution = Math.Abs(Math.Abs(_result.EffectOfSecondaryHeatPump)) > 0 && Math.Abs(_result.SolarHeatContribution) > 0 ? AdjustedContribution(_result.EffectOfSecondaryHeatPump, _result.SolarHeatContribution) : default(float); _result.EEI = (float)Math.Round(_result.PrimaryHeatingUnitAFUE + _result.EffectOfTemperatureRegulatorClass - _result.EffectOfSecondaryBoiler + _result.SolarHeatContribution - _result.EffectOfSecondaryHeatPump - _result.AdjustedContribution); _result.PackagedSolutionAtColdTemperaturesAFUE = Math.Abs(_ii - default(float)) > 0 ? _result.EEI + (50 * _ii) : 0; _result.EEICharacters = EEICharLabelChooser.EEIChar(ApplianceTypes.Boiler, _result.EEI, 1)[0]; _result.ToNextLabel = EEICharLabelChooser.EEIChar(ApplianceTypes.Boiler, _result.EEI, 1)[1]; _result.ProceedingEEICharacter = EEICharLabelChooser.EEIChar(ApplianceTypes.Boiler, _result.EEI, 1)[2]; _result.CalculationType = _packageData.CalculationStrategyType(_package, _result); return(_result); }
public void SelectPackagedSolutionById(int id) { SelectedPackagedSolution = PackagedSolutions.FirstOrDefault(p => p.Id == id); if (SelectedPackagedSolution == null) { return; } OnSolutionSelected(); }
public void Setup() { testModel = new CreateOfferViewModel(new DialogCoordinator()); testApp1 = new Appliance() { Name = "app1", CreationDate = DateTime.Now, Type = ApplianceTypes.Boiler }; testApp1.DataSheet = new HeatingUnitDataSheet(); testApp2 = new Appliance() { Name = "app2", CreationDate = DateTime.Now, Type = ApplianceTypes.Container }; testApp2.DataSheet = new ContainerDataSheet(); testPack = new PackagedSolution() { Name = "testPack" }; testPack.ApplianceInstances.Add(new ApplianceInstance() { Appliance = testApp1, IsPrimary = true }); testPack.ApplianceInstances.Add(new ApplianceInstance() { Appliance = testApp2 }); testPack.CreationDate = DateTime.Now; testPack.EnergyLabel = new List <EEICalculationResult>(); testPack2 = new PackagedSolution() { Name = "testPack2" }; testPack2.ApplianceInstances.Add(new ApplianceInstance() { Appliance = testApp2, IsPrimary = true }); testPack2.ApplianceInstances.Add(new ApplianceInstance() { Appliance = testApp1 }); testPack2.CreationDate = DateTime.Now; testPack2.EnergyLabel = new List <EEICalculationResult>(); testClient = new Client(); testClient.ClientInformation = new ClientInformation(); testClient.CreationDate = DateTime.Now; off = new Offer(); off.CreationDate = DateTime.Now; off.PackagedSolution = testPack; off.Client = testClient; }
private void AssignUsageProperties(PackagedSolution package) { var containers = package.SolarContainerInstances; foreach (var item in containers) { var data = item?.Appliance.DataSheet as ContainerDataSheet; if (data == null) { break; } data.IsBivalent = true; } var panels = package.ApplianceInstances.Where(item => item.Appliance.Type == ApplianceTypes.SolarPanel); foreach (var item in panels) { item.IsUsedForRoomHeating = true; } }
private void UpdateEei() { PackagedSolution.ApplianceInstances = AppliancesInPackagedSolution.ToList(); PackagedSolution.EnergyLabel.Clear(); PackagedSolution.UpdateEei(); if (PackagedSolution.EnergyLabel != null && PackagedSolution.EnergyLabel.Count > 1) { EeiResultsRoomHeating = PackagedSolution.EnergyLabel[0]; EeiResultsWaterHeating = PackagedSolution.EnergyLabel[1]; } else if (PackagedSolution.EnergyLabel != null && PackagedSolution.EnergyLabel.Count == 1) { EeiResultsRoomHeating = PackagedSolution.EnergyLabel?[0]; EeiResultsWaterHeating = null; } else { EeiResultsRoomHeating = null; EeiResultsWaterHeating = null; } }
/// <summary> /// Returns a Calculation strategy based on the primary type and /// packaged solution content. /// </summary> /// <param name="package"></param> /// <returns>Calculation strategy</returns> public List <IEEICalculation> SelectCalculationStrategy(PackagedSolution package) { var calculations = new List <IEEICalculation>(); switch (package.PrimaryHeatingUnitInstance?.Appliance?.Type ?? 0) { case ApplianceTypes.LowTempHeatPump: case ApplianceTypes.CHP: case ApplianceTypes.HeatPump: calculations.Add(new HeatPumpAsPrimary()); break; case ApplianceTypes.Boiler: calculations.Add(new BoilerAsPrimary()); if (IsBoilerForWater(package)) { calculations.Add(new BoilerForWater()); } break; case ApplianceTypes.TemperatureController: break; case ApplianceTypes.SolarPanel: break; case ApplianceTypes.Container: break; case ApplianceTypes.SolarStation: break; case ApplianceTypes.WaterHeater: break; default: return(null); } return(calculations); }
public CalculationType CalculationStrategyType(PackagedSolution package, EEICalculationResult result) { var primaryType = package.PrimaryHeatingUnitInstance.Appliance.Type; switch (primaryType) { case ApplianceTypes.HeatPump: return(CalculationType.PrimaryHeatPump); case ApplianceTypes.Boiler: return(Math.Abs(result.WaterHeatingEffciency - default(float)) > 0 ? CalculationType.PrimaryWaterBoiler : CalculationType.PrimaryBoiler); case ApplianceTypes.LowTempHeatPump: return(CalculationType.PrimaryLowTempHeatPump); case ApplianceTypes.CHP: return(CalculationType.PrimaryCHP); default: return(0); } }
public void LoadExistingPackagedSolutionTest() { new AssistantContext().Database.Delete(); ctx = new AssistantContext(); PackagedSolution pack = new PackagedSolution() { CreationDate = DateTime.Now }; pack.ApplianceInstances.Add(new ApplianceInstance() { Appliance = app1 }); pack.ApplianceInstances.Add(new ApplianceInstance() { Appliance = app2 }); ctx.PackagedSolutions.Add(pack); ctx.SaveChanges(); model.LoadExistingPackagedSolution(pack.Id); Assert.IsTrue((model.AppliancesInPackagedSolutionView.Cast <object>().Count() == 2)); }
private static bool IsBoilerForWater(PackagedSolution package) { return(((HeatingUnitDataSheet)package.PrimaryHeatingUnitInstance.Appliance.DataSheet).WaterHeatingEffiency > 0); }
public CreatePackagedSolutionViewModel(IDialogCoordinator dialogCoordinator) { #region Initialize collections Appliances = new AsyncObservableCollection <Appliance>(); SetupFilterableView(Appliances); AppliancesInPackagedSolution = new AsyncObservableCollection <ApplianceInstance>(); AppliancesInPackagedSolutionView = CollectionViewSource.GetDefaultView(AppliancesInPackagedSolution); #endregion #region Initialize properties _dialogCoordinator = dialogCoordinator; PackagedSolution = new PackagedSolution(); #endregion #region Bind event listeners AppliancesInPackagedSolution.CollectionChanged += PackageSolutionAppliances_CollectionChanged; #endregion #region Command declarations NavigateBackCmd = new RelayCommand(async x => { if (!IsDataSaved) { var result = await NavigationService.ConfirmDiscardChanges(_dialogCoordinator); if (result == false) { return; } } NavigationService.GoBack(); }); AddApplianceToPackagedSolutionCmd = new RelayCommand( x => { HandleAddApplianceToPackagedSolution(SelectedAppliance); }, x => SelectedAppliance != null); RemoveApplianceFromPackagedSolutionCmd = new RelayCommand(x => { AppliancesInPackagedSolution.Remove(SelectedApplianceInstance); }, x => SelectedApplianceInstance != null); EditApplianceCmd = new RelayCommand(x => { RunEditApplianceDialog(); }, x => SelectedAppliance != null); RemoveApplianceCmd = new RelayCommand(x => { DropAppliance(SelectedAppliance); }, x => SelectedAppliance != null); NewPackagedSolutionCmd = new RelayCommand(x => { CreateNewPackagedSolution(); }, x => AppliancesInPackagedSolution.Any()); SavePackagedSolutionCmd = new RelayCommand(x => { if (string.IsNullOrEmpty(PackagedSolution.Name)) { RunSaveDialog(); } else { SaveCurrentPackagedSolution(); } }, x => AppliancesInPackagedSolution.Any()); CreateNewApplianceCmd = new RelayCommand(x => { RunCreateApplianceDialog(); }); PrintEnergyLabelCmd = new RelayCommand(x => { //PackagedSolution.Appliances = AppliancesInPackagedSolution.ToList(); new SaveEnergyLabelDialog(PackagedSolution).RunDialog(); }, x => AppliancesInPackagedSolution.Any() && IsDataSaved); #endregion }
public PackageDataManager(PackagedSolution package) { _package = package; }
public SaveEnergyLabelDialog(PackagedSolution packagedSolution) { PackagedSolution = packagedSolution; }