Beispiel #1
0
        private bool Set(ModuleProcess process, Dictionary <string, object> buildingData, Dictionary <string, string> propertyCellMappings, ref CExcel exls)
        {
            foreach (KeyValuePair <string, string> property in propertyCellMappings)
            {
                if (!Set(process, buildingData, property, ref exls))
                {
                    return(false);
                }
            }

            return(true);
        }
        bool SetInput(ModuleProcess process, Dictionary <string, object> dataAsIS, Dictionary <string, object> dataVariant, KeyValuePair <string, string> settingCellMapping, Dictionary <string, string> propertyCellMapping, CExcel exls, out bool Used)
        {
            //Used = true;
            //Set(sheetSettings, settingCellMapping.Value, "Y", ref exls);
            //if (!SetProperties(process, dataAsIS, exls, propertyCellMapping))
            //    return false;
            //return true;


            Used = false;

            if (dataVariant.ContainsKey(settingCellMapping.Key))
            {
                if (dataVariant[settingCellMapping.Key] as string == null)
                {
                    process.CalcMessage = "Module setting not properly set in database";
                    return(false);
                }

                if (dataVariant[settingCellMapping.Key] as string == "Yes")
                {
                    Used = true;

                    Set(sheetSettings, settingCellMapping.Value, "Y", ref exls);

                    if (!SetProperties(process, dataAsIS, exls, propertyCellMapping))
                    {
                        return(false);
                    }
                }
                else
                {
                    exls.SetCellValue(sheetSettings, settingCellMapping.Value, "N");
                }
            }
            else
            {
                exls.SetCellValue(sheetSettings, settingCellMapping.Value, "N");
            }

            return(true);
        }
        private bool SetProperties(ModuleProcess process, CExcel exls, Dictionary <string, string> propertyCellMapping)
        {
            var nw = process.CurrentData[inputResultName] as List <Object>;

            //var CurrentData = nw[0] as Dictionary<string, object>;

            foreach (KeyValuePair <string, string> property in propertyCellMapping)
            {
                Dictionary <string, object> CurrentData = nw[0] as Dictionary <string, object>;
                try
                {
                    {
                        if (CurrentData.ContainsKey(property.Key))
                        {
                            object value = CurrentData[property.Key];

                            double val = Convert.ToDouble(value);
                            if (val < 0)
                            {
                                process.CalcMessage = String.Format("Property '{0}' has invalid data, only values equal or above zero is allowed; value: {1}", property.Key, val);
                                return(false);
                            }

                            Set(sheet, property.Value, value, ref exls);
                        }
                        else
                        {
                            process.CalcMessage = "";
                            return(false);
                        }
                    }
                }
                catch (System.Exception ex)
                {
                    SendErrorMessage(message: String.Format(ex.Message + "\t key = {0}, isCurrentDataMissing = {1}", property.Key, CurrentData == null), sourceFunction: "SetProperties", exception: ex);
                    throw ex;
                }
            }

            return(true);
        }
Beispiel #4
0
        /// <summary>
        /// Create fixture
        /// </summary>
        public TwinModuleFixture()
        {
            DeviceId = Utils.GetHostName();
            ModuleId = Guid.NewGuid().ToString();

            ServerPkiRootPath = Path.Combine(Directory.GetCurrentDirectory(), "pki",
                                             Guid.NewGuid().ToByteArray().ToBase16String());
            ClientPkiRootPath = Path.Combine(Directory.GetCurrentDirectory(), "pki",
                                             Guid.NewGuid().ToByteArray().ToBase16String());

            _config = new ConfigurationBuilder()
                      .AddInMemoryCollection(new Dictionary <string, string> {
                { "EnableMetrics", "false" },
                { "PkiRootPath", ClientPkiRootPath }
            })
                      .Build();
            HubContainer = CreateHubContainer();
            _hub         = HubContainer.Resolve <IIoTHubTwinServices>();

            // Create module identitity
            var twin = _hub.CreateOrUpdateAsync(new DeviceTwinModel {
                Id       = DeviceId,
                ModuleId = ModuleId
            }).Result;

            _etag = twin.Etag;

            // Get device registration and create module host with controller
            _device  = _hub.GetRegistrationAsync(twin.Id, twin.ModuleId).Result;
            _running = false;
            _module  = new ModuleProcess(_config, this);
            var tcs = new TaskCompletionSource <bool>();

            _module.OnRunning += (_, e) => tcs.TrySetResult(e);
            _process           = Task.Run(() => _module.RunAsync());

            // Wait
            _running = tcs.Task.Result;
        }
        protected override bool CalculateKpi(ModuleProcess process, CExcel exls, out Output output, out OutputDetailed outputDetailed)
        {
            output         = null;
            outputDetailed = null;

            if (!CheckAndReportDistrictProp(process, process.CurrentData, inputResultName))
            {
                return(false);
            }

            if (!SetProperties(process, exls, GreenCellMapping))
            {
                return(false);
            }

            double kpiValue;

            kpiValue = Convert.ToDouble(exls.GetCellValue(sheetOutput, kpiCellMapping[process.KpiId]));

            output = new Output(process.KpiId, Math.Round(kpiValue, 1));
            return(true);
        }
Beispiel #6
0
        protected override bool CalculateKpi(ModuleProcess process, CExcel exls, out Ecodistrict.Messaging.Data.Output output, out Ecodistrict.Messaging.Data.OutputDetailed outputDetailed)
        {
            output         = null;
            outputDetailed = null;
            bool perHeatedArea = false;

            if (!KpiList.Contains(process.KpiId))
            {
                process.CalcMessage = String.Format("kpi not available for this module, requested kpi: {0}", process.KpiId);
                return(false);
            }

            switch (process.KpiId)
            {
            case kpi_gwp:
            case kpi_peu:
                break;

            case kpi_gwp_per_heated_area:
            case kpi_peu_per_heated_area:
                perHeatedArea = true;
                break;
            }

            if (!CheckAndReportDistrictProp(process, process.CurrentData, inputDistrictName))
            {
                return(false);
            }

            if (!CheckAndReportBuildingProp(process, process.CurrentData, inputBuildingName))
            {
                return(false);
            }

            var nw           = process.CurrentData[inputDistrictName] as List <object>;
            var districtdata = nw[0] as Dictionary <string, object>;

            var myBuildings = process.CurrentData[inputBuildingName] as List <object>;

            //Set common properties
            if (!SetDistrictProperties(districtdata, exls, districtCellMapping))
            {
                return(false);
            }

            //Get all default building data data from Excel document
            var buildingDefaultValues = new Dictionary <string, object>();

            if (myBuildings != null && myBuildings.Count > 0)
            {
                if (!GetBuildingDefaultValues(exls, out buildingDefaultValues))
                {
                    return(false);
                }
            }

            outputDetailed = new OutputDetailed(process.KpiId);
            double kpiValue = 0;
            int    noOfRenovatedBuildings = 0;

            foreach (Dictionary <string, object> buildingData in myBuildings)
            {
                double kpiValuei;
                bool   changesMade;

                if (!SetInputDataOneBuilding(buildingData, exls, out changesMade))
                {
                    return(false);
                }

                kpiValuei = Convert.ToDouble(exls.GetCellValue(sheet, kpiCellMapping[process.KpiId]));
                if (changesMade)
                {
                    noOfRenovatedBuildings++;
                }

                if (noOfRenovatedBuildings % 50 == 0)
                {
                    SendStatusMessage(string.Format("{0} building processed", noOfRenovatedBuildings));
                }

                //Reset buildingdata do tefault
                if (buildingDefaultValues != null &&
                    !SetInputDataOneBuilding(buildingDefaultValues, exls, out changesMade))
                {
                    return(false);
                }

                if (perHeatedArea)
                {
                    kpiValuei *= 1000; //From tonnes CO2 eq / m2 to kg CO2 eq/ m2 and MWh / m2 to kWh/ m2 resp.
                }
                kpiValue += kpiValuei;

                outputDetailed.KpiValueList.Add(new GeoObject("building", buildingData["building_id"] as string, process.KpiId, kpiValuei));
            }

            if (noOfRenovatedBuildings > 0 & (process.KpiId == kpi_gwp | process.KpiId == kpi_peu))
            {
                kpiValue /= 30.0 * Convert.ToDouble(noOfRenovatedBuildings);
            }
            else if (process.KpiId == kpi_gwp_per_heated_area | process.KpiId == kpi_peu_per_heated_area)
            {
                kpiValue /= 30.0 * Convert.ToDouble(250000); //TMP
            }
            output = new Ecodistrict.Messaging.Data.Output(process.KpiId, Math.Round(kpiValue, 1));

            return(true);
        }
        protected override bool CalculateKpi(ModuleProcess process, CExcel exls, out Ecodistrict.Messaging.Data.Output output, out Ecodistrict.Messaging.Data.OutputDetailed outputDetailed)
        {
            try
            {
                output         = null;
                outputDetailed = null;

                if (!KpiList.Contains(process.KpiId))
                {
                    process.CalcMessage = "Kpi not available for this module";
                    return(false);
                }

                if (!CheckAndReportDistrictProp(process, process.CurrentData, inputDistrictName))
                {
                    return(false);
                }

                string dbKpiId = kpi_kpi_mapping[process.KpiId];

                double kpiValue = 0;

                var nw           = process.CurrentData[inputDistrictName] as List <Object>;
                var districtData = nw[0] as Dictionary <string, Object>;

                if (!SetDistrictProperties(districtData, exls, propertyCellMapping_CalcSheet, sheetInput))
                {
                    return(false);
                }

                if (!SetDistrictProperties(districtData, exls, propertyCellMapping_MeasureSheet, sheetSettings))
                {
                    return(false);
                }

                double?val = exls.GetCellValue(sheetOutput, kpiCellMapping[process.KpiId]) as double?;

                if (val == null)
                {
                    return(false);
                }

                kpiValue = Math.Round((double)val, 1);

                output = new Ecodistrict.Messaging.Data.Output(process.KpiId, kpiValue);

                return(true);

                #region Old Code

                //Prepare AsIs data
                //if (process.As_IS_Data == null)
                //{
                //    process.CalcMessage = "No as is data";
                //    return false;
                //}

                ////string distrName = "District";
                //string distrName = "District trafic area";

                //if (!process.As_IS_Data.ContainsKey(distrName))
                //{
                //    process.CalcMessage = "As is district information missing";
                //    return false;
                //}

                //Dictionary<string, object> dataAsIS ;
                //if (process.As_IS_Data[distrName] is Dictionary<string, object>)
                //    dataAsIS = process.As_IS_Data[distrName] as Dictionary<string, object>;
                //else
                //{
                //    process.CalcMessage = "As is data received from data module is wrongly formated";
                //    return false;
                //}


                ////AsIS
                //if (process.IsAsIS)
                //{
                //    if (!dataAsIS.ContainsKey(dbKpiId))
                //    {
                //        process.CalcMessage = "As is information missing";
                //        return false;
                //    }

                //    kpiValue = Convert.ToDouble(dataAsIS[dbKpiId]);
                //}
                ////Variant
                //else
                //{
                //    //Prepare Variant data
                //    if (process.Variant_Data == null)
                //    {
                //        process.CalcMessage = "No variant data";
                //        return false;
                //    }

                //    if (!process.Variant_Data.ContainsKey(distrName))
                //    {
                //        process.CalcMessage = "Variant district information missing";
                //        return false;
                //    }


                //    Dictionary<string, object> dataVariant;
                //    if (process.Variant_Data[distrName] is Dictionary<string, object>)
                //        dataVariant = process.Variant_Data[distrName] as Dictionary<string, object>;
                //    else
                //    {
                //        process.CalcMessage = "Variant data received from data module is wrongly formated";
                //        return false;
                //    }


                //    //Set Data
                //    if (!SetProperties(process, dataAsIS, exls, propertyCellMapping_AsIs))
                //        return false;

                //    if (!SetProperties(process, dataVariant, exls, propertyCellMapping_General))
                //        return false;

                //    //01
                //    bool used01;
                //    if (!SetInput(process, dataAsIS, dataVariant, propertyCellMapping_Use01, propertyCellMapping_01, exls, out used01))
                //        return false;

                //    //02
                //    bool used02;
                //    if (!SetInput(process, dataAsIS, dataVariant, propertyCellMapping_Use02, propertyCellMapping_02, exls, out used02))
                //        return false;

                //    //03
                //    bool used03;
                //    if (!SetInput(process, dataAsIS, dataVariant, propertyCellMapping_Use03, propertyCellMapping_03, exls, out used03))
                //        return false;

                //    //04
                //    bool used04;
                //    if (!SetInput(process, dataAsIS, dataVariant, propertyCellMapping_Use04, propertyCellMapping_04, exls, out used04))
                //        return false;

                //    //05
                //    bool used05;
                //    if (!SetInput(process, dataAsIS, dataVariant, propertyCellMapping_Use05, propertyCellMapping_05, exls, out used05))
                //        return false;

                //    //06
                //    bool used06;
                //    if (!SetInput(process, dataAsIS, dataVariant, propertyCellMapping_Use06, propertyCellMapping_06, exls, out used06))
                //        return false;

                //    //07
                //    bool used07;
                //    if (used06)
                //    {
                //        if (!SetInput(process, dataAsIS, dataVariant, propertyCellMapping_Use07, propertyCellMapping_07_1, exls, out used07))
                //            return false;
                //    }
                //    else
                //    {
                //        if (!SetInput(process, dataAsIS, dataVariant, propertyCellMapping_Use07, propertyCellMapping_07_2, exls, out used07))
                //            return false;
                //    }

                //    //08
                //    bool used08;
                //    if (!SetInput(process, dataAsIS, dataVariant, propertyCellMapping_Use08, propertyCellMapping_08, exls, out used08))
                //        return false;

                //    //09
                //    bool used09;
                //    if (!SetInput(process, dataAsIS, dataVariant, propertyCellMapping_Use09, propertyCellMapping_09, exls, out used09))
                //        return false;

                //    //10
                //    bool used10;
                //    if (!SetInput(process, dataAsIS, dataVariant, propertyCellMapping_Use10, propertyCellMapping_10, exls, out used10))
                //        return false;

                //    double? val = exls.GetCellValue(sheetOutput, kpiCellMapping[process.KpiId]) as double?;

                //    if (val == null)
                //        return false;

                //    kpiValue = Math.Round((double)val,1);
                //}



                //output = new Ecodistrict.Messaging.Data.Output(process.KpiId, kpiValue);

                //return true;

                #endregion
            }
            catch (System.Exception ex)
            {
                SendErrorMessage(message: ex.Message, sourceFunction: "CalculateKpi", exception: ex);
                throw ex;
            }
        }
        protected override bool CalculateKpi(ModuleProcess process, CExcel exls, out Ecodistrict.Messaging.Data.Output output, out Ecodistrict.Messaging.Data.OutputDetailed outputDetailed)
        {
            try
            {
                output         = null;
                outputDetailed = null;

                if (!KpiList.Contains(process.KpiId))
                {
                    process.CalcMessage = "kpi not avaiable for this module";
                    return(false);
                }

                if (process.CurrentData == null)
                {
                    process.CalcMessage = "Data missing";
                    return(false);
                }

                if (!SetProperties(process, exls, propertyCellMapping_STGreen))
                {
                    return(false);
                }

                //if (process.KpiId == kpi_green)
                //    if (!SetProperties(process, exls, propertyCellMapping_Green))
                //        return false;

                //if ((process.KpiId == kpi_green) |
                //    (process.KpiId == kpi_biodiversity) |
                //    (process.KpiId == kpi_social_value) |
                //    (process.KpiId == kpi_climate_adaptation))
                //    if (!SetProperties(process, exls, propertyCellMapping_BSK))
                //        return false;

                //if ((process.KpiId == kpi_green) |
                //    (process.KpiId == kpi_social_value) |
                //    (process.KpiId == kpi_climate_adaptation))
                //    if (!SetProperties(process, exls, propertyCellMapping_SK))
                //        return false;

                //if ((process.KpiId == kpi_green) |
                //    (process.KpiId == kpi_biodiversity))
                //    if (!SetProperties(process, exls, propertyCellMapping_B))
                //        return false;

                //if ((process.KpiId == kpi_green) |
                //    (process.KpiId == kpi_social_value))
                //    if (!SetProperties(process, exls, propertyCellMapping_S))
                //        return false;

                //if ((process.KpiId == kpi_green) |
                //    (process.KpiId == kpi_climate_adaptation))
                //    if (!SetProperties(process, exls, propertyCellMapping_K))
                //        return false;
                //}

                //string outSheet = "EXISTING";
                //if (process.Request.variantId != null)
                //{
                //    outSheet = "PLANNED";
                //}
                //double? val = exls.GetCellValue(outSheet, kpiCellMapping[process.KpiId]) as double?;

                double?val = exls.GetCellValue(sheet, kpiCellMapping[process.KpiId]) as double?;

                if (val == null)
                {
                    return(false);
                }

                double value = Math.Round((double)val, 2);

                //double value;
                //if (process.KpiId == kpi_green)
                //    value = Math.Round((double)val, 2);
                //else
                //    value = Math.Round((double)val * 100.0, 0);

                output = new Ecodistrict.Messaging.Data.Output(process.KpiId, value);

                return(true);
            }
            catch (System.Exception ex)
            {
                SendErrorMessage(message: ex.Message, sourceFunction: "CalculateKpi", exception: ex);
                throw ex;
            }
        }
Beispiel #9
0
        protected override bool CalculateKpi(ModuleProcess process, CExcel exls, out Ecodistrict.Messaging.Data.Output output, out Ecodistrict.Messaging.Data.OutputDetailed outputDetailed)
        {
            try
            {
                output         = null;
                outputDetailed = null;

                //Check and prepare data
                //Dictionary<string, object> district_data;
                //GeoValue buildingsAsIS;
                if (!CheckAndReportDistrictProp(process, process.CurrentData, inputDistrictName))
                {
                    return(false);
                }


                if (!CheckAndReportDistrictProp(process, process.CurrentData, inputBuildingName))
                {
                    return(false);
                }

                var nw           = process.CurrentData[inputDistrictName] as List <Object>;
                var districtData = nw[0] as Dictionary <string, Object>;
                var myBuildings  = process.CurrentData[inputBuildingName] as List <Object>;

                //Set common properties
                if (!SetDistrictProperties(districtData, exls, generalCellMapping))
                {
                    return(false);
                }

                //Calculate kpi
                //NEW_CODE: Start with getting all default (Inital start) values from the excel Sheet for buildingdata
                Dictionary <string, object> buildingDefaultValues = new Dictionary <string, object>();
                if (myBuildings != null && myBuildings.Count > 0)
                {
                    if (!GetBuildingDefaultValues(exls, out buildingDefaultValues))
                    {
                        return(false);
                    }
                }

                outputDetailed = new Ecodistrict.Messaging.Data.OutputDetailed(process.KpiId);
                double kpiValue             = 0;
                int    noRenovatedBuildings = 0;

                foreach (Dictionary <string, object> buildingData in myBuildings)
                {
                    double kpiValuei;
                    bool   changesMade;
                    if (!SetInputDataOneBuilding(buildingData, exls, out changesMade))
                    {
                        return(false);
                    }
                    kpiValuei = Convert.ToDouble(exls.GetCellValue(sheet, kpiCellMapping[process.KpiId]));
                    if (changesMade)
                    {
                        ++noRenovatedBuildings;
                    }

                    if (noRenovatedBuildings % 50 == 0)
                    {
                        SendStatusMessage(string.Format("{0} building processed", noRenovatedBuildings));
                    }

                    //NEW_CODE: Reset all used building values
                    if (buildingDefaultValues != null &&
                        !SetInputDataOneBuilding(buildingDefaultValues, exls, out changesMade))
                    {
                        return(false);
                    }

                    kpiValue += kpiValuei;
                    //TODO fix this below
                    outputDetailed.KpiValueList.Add(new Ecodistrict.Messaging.Data.GeoObject("building", buildingData["building_id"] as string, process.KpiId, kpiValuei));
                }


                if (noRenovatedBuildings > 0 && (process.KpiId != kpi_totalLCC))
                {
                    kpiValue /= Convert.ToDouble(noRenovatedBuildings);
                }

                output = new Ecodistrict.Messaging.Data.Output(process.KpiId, Math.Round(kpiValue, 1));

                SendStatusMessage(string.Format("Totally {0} building processed", noRenovatedBuildings));

                return(true);
            }
            catch (System.Exception ex)
            {
                SendErrorMessage(message: ex.Message, sourceFunction: "CalculateKpi", exception: ex);
                throw ex;
            }
        }
Beispiel #10
0
        private bool SetInputDataOneBuilding(ModuleProcess process, Dictionary <string, object> buildingData, CExcel exls, out bool changesMade)
        {
            changesMade = false;
            bool changesMade_i = false;

            try
            {
                #region Set data

                if (!SetBuildingProperties(buildingData, exls, generalBuildingCellMapping, out changesMade_i))
                {
                    return(false);
                }
                if (changesMade_i)
                {
                    changesMade = true;
                }

                if (!SetBuildingPropertiesTrueFalse(buildingData, exls, paidSeparatelyChoiseCellMapping, out changesMade_i))
                {
                    return(false);
                }
                if (changesMade_i)
                {
                    changesMade = true;
                }

                if (!SetBuildingProperties(buildingData, exls, householdElectricityCellMapping, out changesMade_i))
                {
                    return(false);
                }
                if (changesMade_i)
                {
                    changesMade = true;
                }

                if (!SetBuildingProperties(buildingData, exls, householdHotWaterCellMapping, out changesMade_i))
                {
                    return(false);
                }
                if (changesMade_i)
                {
                    changesMade = true;
                }

                //Special for Dimosimdata
                if (buildingData.ContainsKey(CoolingConsumpStr))
                {
                    var tst = buildingData[CoolingConsumpStr] as long?;

                    if (tst != null && (tst > 0))
                    {
                        buildingData.Remove(CoolingConsumpStrSQM);
                    }
                    else if (buildingData.ContainsKey(CoolingConsumpStrSQM))
                    {
                        var tst2 = buildingData[CoolingConsumpStrSQM] as long?;
                        var tst3 = buildingData[HeatedFloorArea] as long?;
                        if ((tst2 != null) && (tst3 != null))
                        {
                            buildingData[CoolingConsumpStr] = tst2 * tst3;
                        }
                        buildingData.Remove(CoolingConsumpStrSQM);
                    }


                    //else if (buildingData.ContainsKey(CoolingConsumpStrSQM) &&
                    //        (buildingData[CoolingConsumpStrSQM] != null) &&
                    //        ((double)(buildingData[CoolingConsumpStrSQM]) > 0)
                    //        &&
                    //        ((buildingData.ContainsKey(HeatedFloorArea) &&
                    //        (buildingData[HeatedFloorArea] != null) &&
                    //        ((double)buildingData[HeatedFloorArea]) > 0)))
                    //{
                    //    buildingData[CoolingConsumpStr] = (double)buildingData[CoolingConsumpStrSQM] *
                    //                                        (double)buildingData[HeatedFloorArea];
                    //    buildingData.Remove(CoolingConsumpStrSQM);
                    //}
                    //else if (buildingData.ContainsKey(CoolingConsumpStrSQM))
                    //{
                    //    buildingData.Remove(CoolingConsumpStrSQM);
                    //}
                }

                if (!SetBuildingProperties(buildingData, exls, householdCoolingCellMapping, out changesMade_i))
                {
                    return(false);
                }
                if (changesMade_i)
                {
                    changesMade = true;
                }



                //Special for Dimosimdata
                if (buildingData.ContainsKey(SpaceHeatingStr))
                {
                    var tst = buildingData[SpaceHeatingStr] as long?;

                    if (tst != null && tst > 0)
                    {
                        buildingData.Remove(SpaceHeatingStrSQM);
                    }
                    else if (buildingData.ContainsKey(SpaceHeatingStrSQM))
                    {
                        var tst2 = buildingData[SpaceHeatingStrSQM] as long?;
                        var tst3 = buildingData[HeatedFloorArea] as long?;
                        if ((tst2 != null) && (tst3 != null))
                        {
                            buildingData[SpaceHeatingStr] = tst2 * tst3;
                            buildingData.Remove(SpaceHeatingStrSQM);
                        }
                    }

                    //else if (buildingData.ContainsKey(SpaceHeatingStrSQM) &&
                    //        (buildingData[SpaceHeatingStrSQM] != null) &&
                    //        ((double)(buildingData[SpaceHeatingStrSQM]) > 0)
                    //        &&
                    //        ((buildingData.ContainsKey(HeatedFloorArea) &&
                    //        (buildingData[HeatedFloorArea] != null) &&
                    //        ((double)buildingData[HeatedFloorArea]) > 0)))
                    //{
                    //    buildingData[CoolingConsumpStr] = (double)buildingData[SpaceHeatingStrSQM] *
                    //                                     (double)buildingData[HeatedFloorArea];
                    //    buildingData.Remove(SpaceHeatingStrSQM);
                    //}
                    //else if (buildingData.ContainsKey(SpaceHeatingStrSQM))
                    //{
                    //    buildingData.Remove(SpaceHeatingStrSQM);
                    //}
                }

                if (!SetBuildingProperties(buildingData, exls, householdSpaceHeatingCellMapping, out changesMade_i))
                {
                    return(false);
                }
                if (changesMade_i)
                {
                    changesMade = true;
                }



                #endregion

                return(true);
            }
            catch (System.Exception ex)
            {
                return(false);
            }
        }