Ejemplo n.º 1
0
        public async Task UpdateAsync(Guid packageId, CarePackageReclaimUpdateDomain requestedReclaim)
        {
            var package = await _carePackageGateway
                          .GetPackageAsync(packageId, PackageFields.Details | PackageFields.Reclaims | PackageFields.Resources, true)
                          .EnsureExists($"Care Package {packageId} not found");

            var existingReclaim = package.Reclaims
                                  .SingleOrDefault(r => r.Id == requestedReclaim.Id)
                                  .EnsureExists($"Care package reclaim {requestedReclaim.Id} not found");

            ValidateRequest(existingReclaim, package);

            if (ShouldReplaceReclaim(existingReclaim, requestedReclaim))
            {
                var newReclaim = requestedReclaim.ToEntity();

                newReclaim.Id         = Guid.Empty;
                newReclaim.Type       = existingReclaim.Type;
                newReclaim.SubType    = existingReclaim.SubType;
                newReclaim.Subjective = existingReclaim.Subjective;
                newReclaim.Status     = newReclaim.Status; // persist calculated value for new record

                package.Reclaims.Add(newReclaim);

                existingReclaim.Status = ReclaimStatus.Cancelled;
            }
            else
            {
                _mapper.Map(requestedReclaim, existingReclaim);
            }

            ReclaimCostValidator.Validate(package);

            await _dbManager.SaveAsync("Could not update care package reclaim");
        }
Ejemplo n.º 2
0
 private static bool ShouldReplaceReclaim(CarePackageReclaim existingReclaim, CarePackageReclaimUpdateDomain requestedReclaim)
 {
     return(existingReclaim.StartDate != requestedReclaim.StartDate ||
            existingReclaim.EndDate != requestedReclaim.EndDate ||
            existingReclaim.Cost != requestedReclaim.Cost ||
            existingReclaim.ClaimCollector != requestedReclaim.ClaimCollector);
 }
Ejemplo n.º 3
0
        public async Task UpdateAsync(CarePackageReclaimUpdateDomain requestedReclaim, Guid packageId)
        {
            var package = await _carePackageGateway
                          .GetPackageAsync(packageId, PackageFields.Resources | PackageFields.Details | PackageFields.Reclaims, true)
                          .EnsureExistsAsync($"Care package {packageId} not found");

            var reclaims = package.Reclaims
                           .Where(reclaim =>
                                  reclaim.Status != ReclaimStatus.Cancelled &&
                                  reclaim.Type == ReclaimType.Fnc).ToList();

            var fncPayment = reclaims.SingleOrDefault(r => r.SubType is ReclaimSubType.FncPayment);
            var fncReclaim = reclaims.SingleOrDefault(r => r.SubType is ReclaimSubType.FncReclaim);


            if (fncPayment is null || fncReclaim is null)
            {
                throw new ApiException($"No FNC defined for package {packageId}", HttpStatusCode.NotFound);
            }

            if (requestedReclaim.HasAssessmentBeenCarried)
            {
                var fncReclaimId = fncReclaim.Id;

                _mapper.Map(requestedReclaim, fncPayment);
                _mapper.Map(requestedReclaim, fncReclaim);

                fncReclaim.Id   = fncReclaimId;
                fncReclaim.Cost = Decimal.Negate(fncPayment.Cost);

                fncPayment.Subjective = SubjectiveConstants.FncPaymentSubjectiveCode;
                fncReclaim.Subjective = SubjectiveConstants.FncReclaimSubjectiveCode;

                ReclaimCostValidator.Validate(package);

                await using (var transaction = await _dbManager.BeginTransactionAsync())
                {
                    if (requestedReclaim.AssessmentFileId.IsEmpty() && requestedReclaim.AssessmentFile != null)
                    {
                        await _createPackageResourceUseCase.CreateFileAsync(
                            package.Id, PackageResourceType.FncAssessmentFile, requestedReclaim.AssessmentFile);
                    }

                    await _dbManager.SaveAsync();

                    await transaction.CommitAsync();
                }
            }
            else
            {
                fncPayment.Status = ReclaimStatus.Cancelled;
                fncReclaim.Status = ReclaimStatus.Cancelled;

                await _dbManager.SaveAsync();
            }
        }
 public static CarePackageReclaim ToEntity(this CarePackageReclaimUpdateDomain input)
 {
     return(_mapper.Map <CarePackageReclaim>(input));
 }