示例#1
0
        public static IEnumerable <DataRow> ErrorDataByCompany(DataTable _input, FactorModel _factorModel, string _company)
        {
            DataTable dtCloned = _input.Clone();

            if (_factorModel.ReadDateColumn != -1)
            {
                dtCloned.Columns[_factorModel.ReadDateColumn].DataType = typeof(string);
            }

            if (_factorModel.InstallationDateColumn != -1)
            {
                dtCloned.Columns[_factorModel.InstallationDateColumn].DataType = typeof(string);
            }

            foreach (DataRow row in _input.Rows)
            {
                dtCloned.ImportRow(row);
            }

            switch (_company)
            {
            case "Casi":
                return(dtCloned.AsEnumerable().Where(x => x[_factorModel.ReadColumn].ToString().Contains(_factorModel.SearchCriteria)));

            case "Ista":
                IEnumerable <DataRow> filteredValueIsta = dtCloned.AsEnumerable().Where(x => Convert.ToDateTime(x[_factorModel.ReadDateColumn].ToString()).ToString("dd-MM-yyyy").Contains(Convert.ToDateTime(_factorModel.ReadDate.ToString()).ToString("dd-MM-yyyy")) && (!x[_factorModel.MaalerColumn].ToString().ToLower().Contains(_factorModel.MaalerType.ToLower())) || string.IsNullOrWhiteSpace(x[_factorModel.ReadColumn].ToString()));
                List <DataRow>        outputIsta        = new List <DataRow>();
                foreach (DataRow item in filteredValueIsta.ToList())
                {
                    //var tester = Convert.ToDateTime(item[_factorModel.ReadDateColumn]).ToString("dd-MM-yyyy");
                    item[_factorModel.ReadDateColumn] = Convert.ToDateTime(item[_factorModel.ReadDateColumn]).ToString("dd-MM-yyyy");
                    if (_factorModel.InstallationDateColumn != -1)
                    {
                        item[_factorModel.InstallationDateColumn] = Convert.ToDateTime(item[_factorModel.InstallationDateColumn]).ToString("dd-MM-yyyy");
                    }
                    outputIsta.Add(item);
                }
                return(outputIsta);

            //return _input.AsEnumerable().Where(x => !x[_factorModel.ReadDateColumn].Equals(_factorModel.SearchCriteria) && !x[_factorModel.MaalerColumn].ToString().Contains(_factorModel.MaalerType));
            case "Minol":
                return(dtCloned.AsEnumerable().Where(x => string.IsNullOrEmpty(x[_factorModel.ReadColumn].ToString()) || !string.IsNullOrWhiteSpace(x[_factorModel.SearchCriteriaColumn].ToString())));

            case "Techem":
                return(dtCloned.AsEnumerable().Where(x => x[_factorModel.MaalerColumn].ToString().Contains(_factorModel.SearchCriteria)));

            case "Brunata":
                IEnumerable <DataRow> filteredValueBrunata = dtCloned.AsEnumerable().Where(x => !Regex.Match(x[_factorModel.SearchCriteriaColumn].ToString().ToUpper(), _factorModel.SearchCriteria).Success);
                List <DataRow>        outputBrunata        = new List <DataRow>();
                foreach (DataRow item in filteredValueBrunata.ToList())
                {
                    item[_factorModel.ReadDateColumn] = Convert.ToDateTime(_factorModel.ReadDate.ToString()).ToString("dd-MM-yyyy");
                    outputBrunata.Add(item);
                }
                return(outputBrunata);

            default:
                throw new Exception("Unknow company/vendor name is found.");
            }
        }
示例#2
0
        public string SaveDataToFile(IEnumerable <DataRow> _input, FactorModel _factorModel, string _company, string _workingDirectory, string _outputSuffix)
        {
            try
            {
                string   newCSVFileName      = string.Concat(_factorModel.CompanyID.PadLeft(3, Convert.ToChar("0")), _factorModel.DepartmentID.PadLeft(3, Convert.ToChar("0")), " ", _company, ConfigVariables.OutputFileSeparator, DateTime.Now.ToString(ConfigVariables.OutputFileDateFormatString), _outputSuffix, ConfigVariables.OutputFileSuffixCSV);
                FileInfo newCSVFile          = new FileInfo(Path.Combine(_workingDirectory, newCSVFileName));
                List <OutputModelCSV> output = new List <OutputModelCSV>();
                foreach (DataRow row in _input)
                {
                    object[]       rowArray = row.ItemArray;
                    OutputModelCSV model    = new OutputModelCSV
                    {
                        Selskab           = _factorModel.CompanyColumn < 0 ? _factorModel.CompanyID : Convert.ToString(rowArray[_factorModel.CompanyColumn]),
                        Afdeling          = _factorModel.DepartmentColumn < 0 ? _factorModel.DepartmentID : Convert.ToString(rowArray[_factorModel.DepartmentColumn]),
                        Lejlighed         = _factorModel.ApartmentColumn < 0 ? string.Empty : Convert.ToString(rowArray[_factorModel.ApartmentColumn]),
                        Målertype         = _factorModel.MaalerColumn < 0 ? _factorModel.MaalerType : Convert.ToString(rowArray[_factorModel.MaalerColumn]),
                        Serienr           = _factorModel.SerieIDColumn < 0 ? string.Empty : Convert.ToString(rowArray[_factorModel.SerieIDColumn]),
                        Aflæsningsdato    = _factorModel.ReadDateColumn < 0 ? _factorModel.ReadDate : Convert.ToString(rowArray[_factorModel.ReadDateColumn]),
                        Aflæsning         = _factorModel.ReadColumn < 0 ? string.Empty : Convert.ToString(rowArray[_factorModel.ReadColumn]),
                        Faktor            = _factorModel.FaktorColumn < 0 ? _factorModel.Factor.ToString() : Convert.ToString(rowArray[_factorModel.FaktorColumn]),
                        Reduktion         = _factorModel.ReductionColumn < 0 ? string.Empty : Convert.ToString(rowArray[_factorModel.ReductionColumn]),
                        Lokale            = _factorModel.RoomColumn < 0 ? string.Empty : Convert.ToString(rowArray[_factorModel.RoomColumn]),
                        Installationsdato = _factorModel.InstallationDateColumn < 0 ? string.Empty : Convert.ToString(rowArray[_factorModel.InstallationDateColumn]),
                        Deaktiveringsdato = "",
                        Bemærkninger      = "",
                        Nulstillingsmåler = _factorModel.Nustillingsmaaler
                    };
                    output.Add(model);
                }

                var fStream = new FileStream(newCSVFile.FullName, FileMode.Create);
                using var writer            = new StreamWriter(fStream, Encoding.GetEncoding("ISO-8859-1"));
                using var csv               = new CsvWriter(writer, CultureInfo.InvariantCulture);
                csv.Configuration.Delimiter = ";";
                csv.WriteRecords(output);
                csv.Flush();
                return(newCSVFile.FullName);
            }
            catch (Exception ex)
            {
                return(ex.Message);
            }
        }
示例#3
0
        // Every action starts from here.
        public void Run()
        {
            LogHelper logHelper = new LogHelper(_configuration, "MeterService");
            var       sendEmail = false;

            try
            {
                // step 1. Get all the files from directories
                DirectioryHelper     directioryHelper   = new DirectioryHelper(_logger, _configuration);
                IEnumerable <string> workingDirectories = directioryHelper.GetAllWorkingDirectoryFullPath();
                // step 2. Read data from files
                foreach (string directory in workingDirectories)
                {
                    logHelper.InsertLog(new LogObject(LogType.Information, ("Start to process: " + directory)));
                    // step 2.1 Check if the directory is empty
                    if (directioryHelper.HasFile(directory))
                    {
                        var         files         = Directory.EnumerateFiles(directory);
                        string      excelVersion  = string.Empty;
                        CSVHelper   csvHelper     = new CSVHelper();
                        ExcelHelper excelHelper   = new ExcelHelper();
                        DataTable   unikDataTable = new DataTable();

                        // 2.2 Read the Unik data
                        try
                        {
                            string unik = _configuration.GetValue <string>("Unik:Vendor");
                            unik          = UtilHelper.ConvertToLatin1(unik);
                            unikDataTable = excelHelper.ReadDataAsDataTable(unik, "12.0");
                        }
                        catch (Exception ex)
                        {
                            logHelper.InsertLog(new LogObject(LogType.Error, "Reading Unik configuration file failed. " + ex.Message));
                        }
                        foreach (var file in files)
                        {
                            try
                            {
                                FileInfo  fileInfo         = new FileInfo(file);
                                string    newFileName      = string.Empty;
                                string    newErrorFileName = string.Empty;
                                DataTable outputDataTable  = new DataTable();


                                // 3. Get company name based on directory
                                var company = getCompanyByDirectoryName(directory);

                                logHelper.InsertLog(new LogObject(LogType.Information, ("Ready to process file: " + fileInfo.FullName)));
                                // 4. Reading from files.
                                if (fileInfo.Extension == ".csv")
                                {
                                    // handling CSV files

                                    outputDataTable = csvHelper.ReadDataAsDataTable(file);

                                    var stringArray = string.Join(", ", outputDataTable.Rows[0].ItemArray);

                                    var isNumeric = Regex.Match(stringArray, "[0-9]", RegexOptions.IgnoreCase).Success;

                                    if (!isNumeric)
                                    {
                                        outputDataTable.Rows[0].Delete();
                                        outputDataTable.AcceptChanges();
                                    }
                                }
                                else if (fileInfo.Extension == ".xlsx" || fileInfo.Extension == ".xlsb")
                                {
                                    // handling Excel files
                                    excelVersion    = "12.0";
                                    outputDataTable = excelHelper.ReadDataAsDataTable(file, excelVersion);
                                }
                                else if (fileInfo.Extension == ".xls")
                                {
                                    // handling Excel files
                                    excelVersion    = "8.0";
                                    outputDataTable = excelHelper.ReadDataAsDataTable(file, excelVersion);
                                }
                                else
                                {
                                    logHelper.InsertLog(new LogObject(LogType.Warning, (fileInfo.Extension + " file is not supported.")));
                                    throw new FileLoadException("File format is not supported");
                                }

                                // 4.1 Create factormodel based on company, outputdata and data from unik

                                FactorModel factorModel = BusinessLogic.CreateFactorModelByCompany(company, unikDataTable, outputDataTable);

                                if (factorModel == null)
                                {
                                    throw new Exception("Vendor configuration error. Cannot create factor model based based on vendor information.");
                                }


                                // 5. Filter source data.
                                IEnumerable <DataRow> filteredData = BusinessLogic.FilterDataByCompany(outputDataTable, factorModel, company);

                                IEnumerable <DataRow> errorData = BusinessLogic.ErrorDataByCompany(outputDataTable, factorModel, company);

                                // 6. Save data to file.
                                if (filteredData.Count() > 0)
                                {
                                    newFileName = csvHelper.SaveDataToFile(filteredData, factorModel, company, directory, ConfigVariables.OutputFileNameSuffix);
                                }

                                if (errorData.Count() > 0)
                                {
                                    newErrorFileName = csvHelper.SaveDataToFile(errorData, factorModel, company, directory, ConfigVariables.ErrorFileNameSuffix);
                                }

                                if (String.IsNullOrEmpty(newFileName))
                                {
                                    throw new NullReferenceException("Error for generating new file name.");
                                }
                                else
                                {
                                    directioryHelper.MoveFile(directory, newFileName, BDOEnum.FileMoveOption.Processed);
                                    logHelper.InsertLog(new LogObject(LogType.Information, (newFileName + " has been moved to Processed dictory")));
                                }

                                if (String.IsNullOrEmpty(newErrorFileName))
                                {
                                    throw new NullReferenceException("Error for generating new error file name.");
                                }
                                else
                                {
                                    logHelper.InsertLog(new LogObject(LogType.Information, (newErrorFileName + " has been moved to Manual dictory")));
                                    directioryHelper.MoveFile(directory, newErrorFileName, BDOEnum.FileMoveOption.Manual);
                                }
                                // 7. Move processed file to archive
                                directioryHelper.MoveFile(directory, file, BDOEnum.FileMoveOption.Archive);
                                logHelper.InsertLog(new LogObject(LogType.Information, (file + " has been moved to Archive dictory")));
                                sendEmail = true;
                            }
                            catch (Exception ex)
                            {
                                _logger.LogError("Processing file: " + file + " is failed.");
                                _logger.LogError(ex.Message);
                                logHelper.InsertLog(new LogObject(LogType.Error, ex.Message));
                                // step 4. Move processed file to error
                                directioryHelper.MoveFile(directory, file, BDOEnum.FileMoveOption.Error);
                                logHelper.InsertLog(new LogObject(LogType.Information, (file + " has been moved to Error dictory")));
                            }
                        }
                    }
                    else
                    {
                        _logger.LogInformation(directory + " has no file to work on.");
                        logHelper.InsertLog(new LogObject(LogType.Information, (directory + " has no file to work on.")));
                    }
                }
                // send notification
                if (sendEmail)
                {
                    SMTPHelper smtpHelper = new SMTPHelper(_configuration);
                    string     emailBody  = "Hej ";
                    emailBody += Environment.NewLine + Environment.NewLine;
                    emailBody += "Datakværnen har behandlet alle filerne i mappen.";
                    emailBody += Environment.NewLine + Environment.NewLine;
                    emailBody += "Dette er en autogenereret mail og kan ikke besvares.";
                    emailBody += Environment.NewLine + Environment.NewLine;
                    emailBody += "/Datakværn service";
                    smtpHelper.SendEmailAsync(emailBody);
                }
            }
            catch (Exception ex)
            {
                _logger.LogError(ex.Message);
                logHelper.InsertLog(new LogObject(LogType.Error, ex.Message));
            }
        }
示例#4
0
        public string SaveDataToFile(IEnumerable <DataRow> _input, FactorModel _factorModel, string _company, string _workingDirectory)
        {
            try
            {
                string   newExcelFileName = string.Concat(_company, ConfigVariables.OutputFileSeparator, DateTime.Now.ToString(ConfigVariables.OutputFileDateFormatString), ConfigVariables.OutputFileSuffixExcel);
                FileInfo newExcelFile     = new FileInfo(Path.Combine(_workingDirectory, newExcelFileName));
                ExcelPackage.LicenseContext = OfficeOpenXml.LicenseContext.NonCommercial;

                ExcelPackage package = new ExcelPackage(newExcelFile);

                string regexPattern = @"\d{4}";

                Match department = Regex.Match(_company, regexPattern);

                ExcelWorksheet worksheet = package.Workbook.Worksheets.Add(department + " AC");

                //Insert headers
                worksheet.Cells[1, 1].Value  = ConfigVariables.Company;
                worksheet.Cells[1, 2].Value  = ConfigVariables.Department;
                worksheet.Cells[1, 3].Value  = ConfigVariables.Apartment;
                worksheet.Cells[1, 4].Value  = ConfigVariables.MeterType;
                worksheet.Cells[1, 5].Value  = ConfigVariables.SerieID;
                worksheet.Cells[1, 6].Value  = ConfigVariables.ReadingDate;
                worksheet.Cells[1, 7].Value  = ConfigVariables.Reading;
                worksheet.Cells[1, 8].Value  = ConfigVariables.Factor;
                worksheet.Cells[1, 9].Value  = ConfigVariables.Reduction;
                worksheet.Cells[1, 10].Value = ConfigVariables.Room;
                worksheet.Cells[1, 11].Value = ConfigVariables.Installation;
                worksheet.Cells[1, 12].Value = ConfigVariables.DeactivationDate;
                worksheet.Cells[1, 13].Value = ConfigVariables.Comment;
                worksheet.Cells[1, 14].Value = ConfigVariables.ResetMeter;

                //Insert apartment data
                worksheet.Cells["C2"].LoadFromCollection(_input.AsEnumerable().Select(x => x[_factorModel.ApartmentColumn].ToString()).ToList());
                //Insert maaler data
                worksheet.Cells["D2"].LoadFromCollection(_input.AsEnumerable().Select(x => x[_factorModel.MaalerColumn].ToString()).ToList());
                //Insert SerieID's
                worksheet.Cells["E2"].LoadFromCollection(_input.AsEnumerable().Select(x => x[_factorModel.SerieIDColumn].ToString()).ToList());
                //Insert read-date data
                worksheet.Cells["F2"].LoadFromCollection(_input.AsEnumerable().Select(x => x[_factorModel.ReadDateColumn].ToString()).ToList());
                //Insert read data
                worksheet.Cells["G2"].LoadFromCollection(_input.AsEnumerable().Select(x => x[_factorModel.ReadColumn].ToString()).ToList());
                //Insert faktor data
                worksheet.Cells["H2"].LoadFromCollection(_input.AsEnumerable().Select(x => x[_factorModel.FaktorColumn].ToString()).ToList());
                //Insert reduction data
                worksheet.Cells["I2"].LoadFromCollection(_input.AsEnumerable().Select(x => x[_factorModel.ReductionColumn].ToString()).ToList());
                //Insert room data
                worksheet.Cells["J2"].LoadFromCollection(_input.AsEnumerable().Select(x => x[_factorModel.RoomColumn].ToString()).ToList());
                //Insert installation data
                worksheet.Cells["K2"].LoadFromCollection(_input.AsEnumerable().Select(x => x[_factorModel.InstallationDateColumn].ToString()).ToList());

                //Insert Selskab
                worksheet.Cells[2, 1, _input.ToList().Count + 1, 1].Value = department.ToString().Substring(0, 2);
                //Insert Afdeling
                worksheet.Cells[2, 2, _input.ToList().Count + 1, 2].Value = department.ToString().Substring(2, 2);
                package.SaveAs(newExcelFile);

                package.Dispose();

                return(newExcelFile.FullName);
            }

            catch (Exception)
            {
                return(string.Empty);
            }
        }
示例#5
0
        public static IEnumerable <DataRow> FilterDataByCompany(DataTable _input, FactorModel _factorModel, string _company)
        {
            DataTable dtCloned = _input.Clone();


            if (_factorModel.ReadDateColumn != -1)
            {
                dtCloned.Columns[_factorModel.ReadDateColumn].DataType = typeof(string);
            }

            if (_factorModel.InstallationDateColumn != -1)
            {
                dtCloned.Columns[_factorModel.InstallationDateColumn].DataType = typeof(string);
            }

            foreach (DataRow row in _input.Rows)
            {
                dtCloned.ImportRow(row);
            }

            switch (_company)
            {
            case "Casi":
                return(dtCloned.AsEnumerable().Where(x => !x[_factorModel.ReadColumn].ToString().Contains(_factorModel.SearchCriteria)));

            case "Ista":
                IEnumerable <DataRow> filteredValueIsta = dtCloned.AsEnumerable().Where(x => Convert.ToDateTime(x[_factorModel.ReadDateColumn].ToString()).ToString("dd-MM-yyyy").Contains(Convert.ToDateTime(_factorModel.ReadDate.ToString()).ToString("dd-MM-yyyy")) && x[_factorModel.MaalerColumn].ToString().ToLower().Contains(_factorModel.MaalerType.ToLower()) && !string.IsNullOrWhiteSpace(x[_factorModel.ReadColumn].ToString()));
                List <DataRow>        outputIsta        = new List <DataRow>();
                foreach (DataRow item in filteredValueIsta.ToList())
                {
                    item[_factorModel.ReadDateColumn] = Convert.ToDateTime(item[_factorModel.ReadDateColumn]).ToString("dd-MM-yyyy");

                    string[] formats = { "yyyy-MM-dd", "dd-MM-yyyy" };

                    var tester = DateTime.TryParseExact(item[_factorModel.InstallationDateColumn].ToString(), formats, CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime testtemp);

                    if (_factorModel.InstallationDateColumn != -1 && tester)
                    {
                        item[_factorModel.InstallationDateColumn] = Convert.ToDateTime(item[_factorModel.InstallationDateColumn]).ToString("dd-MM-yyyy");
                    }
                    outputIsta.Add(item);
                }
                return(outputIsta);

            case "Minol":
                return(dtCloned.AsEnumerable().Where(x => !string.IsNullOrEmpty(x[_factorModel.ReadColumn].ToString()) && string.IsNullOrWhiteSpace(x[_factorModel.SearchCriteriaColumn].ToString())));

            case "Techem":
                IEnumerable <DataRow> filteredValueTechem = dtCloned.AsEnumerable().Where(x => !x[_factorModel.MaalerColumn].ToString().Contains(_factorModel.SearchCriteria));
                List <DataRow>        outputTechem        = new List <DataRow>();
                foreach (DataRow item in filteredValueTechem.ToList())
                {
                    item[_factorModel.MaalerColumn]    = item[_factorModel.MaalerColumn].ToString().Replace("vandsmåler", "t vand");
                    item[_factorModel.ApartmentColumn] = item[_factorModel.ApartmentColumn].ToString().Substring(0, item[_factorModel.ApartmentColumn].ToString().Length - 1);
                    //item[_factorModel.ReadDateColumn] = Convert.ToDateTime(_factorModel.ReadDate.ToString()).ToString("dd-MM-yyyy");
                    outputTechem.Add(item);
                }
                return(outputTechem);

            case "Brunata":
                IEnumerable <DataRow> filteredValueBrunata = dtCloned.AsEnumerable().Where(x => Regex.Match(x[_factorModel.SearchCriteriaColumn].ToString().ToUpper(), _factorModel.SearchCriteria).Success&& x[_factorModel.ReadDateColumn].ToString().Equals(_factorModel.ReadDateFormatted));
                List <DataRow>        outputBrunata        = new List <DataRow>();
                foreach (DataRow item in filteredValueBrunata.ToList())
                {
                    item[_factorModel.ReadDateColumn] = Convert.ToDateTime(_factorModel.ReadDate.ToString()).ToString("dd-MM-yyyy");
                    outputBrunata.Add(item);
                }
                return(outputBrunata);

            default:
                throw new Exception("Unknow company/vendor name is found.");
            }
        }
示例#6
0
        public static FactorModel CreateFactorModelByCompany(string _company, DataTable _unikDatatable, DataTable _outputDatatable)

        {
            string regexPattern = @"\d{4}";

            //int unikMaalerColumn = 2;
            int unikMaalerTypeColumn = 4;
            int unikCompanyColumn    = 7;
            int unikDepartmentColumn = 8;

            //int unikMaalerCountColumn = 13;
            //int unikDateColumn = 14;

            switch (_company)
            {
            case "Casi":

                FactorModel casi = new FactorModel();
                casi.CompanyColumn          = -1;
                casi.DepartmentColumn       = -1;
                casi.ApartmentColumn        = -1;
                casi.MaalerColumn           = -1;
                casi.SerieIDColumn          = 2;
                casi.ReadDateColumn         = 4;
                casi.ReadColumn             = 5;
                casi.FaktorColumn           = -1;
                casi.Factor                 = 1;
                casi.ReductionColumn        = -1;
                casi.RoomColumn             = -1;
                casi.InstallationDateColumn = -1;
                //casi.CompanyID = Regex.Match(_company, regexPattern).Value.ToString().Substring(0, 2);
                //casi.DepartmentID = Regex.Match(_company, regexPattern).Value.ToString().Substring(2, 2);
                //casi.DepartmentID = Convert.ToString(Convert.ToInt32(casi.DepartmentID));
                casi.SearchCriteria = "s";
                casi.CompanyID      = "10";
                casi.DepartmentID   = "08";

                casi.MaalerColumnName  = _outputDatatable.Columns[3].ToString();
                casi.MaalerControlText = _outputDatatable.Select(casi.MaalerColumnName + " IS NOT NULL AND " + casi.MaalerColumnName + " <> ''").First().ItemArray[3].ToString();

                casi.MaalerRow = _unikDatatable.AsEnumerable().FirstOrDefault(x => x[unikMaalerTypeColumn].ToString().Equals(casi.MaalerControlText) && x[unikCompanyColumn].ToString().Equals(casi.CompanyID) && x[unikDepartmentColumn].ToString().Equals(casi.DepartmentID));

                if (casi.MaalerRow != null)
                {
                    casi.MaalerType        = casi.MaalerRow.ItemArray[2].ToString();
                    casi.Nustillingsmaaler = casi.MaalerRow.ItemArray[3].ToString();
                    casi.ReadDate          = casi.MaalerRow.ItemArray[5].ToString();
                    //casi.ReadDate = casi.MaalerRow.ItemArray[14].ToString();
                    //casi.ReadDate = "2019-12-31";
                }

                return(casi);

            case "Ista":
                FactorModel ista = new FactorModel();
                ista.CompanyColumn          = 0;
                ista.DepartmentColumn       = 1;
                ista.ApartmentColumn        = 2;
                ista.MaalerTypeColumn       = 3;
                ista.MaalerColumn           = 4;
                ista.SerieIDColumn          = 5;
                ista.ReadDateColumn         = 7;
                ista.ReadColumn             = 8;
                ista.FaktorColumn           = 9;
                ista.ReductionColumn        = -1;
                ista.RoomColumn             = 11;
                ista.InstallationDateColumn = 12;
                ista.CompanyID    = _outputDatatable.Rows[0].ItemArray[0].ToString();
                ista.DepartmentID = ista.CompanyID.Length >= 4 ? ista.CompanyID.Substring(2, 2) : _outputDatatable.Rows[0].ItemArray[1].ToString();
                ista.CompanyID    = ista.CompanyID.Length >= 4 ? ista.CompanyID.Substring(0, 2) : ista.CompanyID;
                ista.DepartmentID = Convert.ToString(Convert.ToInt32(ista.DepartmentID));


                var listTest = BDOEnum.GetMaalerDescription(_outputDatatable.Rows[1].ItemArray[ista.MaalerTypeColumn].ToString());



                ista.MaalerRow = _unikDatatable.AsEnumerable().FirstOrDefault(x => x[unikCompanyColumn].ToString().Equals(ista.CompanyID) && x[unikDepartmentColumn].ToString().Equals(ista.DepartmentID));

                var tester123 = _unikDatatable.AsEnumerable().Where(x => x[unikCompanyColumn].ToString().Equals(ista.CompanyID) && x[unikDepartmentColumn].ToString().Equals(ista.DepartmentID));

                if (ista.MaalerRow != null)
                {
                    ista.MaalerType        = ista.MaalerRow.ItemArray[2].ToString().Split(" ")[0];
                    ista.Nustillingsmaaler = ista.MaalerRow.ItemArray[3].ToString();
                    ista.ReadDate          = ista.MaalerRow.ItemArray[5].ToString();
                    //ista.ReadDate = ista.MaalerRow.ItemArray[14].ToString();
                    //ista.ReadDate = "2019-12-31";
                }


                return(ista);

            case "Minol":
                FactorModel minol = new FactorModel();

                minol.CompanyColumn          = -1;
                minol.DepartmentColumn       = -1;
                minol.ApartmentColumn        = 0;
                minol.MaalerColumn           = -1;
                minol.SerieIDColumn          = 6;
                minol.ReadDateColumn         = -1;
                minol.ReadColumn             = 5;
                minol.FaktorColumn           = 4;
                minol.ReductionColumn        = -1;
                minol.RoomColumn             = -1;
                minol.InstallationDateColumn = -1;
                minol.SearchCriteriaColumn   = 3;
                //minol.CompanyID = Regex.Match(_company, regexPattern).Value.ToString().Substring(0, 2);
                //minol.DepartmentID = Regex.Match(_company, regexPattern).Value.ToString().Substring(2, 2);
                minol.CompanyID    = "30";
                minol.DepartmentID = "20";
                //minol.CompanyID = _outputDatatable.Rows[0].ItemArray[0].ToString();
                //minol.DepartmentID = minol.CompanyID.Length >= 4 ? minol.CompanyID.Substring(2, 2) : _outputDatatable.Rows[0].ItemArray[1].ToString();
                //minol.CompanyID = minol.CompanyID.Length >= 4 ? minol.CompanyID.Substring(0, 2) : minol.CompanyID;
                //minol.DepartmentID = Convert.ToString(Convert.ToInt32(minol.DepartmentID));

                minol.MaalerRow = _unikDatatable.AsEnumerable().FirstOrDefault(x => x[unikCompanyColumn].ToString().Equals(minol.CompanyID) && x[unikDepartmentColumn].ToString().Equals(minol.DepartmentID));

                if (minol.MaalerRow != null)
                {
                    minol.MaalerType        = minol.MaalerRow.ItemArray[2].ToString();
                    minol.Nustillingsmaaler = minol.MaalerRow.ItemArray[3].ToString();
                    minol.ReadDate          = minol.MaalerRow.ItemArray[5].ToString();
                    minol.ReadDate          = Convert.ToDateTime(minol.MaalerRow.ItemArray[5].ToString()).ToString("dd-MM-yyyy");
                    //minol.ReadDate = Convert.ToDateTime(minol.MaalerRow.ItemArray[14].ToString()).ToString("dd-MM-yyyy");
                }

                return(minol);

            case "Techem":
                FactorModel techem = new FactorModel();

                techem.CompanyColumn          = -1;
                techem.DepartmentColumn       = -1;
                techem.ApartmentColumn        = 0;
                techem.MaalerColumn           = 4;
                techem.SerieIDColumn          = 6;
                techem.ReadDateColumn         = -1;
                techem.ReadColumn             = 8;
                techem.FaktorColumn           = -1;
                techem.ReductionColumn        = -1;
                techem.RoomColumn             = -1;
                techem.InstallationDateColumn = -1;
                //techem.CompanyID = Regex.Match(_company, regexPattern).Value.ToString().Substring(0, 2);
                //techem.DepartmentID = Regex.Match(_company, regexPattern).Value.ToString().Substring(2, 2);
                //techem.DepartmentID = Convert.ToString(Convert.ToInt32(techem.DepartmentID));
                techem.SearchCriteria = "Energimåler";
                techem.CompanyID      = "39";
                techem.DepartmentID   = "20";

                techem.MaalerRow = _unikDatatable.AsEnumerable().FirstOrDefault(x => x[unikCompanyColumn].ToString().Equals(techem.CompanyID) && x[unikDepartmentColumn].ToString().Equals(techem.DepartmentID));

                if (techem.MaalerRow != null)
                {
                    techem.MaalerType        = techem.MaalerRow.ItemArray[2].ToString();
                    techem.Nustillingsmaaler = techem.MaalerRow.ItemArray[3].ToString();
                    techem.ReadDate          = techem.MaalerRow.ItemArray[5].ToString();
                    techem.ReadDate          = Convert.ToDateTime(techem.MaalerRow.ItemArray[5].ToString()).ToString("dd-MM-yyyy");
                    //techem.ReadDate = Convert.ToDateTime(techem.MaalerRow.ItemArray[14].ToString()).ToString("dd-MM-yyyy");
                }

                //Temp value
                //techem.ReadDate = "31-12-2019";

                techem.ReadColumn = _outputDatatable.Columns.IndexOf(techem.ReadDate);

                return(techem);

            case "Brunata":
                FactorModel brunata = new FactorModel();

                brunata.CompanyColumn        = -1;
                brunata.DepartmentColumn     = -1;
                brunata.ApartmentColumn      = 2;
                brunata.MaalerColumn         = -1;
                brunata.SerieIDColumn        = 5;
                brunata.ReadDateColumn       = 8;
                brunata.ReadColumn           = 7;
                brunata.SearchCriteriaColumn = 10;
                brunata.FaktorColumn         = -1;
                brunata.Factor                 = 1;
                brunata.ReductionColumn        = -1;
                brunata.RoomColumn             = -1;
                brunata.InstallationDateColumn = -1;
                brunata.SearchCriteria         = "[ABN]";
                brunata.CompanyID              = _outputDatatable.Rows[0].ItemArray[0].ToString();
                brunata.DepartmentID           = brunata.CompanyID.Length >= 4 ? brunata.CompanyID.Substring(2, 2) : _outputDatatable.Rows[0].ItemArray[1].ToString();
                brunata.CompanyID              = brunata.CompanyID.Length >= 4 ? brunata.CompanyID.Substring(0, 2) : brunata.CompanyID;
                brunata.DepartmentID           = Convert.ToString(Convert.ToInt32(brunata.DepartmentID));


                brunata.MaalerRow = _unikDatatable.AsEnumerable().FirstOrDefault(x => x[unikCompanyColumn].ToString().Equals(brunata.CompanyID) && x[unikDepartmentColumn].ToString().Equals(brunata.DepartmentID));

                if (brunata.MaalerRow != null)
                {
                    brunata.MaalerType        = brunata.MaalerRow.ItemArray[2].ToString();
                    brunata.Nustillingsmaaler = brunata.MaalerRow.ItemArray[3].ToString();
                    brunata.ReadDate          = brunata.MaalerRow.ItemArray[5].ToString();
                    //brunata.ReadDate = brunata.MaalerRow.ItemArray[14].ToString();
                    brunata.ReadDateFormatted = DateTime.Parse(brunata.ReadDate).ToString("yyyyMMdd");
                }
                else
                {
                    throw new Exception("Cannot find måler type + date in Unik");
                }

                return(brunata);

            default:
                return(null);
            }
        }