public async Task Validate_GivenAatfOrganisationHasStartedReturn_ShouldHaveStartedReturnFlag() { var currentApprovalDate = fixture.Create <DateTime>(); var newApprovalDate = fixture.Create <DateTime>(); var aatf = A.Fake <Aatf>(); var organisation = A.Fake <Organisation>(); var startedReturn = A.Fake <Return>(); A.CallTo(() => startedReturn.ReturnStatus).Returns(ReturnStatus.Created); A.CallTo(() => startedReturn.Quarter).Returns(new Quarter(2019, QuarterType.Q1)); var returns = new List <Return>() { startedReturn }; A.CallTo(() => aatf.Organisation).Returns(organisation); A.CallTo(() => organisationDataAccess.GetReturnsByComplianceYear(aatf.Organisation.Id, aatf.ComplianceYear, aatf.FacilityType)).Returns(returns); SetupApprovalDateMovedToNextQuarter(aatf, currentApprovalDate, newApprovalDate); var result = await getAatfApprovalDateChangeStatus.Validate(aatf, newApprovalDate); result.Should().HaveFlag(CanApprovalDateBeChangedFlags.HasStartedReturn); }
public async Task <CanApprovalDateBeChangedFlags> Validate(Aatf aatf, DateTime newApprovalDate) { var result = new CanApprovalDateBeChangedFlags(); if (aatf.ApprovalDate.HasValue) { var currentQuarter = await quarterWindowFactory.GetAnnualQuarterForDate(aatf.ApprovalDate.Value); var newQuarter = await quarterWindowFactory.GetAnnualQuarterForDate(newApprovalDate); if (aatf.ApprovalDate.Equals(newApprovalDate)) { return(result); } if ((int)newQuarter > (int)currentQuarter) { result |= CanApprovalDateBeChangedFlags.DateChanged; var returns = await organisationDataAccess.GetReturnsByComplianceYear(aatf.Organisation.Id, aatf.ComplianceYear, aatf.FacilityType); if (returns.Any(r => (int)r.Quarter.Q == (int)currentQuarter && r.ReturnStatus.Value == ReturnStatus.Created.Value)) { result |= CanApprovalDateBeChangedFlags.HasStartedReturn; } if (returns.Any(r => (int)r.Quarter.Q == (int)currentQuarter && r.ReturnStatus.Value == ReturnStatus.Submitted.Value)) { result |= CanApprovalDateBeChangedFlags.HasSubmittedReturn; } if (returns.Any(r => ((int)r.Quarter.Q == (int)currentQuarter && r.ReturnStatus.Value == ReturnStatus.Submitted.Value && r.ParentId != null) || ((int)r.Quarter.Q == (int)currentQuarter && r.ReturnStatus.Value == ReturnStatus.Submitted.Value && r.ParentId != null))) { result |= CanApprovalDateBeChangedFlags.HasResubmission; } if (await aatfDataAccess.HasAatfOrganisationOtherAeOrAatf(aatf)) { result |= CanApprovalDateBeChangedFlags.HasMultipleFacility; } } } return(result); }