示例#1
0
        public ValidationError Execute(Child child, NonBlockingValidationContext context)
        {
            // At least one of the race fields must = true
            if (!
                (child.AmericanIndianOrAlaskaNative ||
                 child.Asian ||
                 child.BlackOrAfricanAmerican ||
                 child.NativeHawaiianOrPacificIslander ||
                 child.White)
                )
            {
                var fields = new string[]
                {
                    "AmericanIndianOrAlaskaNative",
                    "Asian",
                    "BlackOrAfricanAmerican",
                    "NativeHawaiianOrPacificIslander",
                    "White"
                };
                return(new ValidationError(
                           fields: fields,
                           message: $"One of {String.Join(",", fields)} must be true."
                           ));
            }

            return(null);
        }
        public void Execute_ReturnsError_IfConditionTrueAndFieldDoesNotExist_OrIsEmptyString(
            bool conditionResult,
            string fieldValue,
            bool doesError
            )
        {
            // if
            var fieldName = "FieldName";
            var entity    = new TestValidatableEntity
            {
                FieldName = fieldValue
            };

            // when
            var validationContext = new NonBlockingValidationContext();
            var rule = new Mock <ConditionalFieldRequired <TestValidatableEntity> >("condition Message", fieldName, null);

            rule.Protected()
            .Setup <bool>("CheckCondition", new object[] { entity, validationContext })
            .Returns(conditionResult);
            rule.CallBase = true;
            var result = rule.Object.Execute(entity, validationContext);

            // then
            Assert.Equal(doesError, result != null);
        }
        public ValidationError Execute(Child child, NonBlockingValidationContext context)
        {
            if (child.Gender == Gender.Unspecified)
            {
                return(new ValidationError(
                           field: "Gender",
                           message: "Gender must be specified"
                           ));
            }

            return(null);
        }
        public ValidationError Execute(Family family, NonBlockingValidationContext context)
        {
            if (family != null)
            {
                var child = context.GetParentEntity <Child>();
                // Enrollments for children living with foster families
                // are exempt from family determination validations
                if (child != null && !child.Foster)
                {
                    var enrollment = context.GetParentEntity <Enrollment>();
                    if (enrollment != null)
                    {
                        var fundings = enrollment.Fundings ?? _fundings.GetFundingsByEnrollmentId(enrollment.Id);

                        // If enrollment is funded
                        if (fundings.Any(f => f.Source == FundingSource.CDC))
                        {
                            // most recent determination must be < 1 year old from today
                            var compareDate = DateTime.Now.Date;

                            // unless validating in the context of a report,
                            // in which case determination date must be < 1 year from
                            // end of report's reporting period
                            var report = context.GetParentEntity <CdcReport>();
                            if (report != null)
                            {
                                compareDate = report.ReportingPeriod?.PeriodEnd ?? _reportingPeriods.GetById(report.ReportingPeriodId).PeriodEnd;
                            }

                            var mostRecentDetermination = (family.Determinations ?? _determinations.GetDeterminationsByFamilyId(family.Id))
                                                          .OrderByDescending(d => d.DeterminationDate)
                                                          .FirstOrDefault();

                            if (mostRecentDetermination != null)
                            {
                                if (mostRecentDetermination.DeterminationDate.HasValue &&
                                    mostRecentDetermination.DeterminationDate < compareDate.AddYears(-1)
                                    )
                                {
                                    return(new ValidationError(
                                               field: "Determinations",
                                               message: "Annual income determinations is due"
                                               ));
                                }
                            }
                        }
                    }
                }
            }

            return(null);
        }
示例#5
0
        public ValidationError Execute(Child child, NonBlockingValidationContext context)
        {
            var certificates = child.C4KCertificates ?? _certificates.GetC4KCertificatesByChildId(child.Id);

            ValidateSubObject(certificates, child);
            if (certificates.Any(c => c.ValidationErrors.Count > 0))
            {
                return(new ValidationError(
                           field: "C4KCertificates",
                           message: "C4KCertificates have validation errors",
                           isSubObjectValidation: true
                           ));
            }

            return(null);
        }
        public ValidationError Execute(CdcReport report, NonBlockingValidationContext context)
        {
            var enrollments = report.Enrollments ?? _reports.GetEnrollmentsForReport(report);

            ValidateSubObject(enrollments, report);
            if (enrollments.Any(e => e.ValidationErrors.Count > 0))
            {
                return(new ValidationError(
                           field: "Enrollments",
                           message: "Enrollments have validation errors",
                           isSubObjectValidation: true
                           ));
            }

            return(null);
        }
        public void Execute_WithReportParentEntity_ReturnsError_IfEnrollmentFunded_AndDeterminationDateNotValid(
            bool enrollmentIsFunded,
            bool dateIsValid,
            bool doesError
            )
        {
            // if
            var enrollment = new Enrollment
            {
                Fundings = new List <Funding>()
            };

            if (enrollmentIsFunded)
            {
                enrollment.Fundings.Add(new Funding {
                    Source = FundingSource.CDC
                });
            }

            var periodEnd       = DateTime.Now.Date.AddDays(-10);
            var report          = new CdcReport();
            var reportingPeriod = new ReportingPeriod {
                PeriodEnd = periodEnd
            };

            report.GetType().GetProperty(nameof(report.ReportingPeriod)).SetValue(report, reportingPeriod, null);

            var determination = new FamilyDetermination
            {
                // a valid date is < 1 year older than report reporting period end
                DeterminationDate = dateIsValid ? periodEnd.AddMonths(-8) : periodEnd.AddMonths(-18)
            };

            // when
            var fundings         = new Mock <IFundingRepository>();
            var reportingPeriods = new Mock <IReportingPeriodRepository>();
            var rule             = new IfEnrollmentFunded_DeterminationDateValid(fundings.Object, reportingPeriods.Object);

            var context = new NonBlockingValidationContext();

            context.AddParentEntity(enrollment);
            context.AddParentEntity(report);
            var result = rule.Execute(determination, context);

            // then
            Assert.Equal(doesError, result != null);
        }
        public ValidationError Execute(T entity, NonBlockingValidationContext context)
        {
            var prop = typeof(T).GetProperty(_fieldName);

            if (prop != null)
            {
                var value = prop.GetValue(entity);
                if (CheckCondition(entity, context) && (value == null || value as string == ""))
                {
                    return(new ValidationError(
                               field: _fieldName,
                               message: $"{(_prettyFieldName != null ? _prettyFieldName : _fieldName)} is required when {_conditionalMessage}"
                               ));
                }
            }

            return(null);
        }
示例#9
0
        public ValidationError Execute(T entity, NonBlockingValidationContext context)
        {
            var prop = typeof(T).GetProperty(_fieldName);

            if (prop != null)
            {
                var value = prop.GetValue(entity);
                if (value == null || value as string == "")
                {
                    return(new ValidationError(
                               message: $"{(_prettyFieldName != null ? _prettyFieldName : _fieldName)} is required",
                               isSubObjectValidation: _isSubObjectValidation,
                               field: _fieldName
                               ));
                }
            }

            return(null);
        }
示例#10
0
        public ValidationError Execute(Enrollment enrollment, NonBlockingValidationContext context)
        {
            if (enrollment.ChildId != Guid.Empty)
            {
                var child = enrollment.Child ?? _children.GetChildById(enrollment.ChildId);

                ValidateSubObject(child, enrollment);
                if (child.ValidationErrors.Count > 0)
                {
                    return(new ValidationError(
                               field: "Child",
                               message: "Child has validation errors",
                               isSubObjectValidation: true
                               ));
                }
            }

            return(null);
        }
示例#11
0
        public ValidationError Execute(Child child, NonBlockingValidationContext context)
        {
            if (child.FamilyId.HasValue)
            {
                var family = child.Family ?? _families.GetFamilyById(child.FamilyId.Value);

                ValidateSubObject(family, child);
                if (family.ValidationErrors.Count > 0)
                {
                    return(new ValidationError(
                               field: "Family",
                               message: "Family has validation errors",
                               isSubObjectValidation: true
                               ));
                }
            }

            return(null);
        }
示例#12
0
        public ValidationError Execute(Enrollment enrollment, NonBlockingValidationContext context)
        {
            if (enrollment == null)
            {
                return(null);
            }

            var fundings = enrollment.Fundings ?? _fundings.GetFundingsByEnrollmentId(enrollment.Id);

            ValidateSubObject(fundings, enrollment);
            if (fundings.Any(f => f.ValidationErrors.Count > 0))
            {
                return(new ValidationError(
                           field: "Fundings",
                           message: "Fundings has validation errors",
                           isSubObjectValidation: true
                           ));
            }

            return(null);
        }
示例#13
0
        public ValidationError Execute(Family family, NonBlockingValidationContext context)
        {
            var child = context.GetParentEntity <Child>();

            // Enrollments for children living with foster families
            // are exempt from family determination validations
            if (child != null && !child.Foster && family != null)
            {
                var determinations = family.Determinations ?? _determinations.GetDeterminationsByFamilyId(family.Id);
                ValidateSubObject(determinations, family);
                if (determinations.Any(det => det.ValidationErrors.Count > 0))
                {
                    return(new ValidationError(
                               field: "Determinations",
                               message: "Determinations has validation error",
                               isSubObjectValidation: true
                               ));
                }
            }

            return(null);
        }
        public void Execute_ReturnsError_IfEnrollmentFunded_AndDeterminationDateNotValid(
            bool enrollmentIsFunded,
            bool dateIsValid,
            bool doesError
            )
        {
            // if
            var enrollment = new Enrollment
            {
                Fundings = new List <Funding>()
            };

            if (enrollmentIsFunded)
            {
                enrollment.Fundings.Add(new Funding {
                    Source = FundingSource.CDC
                });
            }

            var determination = new FamilyDetermination
            {
                // a valid date is < 1 year older than TODAY
                DeterminationDate = dateIsValid ? DateTime.Now.Date.AddMonths(-8) : DateTime.Now.Date.AddMonths(-18)
            };

            // when
            var fundings         = new Mock <IFundingRepository>();
            var reportingPeriods = new Mock <IReportingPeriodRepository>();
            var rule             = new IfEnrollmentFunded_DeterminationDateValid(fundings.Object, reportingPeriods.Object);

            var context = new NonBlockingValidationContext();

            context.AddParentEntity(enrollment);
            var result = rule.Execute(determination, context);

            // then
            Assert.Equal(doesError, result != null);
        }
        public ValidationError Execute(FamilyDetermination determination, NonBlockingValidationContext context)
        {
            var enrollment = context.GetParentEntity <Enrollment>();

            if (enrollment == null)
            {
                return(null);
            }

            var fundings = enrollment.Fundings ?? _fundings.GetFundingsByEnrollmentId(enrollment.Id);

            if (fundings.Any(f => f.Source == FundingSource.CDC))
            {
                // Generally, DeterminationDate must be < 1 year from today
                var compareDate = DateTime.Now.Date;

                // However, if validating in the context of report enrollments,
                // determination date must be < 1 year from end of reporting period
                var report = context.GetParentEntity <CdcReport>();
                if (report != null)
                {
                    compareDate = report.ReportingPeriod != null
                                                ? report.ReportingPeriod.PeriodEnd
                                                : _reportingPeriods.GetById(report.ReportingPeriodId).PeriodEnd;
                }

                if (determination.DeterminationDate < compareDate.AddYears(-1))
                {
                    return(new ValidationError(
                               field: "DeterminationDate",
                               message: "Annual income determination is due"
                               ));
                }
            }

            return(null);
        }
示例#16
0
 protected override bool CheckCondition(C4KCertificate entity, NonBlockingValidationContext context)
 {
     return(!entity.EndDate.HasValue);
 }
 protected abstract bool CheckCondition(T entity, NonBlockingValidationContext context);
        public ValidationError Execute(Funding funding, NonBlockingValidationContext context)
        {
            if (!funding.FirstReportingPeriodId.HasValue)
            {
                return(null);
            }
            var currentEnrollment = funding.Enrollment ?? _enrollments.GetEnrollmentById(funding.EnrollmentId);
            var childId           = currentEnrollment.ChildId;
            var otherCdcFundings  = _fundings.GetFundingsByChildId(childId).Where(f => f.Source == FundingSource.CDC).Where(f => f.Id != funding.Id);
            var sortedFundings    = otherCdcFundings.OrderBy(f => f.FirstReportingPeriod.PeriodStart);

            if (sortedFundings.Count() == 0)
            {
                return(null);
            }

            var firstReportingPeriodStart = funding.FirstReportingPeriod != null
                                ? funding.FirstReportingPeriod.PeriodStart
                                : _reportingPeriods.GetById(funding.FirstReportingPeriodId.Value).PeriodStart;

            DateTime?lastReportingPeriodEnd = null;

            if (funding.LastReportingPeriodId.HasValue)
            {
                lastReportingPeriodEnd = funding.LastReportingPeriod != null
                                        ? funding.LastReportingPeriod.PeriodEnd
                                        : _reportingPeriods.GetById(funding.LastReportingPeriodId.Value).PeriodEnd;
            }

            var doesOverlap = false;

            foreach (var currentFunding in sortedFundings)
            {
                if (doesOverlap)
                {
                    break;
                }
                var currentFirstReportingPeriodStart = currentFunding.FirstReportingPeriod.PeriodStart;
                if (currentFirstReportingPeriodStart == firstReportingPeriodStart)
                {
                    doesOverlap = true;
                }
                else if (currentFirstReportingPeriodStart < firstReportingPeriodStart)
                {
                    if (currentFunding.LastReportingPeriod == null)
                    {
                        doesOverlap = true;
                    }
                    else
                    {
                        var currentLastReportingPeriodEnd = currentFunding.LastReportingPeriod.PeriodEnd;
                        if (firstReportingPeriodStart <= currentLastReportingPeriodEnd)
                        {
                            doesOverlap = true;
                        }
                    }
                }
                else                 /* (firstReportingPeriod < currentFirstReportingPeriodStart) */
                {
                    if (lastReportingPeriodEnd == null)
                    {
                        doesOverlap = true;
                    }
                    else
                    {
                        if (currentFirstReportingPeriodStart <= lastReportingPeriodEnd)
                        {
                            doesOverlap = true;
                        }
                    }
                }
            }

            if (doesOverlap)
            {
                return(new ValidationError(
                           message: "Cannot claim a child twice in a reporting period",
                           isSubObjectValidation: false,
                           field: "FirstReportingPeriod"
                           ));
            }

            return(null);
        }
 protected override bool CheckCondition(Child entity, NonBlockingValidationContext context)
 {
     return(entity.C4KCertificates != null && entity.C4KCertificates.Count != 0);
 }