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."); } }
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); } }
// 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)); } }
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); } }
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."); } }
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); } }