Esempio n. 1
0
        public override void Saving(Sungero.Domain.SavingEventArgs e)
        {
            base.Saving(e);

            // Выдать права на документ участникам совещания.
            PublicFunctions.Meeting.SetRightsOnDocument(_obj.Meeting, _obj);
        }
Esempio n. 2
0
        public override void Saving(Sungero.Domain.SavingEventArgs e)
        {
            base.Saving(e);

            // Включение ответственного в роль "Ответственные за сервисы обмена".
            var prevResponsible = _obj.State.Properties.Responsible.OriginalValue;

            if (_obj.State.Properties.Responsible.IsChanged && !Equals(_obj.Responsible, prevResponsible))
            {
                var role = ExchangeCore.Functions.Module.GetExchangeServiceUsersRole();
                if (role != null)
                {
                    if (!ExchangeCore.BoxBases.GetAll().Where(x => !Equals(x, _obj)).Any(x => Equals(x.Responsible, prevResponsible)))
                    {
                        var link = role.RecipientLinks.Where(x => Equals(x.Member, prevResponsible)).FirstOrDefault();
                        if (link != null)
                        {
                            role.RecipientLinks.Remove(link);
                        }
                    }

                    if (_obj.Responsible != null && !role.RecipientLinks.Any(x => Equals(x.Member, _obj.Responsible)))
                    {
                        role.RecipientLinks.AddNew().Member = _obj.Responsible;
                    }
                }
            }
        }
Esempio n. 3
0
        public override void Saving(Sungero.Domain.SavingEventArgs e)
        {
            // Выдать права на совещание.
            var secretary = _obj.Secretary;

            if (secretary != null && !_obj.AccessRights.IsGrantedDirectly(DefaultAccessRightsTypes.Change, secretary))
            {
                _obj.AccessRights.Grant(secretary, DefaultAccessRightsTypes.Change);
            }

            var president = _obj.President;

            if (president != null && !_obj.AccessRights.IsGrantedDirectly(DefaultAccessRightsTypes.Change, president))
            {
                _obj.AccessRights.Grant(president, DefaultAccessRightsTypes.Change);
            }

            var members = _obj.Members.Select(m => m.Member).ToList();

            foreach (var member in members)
            {
                if (!_obj.AccessRights.IsGrantedDirectly(DefaultAccessRightsTypes.Read, member))
                {
                    _obj.AccessRights.Grant(member, DefaultAccessRightsTypes.Read);
                }
            }

            // Выдать права на документы.
            var documents = Functions.Meeting.GetMeetingDocuments(_obj, Docflow.PublicConstants.Module.AddendumRelationName);

            foreach (var document in documents)
            {
                PublicFunctions.Meeting.SetRightsOnDocument(_obj, document);
            }
        }
 public override void Saving(Sungero.Domain.SavingEventArgs e)
 {
     if (_obj.State.IsInserted)
     {
         // Создание нового задания может изменить срок задачи.
         if (_obj.Task.MaxDeadline.HasValue && Functions.Module.CheckDeadline(_obj.Deadline, _obj.Task.MaxDeadline))
         {
             _obj.Task.MaxDeadline = _obj.Deadline;
         }
     }
 }
Esempio n. 5
0
        public override void Saving(Sungero.Domain.SavingEventArgs e)
        {
            #region Синхронизировать свойства нашей организации с организацией

            // Создать организацию, соответствующую нашей организации.
            var company = _obj.Company;
            if (company == null)
            {
                company      = Parties.Companies.Create();
                _obj.Company = company;
            }

            company.Name          = _obj.Name;
            company.TIN           = _obj.TIN;
            company.TRRC          = _obj.TRRC;
            company.PSRN          = _obj.PSRN;
            company.NCEO          = _obj.NCEO;
            company.NCEA          = _obj.NCEA;
            company.City          = _obj.City;
            company.Phones        = _obj.Phones;
            company.LegalName     = _obj.LegalName;
            company.Region        = _obj.Region;
            company.LegalAddress  = _obj.LegalAddress;
            company.PostalAddress = _obj.PostalAddress;
            company.Status        = _obj.Status;
            company.Email         = _obj.Email;
            company.Homepage      = _obj.Homepage;
            company.Account       = _obj.Account;
            company.Bank          = _obj.Bank;
            company.Code          = _obj.Code;

            if (_obj.HeadCompany != null)
            {
                company.HeadCompany = _obj.HeadCompany.Company;
            }
            else
            {
                company.HeadCompany = null;
            }

            company.Note           = string.Format("{0}{1}", BusinessUnits.Resources.BusinessUnitComment, _obj.Note);
            company.IsCardReadOnly = true;

            #endregion

            // Синхронизировать с ролью "Руководители наших организаций".
            Functions.BusinessUnit.SynchronizeCEOInRole(_obj);

            // Создать или обновить права подписи у руководителя.
            Functions.BusinessUnit.UpdateSignatureSettings(_obj);
        }
Esempio n. 6
0
 public override void Saving(Sungero.Domain.SavingEventArgs e)
 {
     _obj.Priority = 0;
     if (_obj.BusinessUnits.Any())
     {
         _obj.Priority += 8;
     }
     if (_obj.DocumentKinds.Any())
     {
         _obj.Priority += 4;
     }
     if (_obj.Departments.Any())
     {
         _obj.Priority += 2;
     }
     if (_obj.DocumentGroups.Any())
     {
         _obj.Priority += 1;
     }
 }
Esempio n. 7
0
        public override void Saving(Sungero.Domain.SavingEventArgs e)
        {
            Functions.Department.SynchronizeManagerInRole(_obj);
            // Создать системное замещение.
            var systemSubstitutionsForCreate = new List <Structures.Module.Substitution>();
            var systemSubstitutionsForDelete = new List <Structures.Module.Substitution>();

            if (_obj.State.IsInserted)
            {
                this.InitSystemSubstitutions(systemSubstitutionsForCreate);
                this.CommitSystemSubstitutions(systemSubstitutionsForCreate, systemSubstitutionsForDelete);

                return;
            }

            this.UpdateSystemSubstitutionForChangedManager(systemSubstitutionsForCreate, systemSubstitutionsForDelete);
            this.UpdateSystemSubstitutionForChangedDepartmentStructure(systemSubstitutionsForCreate, systemSubstitutionsForDelete);
            this.UpdateSystemSubstitutionForChangedHeadOffice(systemSubstitutionsForCreate, systemSubstitutionsForDelete);
            this.UpdateSystemSubstitutionForChangedBusinessUnit(systemSubstitutionsForCreate, systemSubstitutionsForDelete);
            this.UpdateSystemSubstitutionForChangedStatus(systemSubstitutionsForCreate, systemSubstitutionsForDelete);
            this.CommitSystemSubstitutions(systemSubstitutionsForCreate, systemSubstitutionsForDelete);
        }
Esempio n. 8
0
 public override void Saving(Sungero.Domain.SavingEventArgs e)
 {
     // Обновить обязательных согласующих.
     Functions.ApprovalTask.UpdateReglamentApprovers(_obj, _obj.ApprovalRule);
 }
Esempio n. 9
0
        public override void Saving(Sungero.Domain.SavingEventArgs e)
        {
            base.Saving(e);

            #region  абота с папками

            // Создание папки проекта.
            if (_obj.Folder == null)
            {
                var folder = Folders.Create();
                folder.Name = _obj.ShortName;

                folder.Items.Add(_obj);
                _obj.Folder = folder;
            }

            // Вложение папки проекта в корневую папку или папку ведущего проекта.
            var projectsFolder = Folders.GetAll().Single(f => f.Uid == Constants.Module.ProjectFolders.ProjectFolderUid);

            if (_obj.State.Properties.LeadingProject.IsChanged)
            {
                // Удаление из папки предыдущего проекта.
                var leading = _obj.State.Properties.LeadingProject.OriginalValue;
                if (leading != null && !Equals(leading, _obj.LeadingProject) && leading.Folder != null && leading.Folder.Items.Contains(_obj.Folder))
                {
                    leading.Folder.Items.Remove(_obj.Folder);
                }
            }

            if (_obj.LeadingProject == null)
            {
                if (projectsFolder != null && !projectsFolder.Items.Contains(_obj.Folder) && _obj.Stage != Stage.Completed)
                {
                    projectsFolder.Items.Add(_obj.Folder);
                }
            }
            else
            {
                // Удаление из корневой папки.
                if (projectsFolder != null)
                {
                    projectsFolder.Items.Remove(_obj.Folder);
                }

                // Добавление в папку ведущего проекта.
                if (_obj.LeadingProject.Folder != null && !_obj.LeadingProject.Folder.Items.Contains(_obj.Folder))
                {
                    _obj.LeadingProject.Folder.Items.Add(_obj.Folder);
                }
            }

            #endregion

            #region Переименование групп, папок

            if (_obj.State.Properties.ShortName.IsChanged)
            {
                _obj.Folder.Name = _obj.ShortName;
            }

            #endregion

            #region Перенос в папку Архив и обратно

            if (_obj.State.Properties.Stage.OriginalValue != _obj.Stage && _obj.LeadingProject == null)
            {
                var rootProjectFolder = Folders.GetAll().Single(f => f.Uid == Constants.Module.ProjectFolders.ProjectFolderUid);
                var archiveFolder     = Folders.GetAll().Single(f => f.Uid == Constants.Module.ProjectFolders.ProjectArhiveFolderUid);
                var projectFolder     = _obj.Folder;

                if (_obj.Stage == Stage.Completed)
                {
                    archiveFolder.Items.Add(projectFolder);
                    rootProjectFolder.Items.Remove(projectFolder);
                }
                else
                {
                    rootProjectFolder.Items.Add(projectFolder);
                    archiveFolder.Items.Remove(projectFolder);
                }
            }

            #endregion

            #region Создание и обновление папок проекта

            Functions.Project.UpdateClassifier(_obj);

            #endregion

            #region Очередь выдачи прав участнику

            var properties     = _obj.State.Properties;
            var needAddToQueue = false;
            if (properties.Manager.IsChanged && properties.Manager.OriginalValue != _obj.Manager)
            {
                needAddToQueue = true;
            }

            if (properties.Administrator.IsChanged && _obj.Administrator != null && properties.Administrator.OriginalValue != _obj.Administrator)
            {
                needAddToQueue = true;
            }

            if (properties.InternalCustomer.IsChanged && _obj.InternalCustomer != null && properties.InternalCustomer.OriginalValue != _obj.InternalCustomer)
            {
                needAddToQueue = true;
            }

            if (properties.TeamMembers.IsChanged && _obj.TeamMembers.Any())
            {
                needAddToQueue = true;
            }

            if (_obj.State.Properties.LeadingProject.IsChanged)
            {
                var originalLeadProject = properties.LeadingProject.OriginalValue;
                var leadProject         = _obj.LeadingProject;
                if (leadProject != null && leadProject != originalLeadProject)
                {
                    needAddToQueue = true;
                }
            }

            if (needAddToQueue)
            {
                Logger.DebugFormat("CreateProjectMemberRightsQueueItem: project {0}", _obj.Id);
                var queueItem = ProjectMemberRightsQueueItems.Create();
                queueItem.ProjectId = _obj.Id;
                queueItem.Save();

                // Добавить признак того, что нужно запустить ФП Автоматическое назначение прав на документы.
                e.Params.Add(Docflow.PublicConstants.OfficialDocument.GrantAccessRightsToProjectDocument, true);
            }

            #endregion

            #region Выдача прав РП и администратору

            var recipients = new List <IRecipient>()
            {
                _obj.Manager
            };
            if (_obj.Administrator != null)
            {
                recipients.Add(_obj.Administrator);
            }

            var folders = new List <IFolder>();
            if (_obj.Folder != null)
            {
                folders.Add(_obj.Folder);
            }
            folders.AddRange(_obj.Classifier.Where(c => c.Folder != null).Select(f => f.Folder).ToList());

            foreach (var recipient in recipients)
            {
                foreach (var folder in folders)
                {
                    if (!folder.AccessRights.IsGrantedDirectly(DefaultAccessRightsTypes.FullAccess, recipient) && (Locks.GetLockInfo(folder) == null || !Locks.GetLockInfo(folder).IsLockedByOther))
                    {
                        folder.AccessRights.Grant(recipient, DefaultAccessRightsTypes.FullAccess);
                    }
                }

                if (!_obj.AccessRights.IsGrantedDirectly(DefaultAccessRightsTypes.FullAccess, recipient) && Equals(recipient, _obj.Manager))
                {
                    _obj.AccessRights.Grant(recipient, DefaultAccessRightsTypes.FullAccess);
                }

                if (!Functions.Module.CheckGrantedRights(_obj, recipient, DefaultAccessRightsTypes.Change) && Equals(recipient, _obj.Administrator))
                {
                    _obj.AccessRights.Grant(recipient, DefaultAccessRightsTypes.Change);
                }
            }

            #endregion
        }
Esempio n. 10
0
 public override void Saving(Sungero.Domain.SavingEventArgs e)
 {
     _obj.Modified = Calendar.Now;
 }
 public override void Saving(Sungero.Domain.SavingEventArgs e)
 {
     Functions.SignatureSetting.UpdateSigningRole(_obj, false);
 }