private void CreateRules(Supplier supplier, bool wrongRules = false) { var rejectDataParser = new RejectDataParser("TestRule", supplier); rejectDataParser.Lines.Add(new RejectParserLine(rejectDataParser, "CODE", "Code")); rejectDataParser.Lines.Add(new RejectParserLine(rejectDataParser, "NAME", "Product")); rejectDataParser.Lines.Add(new RejectParserLine(rejectDataParser, "PRICE", "Cost")); rejectDataParser.Lines.Add(new RejectParserLine(rejectDataParser, "QNTZAK", "Ordered")); if (wrongRules) { rejectDataParser.Lines.Add(new RejectParserLine(rejectDataParser, "SOME_WRONG_FIELD", "Rejected")); } else { rejectDataParser.Lines.Add(new RejectParserLine(rejectDataParser, "QNTREF", "Rejected")); } session.Save(rejectDataParser); }
/// <summary> /// Создание отказов для логов. /// </summary> /// <param name="session">Сессия Nhibernate</param> /// <param name="log">Лог, о получении документа</param> /// <param name="metaForRedmineErrorIssueList"></param> private static void ProcessReject(ISession session, DocumentReceiveLog log, List <MetadataOfLog> metaForRedmineErrorIssueList) { RejectHeader reject; //если есть назначенные поставщику правила разбора var parsers = session.Query <RejectDataParser>().Where(x => x.Supplier.Id == log.Supplier.Id).ToList(); //попытка распарсить ими reject = RejectDataParser.Parse(log, parsers); //иначе, выбор из имеющихся парсеров if (reject == null) { var parser = GetRejectParser(log); if (parser == null) { if (log.DocumentType == DocType.Reject) { //создаем задачу на Redmine, прикрепляя файлы Redmine.CreateIssueForLog(ref metaForRedmineErrorIssueList, log); } return; } reject = parser.CreateReject(log); if (reject == null) { if (log.DocumentType == DocType.Reject) { //создаем задачу на Redmine, прикрепляя файлы Redmine.CreateIssueForLog(ref metaForRedmineErrorIssueList, log); } return; } } if (reject.Lines.Count > 0) { try { reject.Normalize(session); } catch (Exception e) { _log.Error(string.Format("Не удалось идентифицировать товары отказа {0}", log.GetFileName()), e); } session.Save(reject); } }