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);
        }
示例#2
0
        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);
        }