//Создание задачи с файлом для Redmine (в сообщении задачи метаданные логов по документа в формате json) public static MetadataOfLog CreateIssueWithAFile(string subject, DocumentReceiveLog log, bool hasPriority) { RedmineFile fileOnRedmine = null; var fi = new FileInfo(log.GetFileName()); if (!hasPriority && fi.Extension.ToLower() != ".dbf") { return(null); } var redmineProject = hasPriority ? Settings.Default.RedmineProjectForWaybillIssueWithPriority : Settings.Default.RedmineProjectForWaybillIssue; var redmineUser = !hasPriority || fi.Extension.ToLower() == ".dbf" ? Settings.Default.RedmineAssignedTo : Settings.Default.RedmineAssignedToWithPriority; var bufferF = File.ReadAllBytes(fi.FullName); var currentMeta = new MetadataOfLog(log); #if DEBUG //для тестов if (!FileAlreadyInIssue(redmineProject, currentMeta.Hash)) { var debugHash = log.FileName.GetHashCode().ToString().Replace("-", ""); var token = debugHash; #else if (!FileAlreadyInIssue(redmineProject, currentMeta.Hash)) { var token = UploadFileToRedmine( string.Format(Settings.Default.RedmineUrlFileUpload, Settings.Default.RedmineKeyForWaybillIssue), bufferF); #endif if (token != string.Empty) { fileOnRedmine = new RedmineFile { Token = token, Content_type = "application/binary", Filename = fi.Name, Json = $"Служебная информация по {(log.DocumentType == DocType.Waybill ? "накладной" : "отказу")}: {currentMeta.Hash}" }; //возвращаем метаданные только, если задача создана return (CreateIssue( string.Format(Settings.Default.RedmineUrl, redmineProject, Settings.Default.RedmineKeyForWaybillIssue), subject, fileOnRedmine.Json, redmineUser , new List <RedmineFile> { fileOnRedmine }) ? currentMeta : null); } } return(null); }
//проверка существующей задачи на Redmine private static bool FileAlreadyInIssue(string project, string hash) { var result = MetadataOfLog.GetMetaFromDataBase(project, hash); if (result.HasValue) { _InfoLog.Info( $"По неразобранной накладной уже была создана задача {result.Value}"); return(true); } return(false); }