public static CarePackageSummaryResponse ToResponse(this CarePackageSummaryDomain input)
 {
     return(_mapper.Map <CarePackageSummaryResponse>(input));
 }
Beispiel #2
0
        public async Task <CarePackageSummaryDomain> ExecuteAsync(Guid packageId)
        {
            _package = await _carePackageGateway
                       .GetPackageAsync(packageId, PackageFields.All)
                       .EnsureExistsAsync($"Care package {packageId} not found");

            var coreCost = _package.Details
                           .FirstOrDefault(d => d.Type is PackageDetailType.CoreCost)
                           .EnsureExists($"Core cost for package {packageId} not found");

            var additionalNeeds = _package.Details
                                  .Where(d => d.Type == PackageDetailType.AdditionalNeed).ToList();

            _summary = new CarePackageSummaryDomain
            {
                PackageType          = _package.PackageType.GetDisplayName(),
                Status               = _package.Status,
                PrimarySupportReason = _package.PrimarySupportReason?.PrimarySupportReasonName,
                SchedulingPeriod     = $"{_package.PackageScheduling.GetDisplayName()} {_package.PackageScheduling.ToDescription()}",

                StartDate       = coreCost.StartDate,
                EndDate         = coreCost.EndDate,
                CostOfPlacement = coreCost.Cost,

                Supplier    = _package.Supplier?.ToDomain(),
                ServiceUser = _package.ServiceUser?.ToDomain(),
                Settings    = _package.Settings?.ToDomain(),

                AdditionalWeeklyNeeds = additionalNeeds.Where(d => d.CostPeriod is PaymentPeriod.Weekly).ToDomain(),
                AdditionalOneOffNeeds = additionalNeeds.Where(d => d.CostPeriod is PaymentPeriod.OneOff).ToDomain(),

                CareCharges = _package.Reclaims.Where(r =>
                                                      r.Type is ReclaimType.CareCharge &&
                                                      r.Status != ReclaimStatus.Cancelled).ToDomain()
            };

            FillFundedNursingCare();
            FillReclaimsSubTotals();

            var today = DateTimeOffset.UtcNow;

            if (today.IsInRange(coreCost.StartDate, coreCost.EndDate ?? DateTimeOffset.MaxValue))
            {
                _summary.ActiveCostOfPlacement = coreCost.Cost;
            }

            _summary.FncPayment           = _package.GetFncPaymentCost(today);
            _summary.TotalCostOfPlacement = _summary.ActiveCostOfPlacement + _summary.FncPayment;

            _summary.AdditionalWeeklyCost = _package.GetAdditionalWeeklyCost(today);
            _summary.OneOffCost           = _package.GetAdditionalOneOffCost(today);

            _summary.TotalWeeklyCost =
                _summary.TotalCostOfPlacement
                + _summary.AdditionalWeeklyCost
                - (_summary.SupplierReclaims?.SubTotal ?? 0.0m);

            // intentionally separated from calculations to stress that this for display purposes only
            NegateReclaimTotals(_summary.HackneyReclaims, _summary.SupplierReclaims);

            return(_summary);
        }