コード例 #1
0
        /// <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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
            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);
            }
コード例 #4
0
        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";
        }
コード例 #5
0
        /// <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();
        }
コード例 #6
0
        /// <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);
        }
コード例 #7
0
 public void SelectPackagedSolutionById(int id)
 {
     SelectedPackagedSolution = PackagedSolutions.FirstOrDefault(p => p.Id == id);
     if (SelectedPackagedSolution == null)
     {
         return;
     }
     OnSolutionSelected();
 }
コード例 #8
0
        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;
        }
コード例 #9
0
        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;
            }
        }
コード例 #10
0
 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;
     }
 }
コード例 #11
0
        /// <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);
        }
コード例 #12
0
        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);
            }
        }
コード例 #13
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));
        }
コード例 #14
0
 private static bool IsBoilerForWater(PackagedSolution package)
 {
     return(((HeatingUnitDataSheet)package.PrimaryHeatingUnitInstance.Appliance.DataSheet).WaterHeatingEffiency > 0);
 }
コード例 #15
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
        }
コード例 #16
0
 public PackageDataManager(PackagedSolution package)
 {
     _package = package;
 }
コード例 #17
0
 public SaveEnergyLabelDialog(PackagedSolution packagedSolution)
 {
     PackagedSolution = packagedSolution;
 }