예제 #1
0
        public ActionResult AplicarPagos()
        {
            //Se inicia el contrato pero unicamente se tendra la propiedad de idContrato
            //Obtendremos las demas propiedades para actualizarlas
            ContratoWebHookMambu contratoWebHook = new ContratoWebHookMambu();

            System.IO.StreamReader reader = new System.IO.StreamReader(HttpContext.Request.InputStream);
            string rawSendGridJSON        = reader.ReadToEnd();

            contratoWebHook = new JavaScriptSerializer().Deserialize <ContratoWebHookMambu>(rawSendGridJSON);
            long contador = 0;

            if (contratoWebHook != null)
            {
                ////Obtenemos el contrato(s) asociado
                List <Loan> loans = Operaciones.ObtenerCuentasPrestamo(contratoWebHook.IdContrato);

                if (loans.Count > 0)
                {
                    List <Transaccion> transacciones = Operaciones.ObtenerTransacciones(Constantes.TRANSACTIONS_TYPE_REPAYMENT, loans.FirstOrDefault().encodedKey).ToList();
                    foreach (var transaccion in transacciones)
                    {
                        int    numeroPago = 1;
                        string existe     = OperacionesBD.ExisteTransaccion(transaccion.transactionId);

                        Loan contrato = Operaciones.ObtenerCuentaPrestamo(transaccion.parentAccountKey);

                        Movimiento movimiento = new Movimiento();

                        movimiento.codigo          = Constantes.MOVIMIENTO_PAGO;
                        movimiento.fechaMovimiento = DateTime.Parse(transaccion.creationDate);
                        movimiento.fechaValor      = DateTime.Parse(transaccion.entryDate);
                        movimiento.idContrato      = contrato.id;
                        movimiento.idTransaccion   = transaccion.transactionId;
                        movimiento.montoCapital    = transaccion.principalPaid;
                        movimiento.montoInteres    = transaccion.interestPaid;
                        movimiento.montoTotal      = transaccion.amount;
                        movimiento.saldo           = transaccion.principalBalance;

                        if (existe.Equals("0"))
                        {
                            long insertado = OperacionesBD.InsertarMovimiento(movimiento);

                            // amortizaciones del contrato
                            OperacionesBD.BorrarAmortizacionesContrato(contrato.id);

                            List <Repayment> amortizaciones = Operaciones.ObtenerAmortizaciones(contrato.id).OrderBy(x => x.dueDate).ToList();

                            // inserta el calendario de pagos
                            foreach (Repayment amortizacion in amortizaciones)
                            {
                                Pago pago = new Pago();

                                pago.numeroCuota     = numeroPago;
                                pago.idContrato      = contrato.id;
                                pago.estatus         = amortizacion.state;
                                pago.fechaPago       = DateTime.Parse(amortizacion.dueDate);
                                pago.fechaPagado     = DateTime.Parse(amortizacion.repaidDate == null ? amortizacion.repaidDate = "01/01/1900" : amortizacion.repaidDate);
                                pago.capitalEsperado = decimal.Parse(amortizacion.principalDue);
                                pago.interesEsperado = decimal.Parse(amortizacion.interestDue);
                                pago.capitalPagado   = decimal.Parse(amortizacion.principalPaid);
                                pago.interesPagado   = decimal.Parse(amortizacion.interestPaid);

                                // inserta las Amortizaciones
                                OperacionesBD.InsertarAmortizaciones(pago);

                                pago = null;

                                numeroPago += 1;
                            }
                            // actualiza los datos del contrato
                            Dictionary <string, object> parametros = new Dictionary <string, object>();

                            parametros.Add("saldo", contrato.principalBalance);
                            parametros.Add("capitalPagado", contrato.principalPaid.ToString());
                            parametros.Add("interesPagado", contrato.interestPaid.ToString());
                            parametros.Add("estatus", contrato.accountState);
                            parametros.Add("idContrato", contrato.id);

                            OperacionesBD.ActualizarContrato(parametros);
                        }

                        movimiento = null;

                        contador += 1;
                    }
                    return(new HttpStatusCodeResult(200));
                }
                else
                {
                    return(new HttpStatusCodeResult(404));
                }
            }
            else
            {
                return(new HttpStatusCodeResult(404));
            }
        }