private bool IsValidJahr(IErfassungsPeriodService erfassungsPeriodService, int?jahr)
        {
            if (!jahr.HasValue)
            {
                return(true);
            }

            oldestClosedErfassungsperiod = erfassungsPeriodService.GetOldestClosedErfassungsperiod();
            if (oldestClosedErfassungsperiod == null)
            {
                return(false);
            }

            return(jahr < oldestClosedErfassungsperiod.Erfassungsjahr.Year);
        }
        public KenngroessenFruehererJahreModelValidator(
            ILocalizationService localizationService,
            IErfassungsPeriodService erfassungsPeriodService,
            IKenngroessenFruehererJahreService kenngroessenFruehererJahreService
            )
            : base(localizationService)
        {
            RuleFor(m => m.Jahr).NotNull()
            .ShouldNotBeNegative(LocalizationService)
            .InclusiveBetween(1000, 9999)
            .Must(jahr => IsValidJahr(erfassungsPeriodService, jahr))
            .WithMessage(localizationService.GetLocalizedError(ValidationError.InvalidKenngroessenFuehererJahre),
                         k => erfassungsPeriodService.GetOldestClosedErfassungsperiod() == null ? "" : oldestClosedErfassungsperiod.Erfassungsjahr.Year.ToString())
            .Must((m, jahr) => kenngroessenFruehererJahreService.IsJahrUnique(m))
            .WithMessage(localizationService.GetLocalizedError(ValidationError.ShouldBeUnique));

            RuleForNullableDecimal(m => m.KostenFuerWerterhaltung).NotEmpty();
            RuleFor(m => m.KenngroesseFruehereJahrDetailModels)
            .SetCollectionValidator(new KenngroessenFruehererJahreDetailModelValidator(localizationService));
        }