private HistorialTransaccionDtoOut MapToDto(HistorialTransaccion historialTransaccion) { var producto = masterRepository.Producto.FindByCondition(p => p.ProductoId == historialTransaccion.ProductoId).FirstOrDefault(); var historialTransaccionDto = mapper.Map <HistorialTransaccionDtoOut>(historialTransaccion); historialTransaccionDto.Producto = mapper.Map <ProductoDtoOut>(producto); return(historialTransaccionDto); }
public ServiceResult <bool> GenerarCargoInteresTarjetaAndGenerarCorte() { try { var listTarjetasCreditoNoCorte = masterRepository.TarjetaCredito.FindByCondition(t => t.FechaCorte.Day != DateTime.Now.Day); foreach (var tarjetaCreditoNoCorte in listTarjetasCreditoNoCorte) { if (tarjetaCreditoNoCorte.DiasLimitePago == 1) { tarjetaCreditoNoCorte.DiasLimitePago = 0; decimal PagoCorte = tarjetaCreditoNoCorte.PagoCorte; if (PagoCorte > 0) { decimal cargoPorNoPago = PagoCorte * InteresMensual; tarjetaCreditoNoCorte.Balance -= cargoPorNoPago; tarjetaCreditoNoCorte.PagoCorte = 0; tarjetaCreditoNoCorte.PagoMinimo = 0; masterRepository.TarjetaCredito.Update(tarjetaCreditoNoCorte); var producto = masterRepository.Producto.FindByCondition(p => p.ProductoId == tarjetaCreditoNoCorte.ProductoId).First(); var historialTransaccionDebitada = new HistorialTransaccion() { ClienteId = producto.TitularId, ProductoId = producto.ProductoId, Monto = cargoPorNoPago, TipoTransaccion = TipoTransaccion.Debito, FechaTransaccion = DateTime.Now, Descripcion = TransaccionMessageConstants.CargoInteresPorNoPago }; masterRepository.HistorialTransaccion.Create(historialTransaccionDebitada); } } else if (tarjetaCreditoNoCorte.DiasLimitePago > 1) { tarjetaCreditoNoCorte.DiasLimitePago--; masterRepository.TarjetaCredito.Update(tarjetaCreditoNoCorte); } } var listTarjetasCreditoCorte = masterRepository.TarjetaCredito.FindByCondition(t => t.FechaCorte.Day == DateTime.Now.Day); foreach (var tarjetaCreditoCorte in listTarjetasCreditoCorte) { decimal limiteCredito = tarjetaCreditoCorte.LimiteCredito, balance = tarjetaCreditoCorte.Balance; tarjetaCreditoCorte.DiasLimitePago = DiasLimiteRealizarPago; tarjetaCreditoCorte.PagoCorte = limiteCredito - balance; tarjetaCreditoCorte.PagoMinimo = tarjetaCreditoCorte.PagoCorte * PorcentajePagoMinimo; masterRepository.TarjetaCredito.Update(tarjetaCreditoCorte); } masterRepository.Save(); return(ServiceResult <bool> .ResultOk(true)); } catch (Exception e) { return(ServiceResult <bool> .ResultFailed(ResponseCode.Error, e.Message)); } }
public ServiceResult <bool> EjecutarTransaccion(Guid rowUidTransaccion, int clave) { try { if (!transaccionValidationService.IsExistingRowUid(rowUidTransaccion)) { throw new ValidationException(TransaccionMessageConstants.NotExistingRowUid); } var transaccion = masterRepository.Transaccion.FindByCondition(t => t.RowUid == rowUidTransaccion).FirstOrDefault(); var productoOrigen = masterRepository.Producto.FindByCondition(p => p.ProductoId == transaccion.ProductoOrigenId).First(); var productoDestino = masterRepository.Producto.FindByCondition(p => p.ProductoId == transaccion.ProductoDestinoId).First(); ValidarTiposProductos(productoOrigen, productoDestino); if (transaccion.Estado == EstadoTransaccion.Rechazada) { throw new ValidationException(TransaccionMessageConstants.TransaccionRechazada + transaccion.Comentario); } if (transaccion.Estado == EstadoTransaccion.Procesada) { throw new ValidationException(TransaccionMessageConstants.TransaccionProcesada); } if (transaccion.Estado != EstadoTransaccion.Pendiente) { throw new ValidationException(TransaccionMessageConstants.EstadoTransaccionErroneo); } TimeSpan span = (DateTime.Now - transaccion.FechaTransaccion); int minutosTransaccion = (int)span.TotalMinutes; if (minutosTransaccion >= 1) { CancelarTransaccion(transaccion, TransaccionMessageConstants.TiempoClaveAgotado); } int clienteId = productoOrigen.TitularId; int claveRequerida = masterRepository.TarjetaClave.FindByCondition(t => t.TarjetaClaveId == transaccion.TarjetaClaveId && t.ClienteId == clienteId).FirstOrDefault().Clave; if (clave != claveRequerida) { throw new ValidationException(TransaccionMessageConstants.WrongClave); } //Debito if (productoOrigen.TipoProducto == ((int)TipoProducto.CuentaAhorro)) { var cuentaAhorro = masterRepository.CuentaAhorro.FindByCondition(c => c.ProductoId == productoOrigen.ProductoId).First(); if (cuentaAhorro.Monto < transaccion.Monto) { CancelarTransaccion(transaccion, TransaccionMessageConstants.MontoInsuficiente); } cuentaAhorro.Monto -= transaccion.Monto; masterRepository.CuentaAhorro.Update(cuentaAhorro); } else if (productoOrigen.TipoProducto == ((int)TipoProducto.TarjetaCredito)) { var tarjetaCredito = masterRepository.TarjetaCredito.FindByCondition(t => t.ProductoId == productoOrigen.ProductoId).FirstOrDefault(); if (tarjetaCredito.Balance < transaccion.Monto) { CancelarTransaccion(transaccion, TransaccionMessageConstants.MontoInsuficiente); } tarjetaCredito.Balance -= transaccion.Monto; masterRepository.TarjetaCredito.Update(tarjetaCredito); } //Credito if (productoDestino.TipoProducto == ((int)TipoProducto.CuentaAhorro)) { var cuentaAhorro = masterRepository.CuentaAhorro.FindByCondition(c => c.ProductoId == productoDestino.ProductoId).FirstOrDefault(); cuentaAhorro.Monto += transaccion.Monto; masterRepository.CuentaAhorro.Update(cuentaAhorro); } else if (productoDestino.TipoProducto == ((int)TipoProducto.TarjetaCredito)) { var tarjetaCredito = masterRepository.TarjetaCredito.FindByCondition(t => t.ProductoId == productoDestino.ProductoId).FirstOrDefault(); tarjetaCredito.Balance += transaccion.Monto; if (tarjetaCredito.Balance > tarjetaCredito.LimiteCredito) { CancelarTransaccion(transaccion, TransaccionMessageConstants.PagoSobrepasaLimiteCredito); } if (transaccion.Monto >= tarjetaCredito.PagoMinimo) { tarjetaCredito.PagoMinimo = 0; } else { tarjetaCredito.PagoMinimo -= transaccion.Monto; } if (transaccion.Monto >= tarjetaCredito.PagoCorte) { tarjetaCredito.PagoCorte = 0; } else { tarjetaCredito.PagoCorte -= transaccion.Monto; } masterRepository.TarjetaCredito.Update(tarjetaCredito); } transaccion.Estado = EstadoTransaccion.Procesada; masterRepository.Transaccion.Update(transaccion); //Crear debito y debito de las transacciones var historialTransaccionDebitada = new HistorialTransaccion() { TransaccionId = transaccion.TransaccionId, //Transaccion = transaccion, ClienteId = productoOrigen.TitularId, //Cliente = masterRepository.Cliente.FindByCondition(c => //c.ClienteId == productoOrigen.TitularId).First(), ProductoId = productoOrigen.ProductoId, //Producto = productoOrigen, Monto = transaccion.Monto, TipoTransaccion = TipoTransaccion.Debito, FechaTransaccion = DateTime.Now, Descripcion = transaccion.Descripcion }; var historialTransaccionAcreditada = new HistorialTransaccion() { TransaccionId = transaccion.TransaccionId, //Transaccion = transaccion, ClienteId = productoDestino.TitularId, //Cliente = masterRepository.Cliente.FindByCondition(c => // c.ClienteId == productoDestino.TitularId).First(), ProductoId = productoDestino.ProductoId, //Producto = productoDestino, Monto = transaccion.Monto, TipoTransaccion = TipoTransaccion.Credito, FechaTransaccion = DateTime.Now, Descripcion = transaccion.Descripcion }; masterRepository.HistorialTransaccion.Create(historialTransaccionDebitada); masterRepository.HistorialTransaccion.Create(historialTransaccionAcreditada); masterRepository.Save(); return(ServiceResult <bool> .ResultOk(true)); } catch (ValidationException e) { return(ServiceResult <bool> .ResultFailed(ResponseCode.Warning, e.Message)); } catch (Exception e) { return(ServiceResult <bool> .ResultFailed(ResponseCode.Error, e.Message)); } }