public ActivityMedicalByStaffRoleTraineeValidator()
            : base()
        {
            //corert kann derzeit nicht mit AnonymousType umgehen. Vielleicht später:  new  { x.Activities, x.Staffs }
            this.RuleFor(x => new Tuple <IList <Activity>, IEnumerable <Staff> >(x.Activities, x.Staffs))
            .Custom((a, ctx) =>
            {
                var activities = a.Item1;
                var staffs     = a.Item2;


                var trainees = staffs.Where(x => x.Role == StaffRole.Trainee).Select(x => x.Id).ToArray();

                var medical = activities
                              .Where(IsMedical)
                              .Where(x => trainees.Contains(x.StaffId))
                              .ToArray();

                foreach (var entry in medical)
                {
                    var staff = staffs.Where(x => x.Id == entry.StaffId).First();

                    var msg = Validationmessages.TraineeMustNotContain06To10(staff);

                    var index = activities.IndexOf(entry);
                    ctx.AddFailure(new ValidationFailure($"{nameof(HkpvReport.Activities)}[{index}]", msg));
                }
            });
        }
        public PersonalDataBirthdayValidator()
        {
            this.CascadeMode = CascadeMode.StopOnFirstFailure;

            RuleFor(x => x.Birthday)
            .NotEmpty();

            RuleFor(x => x.Birthday)
            .SetValidator(new DateTimeValueValidator());

            RuleFor(x => x.BirthdayD)
            .LessThan(DateTime.Today)
            .Unless(x => string.IsNullOrEmpty(x.Birthday))
            .WithMessage(Validationmessages.BirthdayNotInFuture);

            RuleFor(x => x.BirthdayD)
            .GreaterThanOrEqualTo(new DateTime(1900, 01, 01))
            .Unless(x => string.IsNullOrEmpty(x.Birthday));

            RuleFor(x => x.BirthdayD)
            .Must(CheckDates)
            .Unless(x => string.IsNullOrEmpty(x.Birthday) || !SSNHelper.IsValid(x.Ssn))
            .WithSeverity(Severity.Warning)
            .WithMessage(x => Validationmessages.BirthdayNotInSsn(x));
        }
        public HkpvReportStaffIdValidator()
        {
            this.RuleFor(x => x.Staffs)
            .Custom((list, ctx) =>
            {
                foreach (var id in list.Select(x => x.Id).OrderBy(x => x).GroupBy(x => x).Where(x => x.Count() > 1))
                {
                    var item  = list.Where(x => x.Id == id.Key).First();
                    var index = list.IndexOf(item);
                    ctx.AddFailure(new ValidationFailure($"{nameof(HkpvReport.Staffs)}[{index}]", Validationmessages.IdIsNotUnique));
                }
            });

            //corert kann derzeit nicht mit AnonymousType umgehen. Vielleicht später: new { x.Staffs, x.Activities, x.Consultations }
            this.RuleFor(x => new Tuple <IList <Staff>, IEnumerable <Activity>, IEnumerable <Consultation> >(x.Staffs, x.Activities, x.Consultations))
            .Custom((a, ctx) =>
            {
                var staffs        = a.Item1;
                var activities    = a.Item2;
                var consultations = a.Item3;

                var idStaffs     = staffs.Select(x => x.Id).Distinct().ToArray();
                var idActivities = (
                    activities.Select(x => x.StaffId)
                    .Union(consultations.Select(x => x.StaffId))
                    ).Distinct().ToArray();

                foreach (var id in idStaffs.Except(idActivities))
                {
                    var item  = staffs.Where(x => x.Id == id).First();
                    var index = staffs.IndexOf(item);
                    ctx.AddFailure(new ValidationFailure($"{nameof(HkpvReport.Staffs)}[{index}]", Validationmessages.WithoutActivity));
                }

                foreach (var id in idActivities.Except(idStaffs))
                {
                    ctx.AddFailure(new ValidationFailure(nameof(HkpvReport.Staffs), Validationmessages.IdIsMissing(id)));
                }
            });
        }
        private Action <RepeatedField <Consultation>, CustomContext> GetCutomValidation(ConsultationType type1, ConsultationType type2)
        {
            return((list, ctx) =>
            {
                if (!list?.Any() ?? false)
                {
                    return;
                }

                var entries31 = list.Where(x => x.Type == type1)
                                .GroupBy(x => new DateStaffPerson {
                    Date = x.DateD, StaffId = x.StaffId
                })
                                .Select(x => x.Key)
                                .ToArray();

                var entries32 = list.Where(x => x.Type == type2)
                                .GroupBy(x => new DateStaffPerson {
                    Date = x.DateD, StaffId = x.StaffId
                })
                                .Select(x => x.Key)
                                .ToArray();

                var error1 = entries31.Except(entries32).ToArray();
                var error2 = entries32.Except(entries31).ToArray();

                foreach (var entry in error1)
                {
                    var item = list.Where(x => x.DateD == entry.Date && x.StaffId == entry.StaffId).First();
                    var index = list.IndexOf(item);
                    ctx.AddFailure(new ValidationFailure($"{nameof(HkpvReport.Consultations)}[{index}]", Validationmessages.WithoutEntry(type2.ToString())));
                }

                foreach (var entry in error2)
                {
                    var item = list.Where(x => x.DateD == entry.Date && x.StaffId == entry.StaffId).First();
                    var index = list.IndexOf(item);
                    ctx.AddFailure(new ValidationFailure($"{nameof(HkpvReport.Consultations)}[{index}]", Validationmessages.WithoutEntry(type1.ToString())));
                }
            });
        }
Example #5
0
        public PersonalDataSsnIsUniqueValidator()
        {
            RuleFor(x => x.PersonalData)
            .Custom((list, ctx) =>
            {
                var dublicates = list.Where(x => !string.IsNullOrEmpty(x.Ssn))
                                 .GroupBy(x => x.Ssn)
                                 .Where(x => x.Count() > 1);

                foreach (var entry in dublicates)
                {
                    ctx.AddFailure(new ValidationFailure(nameof(HkpvReport.PersonalData), Validationmessages.SsnNotUnique(entry)));
                }
            });
        }
Example #6
0
        public HkpvReportPersonIdValidator()
        {
            this.RuleFor(x => x.Persons)
            .Custom((list, ctx) =>
            {
                foreach (var id in list.Select(x => x.Id).OrderBy(x => x).GroupBy(x => x).Where(x => x.Count() > 1))
                {
                    var item  = list.Where(x => x.Id == id.Key).First();
                    var index = list.IndexOf(item);
                    ctx.AddFailure(new ValidationFailure($"{nameof(HkpvReport.Persons)}[{index}]", Validationmessages.IdIsNotUnique));
                }
            });

            this.RuleFor(x => x.PersonalData)
            .Custom((list, ctx) =>
            {
                foreach (var id in list.Select(x => x.Id).OrderBy(x => x).GroupBy(x => x).Where(x => x.Count() > 1))
                {
                    var item  = list.Where(x => x.Id == id.Key).First();
                    var index = list.IndexOf(item);
                    ctx.AddFailure(new ValidationFailure($"{nameof(HkpvReport.PersonalData)}[{index}]", Validationmessages.IdIsNotUnique));
                }
            });

            //corert kann derzeit nicht mit AnonymousType umgehen. Vielleicht später: new { x.Persons, x.PersonalData }
            this.RuleFor(x => new Tuple <IList <Person>, IList <PersonalData> >(x.Persons, x.PersonalData))
            .Custom((a, ctx) =>
            {
                var persons      = a.Item1;
                var personalData = a.Item2;

                var idPersons      = persons.Select(x => x.Id).Distinct().ToArray();
                var idPersonalData = personalData.Select(x => x.Id).Distinct().ToArray();

                foreach (var id in idPersons.Except(idPersonalData))
                {
                    var item  = persons.Where(x => x.Id == id).First();
                    var index = persons.IndexOf(item);
                    ctx.AddFailure(new ValidationFailure($"{nameof(HkpvReport.Persons)}[{index}]", Validationmessages.PersonWithoutPersonalDate));
                }

                foreach (var id in idPersonalData.Except(idPersons))
                {
                    var item  = personalData.Where(x => x.Id == id).First();
                    var index = personalData.IndexOf(item);
                    ctx.AddFailure(new ValidationFailure($"{nameof(HkpvReport.PersonalData)}[{index}]", Validationmessages.PersonWithoutData));
                }
            });

            //corert kann derzeit nicht mit AnonymousType umgehen. Vielleicht später: new { x.Persons, x.Activities }
            this.RuleFor(x => new Tuple <IList <Person>, IList <Activity> >(x.Persons, x.Activities))
            .Custom((a, ctx) =>
            {
                var persons    = a.Item1;
                var activities = a.Item2;

                var idPersons    = persons.Select(x => x.Id).Distinct().ToArray();
                var idActivities = activities.Select(x => x.PersonId).Distinct().ToArray();

                foreach (var id in idPersons.Except(idActivities))
                {
                    var item  = persons.Where(x => x.Id == id).First();
                    var index = persons.IndexOf(item);
                    ctx.AddFailure(new ValidationFailure($"{nameof(HkpvReport.Persons)}[{index}]", Validationmessages.WithoutActivity));
                }

                foreach (var id in idActivities.Except(idPersons))
                {
                    var item  = activities.Where(x => x.PersonId == id).First();
                    var index = activities.IndexOf(item);
                    ctx.AddFailure(new ValidationFailure($"{nameof(HkpvReport.Activities)}[{index}]", Validationmessages.IdIsMissing(id)));
                }
            });
        }
        public ActivityValidator123And15()
        {
            RuleFor(x => x.Activities)
            .Custom((list, ctx) =>
            {
                if (!list?.Any() ?? false)
                {
                    return;
                }

                var l = list
                        .Where(x => !string.IsNullOrEmpty(x.Date))
                        .Where(x => x.Amount > 0)
                        .Where(x => !string.IsNullOrEmpty(x.StaffId))
                        .Where(x => !string.IsNullOrEmpty(x.PersonId));

                var entries123 = l.Where(x => x.Type == ActivityType.Lv01 || x.Type == ActivityType.Lv02 || x.Type == ActivityType.Lv03)
                                 .GroupBy(x => new DateStaffPerson {
                    Date = x.DateD, StaffId = x.StaffId, PersonId = x.PersonId
                })
                                 .Select(x => x.Key)
                                 .ToArray();

                var entries4 = l.Where(x => ((int)x.Type > 3))
                               .GroupBy(x => new DateStaffPerson {
                    Date = x.DateD, StaffId = x.StaffId, PersonId = x.PersonId
                })
                               .Select(x => x.Key)
                               .ToArray();

                var error1 = entries123.Except(entries4).ToArray();
                var error2 = entries4.Except(entries123).ToArray();

                foreach (var entry in error1)
                {
                    var item  = list.Where(x => x.DateD == entry.Date && x.StaffId == entry.StaffId && x.PersonId == entry.PersonId).First();
                    var index = list.IndexOf(item);
                    ctx.AddFailure(new ValidationFailure($"{nameof(HkpvReport.Activities)}[{index}]", Validationmessages.WithoutEntry("15")));
                }

                foreach (var entry in error2)
                {
                    var item  = list.Where(x => x.DateD == entry.Date && x.StaffId == entry.StaffId && x.PersonId == entry.PersonId).First();
                    var index = list.IndexOf(item);
                    ctx.AddFailure(new ValidationFailure($"{nameof(HkpvReport.Activities)}[{index}]", Validationmessages.WithoutEntry("1,2,3")));
                }
            });
        }