using Autofac; using FluentValidation; using GreenTree.Nachtragsmanagement.Core; using GreenTree.Nachtragsmanagement.Services.Appendix; using GreenTree.Nachtragsmanagement.Services.Deviation; using GreenTree.Nachtragsmanagement.Services.Site; using GreenTree.Nachtragsmanagement.Web.Models.Deviation; using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace GreenTree.Nachtragsmanagement.Web.Validation.Deviation { public class DeviationDataModelValidator : AbstractValidator { public DeviationDataModelValidator() { var siteService = Singleton.Instance.Resolve(); var appendixService = Singleton.Instance.Resolve(); RuleFor(m => m.CustomNumber) .NotEmpty() .WithMessage("Nummer wird benötigt") .MaximumLength(10) .WithMessage("Muss unter 10 Zeichen sein"); RuleFor(m => m) .Must(d1 => (d1.SiteId.HasValue && !siteService.GetSiteById(d1.SiteId.Value).Appendices .SelectMany(d2 => d2.Deviations) .Select(d3 => d3.CustomNumber) .Contains(d1.CustomNumber)) || (d1.AppendixId.HasValue && !appendixService.GetAppendixById(d1.AppendixId.Value).Site.Appendices .SelectMany(d2 => d2.Deviations) .Select(d3 => d3.CustomNumber) .Contains(d1.CustomNumber))) .WithMessage("VA-Nummer in Baustelle bereits vorhanden."); RuleFor(m => m.Description) .NotEmpty() .WithMessage("Beschreibung wird benötigt"); RuleFor(m => m.ReceiptDate) .NotEmpty() .WithMessage("Einreichdatum wird benötigt"); RuleFor(m => m.StatusId) .NotEmpty() .WithMessage("Ein Status muss gewählt werden"); RuleFor(m => m.KindId) .NotEmpty() .WithMessage("Eine Art muss gewählt werden"); } } }