public ActionResult RetirarContrato() { System.IO.StreamReader reader = new System.IO.StreamReader(HttpContext.Request.InputStream); string rawSendGridJSON = reader.ReadToEnd(); //Convertimos a json el resultado para facilitar el acceso //a sus propiedades JObject json = JObject.Parse(rawSendGridJSON); string idContrato = json.Properties().FirstOrDefault().Value.ToString(); // Borrar los movimientos obtenidos de mambu en la BD Devengados OperacionesBD.BorrarMovimientosContratos(idContrato); //Borrar las amortizaciones obtenidas de mambu en la BD Devengados OperacionesBD.BorrarAmortizacionesContrato(idContrato); //Obtener cliente asociado al contrato string idCliente = OperacionesBD.ObtenerClienteContrato(idContrato); //Borrar el cliente OperacionesBD.BorrarCliente(idCliente); //Borrar el contrato OperacionesBD.BorrarContrato(idContrato); return(new HttpStatusCodeResult(200)); }
public ActionResult CancelarPagos() { System.IO.StreamReader reader = new System.IO.StreamReader(HttpContext.Request.InputStream); string rawSendGridJSON = reader.ReadToEnd(); //Convertimos a json el resultado para facilitar el acceso //a sus propiedades JObject json = JObject.Parse(rawSendGridJSON); string idContrato = json.Properties().FirstOrDefault().Value.ToString(); long contador = 0; List <Transaccion> transaccions = Operaciones.ObtenerTransacciones(idContrato); var contratosAgrupados = (from x in transaccions group x by new { x.parentAccountKey } into campos select new { idContrato = campos.Key.parentAccountKey }); foreach (var valor in contratosAgrupados) { int numeroPago = 1; Loan contrato = Operaciones.ObtenerCuentaPrestamo(valor.idContrato); OperacionesBD.BorrarMovimientosContratos(contrato.id); // obtiene nuevamente las transacciones del contrato List <Transaccion> transaccionesNuevas = Operaciones.ObtenerTransacciones(Constantes.TRANSACTIONS_TYPE_DISBURSMENT, valor.idContrato).ToList(); transaccionesNuevas.AddRange(Operaciones.ObtenerTransacciones(Constantes.TRANSACTIONS_TYPE_REPAYMENT, valor.idContrato).ToList()); foreach (Transaccion transaccion in transaccionesNuevas) { Movimiento movimiento = new Movimiento(); string existeMovimiento = Negocio.OperacionesBD.ExisteTransaccion(transaccion.transactionId); if (transaccion.type.Equals("REPAYMENT")) { movimiento.codigo = "PAGO"; } else if (transaccion.type.Equals("DISBURSMENT")) { movimiento.codigo = "DESEMBOLSO"; } else if (transaccion.type.Equals(Negocio.Globales.Constantes.ESTATUS_WRITE_OFF)) { movimiento.codigo = "CASTIGO"; } else { movimiento.codigo = ""; } 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 (existeMovimiento.Equals("0")) { OperacionesBD.InsertarMovimiento(movimiento); } movimiento = null; } // 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); 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); contador += 1; } return(new HttpStatusCodeResult(200)); }
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)); } }