public static CarePackageSummaryResponse ToResponse(this CarePackageSummaryDomain input) { return(_mapper.Map <CarePackageSummaryResponse>(input)); }
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); }