コード例 #1
0
        private IQueryable <Sungero.Domain.Shared.IEntity> GetChangedEntities(Sungero.Domain.Session session,
                                                                              Guid entityTypeGuid,
                                                                              string extEntityType,
                                                                              string systemId)
        {
            var entityTypeGuidString = entityTypeGuid.ToString().ToLower();
            var entityType           = Sungero.Domain.Shared.TypeExtension.GetTypeByGuid(entityTypeGuid);
            var entityTypeMetadata   = entityType.GetEntityMetadata();
            var originalTypeGuid     = entityTypeGuid.GetOriginalTypeGuid();
            var historyType          = entityTypeMetadata.HistoryTypeGuid.GetTypeByGuid();
            var user = Users.Current;

            var entities = session.GetAll(entityType)
                           .Where(s => Domain.Session.GetAllFromCurrentSession(historyType).Cast <IHistory>()
                                  .Where(h => h.EntityType == originalTypeGuid && h.EntityId == s.Id)
                                  .Where(h => (!session.GetAll <Commons.IExternalEntityLink>()
                                               .Any(el => el.EntityId == h.EntityId && el.EntityType.ToLower() == entityTypeGuidString &&
                                                    el.ExtEntityType == extEntityType && el.ExtSystemId == systemId) &&
                                               !session.GetAll <Commons.IExternalEntityLink>()
                                               .Any(el => el.ExtEntityId == h.EntityId.ToString() &&
                                                    el.ExtSystemId == Constants.Module.InternalLinkSystemId) ||
                                               !Equals(h.User, user) &&
                                               (h.Action == Sungero.CoreEntities.History.Action.Create || h.Action == Sungero.CoreEntities.History.Action.Update) &&
                                               session.GetAll <Commons.IExternalEntityLink>()
                                               .Any(el => el.EntityId == h.EntityId && el.EntityType.ToLower() == entityTypeGuidString &&
                                                    el.ExtEntityType == extEntityType && Equals(el.ExtSystemId, systemId) &&
                                                    (!el.SyncDate.HasValue || h.HistoryDate >= el.SyncDate))))
                                  .Any())
                           .OrderBy(s => s.Id);

            return(entities);
        }
コード例 #2
0
        /// <summary>
        /// Получить документ игнорируя права доступа.
        /// </summary>
        /// <param name="documentId">ИД документа.</param>
        /// <returns>Документ.</returns>
        public static IOfficialDocument GetOfficialDocumentIgnoreAccessRights(int documentId)
        {
            // HACK Котегов: использование внутренней сессии для обхода прав доступа.
            Logger.DebugFormat("GetOfficialDocumentIgnoreAccessRights: documentId {0}", documentId);
            using (var session = new Sungero.Domain.Session())
            {
                var innerSession = (Sungero.Domain.ISession)session.GetType()
                                   .GetField("InnerSession", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance).GetValue(session);

                return(OfficialDocuments.As((Sungero.Domain.Shared.IEntity)innerSession.Get(typeof(IOfficialDocument), documentId)));
            }
        }
コード例 #3
0
        public Sungero.Domain.Shared.IEntity GetEntity()
        {
            var entityType = new System.Guid(_obj.EntityType).GetTypeByGuid();

            if (_obj.EntityId.HasValue)
            {
                using (var session = new Sungero.Domain.Session())
                {
                    return(session.Get(entityType, _obj.EntityId.Value));
                }
            }
            return(_obj);
        }
コード例 #4
0
        public static ICounterparty GetDistributionListCounterparty()
        {
            var guid = Sungero.Parties.Constants.Counterparty.DistributionListCounterpartyGuid;
            var link = Docflow.PublicFunctions.Module.GetExternalLink(Company.ClassTypeGuid, guid);

            if (link != null && link.EntityId.HasValue)
            {
                var companyId = link.EntityId.Value;
                // HACK mukhachev: использование внутренней сессии для обхода фильтрации.
                Logger.DebugFormat("CreateDefaultDistributionListCounterpartyIgnoreFiltering: companyId {0}", companyId);
                using (var session = new Sungero.Domain.Session())
                {
                    var innerSession = (Sungero.Domain.ISession)session.GetType()
                                       .GetField("InnerSession", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance).GetValue(session);

                    return(Companies.As((Sungero.Domain.Shared.IEntity)innerSession.Get(typeof(ICompany), companyId)));
                }
            }

            return(null);
        }
コード例 #5
0
        public static void CopyCaseFiles(int userId,
                                         DateTime sourcePeriodStartDate, DateTime sourcePeriodEndDate,
                                         DateTime targetPeriodStartDate, DateTime targetPeriodEndDate,
                                         int businessUnitId, int departmentId)
        {
            Logger.DebugFormat("CopyCaseFiles. Start copy case files by user (Id {0}).", userId);
            Logger.DebugFormat("CopyCaseFiles. Source Period: {0} - {1}.", sourcePeriodStartDate, sourcePeriodEndDate);
            Logger.DebugFormat("CopyCaseFiles. Target Period: {0} - {1}.", targetPeriodStartDate, targetPeriodEndDate);
            Logger.DebugFormat("CopyCaseFiles. Business Unit Id: {0}.", businessUnitId);
            Logger.DebugFormat("CopyCaseFiles. Department Id: {0}.", departmentId);

            try
            {
                var success       = 0;
                var failed        = 0;
                var alreadyCopied = 0;
                var caseFiles     = GetCaseFilesToCopy(sourcePeriodStartDate, sourcePeriodEndDate,
                                                       businessUnitId, departmentId);
                Logger.DebugFormat("CopyCaseFiles. Case Files to copying: {0}.", caseFiles.Count());

                foreach (var caseFile in caseFiles)
                {
                    var caseFileId    = caseFile.Id;
                    var isIndexUnique = Functions.CaseFile.CheckIndexForUniquenessInPeriod(caseFile,
                                                                                           targetPeriodStartDate,
                                                                                           targetPeriodEndDate);
                    if (!isIndexUnique)
                    {
                        Logger.ErrorFormat("CopyCaseFiles. Case File (Id {0}). Index not unique in target period: {1}", caseFileId, caseFile.Index);
                        alreadyCopied++;
                        continue;
                    }

                    Transactions.Execute(() =>
                    {
                        using (var session = new Sungero.Domain.Session())
                        {
                            try
                            {
                                Functions.CaseFile.CopyCaseFileOnNextPeriod(caseFile, targetPeriodStartDate, targetPeriodEndDate);
                                session.SubmitChanges();
                                success++;
                                Logger.DebugFormat("CopyCaseFiles. Case File (Id {0}) success.", caseFileId);
                            }
                            catch (Exception ex)
                            {
                                failed++;
                                Logger.ErrorFormat("CopyCaseFiles. Case File (Id {0}) failed.", ex, caseFileId);
                            }
                        }
                    });
                }

                Logger.DebugFormat("CopyCaseFiles. Total {0}, success {1}, failed {2}, already copied {3}.",
                                   success + failed + alreadyCopied,
                                   success,
                                   failed,
                                   alreadyCopied);

                var message = Functions.Module.GetCopyingCaseFilesTotalsMessage(targetPeriodStartDate, targetPeriodEndDate, success, failed);
                if (success + failed + alreadyCopied == 0)
                {
                    message = Functions.Module.GetNoCaseFilesToCopyMessage(targetPeriodStartDate, targetPeriodEndDate);
                }
                // Номенклатура дел уже создана, если при копировании не создано ни одного нового дела.
                if (alreadyCopied > 0 && success == 0)
                {
                    message = Functions.Module.GetAlreadyCopiedCaseFilesMessage(targetPeriodStartDate, targetPeriodEndDate);
                }

                Functions.Module.SendCopyCaseFilesNotification(userId, message);
            }
            catch (Exception ex)
            {
                Logger.ErrorFormat("CopyCaseFiles. Error on copying case files.", ex);
            }
        }