private OverlappingApprenticeship MapFrom(ApprenticeshipResult source) { var result = new OverlappingApprenticeship { Apprenticeship = new Api.Types.Apprenticeship.Apprenticeship { Id = source.Id, CommitmentId = source.CommitmentId, StartDate = source.StartDate, EndDate = source.EndDate, ULN = source.Uln, EmployerAccountId = source.EmployerAccountId, ProviderId = source.ProviderId, TrainingType = (Api.Types.Apprenticeship.Types.TrainingType)source.TrainingType, TrainingCode = source.TrainingCode, TrainingName = source.TrainingName, Cost = source.Cost, PaymentStatus = (Api.Types.Apprenticeship.Types.PaymentStatus)source.PaymentStatus, AgreementStatus = (Api.Types.AgreementStatus)source.AgreementStatus, DateOfBirth = source.DateOfBirth, EmployerRef = source.EmployerRef, ProviderRef = source.ProviderRef, FirstName = source.FirstName, LastName = source.LastName }, RequestApprenticeshipId = source.RequestApprenticeshipId, EmployerAccountId = source.EmployerAccountId, LegalEntityName = source.LegalEntityName, ProviderId = source.ProviderId, ProviderName = source.ProviderName, ValidationFailReason = (ValidationFailReason)source.ValidationFailReason, }; return(result); }
protected void SetupSuccessfulOverlapCheck() { var apprenticeship = Commitment.Apprenticeships.First(); var apprenticeshipResult = new ApprenticeshipResult { Uln = apprenticeship.ULN }; ApprenticeshipRepository.Setup(x => x.GetActiveApprenticeshipsByUlns(It.IsAny <IEnumerable <string> >())).ReturnsAsync(new List <ApprenticeshipResult> { apprenticeshipResult }); OverlapRules.Setup(x => x.DetermineOverlap(It.Is <ApprenticeshipOverlapValidationRequest>(r => r.Uln == apprenticeship.ULN && r.ApprenticeshipId == apprenticeship.Id && r.StartDate == apprenticeship.StartDate.Value && r.EndDate == apprenticeship.EndDate.Value), apprenticeshipResult)).Returns(ValidationFailReason.None); }
/// <summary> /// Calculates what date should be used as the overlap end date for an apprenticeship when validating start date / end date overlaps. /// </summary> private DateTime CalculateOverlapApprenticeshipEndDate(ApprenticeshipResult apprenticeship) { switch (apprenticeship.PaymentStatus) { case PaymentStatus.Withdrawn: return(apprenticeship.StopDate.Value); case PaymentStatus.Completed: if (apprenticeship.CompletionDate.Value <= apprenticeship.EndDate) { return(apprenticeship.CompletionDate.Value); } return(apprenticeship.EndDate); default: return(apprenticeship.EndDate); } }
public ValidationFailReason DetermineOverlap(ApprenticeshipOverlapValidationRequest request, ApprenticeshipResult apprenticeship) { if (!request.Uln.Equals(apprenticeship.Uln, StringComparison.InvariantCultureIgnoreCase)) { return(ValidationFailReason.None); } if (request.ApprenticeshipId.HasValue && request.ApprenticeshipId.Value == apprenticeship.Id) { return(ValidationFailReason.None); } //Get the appropriate dates for the apprenticeship var apprenticeshipStartDate = apprenticeship.StartDate; var apprenticeshipEndDate = apprenticeship.PaymentStatus == PaymentStatus.Withdrawn ? apprenticeship.StopDate.Value : apprenticeship.EndDate; //Stopped before or on start date (effectively deleted) should be ignored if (apprenticeship.PaymentStatus == PaymentStatus.Withdrawn && apprenticeshipStartDate.Date.Equals(apprenticeship.StopDate.Value.Date)) { return(ValidationFailReason.None); } var overlapsStart = IsApprenticeshipDateBetween(request.StartDate, apprenticeshipStartDate, apprenticeshipEndDate); var overlapsEnd = IsApprenticeshipDateBetween(request.EndDate, apprenticeshipStartDate, apprenticeshipEndDate); //Contained if (overlapsStart && overlapsEnd) { return(ValidationFailReason.DateWithin); } //Overlap start date if (overlapsStart) { return(ValidationFailReason.OverlappingStartDate); } //Overlap end date if (overlapsEnd) { return(ValidationFailReason.OverlappingEndDate); } //Straddle if (IsApprenticeshipDateStraddle(request.StartDate, request.EndDate, apprenticeshipStartDate, apprenticeshipEndDate)) { return(ValidationFailReason.DateEmbrace); } return(ValidationFailReason.None); }