public void LoadGroups_WhenRangeMessageXmlExists_ReturnsGroups()
        {
            // Arrange
            // Act
            var gs             = RegistrationGroups.LoadGroups();
            var g978_0         = gs.First();
            var g978_0_Rules   = g978_0.Rules.ToList();
            var g978_605       = gs.First(g => g.Prefix == "978-605");
            var g978_605_Rules = g978_605.Rules.ToList();

            // Assert
            Assert.That(g978_0.Prefix, Is.EqualTo("978-0"));
            Assert.That(g978_0.Agency, Is.EqualTo("English language"));
            Assert.That(g978_0_Rules[0].RangeStart, Is.EqualTo("00"));
            Assert.That(g978_0_Rules[0].RangeEnd, Is.EqualTo("19"));
            Assert.That(g978_0_Rules[0].Length, Is.EqualTo(2));
            Assert.That(g978_0_Rules[9].RangeStart, Is.EqualTo("9500000"));
            Assert.That(g978_0_Rules[9].RangeEnd, Is.EqualTo("9999999"));
            Assert.That(g978_0_Rules[9].Length, Is.EqualTo(7));
            Assert.That(g978_0_Rules.Count(), Is.EqualTo(10));

            Assert.That(g978_605_Rules[0].RangeStart, Is.EqualTo(""));
            Assert.That(g978_605_Rules[0].RangeEnd, Is.EqualTo(""));
            Assert.That(g978_605_Rules[0].Length, Is.EqualTo(0));
        }
Example #2
0
 public IQueryable <IRegistrationGroup> GetUsersRegistrationGroups()
 {
     return(RegistrationGroups.GetAll().Where(r => r.RecipientLinks
                                              .Where(rec => Equals(rec.Member, Users.Current))
                                              .Any()));
 }
        public override void BeforeSave(Sungero.Domain.BeforeSaveEventArgs e)
        {
            var responsible   = _obj.State.Properties.ResponsibleEmployee.OriginalValue;
            var isResponsible = (responsible == null || Recipients.AllRecipientIds.Contains(responsible.Id)) && _obj.AccessRights.CanUpdate();

            if (!isResponsible && !_obj.AccessRights.CanManage())
            {
                e.AddError(RegistrationGroups.Resources.EnoughRights);
            }

            if (_obj.CanRegisterIncoming != true &&
                _obj.CanRegisterOutgoing != true &&
                _obj.CanRegisterInternal != true &&
                _obj.CanRegisterContractual != true)
            {
                e.AddError(RegistrationGroups.Resources.ModuleNotSet);
            }

            var validateDocumentFlows = Functions.RegistrationGroup.ValidateDocumentFlow(_obj);

            if (!string.IsNullOrWhiteSpace(validateDocumentFlows))
            {
                e.AddError(validateDocumentFlows, RegistrationGroups.Info.Actions.ShowGroupDocumentRegisters);
            }

            if (!e.IsValid)
            {
                return;
            }

            // Добавление ответственного в список участников.
            if (!_obj.RecipientLinks.Any(r => Equals(r.Member, _obj.ResponsibleEmployee)))
            {
                _obj.RecipientLinks.AddNew().Member = _obj.ResponsibleEmployee;
            }

            // Выдать ответственному права на изменение данной группы.
            if (!Equals(responsible, _obj.ResponsibleEmployee))
            {
                if (_obj.ResponsibleEmployee != null)
                {
                    _obj.AccessRights.Grant(_obj.ResponsibleEmployee, DefaultAccessRightsTypes.Change);
                }
                // Отобрать права на изменение у предыдущего ответственного.
                if (responsible != null)
                {
                    _obj.AccessRights.Revoke(responsible, DefaultAccessRightsTypes.Change);
                }
            }

            // Удаляем из "Ответственные за настройку регистрации" сотрудников, которые больше не являются ответственными.
            var managers        = Roles.GetAll().FirstOrDefault(r => r.Sid == Constants.Module.RoleGuid.RegistrationManagersRole);
            var responsiblesIds = RegistrationGroups.GetAll(gr => !Equals(gr, _obj) && gr.Status == CoreEntities.DatabookEntry.Status.Active)
                                  .Select(r => r.ResponsibleEmployee.Id).ToList();
            var oldResponsibles = managers.RecipientLinks.Where(l => !responsiblesIds.Contains(l.Member.Id));

            // Если группа закрыта, то исключить текущего ответственного.
            if (_obj.Status == CoreEntities.DatabookEntry.Status.Active)
            {
                oldResponsibles = oldResponsibles.Where(l => !Equals(l.Member.Id, _obj.ResponsibleEmployee.Id));
            }
            oldResponsibles = oldResponsibles.ToList();
            if (oldResponsibles.Any())
            {
                foreach (var link in oldResponsibles)
                {
                    managers.RecipientLinks.Remove(link);
                }
            }

            // Добавить ответственного в роль "Ответственные за настройку регистрации".
            if (!Equals(responsible, _obj.ResponsibleEmployee) || !Equals(_obj.Status, _obj.State.Properties.Status.OriginalValue))
            {
                if (_obj.Status == CoreEntities.DatabookEntry.Status.Active)
                {
                    if (!managers.RecipientLinks.Any(r => Equals(r.Member, _obj.ResponsibleEmployee)))
                    {
                        managers.RecipientLinks.AddNew().Member = _obj.ResponsibleEmployee;
                    }
                }
            }

            // Добавить группу в выбранные роли.
            var isRoleChanged = _obj.State.Properties.CanRegisterIncoming.IsChanged ||
                                _obj.State.Properties.CanRegisterOutgoing.IsChanged ||
                                _obj.State.Properties.CanRegisterInternal.IsChanged ||
                                _obj.State.Properties.CanRegisterContractual.IsChanged;
            var needChangeRoles = isRoleChanged && Users.Current.IncludedIn(Roles.Administrators);

            if (needChangeRoles)
            {
                var includedRoles = new List <IRole>();
                // Добавить в роли безопасности, если группа не закрытая.
                if (_obj.Status == CoreEntities.DatabookEntry.Status.Active)
                {
                    var needIncludeInClerkRole = _obj.CanRegisterIncoming == true || _obj.CanRegisterInternal == true || _obj.CanRegisterOutgoing == true;
                    var nameRole = Roles.GetAll(r => (r.Sid == Constants.Module.RoleGuid.ClerksRole && needIncludeInClerkRole) ||
                                                (r.Sid == Constants.Module.RoleGuid.RegistrationContractualDocument && _obj.CanRegisterContractual == true));
                    includedRoles.AddRange(nameRole);
                    if (_obj.CanRegisterIncoming == true)
                    {
                        var registrationIncomingRole = Roles.GetAll(r => r.Sid == Constants.Module.RoleGuid.RegistrationIncomingDocument).FirstOrDefault();
                        if (registrationIncomingRole != null)
                        {
                            includedRoles.Add(registrationIncomingRole);
                        }
                    }
                    if (_obj.CanRegisterOutgoing == true)
                    {
                        var registrationOutgoingRole = Roles.GetAll(r => r.Sid == Constants.Module.RoleGuid.RegistrationOutgoingDocument).FirstOrDefault();
                        if (registrationOutgoingRole != null)
                        {
                            includedRoles.Add(registrationOutgoingRole);
                        }
                    }
                    if (_obj.CanRegisterInternal == true)
                    {
                        var registrationInternalRole = Roles.GetAll(r => r.Sid == Constants.Module.RoleGuid.RegistrationInternalDocument).FirstOrDefault();
                        if (registrationInternalRole != null)
                        {
                            includedRoles.Add(registrationInternalRole);
                        }
                    }
                }

                // Добавить группу в выбранные роли.
                foreach (var role in includedRoles)
                {
                    if (!role.RecipientLinks.Any(r => Equals(r.Member, _obj)))
                    {
                        role.RecipientLinks.AddNew().Member = _obj;
                    }
                }

                // Удаляем группу из ролей, связанных с группами.
                var excludedRoles = Roles.GetAll(r => r.Sid == Constants.Module.RoleGuid.RegistrationIncomingDocument || r.Sid == Constants.Module.RoleGuid.RegistrationOutgoingDocument ||
                                                 r.Sid == Constants.Module.RoleGuid.RegistrationInternalDocument || r.Sid == Constants.Module.RoleGuid.ContractsResponsible ||
                                                 r.Sid == Constants.Module.RoleGuid.ClerksRole || r.Sid == Constants.Module.RoleGuid.RegistrationContractualDocument)
                                    .ToList().Except(includedRoles);
                foreach (var role in excludedRoles)
                {
                    var registrationGroupLinks = role.RecipientLinks.Where(r => Equals(r.Member, _obj)).ToList();
                    foreach (var link in registrationGroupLinks)
                    {
                        role.RecipientLinks.Remove(link);
                    }
                }
            }
        }