Пример #1
0
        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);
        }