Ejemplo n.º 1
0
        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());
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
 public static List <IRegistrationSetting> GetByDocumentRegister(IDocumentRegister documentRegister)
 {
     return(RegistrationSettings.GetAllCached(s => s.Status == CoreEntities.DatabookEntry.Status.Active && Equals(s.DocumentRegister, documentRegister)).ToList());
 }