///<inheritdoc/> public Task <CalculateBaseResult <CalculateIrpfResult> > CalculateIrpf(CalculateIrpfArgs args) { if (args == null) { throw new ArgumentNullException(nameof(args)); } if (string.IsNullOrWhiteSpace(_url)) { throw new InvalidOperationException($"The service url '{_url} is null or empty!"); } _logger?.LogInformation("Process CalculateIrpf command"); using GrpcChannel channel = CreateAuthenticatedChannel(_url); LaborTaxesClient client = new LaborTaxesClient(channel); CalculateBaseResult <CalculateIrpfResult> result = new CalculateBaseResult <CalculateIrpfResult>(); try { CalculateIrpfRequest request = new CalculateIrpfRequest() { InssValue = (double)args.InssValue, Revenue = (double)args.Revenue, DependentsNumber = args.DependentsNumber, ReferenceDate = args.ReferenceDate?.ToString("yyyy-MM-dd") ?? string.Empty }; CalculateIrpfReply reply = client.CalculateIrpf(request); result.Success = reply.Success; if (reply.Success) { result.Data = new CalculateIrpfResult() { CalculationBasis = (decimal)reply.Data.CalculationBasis, Amount = (decimal)reply.Data.Amount, Rate = (decimal)reply.Data.Rate }; _logger?.LogInformation("CalculateIrpf Success"); } else { result.Data = null; result.Errors = reply.Errors; _logger?.LogInformation("CalculateIrpf FAIL, {Errors}", result.Errors); } } catch (Exception ex) { result.Success = false; result.Errors = ex.Message; _logger?.LogInformation("CalculateIrpf FAIL, {Message}", ex.Message); } return(Task.FromResult(result)); }
public async Task <IActionResult> CalculateIrpf ( [FromServices] ILaborTaxesService service, [FromBody] CalculateIrpfRequest request, [FromQuery] DateTime?date, CancellationToken cancellationToken = default ) { CalculateIrpfResult resp = await service.CalculateIrpf(request.Revenue, request.InssValue, request.DependentsNumber, date, cancellationToken); if (resp == null) { return(BadRequest(resp)); } return(Ok(resp)); }