public async Task <Result <ReturnCalculationResponse> > CalculateDefaultProposition(ReturnCalculationRequest request) { if (request == null) { throw new ArgumentNullException("request"); } if (request.SiNumber <= 0 || request.SiNumber >= 99999999999) { throw new ArgumentException("SiNumber is not within a valid range"); } var result = _validation.Validate(request); if (result.Code != ResultCode.Ok) { return(new Result <ReturnCalculationResponse>() { Code = result.Code, Messages = result.Messages }); } ReturnCalculationResponse response = new ReturnCalculationResponse(); if (request.ReturnLines == null || request.ReturnLines.Count() == 0) { return(new Result <ReturnCalculationResponse>(response)); } response.AmountNonRefundable = _paymentLineService.GetUnreturnableAmount(request.IsFraude, request.ReturnLines); response.AmountRefundableByFOD = _paymentLineService.GetReturnableAmountByFOD(request.IsFraude, request.ReturnLines); decimal amountToRecover = _paymentLineService.GetReturnableAmount(request.IsFraude, request.ReturnLines); var distributeResponse = await this.DistributeAmount(amountToRecover, request.SiNumber, request.Insz); response.ReturnLines = distributeResponse.lines; response.AmountRefundableByOGM = distributeResponse.amount; return(new Result <ReturnCalculationResponse>(response)); }
public async Task <Result <bool> > StoreReturnCalculationAsync(ReturnCalculationRequest request) { var validationResult = _validationService.Validate(request); if (validationResult.Code != ResultCode.Ok) { return(validationResult); } var serviceRequest = Mapper.Map <SaveReturnCalculationRequest>(request); decimal amount = request.ReturnByDeduction; if (amount > 0) { var result = await _propositionService.DistributeAmount(amount, request.SiNumber, request.Insz); var lines = result.lines; amount = result.amount; if (amount > 0) { return new Result <bool>(false) { Code = ResultCode.Error } } ; foreach (var item in lines) { switch (item.Kind) { case VSBaseAngular.Models.ReturnCalculationKind.ZVZ: serviceRequest.ReturnByZVZ = item.Amount; break; case VSBaseAngular.Models.ReturnCalculationKind.BOB: serviceRequest.ReturnByBOB = item.Amount; break; case VSBaseAngular.Models.ReturnCalculationKind.THAB: serviceRequest.ReturnByTHAB = item.Amount; break; default: break; } } } var returnMessage = await _vsbService.UpsertReturnCalculationAsync(serviceRequest); if (returnMessage.Value != null) { return(new Result <bool>(returnMessage.Value.Succeeded)); } else { return(new Result <bool>(false) { Code = ResultCode.Error, Messages = returnMessage.BusinessMessages.Select(m => m.MessageString).ToList() }); } } }