예제 #1
0
        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);
        }
예제 #3
0
        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);
        }
예제 #4
0
        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());
        }