public async Task <IActionResult> Post(TransaccionDtoRequest transaccionDtoRequest) { var resultadoValidacion = Extensiones.MonedaValida(transaccionDtoRequest.MonedaCompra); if (!string.IsNullOrWhiteSpace(resultadoValidacion)) { _logger.LogError(resultadoValidacion); return(BadRequest(resultadoValidacion)); } if (await _transaccionMoneda.GenerarTransaccion(transaccionDtoRequest)) { return(Ok()); } return(BadRequest()); }
public async Task <bool> GenerarTransaccion(TransaccionDtoRequest transaccionDtoRequest) { var result = false; var primerDiaMesActual = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1); var ultimoDiaMesActual = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.DaysInMonth(DateTime.Now.Year, DateTime.Now.Month)); var montoMensualAcumulado = _context.Transaccion.Where(x => x.IdUsuario.Equals(transaccionDtoRequest.IdUsuario) && x.MonedaCompra.Equals(transaccionDtoRequest.MonedaCompra) && x.FechaTransaccion >= primerDiaMesActual && x.FechaTransaccion <= ultimoDiaMesActual) .Sum(x => x.MontoCompra); var cotizacionMoneda = await _cotizacionMoneda.GetCotizacion(transaccionDtoRequest.MonedaCompra); var montoCompra = Math.Round(transaccionDtoRequest.MontoPesosArgentinos / cotizacionMoneda.CambioVenta, 2); montoMensualAcumulado += montoCompra; var montoSobrePasaElTotalMes = false; switch (transaccionDtoRequest.MonedaCompra.ToLower()) { case "dolar": { if (montoMensualAcumulado > MontoMaximoMesDolar) { montoSobrePasaElTotalMes = true; } _logger.LogError("El monto para comprar dolares ha superado el maximo mensual"); break; } case "real": { if (montoMensualAcumulado > MontoMaximoMesReal) { montoSobrePasaElTotalMes = true; } _logger.LogError("El monto para comprar reales ha superado el maximo mensual"); break; } } if (!montoSobrePasaElTotalMes) { var nuevaTransaccion = new TransaccionDto() { IdTransaccion = Guid.NewGuid(), IdUsuario = transaccionDtoRequest.IdUsuario, MontoPesosArgentinos = transaccionDtoRequest.MontoPesosArgentinos, MonedaCompra = transaccionDtoRequest.MonedaCompra, MontoCambioDia = cotizacionMoneda.CambioVenta, MontoCompra = montoCompra, FechaTransaccion = DateTime.Now }; await _context.Transaccion.AddAsync(nuevaTransaccion); result = await _context.SaveChangesAsync() > 0; } return(result); }