public async Task <CarePackage> GetPackageAsync(Guid packageId, PackageFields fields = PackageFields.None, bool trackChanges = false) { var query = BuildPackageQuery( _dbContext.CarePackages.Where(p => p.Id == packageId), fields) .TrackChanges(trackChanges); return(await query.FirstOrDefaultAsync()); }
public async Task <ServiceUserPackagesViewResponse> ExecuteAsync(Guid serviceUserId) { // Check service user exists var serviceUser = await _serviceUserGateway.GetByIdAsync(serviceUserId).EnsureExistsAsync($"Service user with id {serviceUserId} not found"); const PackageFields fields = PackageFields.Details | PackageFields.Reclaims | PackageFields.Settings | PackageFields.Resources; var userPackages = await _carePackageGateway.GetServiceUserPackagesAsync(serviceUserId, fields); var response = new ServiceUserPackagesViewResponse { ServiceUser = serviceUser.ToBasicDomain().ToResponse(), Packages = new List <ServiceUserPackageViewItemResponse>() }; var packagesResponse = new List <ServiceUserPackageViewItemResponse>(); foreach (var carePackage in userPackages) { var coreCost = carePackage.Details .SingleOrDefault(d => d.Type is PackageDetailType.CoreCost); var packageResponse = new ServiceUserPackageViewItemResponse { PackageId = carePackage.Id, PackageStatus = CalculatePackageStatus(carePackage, coreCost), PackageType = carePackage.PackageType.GetDisplayName(), IsS117Client = carePackage.Settings?.IsS117Client, IsS117ClientConfirmed = carePackage.Settings?.IsS117ClientConfirmed, DateAssigned = carePackage.DateAssigned, GrossTotal = 0, NetTotal = 0, SocialWorkerCarePlanFileId = carePackage.Resources?.Where(r => r.Type == PackageResourceType.CarePlanFile).OrderByDescending(x => x.DateCreated).FirstOrDefault()?.FileId, SocialWorkerCarePlanFileName = carePackage.Resources?.Where(r => r.Type == PackageResourceType.CarePlanFile).OrderByDescending(x => x.DateCreated).FirstOrDefault()?.Name, Notes = new List <CarePackageHistoryResponse>(), PackageItems = new List <CarePackageCostItemResponse>() }; var additionalNeeds = carePackage.Details .Where(d => d.Type == PackageDetailType.AdditionalNeed).ToList(); packageResponse.PackageItems = CollectPackageItems(carePackage, coreCost, additionalNeeds, carePackage.Reclaims.ToList()); var preferences = FilterPreferences.PackageItemStatus(); packageResponse.PackageItems = packageResponse.PackageItems.OrderBy( item => preferences.IndexOf(item.Status)).ThenBy(x => x.StartDate); // Get care package history if package request i.e new, in-progress, not-approved if (carePackage.Status.In(PackageStatus.New, PackageStatus.InProgress, PackageStatus.NotApproved)) { var packageHistory = await _carePackageHistoryGateway.ListAsync(carePackage.Id); packageResponse.Notes = packageHistory.OrderByDescending(h => h.Id).ToResponse(); } var(grossTotal, netTotal) = CalculateTotals(coreCost, additionalNeeds, carePackage.Reclaims.ToList()); packageResponse.GrossTotal = grossTotal; packageResponse.NetTotal = netTotal; packagesResponse.Add(packageResponse); } response.Packages = packagesResponse; return(response); }
private static IQueryable <CarePackage> BuildPackageQuery(IQueryable <CarePackage> query, PackageFields fields) { if (fields.HasFlag(PackageFields.Details)) { query = query.Include(p => p.Details); } if (fields.HasFlag(PackageFields.Reclaims)) { query = query.Include(p => p.Reclaims); } if (fields.HasFlag(PackageFields.Settings)) { query = query.Include(p => p.Settings); } if (fields.HasFlag(PackageFields.Supplier)) { query = query.Include(p => p.Supplier); } if (fields.HasFlag(PackageFields.Histories)) { query = query.Include(p => p.Histories); } if (fields.HasFlag(PackageFields.ServiceUser)) { query = query.Include(p => p.ServiceUser); } if (fields.HasFlag(PackageFields.PrimarySupportReason)) { query = query.Include(p => p.PrimarySupportReason); } if (fields.HasFlag(PackageFields.Broker)) { query = query.Include(p => p.Broker); } if (fields.HasFlag(PackageFields.Approver)) { query = query.Include(p => p.Approver); } if (fields.HasFlag(PackageFields.Resources)) { query = query.Include(p => p.Resources); } return(query); }
public async Task <List <CarePackage> > GetServiceUserPackagesAsync(Guid serviceUserId, PackageFields fields = PackageFields.None, bool trackChanges = false) { var query = BuildPackageQuery(_dbContext.CarePackages.Where(p => p.ServiceUserId.Equals(serviceUserId)), fields).TrackChanges(trackChanges); return(await query.ToListAsync()); }