Ejemplo n.º 1
0
        public override void BeforeSave(Sungero.Domain.BeforeSaveEventArgs e)
        {
            if (e.Params.Contains(Constants.BoxBase.DisableSaveValidation))
            {
                return;
            }

            if (_obj.Status == BoxBase.Status.Closed && _obj.State.Properties.Status.OriginalValue == BoxBase.Status.Active &&
                Functions.BoxBase.GetActiveChildBoxes(_obj).Any())
            {
                e.AddError(BoxBases.Resources.FindActiveChildBoxes, _obj.Info.Actions.FindActiveChildBoxes);
            }

            if (_obj.Status == BoxBase.Status.Active && _obj.State.Properties.Status.OriginalValue == BoxBase.Status.Closed &&
                Functions.BoxBase.GetClosedChildBoxes(_obj).Any())
            {
                e.AddInformation(BoxBases.Resources.FindClosedChildBoxes, _obj.Info.Actions.FindClosedChildBoxes);
            }

            if (!_obj.DeadlineInDays.HasValue && !_obj.DeadlineInHours.HasValue && _obj.Routing != Sungero.ExchangeCore.BoxBase.Routing.NoAssignments)
            {
                e.AddError(_obj.Info.Properties.DeadlineInDays, Sungero.ExchangeCore.BoxBases.Resources.NeedSetAssignmentDeadline, new[] { _obj.Info.Properties.DeadlineInDays, _obj.Info.Properties.DeadlineInHours });
                e.AddError(_obj.Info.Properties.DeadlineInHours, Sungero.ExchangeCore.BoxBases.Resources.NeedSetAssignmentDeadline, new[] { _obj.Info.Properties.DeadlineInDays, _obj.Info.Properties.DeadlineInHours });
            }

            if ((_obj.DeadlineInDays ?? 0) + (_obj.DeadlineInHours ?? 0) == 0 && _obj.Routing != Sungero.ExchangeCore.BoxBase.Routing.NoAssignments && e.IsValid)
            {
                e.AddError(_obj.Info.Properties.DeadlineInDays, Sungero.ExchangeCore.BoxBases.Resources.IncorrectHoursAssignmentDeadline, new[] { _obj.Info.Properties.DeadlineInDays, _obj.Info.Properties.DeadlineInHours });
                e.AddError(_obj.Info.Properties.DeadlineInHours, Sungero.ExchangeCore.BoxBases.Resources.IncorrectHoursAssignmentDeadline, new[] { _obj.Info.Properties.DeadlineInDays, _obj.Info.Properties.DeadlineInHours });
            }
        }
Ejemplo n.º 2
0
        public override void BeforeSave(Sungero.Domain.BeforeSaveEventArgs e)
        {
            if (!string.IsNullOrEmpty(_obj.FirstName))
            {
                _obj.FirstName = _obj.FirstName.Trim();
                if (string.IsNullOrWhiteSpace(_obj.FirstName))
                {
                    e.AddError(_obj.Info.Properties.FirstName, Commons.Resources.RequiredPropertiesNotFilledIn);
                }
            }
            if (!string.IsNullOrEmpty(_obj.LastName))
            {
                _obj.LastName = _obj.LastName.Trim();
                if (string.IsNullOrWhiteSpace(_obj.LastName))
                {
                    e.AddError(_obj.Info.Properties.LastName, Commons.Resources.RequiredPropertiesNotFilledIn);
                }
            }
            if (!string.IsNullOrEmpty(_obj.MiddleName))
            {
                _obj.MiddleName = _obj.MiddleName.Trim();
            }

            Functions.Person.FillName(_obj);

            base.BeforeSave(e);
        }
Ejemplo n.º 3
0
        public override void BeforeSave(Sungero.Domain.BeforeSaveEventArgs e)
        {
            // При исключении работника из подразделения проверить, что оно для него не основное.
            foreach (var departmentEmployee in Employees.GetAll(x => Equals(x.Department, _obj)))
            {
                // TODO Zamerov нужен нормальный признак IsDeleted, 50908
                var isDeleted = (departmentEmployee as Sungero.Domain.Shared.IChangeTracking).ChangeTracker.IsDeleted;
                if (!isDeleted && !_obj.RecipientLinks.Any(l => Equals(l.Member, departmentEmployee)))
                {
                    e.AddError(Departments.Resources.YouСantDeleteEmployeeOflastDivision);
                    return;
                }
            }

            // Проверить код подразделения на пробелы, если свойство изменено.
            if (!string.IsNullOrEmpty(_obj.Code))
            {
                // При изменении кода e.AddError сбрасывается.
                var codeIsChanged = _obj.State.Properties.Code.IsChanged;
                _obj.Code = _obj.Code.Trim();

                if (codeIsChanged && Regex.IsMatch(_obj.Code, @"\s"))
                {
                    e.AddError(_obj.Info.Properties.Code, Company.Resources.NoSpacesInCode);
                }
            }
        }
        public override void BeforeSave(Sungero.Domain.BeforeSaveEventArgs 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;
            }

            var conflictedSettings = Functions.RegistrationSetting.GetDoubleSettings(_obj);

            if (conflictedSettings.Any())
            {
                e.AddError(RegistrationSettings.Resources.DuplicateDetected, _obj.Info.Actions.ShowDuplicate);
            }

            // Проверка допустимости журнала.
            if (_obj.DocumentRegister != null)
            {
                var isTypeValid      = _obj.SettingType == (_obj.DocumentRegister.RegisterType == DocumentRegister.RegisterType.Numbering ? SettingType.Numeration : _obj.SettingType);
                var isDirectionValid = _obj.DocumentFlow == _obj.DocumentRegister.DocumentFlow;
                if (!isTypeValid || !isDirectionValid)
                {
                    e.AddError(RegistrationSettings.Resources.InvalidDocumentRegister);
                }
            }
        }
Ejemplo n.º 5
0
        public override void BeforeSave(Sungero.Domain.BeforeSaveEventArgs e)
        {
            // Проверить правильность заполнения дат.
            if (_obj.StartDate > _obj.EndDate)
            {
                e.AddError(_obj.Info.Properties.StartDate, CaseFiles.Resources.WrongPeriod, new[] { _obj.Info.Properties.StartDate, _obj.Info.Properties.EndDate });
                e.AddError(_obj.Info.Properties.EndDate, CaseFiles.Resources.WrongPeriod, new[] { _obj.Info.Properties.StartDate, _obj.Info.Properties.EndDate });
            }

            // Проверить уникальность индекса в рамках нашей организации и периода.
            if (!Functions.CaseFile.CheckIndexForUniqueness(_obj))
            {
                e.AddError(CaseFiles.Resources.IndexIsNotUnique);
            }

            // Проверить индекс на пробелы, если свойство изменено.
            if (!string.IsNullOrEmpty(_obj.Index))
            {
                // При изменении индекса e.AddError сбрасывается.
                var indexIsChanged = _obj.State.Properties.Index.IsChanged;
                _obj.Index = _obj.Index.Trim();
                if (indexIsChanged && Regex.IsMatch(_obj.Index, @"\s"))
                {
                    e.AddError(_obj.Info.Properties.Index, Docflow.CaseFiles.Resources.NoSpacesInIndex);
                }
            }

            _obj.Name = string.Format("{0}. {1}", _obj.Index, _obj.Title);
        }
Ejemplo n.º 6
0
        public override void BeforeSave(Sungero.Domain.BeforeSaveEventArgs e)
        {
            if (_obj.Status == CoreEntities.DatabookEntry.Status.Closed)
            {
                return;
            }

            if (_obj.Manager == null || _obj.Assistant == null)
            {
                return;
            }

            // Руководитель не мб помощником сам у себя.
            if (Equals(_obj.Manager, _obj.Assistant))
            {
                e.AddError(ManagersAssistants.Resources.ManagerCanNotBeAssistantForHimself);
            }

            // Найти дубли.
            var equalsManagersAssistants = ManagersAssistants
                                           .GetAll(m => m.Status == CoreEntities.DatabookEntry.Status.Active)
                                           .Where(m => !Equals(m, _obj))
                                           .Where(m => Equals(m.Manager, _obj.Manager));

            if (equalsManagersAssistants.Any())
            {
                e.AddError(ManagersAssistants.Resources.ExecutiveSecretaryIsAppointedFormat(_obj.Manager.Name));
            }
        }
Ejemplo n.º 7
0
        public override void BeforeSave(Sungero.Domain.BeforeSaveEventArgs e)
        {
            // Удалить дубли в списке участников, если они есть.
            var distinctAcquaintanceList = _obj.Participants.Select(r => r.Participant).ToList().Distinct();

            if (distinctAcquaintanceList.Count() != _obj.Participants.Count())
            {
                _obj.Participants.Clear();
                foreach (var participant in distinctAcquaintanceList)
                {
                    var newRow = _obj.Participants.AddNew();
                    newRow.Participant = participant;
                }
            }

            // Удалить дубли в поле "Кроме", если они есть.
            var distinctExcludedAcquaintanceList = _obj.ExcludedParticipants.Select(r => r.ExcludedParticipant).ToList().Distinct();

            if (distinctExcludedAcquaintanceList.Count() != _obj.ExcludedParticipants.Count())
            {
                _obj.ExcludedParticipants.Clear();
                foreach (var excludedParticipant in distinctExcludedAcquaintanceList)
                {
                    var newRow = _obj.ExcludedParticipants.AddNew();
                    newRow.ExcludedParticipant = excludedParticipant;
                }
            }

            // Предупредить о техническом ограничении платформы на запуск задачи для большого числа участников.
            var participants         = _obj.Participants.Select(p => p.Participant).ToList();
            var excludedParticipants = _obj.ExcludedParticipants.Select(x => x.ExcludedParticipant).ToList();
            var performers           = Functions.AcquaintanceTask.GetParticipants(participants, excludedParticipants);

            if (performers.Count() > Constants.AcquaintanceTask.PerformersLimit)
            {
                if (_obj.State.IsInserted)
                {
                    e.AddError(AcquaintanceLists.Resources.TooManyParticipantsFormat(Constants.AcquaintanceTask.PerformersLimit));
                    return;
                }

                e.AddWarning(AcquaintanceLists.Resources.TooManyParticipantsFormat(Constants.AcquaintanceTask.PerformersLimit));
            }

            // Проверить наличие участников ознакомления.
            if (performers.Count == 0)
            {
                e.AddError(AcquaintanceTasks.Resources.PerformersCantBeEmpty);
            }
        }
Ejemplo n.º 8
0
        public override void BeforeSave(Sungero.Domain.BeforeSaveEventArgs e)
        {
            base.BeforeSave(e);

            if (_obj.Date.HasValue && _obj.PaymentDueDate.HasValue &&
                _obj.Date.Value > _obj.PaymentDueDate)
            {
                e.AddError(_obj.Info.Properties.PaymentDueDate, IncomingInvoices.Resources.DatePaymentDeadlineValidationMessage, _obj.Info.Properties.Date);
            }

            if (Functions.IncomingInvoice.HaveDuplicates(_obj,
                                                         _obj.DocumentKind,
                                                         _obj.Number,
                                                         _obj.Date,
                                                         _obj.TotalAmount,
                                                         _obj.Currency,
                                                         _obj.Counterparty))
            {
                e.AddWarning(IncomingInvoices.Resources.DuplicateDetected, _obj.Info.Actions.ShowDuplicates);
            }

            if (_obj.Contract != null && _obj.Contract.AccessRights.CanRead() && !_obj.Relations.GetRelatedFrom(Constants.Module.AccountingDocumentsRelationName).Contains(_obj.Contract))
            {
                _obj.Relations.AddFromOrUpdate(Constants.Module.AccountingDocumentsRelationName, _obj.State.Properties.Contract.OriginalValue, _obj.Contract);
            }

            _obj.DocumentDate = _obj.Date.HasValue ? _obj.Date : _obj.Created;
        }
Ejemplo n.º 9
0
        public override void BeforeSave(Sungero.Domain.BeforeSaveEventArgs e)
        {
            base.BeforeSave(e);

            Functions.BusinessUnitBox.SetBusinessUnitBoxName(_obj);
            Functions.BusinessUnitBox.CheckConnection(_obj);

            var errors = Functions.BusinessUnitBox.BeforeSaveCheckProperties(_obj);

            foreach (var error in errors)
            {
                e.AddError(error.Key, error.Value);
            }

            if (_obj.Status == Sungero.CoreEntities.DatabookEntry.Status.Active)
            {
                if (!Functions.BusinessUnitBox.CheckAllResponsibleCertificates(_obj, _obj.Responsible))
                {
                    e.AddWarning(_obj.Info.Properties.Responsible, BusinessUnitBoxes.Resources.CertificateNotFound, _obj.Info.Properties.Responsible);
                }

                if (!Functions.BusinessUnitBox.CheckBusinessUnitTinTRRC(_obj))
                {
                    e.AddWarning(BusinessUnitBoxes.Resources.OrganizationFailed);
                }
            }
        }
Ejemplo n.º 10
0
        public override void BeforeSave(Sungero.Domain.BeforeSaveEventArgs e)
        {
            if (_obj.State.Properties.Name.IsChanged || _obj.State.Properties.DateTime.IsChanged)
            {
                using (TenantInfo.Culture.SwitchTo())
                {
                    var dateTime = _obj.DateTime.Value;
                    var displayNameWithoutTime = Meetings.Resources.MeetingDisplayValueWithDateFormat(_obj.Name, dateTime.ToUserTime().ToShortDateString());

                    _obj.DisplayName = Calendar.HasTime(dateTime)
            ? string.Format("{0} {1}", displayNameWithoutTime, dateTime.ToUserTime().ToShortTimeString())
            : displayNameWithoutTime;
                }
            }

            if (!string.IsNullOrEmpty(_obj.Name))
            {
                _obj.Name = _obj.Name.Trim();
            }
            if (!string.IsNullOrEmpty(_obj.Location))
            {
                _obj.Location = _obj.Location.Trim();
            }
            if (!string.IsNullOrEmpty(_obj.Note))
            {
                _obj.Note = _obj.Note.Trim();
            }

            if (string.IsNullOrWhiteSpace(_obj.Name))
            {
                e.AddError(_obj.Info.Properties.Name, Sungero.Meetings.Meetings.Resources.EmptyMeetingSubject);
            }
        }
Ejemplo n.º 11
0
        public override void BeforeSave(Sungero.Domain.BeforeSaveEventArgs e)
        {
            // Проверка шаблона сайта.
            if (!string.IsNullOrEmpty(_obj.Url))
            {
                _obj.Url = _obj.Url.Trim();
                var error = Functions.DueDiligenceWebsite.CheckDueDiligenceWebsiteUrl(_obj.Url);
                if (!string.IsNullOrWhiteSpace(error))
                {
                    e.AddError(_obj.Info.Properties.Url, error);
                }
            }

            // Проверка шаблона сайта (ИП).
            if (!string.IsNullOrEmpty(_obj.UrlForSelfEmployed))
            {
                _obj.UrlForSelfEmployed = _obj.UrlForSelfEmployed.Trim();
                var error = Functions.DueDiligenceWebsite.CheckDueDiligenceWebsiteUrl(_obj.UrlForSelfEmployed);
                if (!string.IsNullOrWhiteSpace(error))
                {
                    e.AddError(_obj.Info.Properties.UrlForSelfEmployed, error);
                }
            }

            // Если установить для текущего сайта флаг по умолчанию, то с другого сайта этот флаг снимается.
            if (_obj.IsDefault == true)
            {
                var defaultWebsite = Functions.DueDiligenceWebsite.GetDefaultDueDiligenceWebsite();
                if (defaultWebsite != null && !Equals(defaultWebsite, _obj))
                {
                    var lockInfo = Locks.GetLockInfo(defaultWebsite);
                    if (lockInfo != null && lockInfo.IsLocked)
                    {
                        var error = Commons.Resources.LinkedEntityLockedFormat(
                            defaultWebsite.Name,
                            defaultWebsite.Id,
                            lockInfo.OwnerName);
                        e.AddError(error);
                    }

                    defaultWebsite.IsDefault = false;
                }
            }
            _obj.HomeUrl = _obj.HomeUrl.Trim();
        }
Ejemplo n.º 12
0
        public override void BeforeSave(Sungero.Domain.BeforeSaveEventArgs e)
        {
            var isNotUniquePriority = Functions.StoragePolicyBase.HasSamePriorityPolicies(_obj);

            if (isNotUniquePriority)
            {
                e.AddError(_obj.Info.Properties.Priority, Sungero.Docflow.StoragePolicyBases.Resources.NonUniquePriority, _obj.Info.Properties.Priority);
            }
        }
Ejemplo n.º 13
0
        public override void BeforeSave(Sungero.Domain.BeforeSaveEventArgs e)
        {
            base.BeforeSave(e);

            if (!_obj.AccessRights.CanUpdate())
            {
                e.AddError(Projects.Resources.NoRightToUpdateProject);
                return;
            }

            // TODO Zamerov: сравнивать надо с ресурсом в локали тенанта. BUG: 35010
            if (Equals(_obj.ShortName, Sungero.Projects.Resources.ProjectArhiveFolderName))
            {
                e.AddError(Projects.Resources.PropertyReservedFormat(_obj.Info.Properties.ShortName.LocalizedName, Sungero.Projects.Resources.ProjectArhiveFolderName));
            }

            if (Projects.GetAll().Any(p => !Equals(p, _obj) && Equals(p.ShortName, _obj.ShortName)))
            {
                e.AddError(Projects.Resources.PropertyAlreadyUsedFormat(_obj.Info.Properties.ShortName.LocalizedName, _obj.ShortName));
            }

            // Проверка циклических ссылок в подпроектах.
            if (_obj.State.Properties.LeadingProject.IsChanged && _obj.LeadingProject != null)
            {
                var leadingProject = _obj.LeadingProject;

                while (leadingProject != null)
                {
                    if (Equals(leadingProject, _obj))
                    {
                        e.AddError(_obj.Info.Properties.LeadingProject, Projects.Resources.LeadingProjectCyclicReference, _obj.Info.Properties.LeadingProject);
                        break;
                    }

                    leadingProject = leadingProject.LeadingProject;
                }
            }

            if (!e.Params.Contains(Sungero.Projects.Constants.Module.DontUpdateModified))
            {
                _obj.Modified = Calendar.Now;
            }
        }
Ejemplo n.º 14
0
        public override void BeforeSave(Sungero.Domain.BeforeSaveEventArgs e)
        {
            Functions.Employee.UpdateName(_obj, _obj.Person);

            if (string.IsNullOrEmpty(_obj.Name))
            {
                _obj.Name = " ";
            }

            if (!Functions.Employee.IsValidEmail(_obj.Email))
            {
                e.AddWarning(_obj.Info.Properties.Email, Parties.Resources.WrongEmailFormat);
            }
            else if (!Docflow.PublicFunctions.Module.IsASCII(_obj.Email))
            {
                e.AddWarning(_obj.Info.Properties.Email, Docflow.Resources.ASCIIWarning);
            }

            var oldDepartment = _obj.State.Properties.Department.OriginalValue;
            var newDepartment = _obj.Department;

            if (!Equals(oldDepartment, newDepartment))
            {
                if (newDepartment != null)
                {
                    var newDepartmentLockInfo = Locks.GetLockInfo(newDepartment);
                    if (newDepartmentLockInfo.IsLockedByOther)
                    {
                        e.AddError(Employees.Resources.DeparmentLockedByUserFormat(newDepartment.Name, newDepartmentLockInfo.OwnerName));
                    }
                }

                if (oldDepartment != null)
                {
                    var oldDepartmentLockInfo = Locks.GetLockInfo(oldDepartment);
                    if (oldDepartmentLockInfo.IsLockedByOther)
                    {
                        e.AddError(Employees.Resources.DeparmentLockedByUserFormat(oldDepartment.Name, oldDepartmentLockInfo.OwnerName));
                    }
                }
            }
        }
Ejemplo n.º 15
0
        public override void BeforeSave(Sungero.Domain.BeforeSaveEventArgs e)
        {
            if (_obj.ValidFrom > _obj.ValidTill)
            {
                e.AddError(_obj.Info.Properties.ValidFrom, SignatureSettings.Resources.IncorrectValidDates, _obj.Info.Properties.ValidTill);
                e.AddError(_obj.Info.Properties.ValidTill, SignatureSettings.Resources.IncorrectValidDates, _obj.Info.Properties.ValidFrom);
            }

            if (_obj.Reason == Docflow.SignatureSetting.Reason.PowerOfAttorney)
            {
                if (!Docflow.PowerOfAttorneys.Is(_obj.Document))
                {
                    e.AddError(SignatureSettings.Info.Properties.Document, Docflow.SignatureSettings.Resources.IncorrectDocumentType);
                }
                else if (_obj.ValidTill > Docflow.PowerOfAttorneys.As(_obj.Document).ValidTill)
                {
                    e.AddError(Docflow.SignatureSettings.Resources.IncorrectValidTill);
                }
            }
        }
Ejemplo n.º 16
0
        public override void BeforeSave(Sungero.Domain.BeforeSaveEventArgs e)
        {
            var result = Functions.Currency.ValidateNumericCode(_obj.NumericCode);

            if (!string.IsNullOrEmpty(result))
            {
                e.AddError(result);
            }

            if (Functions.Currency.HaveDuplicates(_obj))
            {
                e.AddError(Sungero.Commons.Resources.DuplicateDetected, _obj.Info.Actions.ShowDuplicates);
            }

            // Нельзя закрывать валюту по умолчанию.
            if (_obj.Status == Status.Closed && _obj.IsDefault == true)
            {
                e.AddError(Currencies.Resources.ClosedCurrencyCannotBeDefault);
            }

            // Если установить для текущей валюты флаг валюты по умолчанию, то с другой валюты этот флаг снимается.
            if (_obj.IsDefault == true)
            {
                var defaultCurrency = Functions.Currency.GetDefaultCurrency();
                if (defaultCurrency != null && defaultCurrency != _obj)
                {
                    var lockInfo = Locks.GetLockInfo(defaultCurrency);
                    if (lockInfo != null && lockInfo.IsLocked)
                    {
                        var error = Commons.Resources.LinkedEntityLockedFormat(
                            defaultCurrency.Name,
                            defaultCurrency.Id,
                            lockInfo.OwnerName);
                        e.AddError(error);
                    }

                    defaultCurrency.IsDefault = false;
                }
            }
        }
Ejemplo n.º 17
0
        public override void BeforeSave(Sungero.Domain.BeforeSaveEventArgs e)
        {
            _obj.Name = _obj.Name.Trim();
            if (string.IsNullOrWhiteSpace(_obj.Name))
            {
                e.AddError(_obj.Info.Properties.Name, Commons.Resources.RequiredPropertiesNotFilledIn);
            }

            var duplicates = Functions.JobTitle.GetDuplicates(_obj);

            if (duplicates.Any())
            {
                e.AddError(JobTitles.Resources.JobTitleNameAlreadyExists, _obj.Info.Actions.ShowDuplicates);
            }

            var employees = Functions.JobTitle.GetEmployeesWithSameJobTitle(_obj);

            if (_obj.Department != null && employees.Any())
            {
                e.AddError(Sungero.Company.JobTitles.Resources.JobTitleAlreadyAssignedToEmployees, _obj.Info.Actions.ShowEmployeesWithSameJobTitle);
            }
        }
Ejemplo n.º 18
0
        public override void BeforeSave(Sungero.Domain.BeforeSaveEventArgs e)
        {
            // Проверить неизменность ведущего документа, если нет прав на его изменение.
            var contractIsChanged = _obj.LeadingDocument != _obj.State.Properties.LeadingDocument.OriginalValue;

            if (contractIsChanged)
            {
                var isContractDisabled = Sungero.Docflow.PublicFunctions.OfficialDocument.NeedDisableLeadingDocument(_obj);
                if (isContractDisabled)
                {
                    e.AddError(Sungero.Docflow.OfficialDocuments.Resources.RelationPropertyDisabled);
                }
            }

            if (_obj.ValidFrom > _obj.ValidTill)
            {
                e.AddError(_obj.Info.Properties.ValidFrom, SupAgreements.Resources.IncorrectValidDates, _obj.Info.Properties.ValidTill);
                e.AddError(_obj.Info.Properties.ValidTill, SupAgreements.Resources.IncorrectValidDates, _obj.Info.Properties.ValidFrom);
            }

            base.BeforeSave(e);

            if (_obj.LeadingDocument != null && _obj.LeadingDocument.AccessRights.CanRead() &&
                !_obj.Relations.GetRelatedFrom(Constants.Module.SupAgreementRelationName).Contains(_obj.LeadingDocument))
            {
                _obj.Relations.AddFromOrUpdate(Constants.Module.SupAgreementRelationName, _obj.State.Properties.LeadingDocument.OriginalValue, _obj.LeadingDocument);
            }

            if (Functions.SupAgreement.HaveDuplicates(_obj,
                                                      _obj.BusinessUnit,
                                                      _obj.RegistrationNumber,
                                                      _obj.RegistrationDate,
                                                      _obj.Counterparty,
                                                      _obj.LeadingDocument))
            {
                e.AddWarning(ContractualDocuments.Resources.DuplicatesDetected, _obj.Info.Actions.ShowDuplicates);
            }
        }
        public override void BeforeSave(Sungero.Domain.BeforeSaveEventArgs e)
        {
            base.BeforeSave(e);

            if (_obj.IsManyAddressees == true && !_obj.Addressees.Any())
            {
                e.AddError(_obj.Info.Properties.Addressees, OutgoingDocumentBases.Resources.NeedFillAddressee);
            }

            if (_obj.InResponseTo != null && _obj.InResponseTo.AccessRights.CanRead() && !_obj.Relations.GetRelatedFrom(Constants.Module.ResponseRelationName).Contains(_obj.InResponseTo))
            {
                _obj.Relations.AddFromOrUpdate(Constants.Module.ResponseRelationName, _obj.State.Properties.InResponseTo.OriginalValue, _obj.InResponseTo);
            }
        }
Ejemplo n.º 20
0
        public override void BeforeSave(Sungero.Domain.BeforeSaveEventArgs e)
        {
            base.BeforeSave(e);

            if (Functions.ContractBase.HaveDuplicates(_obj,
                                                      _obj.BusinessUnit,
                                                      _obj.RegistrationNumber,
                                                      _obj.RegistrationDate,
                                                      _obj.Counterparty))
            {
                e.AddWarning(ContractualDocuments.Resources.DuplicatesDetected, _obj.Info.Actions.ShowDuplicates);
            }

            if (_obj.DaysToFinishWorks < 0)
            {
                e.AddError(_obj.Info.Properties.DaysToFinishWorks, ContractBases.Resources.IncorrectReminder);
            }

            if (_obj.ValidFrom > _obj.ValidTill)
            {
                e.AddError(_obj.Info.Properties.ValidFrom, ContractBases.Resources.IncorrectValidDates, _obj.Info.Properties.ValidTill);
                e.AddError(_obj.Info.Properties.ValidTill, ContractBases.Resources.IncorrectValidDates, _obj.Info.Properties.ValidFrom);
            }
        }
Ejemplo n.º 21
0
        public override void BeforeSave(Sungero.Domain.BeforeSaveEventArgs e)
        {
            // Проверить валидность кода.
            var result = Functions.Country.ValidateCountryCode(_obj.Code);

            if (!string.IsNullOrEmpty(result))
            {
                e.AddError(Countries.Resources.InvalidCountryCode);
            }

            if (Functions.Country.HaveDuplicates(_obj))
            {
                e.AddWarning(Sungero.Commons.Resources.DuplicateDetected, _obj.Info.Actions.ShowDuplicates);
            }
        }
Ejemplo n.º 22
0
 public override void BeforeSave(Sungero.Domain.BeforeSaveEventArgs e)
 {
   base.BeforeSave(e);
   
   // При изменении сотрудника в "Кому выдана" проверить наличие действующих прав подписи.
   if (!Equals(_obj.IssuedTo, _obj.State.Properties.IssuedTo.OriginalValue))
   {
     var signSettings = Functions.PowerOfAttorney.GetActiveSignatureSettingsByPOA(_obj);
     if (signSettings.Any())
       e.AddError(PowerOfAttorneys.Resources.AlreadyExistSignatureSetting, _obj.Info.Actions.FindActiveSignatureSetting);
   }
   
   // Выдать права на документ сотруднику, указанному в поле "Кому выдана".
   _obj.AccessRights.Grant(_obj.IssuedTo, DefaultAccessRightsTypes.Read);
 }
Ejemplo n.º 23
0
        public override void BeforeSave(Sungero.Domain.BeforeSaveEventArgs e)
        {
            if (Equals(_obj.Status, Status.Closed))
            {
                return;
            }

            if (!_obj.DocumentKinds.Any() &&
                !_obj.BusinessUnits.Any() &&
                !_obj.Departments.Any() &&
                !_obj.DocumentGroups.Any())
            {
                e.AddError(AccessRightsRules.Resources.RuleMustHaveCriteria);
            }
        }
Ejemplo n.º 24
0
        public override void BeforeSave(Sungero.Domain.BeforeSaveEventArgs e)
        {
            if (_obj.State.Properties.ConditionType.IsChanged && Functions.ConditionBase.HasRules(_obj))
            {
                e.AddError(ConditionBases.Resources.ConditionHasRules);
            }

            var conditionName = Functions.ConditionBase.GetConditionName(_obj);

            _obj.Name = Functions.Module.TrimSpecialSymbols(conditionName);

            if (_obj.Name.Length >= 250)
            {
                _obj.Name = _obj.Name.Remove(250);
            }
        }
Ejemplo n.º 25
0
        public override void BeforeSave(Sungero.Domain.BeforeSaveEventArgs e)
        {
            if (!string.IsNullOrEmpty(_obj.PSRN))
            {
                var newPsrn = _obj.PSRN.Trim();
                if (!_obj.PSRN.Equals(newPsrn, StringComparison.InvariantCultureIgnoreCase))
                {
                    _obj.PSRN = newPsrn;
                }
            }

            if (!string.IsNullOrEmpty(_obj.TRRC))
            {
                var newTrrc = _obj.TRRC.Trim();
                if (!_obj.TRRC.Equals(newTrrc, StringComparison.InvariantCultureIgnoreCase))
                {
                    _obj.TRRC = newTrrc;
                }
            }

            #region Проверить циклические ссылки в подчиненных организациях

            if (_obj.State.Properties.HeadCompany.IsChanged && _obj.HeadCompany != null)
            {
                var headCompany = _obj.HeadCompany;

                while (headCompany != null)
                {
                    if (Equals(headCompany, _obj))
                    {
                        e.AddError(_obj.Info.Properties.HeadCompany, CompanyBases.Resources.HeadCompanyCyclicReference, _obj.Info.Properties.HeadCompany);
                        break;
                    }

                    headCompany = headCompany.HeadCompany;
                }
            }

            #endregion

            base.BeforeSave(e);
        }
Ejemplo n.º 26
0
        public override void BeforeSave(Sungero.Domain.BeforeSaveEventArgs e)
        {
            var leadingDocumentChanged = _obj.LeadingDocument != _obj.State.Properties.LeadingDocument.OriginalValue;

            if (leadingDocumentChanged)
            {
                // Проверить, доступен ли для изменения ведущий документ.
                var isLeadingDocumentDisabled = Sungero.Docflow.PublicFunctions.OfficialDocument.NeedDisableLeadingDocument(_obj);
                if (isLeadingDocumentDisabled)
                {
                    e.AddError(Sungero.Docflow.OfficialDocuments.Resources.RelationPropertyDisabled);
                }
                e.Params.AddOrUpdate(Constants.OfficialDocument.GrantAccessRightsToProjectDocument, true);
            }

            base.BeforeSave(e);

            if (_obj.LeadingDocument != null && _obj.LeadingDocument.AccessRights.CanRead() &&
                !_obj.Relations.GetRelatedFrom(Constants.Module.AddendumRelationName).Contains(_obj.LeadingDocument))
            {
                _obj.Relations.AddFromOrUpdate(Constants.Module.AddendumRelationName, _obj.State.Properties.LeadingDocument.OriginalValue, _obj.LeadingDocument);
            }
        }
        public override void BeforeSave(Sungero.Domain.BeforeSaveEventArgs e)
        {
            var isSafeFromUI = e.Params.Contains(Constants.SmartProcessingSetting.SaveFromUIParamName);

            if (!isSafeFromUI)
            {
                return;
            }

            // "Жёсткая" проверка адреса сервиса Ario.
            var arioUrlValidationMessage        = Functions.SmartProcessingSetting.ValidateArioUrl(_obj);
            var isArioUrlValidationMessageError = arioUrlValidationMessage != null && arioUrlValidationMessage.Type == MessageTypes.Error;

            if (isArioUrlValidationMessageError)
            {
                e.AddError(_obj.Info.Properties.ArioUrl, arioUrlValidationMessage.Text);
            }

            // "Жёсткая" проверка корректности логина и пароля.
            var loginResult = Functions.SmartProcessingSetting.Login(_obj, _obj.Password, true);
            var isLoginValidationMessageError = !string.IsNullOrEmpty(loginResult.Error);

            if (isLoginValidationMessageError)
            {
                e.AddError(loginResult.Error);
            }

            // "Жёсткая" проверка границ доверия.
            var confidenceLimitsValidationMessage        = Functions.SmartProcessingSetting.ValidateConfidenceLimits(_obj);
            var isConfidenceLimitsValidationMessageError = confidenceLimitsValidationMessage != null && confidenceLimitsValidationMessage.Type == MessageTypes.Error;

            if (isConfidenceLimitsValidationMessageError)
            {
                e.AddError(_obj.Info.Properties.LowerConfidenceLimit, confidenceLimitsValidationMessage.Text, _obj.Info.Properties.UpperConfidenceLimit);
                e.AddError(_obj.Info.Properties.UpperConfidenceLimit, confidenceLimitsValidationMessage.Text, _obj.Info.Properties.LowerConfidenceLimit);
            }

            // "Жёсткая" проверка источников поступления.
            var notUniqueNameSources        = Functions.SmartProcessingSetting.GetNotUniqueNameSources(_obj);
            var isNotUniqueNameSourcesError = notUniqueNameSources != null;

            if (isNotUniqueNameSourcesError)
            {
                foreach (var source in notUniqueNameSources)
                {
                    e.AddError(source, source.Info.Properties.SenderLineName, SmartProcessingSettings.Resources.NotUniqueSenderLineNames);
                }
            }

            // При наличии "Жёстких" ошибок не переходить к ForceSave.
            if (isArioUrlValidationMessageError || isLoginValidationMessageError ||
                isConfidenceLimitsValidationMessageError || isNotUniqueNameSourcesError)
            {
                return;
            }

            var isForceSave = e.Params.Contains(Constants.SmartProcessingSetting.ForceSaveParamName);

            if (!isForceSave)
            {
                // "Мягкая" проверка адреса сервиса Ario.
                if (arioUrlValidationMessage != null && arioUrlValidationMessage.Type == MessageTypes.SoftError)
                {
                    e.AddError(arioUrlValidationMessage.Text, _obj.Info.Actions.ForceSave);
                    return;
                }

                // "Мягкая" проверка классификаторов.
                var classifierValidationMessage = Functions.SmartProcessingSetting.ValidateClassifiers(_obj);
                if (classifierValidationMessage != null)
                {
                    e.AddError(classifierValidationMessage.Text, _obj.Info.Actions.ForceSave);
                }
            }
        }
Ejemplo n.º 28
0
        public override void BeforeSave(Sungero.Domain.BeforeSaveEventArgs e)
        {
            if (!string.IsNullOrEmpty(_obj.TRRC))
            {
                _obj.TRRC = _obj.TRRC.Trim();
            }

            if (!string.IsNullOrEmpty(_obj.TIN))
            {
                _obj.TIN = _obj.TIN.Trim();
            }

            if (!string.IsNullOrEmpty(_obj.PSRN))
            {
                _obj.PSRN = _obj.PSRN.Trim();
            }

            // Проверить код на пробелы, если свойство изменено.
            if (!string.IsNullOrEmpty(_obj.Code))
            {
                // При изменении кода e.AddError сбрасывается.
                var codeIsChanged = _obj.State.Properties.Code.IsChanged;
                _obj.Code = _obj.Code.Trim();

                if (codeIsChanged && Regex.IsMatch(_obj.Code, @"\s"))
                {
                    e.AddError(_obj.Info.Properties.Code, Company.Resources.NoSpacesInCode);
                }
            }

            #region Проверить корректность ИНН и дубли

            var checkTinErrorText = Parties.PublicFunctions.Counterparty.CheckTin(_obj.TIN, true);
            if (!string.IsNullOrEmpty(checkTinErrorText))
            {
                e.AddError(_obj.Info.Properties.TIN, checkTinErrorText);
            }

            var checkDuplicatesErrorText = Functions.BusinessUnit.GetCounterpartyDuplicatesErrorText(_obj);
            if (!string.IsNullOrEmpty(checkDuplicatesErrorText))
            {
                e.AddWarning(checkDuplicatesErrorText, _obj.Info.Actions.ShowDuplicates);
            }

            #endregion

            #region Проверить циклические ссылки в подчиненных НОР

            if (_obj.State.Properties.HeadCompany.IsChanged && _obj.HeadCompany != null)
            {
                var headCompany = _obj.HeadCompany;

                while (headCompany != null)
                {
                    if (Equals(headCompany, _obj))
                    {
                        e.AddError(_obj.Info.Properties.HeadCompany, BusinessUnits.Resources.HeadCompanyCyclicReference, _obj.Info.Properties.HeadCompany);
                        break;
                    }

                    headCompany = headCompany.HeadCompany;
                }
            }

            #endregion
        }
Ejemplo n.º 29
0
        public override void BeforeSave(Sungero.Domain.BeforeSaveEventArgs e)
        {
            var hasDocuments = Functions.DocumentRegister.HasRegisteredDocuments(_obj);
            var isUsed       = hasDocuments || Functions.RegistrationSetting.GetByDocumentRegister(_obj).Any();

            if (isUsed && _obj.State.Properties.RegistrationGroup.IsChanged)
            {
                e.AddError(DocumentRegisters.Resources.NoRightToChangePropertyFormat(_obj.Info.Properties.RegistrationGroup.LocalizedName));
            }
            if (isUsed && _obj.State.Properties.RegisterType.IsChanged)
            {
                e.AddError(DocumentRegisters.Resources.NoRightToChangePropertyFormat(_obj.Info.Properties.RegisterType.LocalizedName));
            }
            if (isUsed && _obj.State.Properties.DocumentFlow.IsChanged)
            {
                e.AddError(DocumentRegisters.Resources.NoRightToChangePropertyFormat(_obj.Info.Properties.DocumentFlow.LocalizedName));
            }
            if (hasDocuments && (_obj.State.Properties.NumberingPeriod.IsChanged || _obj.State.Properties.NumberingSection.IsChanged))
            {
                e.AddError(DocumentRegisters.Resources.NoRightToChangePropertyFormat(_obj.Info.Properties.NumberingSection.LocalizedName));
            }

            if (_obj.RegistrationGroup != null &&
                !Recipients.AllRecipientIds.Contains(_obj.RegistrationGroup.Id) &&
                !Recipients.OwnRecipientIds.Contains(Roles.Administrators.Id))
            {
                e.AddError(DocumentRegisters.Resources.NoRightToChange);
                return;
            }

            // Проверить наличие пробелов в номере.
            if (_obj.NumberFormatItems.Any(x => x.Separator != null && Regex.IsMatch(x.Separator, @"\s")))
            {
                e.AddError(DocumentRegisters.Resources.NoSpaces);
                return;
            }

            var format = _obj.NumberFormatItems;

            // Проверить наличие порядкового номера в формате номера.
            var numberElements = format.Where(f => f.Element == DocumentRegisterNumberFormatItems.Element.Number);

            if (!numberElements.Any())
            {
                e.AddError(DocumentRegisters.Resources.NoNumberInNumberFormat);
            }
            else if (numberElements.Count() > 1)
            {
                e.AddError(DocumentRegisters.Resources.InNumbersFormatShouldBeNotMoreOneNumbers);
            }

            // Проверить уникальность номера элемента в формате номера.
            if (format.Any(f => format.Any(d => d.Element == f.Element && d.Number != f.Number)))
            {
                e.AddError(DocumentRegisters.Resources.FormatElementNumbersIsNotUnique);
            }

            if (format.Any(f => format.Any(d => d.Number == f.Number && d.Id != f.Id)))
            {
                e.AddError(DocumentRegisters.Resources.NotUniqueNumber);
            }

            // Проверить наличие и положение начала строки в формате номера.
            var beginningOfLine = format.Where(f => f.Element == DocumentRegisterNumberFormatItems.Element.BegginingOfLine).FirstOrDefault();

            if (beginningOfLine != null &&
                format.OrderBy(f => f.Number).Select(f => f.Number).FirstOrDefault() != beginningOfLine.Number)
            {
                e.AddError(DocumentRegisters.Resources.BegginingOfLineError);
            }

            // Если в формате номера есть индекс группы регистрации, то проверять, что журнал регистрации заполнен.
            if (_obj.NumberFormatItems.Select(x => x.Element).Contains(Docflow.DocumentRegisterNumberFormatItems.Element.RegistrPlace) && _obj.RegistrationGroup == null)
            {
                e.AddError(DocumentRegisters.Resources.ForDocumentNumberMustBeAttendRegisterGroup);
            }

            _obj.DisplayName = string.Format("{0}. {1}", _obj.Index, _obj.Name);
        }
Ejemplo n.º 30
0
        public override void BeforeSave(Sungero.Domain.BeforeSaveEventArgs e)
        {
            if (!string.IsNullOrWhiteSpace(_obj.Code))
            {
                _obj.Code = _obj.Code.Trim();
                if (Regex.IsMatch(_obj.Code, @"\s"))
                {
                    e.AddError(_obj.Info.Properties.Code, Sungero.Company.Resources.NoSpacesInCode);
                }
            }

            // Проверить код на пробелы, если свойство изменено.
            if (!string.IsNullOrEmpty(_obj.Code))
            {
                // При изменении кода e.AddError сбрасывается.
                var codeIsChanged = _obj.State.Properties.Code.IsChanged;
                _obj.Code = _obj.Code.Trim();

                if (codeIsChanged && Regex.IsMatch(_obj.Code, @"\s"))
                {
                    e.AddError(_obj.Info.Properties.Code, Sungero.Company.Resources.NoSpacesInCode);
                }
            }

            if (!_obj.AccessRights.CanChangeCard())
            {
                var exchangeBoxesProp = _obj.State.Properties.ExchangeBoxes;
                var canExchangeProp   = _obj.State.Properties.CanExchange;

                if (_obj.State.Properties
                    .Where(x => !Equals(x, exchangeBoxesProp) && !Equals(x, canExchangeProp))
                    .Select(x => x as Sungero.Domain.Shared.IPropertyState)
                    .Where(x => x != null)
                    .Any(x => x.IsChanged))
                {
                    e.AddError(Counterparties.Resources.NoRightsToChangeCard);
                }
            }

            if (!string.IsNullOrEmpty(_obj.TIN))
            {
                _obj.TIN = _obj.TIN.Trim();
            }

            // Проверка корректности ИНН.
            var tin = _obj.TIN;

            if (_obj.Nonresident != true)
            {
                var result = Functions.Counterparty.CheckTin(_obj, tin);
                if (!string.IsNullOrEmpty(result))
                {
                    e.AddError(_obj.Info.Properties.TIN, result);
                }
            }

            // Проверка дублей контрагента.
            var saveFromUI           = e.Params.Contains(Counterparties.Resources.ParameterSaveFromUIFormat(_obj.Id));
            var isForceDuplicateSave = e.Params.Contains(Counterparties.Resources.ParameterIsForceDuplicateSaveFormat(_obj.Id));

            if (saveFromUI && !isForceDuplicateSave)
            {
                var checkDuplicatesErrorText = Functions.Counterparty.GetCounterpartyDuplicatesErrorText(_obj);
                if (!string.IsNullOrWhiteSpace(checkDuplicatesErrorText))
                {
                    e.AddError(checkDuplicatesErrorText, _obj.Info.Actions.ShowDuplicates, _obj.Info.Actions.ForceDuplicateSave);
                }
            }

            // Проверка ящиков эл. обмена.
            foreach (var box in _obj.ExchangeBoxes.Select(x => x.Box).Distinct())
            {
                var boxLines = _obj.ExchangeBoxes.Where(x => Equals(x.Box, box)).ToList();
                if (boxLines.All(x => x.IsDefault == false))
                {
                    foreach (var boxLine in boxLines)
                    {
                        e.AddError(boxLine, _obj.Info.Properties.ExchangeBoxes.Properties.IsDefault,
                                   Counterparties.Resources.NoDefaultBoxServiceFormat(boxLine.Box),
                                   _obj.Info.Properties.ExchangeBoxes.Properties.IsDefault);
                    }
                }
            }
        }