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); }
/// <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))); } }
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); }
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); }
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); } }