public static List <IDocumentRegister> GetDocumentRegistersByParams(IDocumentKind kind, IBusinessUnit unit, IDepartment department, Enumeration?settingType, bool forCurrentUser) { // Результат сразу замыкается в ToList, так как иначе не транслируется в SQL, если вызывать на сервере. // Все журналы, указанные в настройках регистрации. var documentRegistersWithRegistrationSettings = RegistrationSettings .GetAllCached(s => s.Status == CoreEntities.DatabookEntry.Status.Active && s.SettingType == Docflow.RegistrationSetting.SettingType.Registration) .Select(s => s.DocumentRegister) .ToList(); // Все журналы, кроме указанных в настройках регистрации. var documentRegistersWithoutRegistrationSettings = DocumentRegisters.GetAll() .Where(l => !documentRegistersWithRegistrationSettings.Contains(l)); // Журналы, подходящие по непротиворечивым настройкам. var documentRegistersBySettings = Functions.RegistrationSetting .GetAvailableSettingsByParams(settingType, unit, kind, department) .Select(s => s.DocumentRegister) .ToList(); // Журналы настроек регистрации, подходящих для текущего документа. var documentRegistersByRegistrationSettings = Functions.RegistrationSetting .GetAvailableSettingsByParams(Docflow.RegistrationSetting.SettingType.Registration, unit, kind, department) .Select(s => s.DocumentRegister) .ToList(); // Получить все журналы по настройкам. documentRegistersByRegistrationSettings.AddRange(documentRegistersBySettings); // Фильтруем журналы по документопотоку. Только журналы регистрации. var result = Functions.DocumentRegister.GetFilteredDocumentRegisters(kind.DocumentFlow.Value, true, forCurrentUser) .Where(a => documentRegistersByRegistrationSettings.Contains(a) || documentRegistersWithoutRegistrationSettings.Contains(a)).ToList(); // Для резервирования добавить настройки резервирования в обход проверки доступности журнала группе регистрации. // Делопроизводитель должен иметь возможность резервировать номер в документе, который не сможет зарегистрировать. if (settingType == Docflow.RegistrationSetting.SettingType.Reservation) { result.AddRange(documentRegistersBySettings); } return(result.Distinct().ToList()); }
public static IQueryable <IRegistrationSetting> GetAvailableSettingsByParams(Enumeration?settingType, IBusinessUnit businessUnit, IDocumentKind documentKind, IDepartment department) { var activeStatus = CoreEntities.DatabookEntry.Status.Active; var settings = RegistrationSettings.GetAllCached(r => r.Status == activeStatus && r.SettingType == settingType && r.DocumentRegister.Status == activeStatus); settings = businessUnit != null? settings.Where(r => r.BusinessUnits.Any(o => o.BusinessUnit.Equals(businessUnit)) || !r.BusinessUnits.Any()) : settings.Where(r => !r.BusinessUnits.Any()); settings = documentKind != null? settings.Where(r => r.DocumentKinds.Any(o => o.DocumentKind.Equals(documentKind)) || !r.DocumentKinds.Any()) : settings.Where(r => !r.DocumentKinds.Any()); settings = department != null? settings.Where(r => r.Departments.Any(o => o.Department.Equals(department)) || !r.Departments.Any()) : settings.Where(r => !r.Departments.Any()); return(settings); }
public static List <IRegistrationSetting> GetByDocumentRegister(IDocumentRegister documentRegister) { return(RegistrationSettings.GetAllCached(s => s.Status == CoreEntities.DatabookEntry.Status.Active && Equals(s.DocumentRegister, documentRegister)).ToList()); }