private void _deleteASignatureStep(object obj)
        {
            // Delete step
            SignatureSettingViewModel stepRemove = (SignatureSettingViewModel)obj;

            if (MessageBox.Show("Delete step " + stepRemove.StepCounter.ToString() + " in signature calculation: " + stepRemove.SignatureName + "?", "Warning!", MessageBoxButtons.OKCancel) == DialogResult.OK)
            {
                // Try to delete current step
                try
                {
                    SignatureSettings.Remove(stepRemove);
                    foreach (var step in SignatureSettings)
                    {
                        if (step.StepCounter > stepRemove.StepCounter)
                        {
                            step.StepCounter -= 1;
                        }
                    }
                    Model.SignatureSettings.Remove(stepRemove.Model);
                }
                catch (Exception)
                {
                    MessageBox.Show("Error deleting step");
                }
                // Select a different step?
                if (SelectedStep != null)
                {
                    SelectedStep.IsSelected = false;
                    SelectedStep            = null;
                }
            }
        }
        public static IQueryable <ISignatureSetting> GetSignatureSettings(List <IBusinessUnit> businessUnits, List <IDocumentKind> kinds)
        {
            var today = Calendar.UserToday;

            return(SignatureSettings.GetAll()
                   .Where(s => s.Status == CoreEntities.DatabookEntry.Status.Active)
                   .Where(s => !s.BusinessUnits.Any() || !businessUnits.Any() || s.BusinessUnits.Any(k => businessUnits.Contains(k.BusinessUnit)))
                   .Where(s => !s.DocumentKinds.Any() || !kinds.Any() || s.DocumentKinds.Any(k => kinds.Contains(k.DocumentKind)))
                   .Where(s => (!s.ValidFrom.HasValue || s.ValidFrom.Value <= today) &&
                          (!s.ValidTill.HasValue || s.ValidTill.Value >= today)));
        }
        private void _addASignatureStep(object obj)
        {
            var sig    = ((SignatureCalMenu)obj).Signature;
            var newSig = new SignatureSettingViewModel(sig);

            newSig.WindowOverlapStr            = WindowOverlapStr;
            newSig.WindowSizeStr               = WindowSizeStr;
            newSig.StepCounter                 = SignatureSettings.Count + 1;
            newSig.ThisStepInputsGroupedByType = new SignalTree("Step " + newSig.StepCounter.ToString() + " _ " + newSig.SignatureName);
            newSig.ThisStepOutputsGroupedByPMU = new SignalTree("Step " + newSig.StepCounter.ToString() + " _ " + newSig.SignatureName);
            SampleDataMngr.GroupedSignalBySignatureStepsInput.Add(newSig.ThisStepInputsGroupedByType);
            SignatureSettings.Add(newSig);
            Model.SignatureSettings.Add(newSig.Model);
            _signatureStepSelected(newSig);
        }
        public virtual void UpdateSigningRole(bool beforeDelete)
        {
            var role   = Roles.GetAll(r => r.Sid == Constants.Module.RoleGuid.SigningRole).Single();
            var closed = beforeDelete || _obj.Status == CoreEntities.DatabookEntry.Status.Closed;

            IRecipient oldMember = null;

            if (closed)
            {
                oldMember = _obj.Recipient;
            }
            if (!closed && !Equals(_obj.Recipient, _obj.State.Properties.Recipient.OriginalValue))
            {
                oldMember = _obj.State.Properties.Recipient.OriginalValue;
            }
            if (!closed && _obj.ValidTill != null && _obj.ValidTill < Calendar.GetUserToday(_obj.Recipient))
            {
                oldMember = _obj.Recipient;
                closed    = true;
            }

            // Удалить подписывающего из роли, если у него больше нет активного права подписи.
            if (oldMember != null)
            {
                var recipientToday = Calendar.GetUserToday(oldMember);
                var activeSetting  = SignatureSettings
                                     .GetAll(ss => !Equals(ss, _obj) && ss.Status == CoreEntities.DatabookEntry.Status.Active)
                                     .Where(ss => Equals(ss.Recipient, oldMember) && !Equals(ss, _obj))
                                     .Where(ss => ss.ValidTill == null || ss.ValidTill >= recipientToday);
                if (!activeSetting.Any())
                {
                    foreach (var link in role.RecipientLinks.Where(l => Equals(l.Member, oldMember)).ToList())
                    {
                        role.RecipientLinks.Remove(link);
                    }
                }
            }

            // Добавить подписывающего в роль.
            if (!closed)
            {
                if (!role.RecipientLinks.Any(r => Equals(r.Member, _obj.Recipient)))
                {
                    role.RecipientLinks.AddNew().Member = _obj.Recipient;
                }
            }
        }
        public static void UpdateBusinessUnitSetting(Company.IBusinessUnit unit)
        {
            var settings = SignatureSettings.GetAll()
                           .Where(s => s.IsSystem == true && s.Status == CoreEntities.DatabookEntry.Status.Active &&
                                  s.BusinessUnits.Any(u => Equals(u.BusinessUnit, unit)))
                           .ToList();

            if (settings.Count > 2)
            {
                Logger.DebugFormat("UpdateBusinessUnitSetting: Has {0} SignatureSettings for BusinessUnit {1}. Must have max 2.", settings.Count, unit.Id);
            }

            var isCeoChanged = !Equals(unit.State.Properties.CEO.OriginalValue, unit.CEO);

            if (unit.CEO != null && unit.Status == CoreEntities.DatabookEntry.Status.Active &&
                isCeoChanged && (!settings.Any() || !settings.Any(s => Equals(s.Recipient, unit.CEO))))
            {
                var setting = SignatureSettings.Create();
                setting.BusinessUnits.AddNew().BusinessUnit = unit;
                setting.Recipient = unit.CEO;
                setting.Reason    = Docflow.SignatureSetting.Reason.Duties;
                setting.IsSystem  = true;

                setting.Note = SignatureSettings.Resources.DefaultSignatureSettingNote;
            }

            if (settings.Any(s => Equals(s.Recipient, unit.CEO)) && unit.Status == CoreEntities.DatabookEntry.Status.Active)
            {
                foreach (var setting in settings.Where(s => Equals(s.Recipient, unit.CEO)))
                {
                    Sungero.Docflow.PublicFunctions.SignatureSetting.UpdateSigningRole(setting, false);
                }
            }

            var oldSettings = settings;

            if (unit.Status == CoreEntities.DatabookEntry.Status.Active)
            {
                oldSettings = oldSettings.Where(s => !Equals(s.Recipient, unit.CEO)).ToList();
            }
            foreach (var setting in oldSettings)
            {
                setting.Status = CoreEntities.DatabookEntry.Status.Closed;
            }
        }
 public static IQueryable <ISignatureSetting> GetSignatureSettingsByDocumentKind(IDocumentKind documentKind)
 {
     return(SignatureSettings.GetAll(s => s.Status == Docflow.SignatureSetting.Status.Active)
            .Where(s => s.DocumentKinds.Any(k => k.DocumentKind.Id == documentKind.Id)));
 }