protected override void RunActualProcess()
        {
            var dbProfiles = Services.SqlConnectionPreparer.GetDatabaseConnection(Stage.Raw, Constants.PresentSlice);

            dbProfiles.RecreateTable <LastgangBusinessAssignment>();
            dbProfiles.BeginTransaction();
            string filename = CombineForFlaSettings("BusinessRLMProfileAssignments.xlsx");

            Info("Importing " + filename);
            ExcelHelper eh  = new ExcelHelper(Services.Logger, MyStage);
            var         arr = eh.ExtractDataFromExcel2(filename, 1, "A1", "G100", out var _);

            //read header
            var hdict = new Dictionary <string, int>();

            for (var i = 0; i < arr.GetLength(1); i++)
            {
                var o = arr[0, i];
                if (o == null)
                {
                    continue;
                }

                hdict.Add(o.ToString(), i);
            }

            var usedKeys = new List <string>();

            for (var row = 1; row < arr.GetLength(0); row++)
            {
                if (arr[row, hdict["Datei"]] == null)
                {
                    continue;
                }

                var    complexname  = Helpers.GetString(arr[row, hdict["ComplexName"]]);
                var    businessname = Helpers.GetString(arr[row, hdict["BusinessName"]]);
                var    erzeugerid   = Helpers.GetString(arr[row, hdict["ErzeugerID"]]);
                var    standort     = Helpers.GetString(arr[row, hdict["Standort"]]);
                string key          = complexname + " " + businessname + " " + erzeugerid + " " + standort + " ";
                if (usedKeys.Contains(key) && !key.Contains("none"))
                {
                    throw new FlaException("key already used: " + key);
                }

                usedKeys.Add(key);
                var fn  = Helpers.GetString(arr[row, hdict["Datei"]]);
                var rba = new LastgangBusinessAssignment(fn, complexname, businessname, erzeugerid)
                {
                    Standort = standort
                };
                dbProfiles.Save(rba);
            }

            dbProfiles.CompleteTransaction();
            var assignments   = dbProfiles.Fetch <LastgangBusinessAssignment>();
            var rlmprofiles   = dbProfiles.Fetch <RlmProfile>();
            var assignedNames = assignments.Select(x => x.RlmFilename).ToList();
            var allFound      = true;

            foreach (var profile in rlmprofiles)
            {
                if (!assignedNames.Contains(profile.Name))
                {
                    Info("Unassigned Profile: " + profile.Name + "\t" + profile.SumElectricity);
                    allFound = false;
                }
            }

            if (!allFound)
            {
                throw new Exception("Unassigend rlm profiles");
            }

            foreach (var rlm in assignments)
            {
                if (rlm.ComplexName == "none")
                {
                    continue;
                }

                if (string.IsNullOrWhiteSpace(rlm.BusinessName + rlm.Standort + rlm.ErzeugerID))
                {
                    throw new FlaException("assignment without full info: " + rlm.RlmFilename);
                }
            }
        }
        protected override void RunActualProcess()
        {
            SqlConnection.RecreateTable <LastgangBusinessAssignment>(Stage.ProfileImport, Constants.PresentSlice);
            var dbProfiles = SqlConnection.GetDatabaseConnection(Stage.ProfileImport, Constants.PresentSlice).Database;

            dbProfiles.BeginTransaction();
            const string filename = @"U:\SimZukunft\RawDataForMerging\BusinessRLMProfileAssignments.xlsx";

            Log(MessageType.Info, "Importing " + filename);
            var arr = ExcelHelper.ExtractDataFromExcel(filename, 1, "A1", "G100");

            //read header
            var hdict = new Dictionary <string, int>();

            for (var i = 0; i < arr.GetLength(1) - 1; i++)
            {
                var o = arr[1, i + 1];
                if (o == null)
                {
                    continue;
                }

                hdict.Add(o.ToString(), i + 1);
            }

            for (var row = 2; row < arr.GetLength(0); row++)
            {
                if (arr[row, hdict["Datei"]] == null)
                {
                    continue;
                }

                var rba = new LastgangBusinessAssignment(Helpers.GetStringNotNull(arr[row, hdict["Datei"]]),
                                                         Helpers.GetStringNotNull(arr[row, hdict["ComplexName"]]),
                                                         Helpers.GetStringNotNull(arr[row, hdict["BusinessName"]]),
                                                         Helpers.GetStringNotNull(arr[row, hdict["ErzeugerID"]])
                                                         )
                {
                    Standort = Helpers.GetStringNotNull(arr[row, hdict["Standort"]])
                };
                dbProfiles.Save(rba);
            }

            dbProfiles.CompleteTransaction();
            var assignments   = dbProfiles.Fetch <LastgangBusinessAssignment>();
            var rlmprofiles   = dbProfiles.Fetch <RlmProfile>();
            var assignedNames = assignments.Select(x => x.RlmFilename).ToList();
            var allFound      = true;

            foreach (var profile in rlmprofiles)
            {
                if (!assignedNames.Contains(profile.Name))
                {
                    Log(MessageType.Info, profile.Name + "\t" + profile.SumElectricity);
                    allFound = false;
                }
            }

            if (!allFound)
            {
                throw new Exception("Unassigend rlm profiles");
            }
        }
        private bool MakeErzeugerLastgang([NotNull][ItemNotNull] List <House> houses, [NotNull] LastgangBusinessAssignment assignment, [NotNull][ItemNotNull] List <RlmProfile> profiles,
                                          [NotNull] SaveableEntry <Prosumer> sa)
        {
            var selectedhouses = houses.Where(x => x.ErzeugerIDs.Contains(assignment.ErzeugerID)).ToList();

            if (selectedhouses.Count != 1)
            {
                if (selectedhouses.Count == 0)
                {
                    Log(MessageType.Info, "No house found for " + assignment.ErzeugerID);
                    return(true);
                }

                throw new Exception(selectedhouses.Count + " houses for erzeuger id " + assignment.ErzeugerID);
            }

            Hausanschluss ha = selectedhouses[0].Hausanschluss[0];
            //odo: adjust with new factors
            var rlmrprofile = profiles.Single(x => x.Name == assignment.RlmFilename);
            var pa          = new Prosumer(selectedhouses[0].HouseGuid, assignment.RlmFilename,
                                           ProsumerType.LastgangGeneration, null, selectedhouses[0].GebäudeObjectIDs[0], ha.HausanschlussGuid, ha.ObjectID)
            {
                Profile = rlmrprofile.Profile
            };

            sa.AddRow(pa);
            return(false);
        }