예제 #1
0
        protected override DetailedValidationResult ValidateDto(UserDto dto)
        {
            var lang = _userProvider.GetCurrentUser()?.Language;

            DetailedValidationResult result = base.ValidateDto(dto);

            if (string.IsNullOrEmpty(dto.Id) && string.IsNullOrEmpty(dto.Password))
            {
                result.AddError(nameof(dto.Password), "User.Password.ValueIsRequired".Translate(lang),
                                ValidationErrorType.ValueIsRequired);
            }

            var hasDuplicates = this._dataService.GetDbSet <User>()
                                .Where(i => i.Id != dto.Id.ToGuid())
                                .Where(i => i.Email == dto.Email)
                                .Any();

            if (hasDuplicates)
            {
                result.AddError(nameof(dto.Email), "User.DuplicatedRecord".Translate(lang),
                                ValidationErrorType.DuplicatedRecord);
            }

            return(result);
        }
        public IEnumerable <ValidatedRecord <TDto> > LoadEntries(ExcelWorksheet worksheet)
        {
            var rows = worksheet.Cells
                       .Select(cell => cell.Start.Row)
                       .Distinct()
                       .OrderBy(x => x);

            if (!rows.Any())
            {
                yield break;
            }

            int           headRowIndex = rows.First();
            int           maxColumnInd = worksheet.Cells.Select(c => c.End.Column).Max();
            List <string> columnTitles = new List <string>();

            for (int colIndex = 1; colIndex <= maxColumnInd; colIndex++)
            {
                columnTitles.Add(worksheet.Cells[headRowIndex, colIndex]?.Value?.ToString());
            }

            columnTitles = Unlocalize(columnTitles, _columns.Values.Select(x => x.Field)).ToList();

            FillColumnOrder(columnTitles);

            foreach (int rowIndex in rows.Skip(1))
            {
                bool isEmpty = IsEmptyRow(worksheet, rowIndex);
                if (isEmpty)
                {
                    continue;
                }

                var entity           = new TDto();
                var validationResult = new DetailedValidationResult();

                foreach (var column in _columns.Values)
                {
                    try
                    {
                        var cell         = worksheet.Cells[rowIndex, column.ColumnIndex];
                        var columnResult = column.SetValue(entity, cell);

                        if (columnResult != null)
                        {
                            validationResult.AddError(_columns.Keys.ElementAt(column.ColumnIndex), columnResult.Message, columnResult.ResultType);
                        }
                    }
                    catch (Exception ex)
                    {
                        validationResult.AddError("exception", $"Строка {rowIndex}: {ex.Message}.", ValidationErrorType.Exception);
                    }
                }
                ;

                _errors.Add(validationResult);

                yield return(new ValidatedRecord <TDto>(entity, validationResult));
            }
        }
예제 #3
0
        /// <summary>
        /// Validate Dto
        /// </summary>
        /// <typeparam name="TDto"></typeparam>
        /// <param name="dto"></param>
        /// <returns></returns>
        public DetailedValidationResult Validate <TDto>(TDto dto)
        {
            var prefix = typeof(TDto).Name.Replace("Dto", "");

            var fields = this._fieldDispatcher.GetDtoFields <TDto>();

            var lang = _userProvider.GetCurrentUser()?.Language;

            var validationResult = new DetailedValidationResult();

            foreach (var field in fields)
            {
                var property            = typeof(TDto).GetProperty(field.Name);
                var value               = property.GetValue(dto)?.ToString();
                var propertyName        = property.Name.ToLowerFirstLetter();
                var propertyDisplayName = propertyName.Translate(lang);

                // Validate format

                if (!ValidatePropertyFormat(field, value))
                {
                    validationResult.AddError(new ValidationResultItem
                    {
                        Name       = propertyName,
                        Message    = "InvalidValueFormat".Translate(lang, propertyDisplayName),
                        ResultType = ValidationErrorType.InvalidValueFormat
                    });
                }

                // Validate IsRequred

                if (!this.ValidateIsRequired(field, value))
                {
                    validationResult.AddError(new ValidationResultItem
                    {
                        Name       = propertyName,
                        Message    = "ValueIsRequired".Translate(lang, propertyDisplayName),
                        ResultType = ValidationErrorType.ValueIsRequired
                    });
                }

                if (field.FieldType == FieldType.Password)
                {
                    var result = ValidatePassword(field, value, prefix, lang);

                    if (result != null)
                    {
                        validationResult.AddError(result);
                    }
                }
            }

            return(validationResult);
        }
        protected override DetailedValidationResult ValidateDto(TonnageDto dto)
        {
            var lang = _userProvider.GetCurrentUser()?.Language;

            DetailedValidationResult result = base.ValidateDto(dto);

            var hasDuplicates = !result.IsError && _dataService.GetDbSet <Tonnage>()
                                .Any(x => x.Name == dto.Name && x.Id.ToString() != dto.Id);

            if (hasDuplicates)
            {
                result.AddError(nameof(dto.Name), "Tonnage.DuplicatedRecord".Translate(lang), ValidationErrorType.DuplicatedRecord);
            }

            return(result);
        }
        protected override DetailedValidationResult ValidateDto(TransportCompanyDto dto)
        {
            var lang = _userProvider.GetCurrentUser()?.Language;

            DetailedValidationResult result = base.ValidateDto(dto);

            var hasDuplicates = _dataService.GetDbSet <TransportCompany>()
                                .Where(x => !string.IsNullOrEmpty(dto.Title) && x.Title.ToLower() == dto.Title.ToLower())
                                .Any(x => x.Id.ToString() != dto.Id);

            if (hasDuplicates)
            {
                result.AddError(nameof(dto.Title), "TransportCompany.DuplicatedRecord".Translate(lang),
                                ValidationErrorType.DuplicatedRecord);
            }

            return(result);
        }
예제 #6
0
        protected override DetailedValidationResult ValidateDto(RoleDto dto)
        {
            var lang = _userProvider.GetCurrentUser()?.Language;

            DetailedValidationResult result = base.ValidateDto(dto);

            var hasDuplicates = !result.IsError && this._dataService.GetDbSet <Role>()
                                .Where(i => i.Id != dto.Id.ToGuid())
                                .Where(i => i.Name == dto.Name)
                                .Any();

            if (hasDuplicates)
            {
                result.AddError(nameof(dto.Name), "Role.DuplicatedRecord".Translate(lang),
                                ValidationErrorType.DuplicatedRecord);
            }

            return(result);
        }
예제 #7
0
        public IEnumerable <ValidatedRecord <TFormDto> > LoadEntries(ExcelWorksheet worksheet)
        {
            var rows = worksheet.Cells
                       .Select(cell => cell.Start.Row)
                       .Distinct()
                       .OrderBy(x => x);

            if (!rows.Any())
            {
                yield break;
            }

            int headRowIndex = rows.First();

            int maxColumnInd = worksheet.Cells.Select(c => c.End.Column).Max();

            List <string> columnTitles = new List <string>();

            for (int colIndex = 1; colIndex <= maxColumnInd; colIndex++)
            {
                columnTitles.Add(worksheet.Cells[headRowIndex, colIndex]?.Value?.ToString());
            }

            var formType           = typeof(TDto).Name;
            var formTypeTranslates = _translations.Where(t => t.Name == formType).Select(_ => _.Ru);

            formTypeTranslates =
                formTypeTranslates.Concat(_translations.Where(t => t.Name == formType).Select(_ => _.En));

            var columnFormTitles = columnTitles.Where(x => formTypeTranslates.Any(t => x.Contains(_delimeter + t)))
                                   .Select(_ => _.Split(_delimeter).FirstOrDefault());

            columnFormTitles = Unlocalize(columnFormTitles, _columns.Values.Select(x => x.Field)).ToList();


            var formInnerType           = typeof(TInnerDto).Name;
            var formInnerTypeTranslates = _translations.Where(t => t.Name == formInnerType).Select(_ => _.Ru);

            formInnerTypeTranslates =
                formInnerTypeTranslates.Concat(_translations.Where(t => t.Name == formInnerType).Select(_ => _.En));

            var columnInnerTitles = columnTitles
                                    .Where(x => formInnerTypeTranslates.Any(t => x.Contains(_delimeter + t)))
                                    .Select(_ => _.Split(_delimeter).FirstOrDefault());

            columnInnerTitles = Unlocalize(columnInnerTitles, _columns.Values.Select(x => x.Field)).ToList();

            columnTitles = columnFormTitles.Select(c => formType.ToLower() + '_' + c)
                           .Concat(columnInnerTitles.Select(ci => formInnerType.ToLower() + '_' + ci)).ToList();

            FillColumnOrder(columnTitles);

            var formColumns = _columns.Where(_ => _.Value.Property.DeclaringType.Name != typeof(TInnerDto).Name)
                              .ToDictionary(_ => _.Key, _ => _.Value);

            var formInnerColumns = _columns.Where(_ => _.Value.Property.DeclaringType.Name == typeof(TInnerDto).Name)
                                   .ToDictionary(_ => _.Key, _ => _.Value);

            var entity = new TFormDto();

            var innerList = new List <TInnerDto>();

            var emptyFormRow = false;

            var validationResult = new DetailedValidationResult();

            foreach (int rowIndex in rows.Skip(1))
            {
                bool isEmpty = IsEmptyRow(worksheet, rowIndex, _columns);
                if (isEmpty)
                {
                    continue;
                }

                bool isEmptyForm = IsEmptyRow(worksheet, rowIndex, formColumns);

                if (!isEmptyForm && rowIndex != headRowIndex + 1)
                {
                    if (innerList.Any())
                    {
                        typeof(TFormDto).GetProperty(_innerFieldName).SetValue(entity, innerList);

                        innerList = new List <TInnerDto>();
                    }

                    yield return(new ValidatedRecord <TFormDto>(entity, validationResult));

                    entity = new TFormDto();

                    validationResult = new DetailedValidationResult();
                }

                bool isEmptyInnerForm = IsEmptyRow(worksheet, rowIndex, formInnerColumns);

                var innerEntity = new TInnerDto();

                var columnsToSeek = isEmptyForm ? formInnerColumns : _columns;

                foreach (var column in columnsToSeek.Values)
                {
                    try
                    {
                        var cell = worksheet.Cells[rowIndex, column.ColumnIndex];
                        ValidationResultItem columnResult;

                        if (column.Property.DeclaringType != typeof(TInnerDto))
                        {
                            columnResult = column.SetValue(entity, cell);
                        }
                        else if (!isEmptyInnerForm)
                        {
                            columnResult = column.SetValue(innerEntity, cell);
                        }
                        else
                        {
                            continue;
                        }

                        if (columnResult != null)
                        {
                            validationResult.AddError(_columns.Keys.ElementAt(column.ColumnIndex), columnResult.Message,
                                                      columnResult.ResultType);
                        }
                    }
                    catch (Exception ex)
                    {
                        validationResult.AddError("exception", $"Строка {rowIndex}: {ex.Message}.",
                                                  ValidationErrorType.Exception);
                    }
                }

                if (!isEmptyInnerForm)
                {
                    innerList.Add(innerEntity);
                }

                _errors.Add(validationResult);

                if (rowIndex == rows.Last())
                {
                    if (innerList.Any())
                    {
                        typeof(TFormDto).GetProperty(_innerFieldName).SetValue(entity, innerList);

                        innerList = new List <TInnerDto>();
                    }

                    yield return(new ValidatedRecord <TFormDto>(entity, validationResult));

                    entity = new TFormDto();
                }
            }
        }