Exemplo n.º 1
0
        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));
            }
        }
Exemplo n.º 3
0
        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));
            }
        }