public static bool UpdateMaster(DocumentsContext ctx, MFilesDocument targetDoc, ObjectVersionWrapper sourceDoc, IDictionary <string, VaultDetails> vaultDetails, CountriesClient countries) { targetDoc.Guid = sourceDoc.Guid; targetDoc.CreatedDate = sourceDoc.CreatedDate; targetDoc.ModifiedDate = sourceDoc.ModifiedDate; var masterDoc = targetDoc.Document; masterDoc.MFilesDocument = targetDoc; masterDoc.UnNumber = string.IsNullOrEmpty(sourceDoc.UnNumber)?sourceDoc.Name:sourceDoc.UnNumber; masterDoc.Convention = vaultDetails[sourceDoc.VaultName].NameInDb ?? sourceDoc.VaultName.ToLower(); var authorAndType = GetAuthor(sourceDoc, countries); if (authorAndType != null) { masterDoc.Author = authorAndType.Item1; masterDoc.AuthorType = authorAndType.Item2 ? "organization" : "person"; } masterDoc.CountryFull = countries.GetCountryIsoCode2(sourceDoc.Country) != null ? sourceDoc.Country: null; masterDoc.Country = countries.GetCountryIsoCode2(masterDoc.CountryFull); masterDoc.Copyright = sourceDoc.Copyright; var period = sourceDoc.GetPeriod(); if (period != null) { masterDoc.PeriodStartDate = period.Item1; masterDoc.PeriodEndDate = period.Item2; } masterDoc.PublicationDate = sourceDoc.PublicationDate; lock ("Process") { ProcessDocumentTypes(ctx, masterDoc, sourceDoc); ProcessMeetings(ctx, masterDoc, sourceDoc); ProcessMeetingTypes(ctx, masterDoc, sourceDoc); ProcessChemicals(ctx, masterDoc, sourceDoc); ProcessPrograms(ctx, masterDoc, sourceDoc); ProcessTerms(ctx, masterDoc, sourceDoc); ProcessTags(ctx, masterDoc, sourceDoc); using (var trans = ctx.Database.BeginTransaction()) { try { ctx.SaveChanges(); trans.Commit(); } catch (Exception ex) { trans.Rollback(); ClassLogger.Error("SQL exception " + ex); throw; } } } return(true); }
public static void Delete(DocumentsContext ctx, MFilesDocument targetDocument) { if (targetDocument == null) { return; } var doc = targetDocument; Debug.Assert(doc != null); if (doc.Title != null) { ClassLogger.Info($"Delete document '{doc.Title.Value}'"); } else { ClassLogger.Warn($"Delete document {doc.Guid}"); } var documents = from x in ctx.Documents where x.DocumentId == doc.Guid select x; ctx.Documents.RemoveRange(documents.ToList()); var titles = from x in ctx.Titles where x.TitleId == doc.Guid select x; ctx.Titles.RemoveRange(titles.ToList()); var descriptions = (from x in ctx.Descriptions where x.DescriptionId == doc.Guid select x).ToList(); ctx.Descriptions.RemoveRange(descriptions.ToList()); var files = (from x in ctx.Files where x.FileId == doc.Guid select x).ToList(); ctx.Files.RemoveRange(files.ToList()); ctx.MFilesDocuments.Remove(doc); using (var trans = ctx.Database.BeginTransaction()) { try { ctx.SaveChanges(); trans.Commit(); } catch (Exception ex) { trans.Rollback(); ClassLogger.Error($"Delete document {ex.Message}"); throw; } } }
public static MFilesDocument CreateSlave(DocumentsContext ctx, MFilesDocument master, ObjectVersionWrapper sourceDoc, IDictionary <string, VaultDetails> vaultDetails, string thumbnailsUrlPattern) { MFilesDocument targetDoc = null; if (sourceDoc.Guid != master.Guid) { targetDoc = ctx.MFilesDocuments.Create(); } else { targetDoc = master; } return(UpdateSlave(ctx, master, targetDoc, sourceDoc, vaultDetails, thumbnailsUrlPattern)); }
public static MFilesDocument UpdateSlave(DocumentsContext ctx, MFilesDocument masterDoc, MFilesDocument targetDoc, ObjectVersionWrapper sourceDoc, IDictionary <string, VaultDetails> vaultDetails, string thumbnailsUrlPattern) { if (sourceDoc.Guid != masterDoc.Guid) { targetDoc.Guid = sourceDoc.Guid; targetDoc.ModifiedDate = sourceDoc.ModifiedDate; targetDoc.CreatedDate = sourceDoc.CreatedDate; } else { targetDoc = masterDoc; } var doc = masterDoc.Document; Debug.Assert(doc != null); string languageCode; // TODO: should be in configuration or don't use CultureUtils // or we need to update language in M-Files if (sourceDoc.Language == "Portugese") { languageCode = "pt"; } else if (sourceDoc.Language == "Azeri") { languageCode = "az"; } else { languageCode = CultureUtils.GetLangTwoLetterCode(sourceDoc.Language); } if (languageCode == null) { ClassLogger.Warn( $"Could not find language code for {sourceDoc.Language} (Document {sourceDoc.UnNumber})"); return(null); } var title = doc.Titles.FirstOrDefault(t => t.Language == languageCode && t.Document == doc); if (title == null || title.MFilesDocument == targetDoc) { if (title == null) { title = new Title { MFilesDocument = targetDoc }; doc.Titles.Add(title); } title.Document = doc; title.Language = languageCode; title.LanguageFull = sourceDoc.Language; title.MFilesDocument = targetDoc; title.Value = sourceDoc.Title; } var descirpiton = doc.Descriptions.FirstOrDefault(t => t.Language == languageCode && t.Document == doc); if (descirpiton == null || descirpiton.MFilesDocument == targetDoc) { if (descirpiton == null) { descirpiton = new Description(); doc.Descriptions.Add(descirpiton); } descirpiton.Document = doc; descirpiton.Language = languageCode; descirpiton.LanguageFull = sourceDoc.Language; descirpiton.MFilesDocument = targetDoc; descirpiton.Value = sourceDoc.Description; } var file = sourceDoc.File; var repositoryUrl = vaultDetails[sourceDoc.VaultName].Url ?? ""; var targetFile = ctx.Files.FirstOrDefault(f => f.FileId == targetDoc.Guid); if (targetFile == null) { targetFile = new File(); doc.Files.Add(targetFile); } targetFile.Document = doc; targetFile.MFilesDocument = targetDoc; targetFile.Language = languageCode; targetFile.LanguageFull = sourceDoc.Language; targetFile.Name = file.Name; targetFile.Extension = file.Extension.ToLower(); targetFile.Size = file.Size; targetFile.MimeType = Mime.Lookup(file.Name + "." + file.Extension.ToLower()); targetFile.Url = file.GetUrl(repositoryUrl); targetFile.ThumbnailUrl = thumbnailsUrlPattern.Replace("{vault}", sourceDoc.VaultName) .Replace("{file}", $"{targetFile.Name}.{targetFile.Extension}"); using (var trans = ctx.Database.BeginTransaction()) { try { ctx.SaveChanges(); trans.Commit(); } catch (Exception ex) { trans.Rollback(); ClassLogger.Error(ex); throw; } } return(targetDoc); }