private static void ParseEmailData(long emailId, long ruleId) { // AddLog("ParseEmailData"); IRepository<EmailModels> emailRepository = new Repository<EmailModels>(); var email = emailRepository.Find(w => w.Id == emailId); if (email != null) { int row = -1; List<int> rows = new List<int>(); IRepository<EmailParsingRulesModels> emailParsingRulesRepository = new Repository<EmailParsingRulesModels>(); var emailParsingRule = emailParsingRulesRepository.Find(w => w.Id == ruleId); if (emailParsingRule != null) { // AddLog("emailParsingRule != null"); List<Models.TablesList> tablesList = new List<Models.TablesList>(); IRepository<Model.SaveEmailProperty> saveEmailPropertiesRepository = new Repository<Model.SaveEmailProperty>(); var allDefaultValues = saveEmailPropertiesRepository.FindAll(i => i.EmailParsingRulesModelsId == emailParsingRule.Id).ToList(); IRepository<Model.TableModels> tablesRepository = new Repository<TableModels>(); IRepository<EmailDataParsingRulesModels> emailDataParsingRulesRepository = new Repository<EmailDataParsingRulesModels>(); var emailDataParsingRules = emailDataParsingRulesRepository.FindAll( w => w.EmailParsingRulesModelsId_Id == emailParsingRule.Id && w.Status.Equals(Model.Enums.RuleStatusEnums.Active.ToString())).OrderBy(r => r.Name).ToList(); if (emailDataParsingRules != null && emailDataParsingRules.Count != 0) { // AddLog("emailDataParsingRules.Count != 0"); foreach (var dataParsingRule in emailDataParsingRules) { if (tablesList.Find(w => w.TableId == dataParsingRule.TableId_Id && w.IsChecked) == null && dataParsingRule.Status != Model.Enums.RuleStatusEnums.Paused.ToString()) { var name = dataParsingRule.TableId_Id.ToString(); var path = SpreadsheetHelper.GetSpreadsheetPathById((long)dataParsingRule.TableId_Id); try { SpreadsheetExtension.LoadDocument(name, path); IWorkbook workbook = SpreadsheetExtension.GetCurrentDocument(name); Worksheet worksheet = workbook.Worksheets[ emailParsingRule.EmailDataParsingRulesModels.FirstOrDefault().Worksheet]; if (emailParsingRule.IsUpdatingRule) { var changing = emailParsingRule.EmailDataParsingRulesModels.FirstOrDefault( w => w.IsUpdatindIndex && w.EmailParsingRulesModelsId_Id == emailParsingRule.Id); var changingIndex = BeforeParseValueFromEmail(email, changing); if (path != null) { foreach (var c in worksheet.Columns[dataParsingRule.Column].ExistingCells) { var value = c.Value.ToString(); if (value.Equals(changingIndex)) { row = c.RowIndex; rows.Add(row); } } byte[] size = workbook.SaveDocument(DocumentFormat.Xlsx); tablesRepository.Find(t => t.Id == dataParsingRule.TableId_Id).Size = size.Length; tablesRepository.Commit(); workbook.SaveDocument(path); SpreadsheetExtension.CloseDocument(name); } } else { worksheet.Rows.Insert(1); row = 1; } if (row != -1) { var author_Id = emailParsingRule.AuthorId_Id; foreach (var defaultValue in allDefaultValues) { if (emailParsingRule.Status != Model.Enums.RuleStatusEnums.Paused.ToString()) { InsertEmailLink(emailId, defaultValue, row, author_Id, emailParsingRule.CopyRuleFromPreviousOrder); } } foreach ( var dataParsing in emailParsingRule.EmailDataParsingRulesModels.Where( w => w.TableId_Id == dataParsingRule.TableId_Id)) { if (dataParsing.Status != Model.Enums.RuleStatusEnums.Paused.ToString()) { if (emailParsingRule.IsUpdatingRule) { foreach (var rowForUpdate in rows) { ParseCellValue(email, dataParsing, rowForUpdate, emailParsingRule.CopyRuleFromPreviousOrder); } rows.Clear(); } else { ParseCellValue(email, dataParsing, row, emailParsingRule.CopyRuleFromPreviousOrder); } } } tablesList.Add(new TablesList { IsChecked = true, TableId = (long)dataParsingRule.TableId_Id }); } } catch { AddLog("Table not found"); } } } } else if (allDefaultValues != null) { var tablesInallDefaultValues = allDefaultValues.GroupBy(a => a.TableId).Select(g => g.First()); foreach (var defaultValue in tablesInallDefaultValues) { try { var name = tablesRepository.Find(w => w.Name == defaultValue.TableId && w.AuthorId_Id == emailParsingRule.AuthorId_Id).Name; var path = SpreadsheetHelper.GetSpreadsheetPathById(tablesRepository.Find(w => w.Name == defaultValue.TableId && w.AuthorId_Id == emailParsingRule.AuthorId_Id).Id); SpreadsheetExtension.LoadDocument(name, path); IWorkbook workbook = SpreadsheetExtension.GetCurrentDocument(name); Worksheet worksheet = workbook.Worksheets[ Convert.ToInt32(defaultValue.Worksheet)]; worksheet.Rows.Insert(1); row = 1; byte[] size = workbook.SaveDocument(DocumentFormat.Xlsx); tablesRepository.Find(w => w.Name == defaultValue.TableId && w.AuthorId_Id == emailParsingRule.AuthorId_Id).Size = size.Length; tablesRepository.Commit(); workbook.SaveDocument(path); SpreadsheetExtension.CloseDocument(name); } catch (Exception ex) { AddLog(ex.Message); } } foreach (var defaultValue in allDefaultValues) { InsertEmailLink(emailId, defaultValue, row, emailParsingRule.AuthorId_Id, emailParsingRule.CopyRuleFromPreviousOrder); } } } } }
public ActionResult ManageSpreadsheets() { var userId = UserHelper.GetUserByEmail(User.Identity.Name).Id; Repository<Model.TableModels> spreadsheetRepository = new Repository<TableModels>(); var spreadsheets = spreadsheetRepository.FindAll(w => w.AdministratorId_Id.Equals(userId)); if (spreadsheets != null && spreadsheets.Any()) { return View(spreadsheets.ToList()); } return View(); }
private static void ParseEmail(long emailId, string userId) { // AddLog("ParseEmail" + "emailId: " + emailId.ToString() + "userId: " + userId.ToString()); IRepository<EmailModels> emailRepository = new Repository<EmailModels>(); var email = emailRepository.Find(w => w.Id == emailId); //AddLog("Email: " + email.Content); if (email != null) { // AddLog("email != null"); IRepository<EmailParsingRulesModels> emailParsingRulesRepository = new Repository<EmailParsingRulesModels>(); var emailParsingRules = emailParsingRulesRepository.FindAll(w => w.AuthorId_Id.Equals(userId) && w.Status.Equals(Model.Enums.RuleStatusEnums.Active.ToString())).OrderBy(j => j.Name).ToList(); if (emailParsingRules != null && emailParsingRules.Any()) { // AddLog("emailParsingRules != null && emailParsingRules.Any()"); foreach (var rule in emailParsingRules) { if (rule.Email.Contains(email.From)) { bool b = true; if (rule.Subject != null) { if (!email.Subject.Equals(rule.Subject)) { b = false; } } if (b && rule.PlainContains != null) { if (!email.Content.Contains(rule.PlainContains)) { b = false; } } // AddLog(rule.IsUpdatingRule.ToString()); if (b) ParseEmailData(emailId, rule.Id); } } } } }