public ViewResult Buy(IEnumerable<PaqueteVM> model) { Succeed = false; var selected = model.Where(x => x.Selected); EstadoCuentaBR estadoCuentaBR = new EstadoCuentaBR(repository.context); var saldos = estadoCuentaBR.GetSaldosPagoServicio(PayCenterId); ViewData["Eventos"] = saldos.EventosDisponibles; ViewData["SaldoActual"] = saldos.SaldoDisponible.ToString("C"); if (selected.Count() == 0) { AddValidationMessage(enumMessageType.BRException, "No ha seleccionado ningún paquete"); return View(model); } decimal totalCompra = 0; foreach (var paquete in selected) { var precioPaquete = repository.GetPrecioByPaqueteId(paquete.PaqueteId); totalCompra += precioPaquete; } if (saldos.SaldoDisponible < totalCompra) { AddValidationMessage(enumMessageType.BRException, "No cuenta con saldo suficiente para comprar más paquetes"); return View(model); } ViewData["TotalCompra"] = totalCompra.ToString("C"); ViewData["EventosFinales"] = saldos.EventosDisponibles + selected.Sum(x=>x.Creditos); ViewData["SaldoActualFinal"] = (saldos.SaldoDisponible - selected.Sum(x => x.Precio)).ToString("C"); return View("Confirm", selected); }
public ViewResult Buy() { EstadoCuentaBR estadoCuenta = new EstadoCuentaBR(); var saldos = estadoCuenta.GetSaldosPagoServicio(PayCenterId); ViewData["Eventos"] = saldos.EventosDisponibles; ViewData["SaldoActual"] = saldos.SaldoDisponible.ToString("C"); return View(repository.ListAll().Select(x => new PaqueteVM { Creditos = x.Creditos, PaqueteId = x.PaqueteId, Precio = x.Precio })); }
public ActionResult Create() { PagoVM pagoVM = new PagoVM(); pagoVM.PayCenterId = PayCenterId; EstadoCuentaBR br = new EstadoCuentaBR(); if (PayCenterId > 0) { var saldo = br.GetSaldosPagoServicio(PayCenterId); ViewData["Eventos"] = saldo.EventosDisponibles; ViewData["SaldoActual"] = saldo.SaldoActual.ToString("C"); ViewData["SaldoDisponible"] = saldo.SaldoDisponible; ViewData["SaldoDisponibleString"] = saldo.SaldoDisponible.ToString("C"); var comisionFinanciamiento = br.GetComisionFinanciamiento(PayCenterId); ViewData["Comision"] = comisionFinanciamiento.Comision; ViewData["ComisionString"] = comisionFinanciamiento.Comision.ToString("C"); //Le resto lo que tiene como saldo negativo al máximo a financiar. ViewData["MaximoFinanciar"] = saldo.SaldoDisponible < 0 ? comisionFinanciamiento.Financiamiento + saldo.SaldoDisponible : comisionFinanciamiento.Financiamiento; } return View(pagoVM); }
public ViewResult Details(EstadoCuentaVM model) { var id = model.MovimientoId ; var action = model.CambioEstatusVM.Estatus; string comentario = model.CambioEstatusVM.Comentario != null ? model.CambioEstatusVM.Comentario.TrimEnd() : string.Empty ; AbonoRepository AbonoRepository; if (id > 0) { Movimiento Movimiento = repository.LoadById(id); if (Movimiento != null) { AbonoRepository = new AbonoRepository(repository.context);// Abono abono = AbonoRepository.LoadById(Movimiento.Id); if (abono != null) { if (Movimiento.IsAbono) { enumEstatusMovimiento nuevoEstatus = (enumEstatusMovimiento)Movimiento.Status; switch (action) { case "Cancelar": nuevoEstatus = enumEstatusMovimiento.Cancelado; break; case "Aplicar": nuevoEstatus = enumEstatusMovimiento.Aplicado; break; case "Rechazar": nuevoEstatus = enumEstatusMovimiento.Rechazado; break; } EstadoCuentaBR estadoCuentaBR = new EstadoCuentaBR(repository.context); // Movimiento.Status = (Int16)nuevoEstatus; abono.Status = (Int16)nuevoEstatus; estadoCuentaBR.ActualizarMovimiento(Movimiento.MovimientoId, nuevoEstatus, comentario); this.Succeed = estadoCuentaBR.Succeed; this.ValidationMessages = estadoCuentaBR.ValidationMessages; if (Succeed) { Succeed= repository.Save(); if (Succeed) { AddValidationMessage(enumMessageType.Succeed, "El movimiento ha sido " + nuevoEstatus.ToString() + " correctamente"); } else { //TODO: implemtar código que traiga mensajes del repositorio } } } else { //todo: Si no es abono que hacer? AddValidationMessage(enumMessageType.BRException, "No hay lógica para modificar este movimiento"); } } else { AddValidationMessage(enumMessageType.BRException, "No se encontró el Abono."); } } else { AddValidationMessage(enumMessageType.BRException, "No se encontró el movimiento."); } } else { AddValidationMessage(enumMessageType.BRException , "El movimiento no es válido."); } model = FillEstadoDeCuentaVM(id); return View(model); }
private SimpleGridResult<EstadoCuentaVM> getEstadoDeCuenta(ServiceParameterVM Parameters = null) { IEnumerable<SP_MovimientosSel_Result> movimientos; if (PayCenterId == 0) { //Le paso el 9 para que solome traiga el estado de cuenta de EvolucionaMovil movimientos = repository.GetMovimientosList(enumTipoCuenta.Pago_de_Servicios.GetHashCode(), ProveedorId: PROVEEDOR_EVOLUCIONAMOVIL); } else { //Julius:Comenté esta línea porque no filtraba solo los de Pago de servicios //movimientos = repository.GetMovimientosByPayCenterId(PayCenterId); //Le paso el 9 para que solome traiga el estado de cuenta de EvolucionaMovil movimientos = repository.GetMovimientosList(enumTipoCuenta.Pago_de_Servicios.GetHashCode(), PayCenterId, PROVEEDOR_EVOLUCIONAMOVIL); } SimpleGridResult<EstadoCuentaVM> simpleGridResult = new SimpleGridResult<EstadoCuentaVM>(); var estadosDeCuentaVM = movimientos.Where(x => ( Parameters == null || ( (Parameters.fechaInicio == null || (Parameters.fechaInicio < x.FechaCreacion)) && (Parameters.fechaFin == null || Parameters.fechaFin > x.FechaCreacion) && (Parameters.searchString == null || (x.UserName.ContainsInvariant(Parameters.searchString) || x.Clave.ContainsInvariant(Parameters.searchString) || ((enumMotivo)x.Motivo).ToString().ContainsInvariant(Parameters.searchString) || ((enumEstatusMovimiento)x.Status).ToString().ContainsInvariant(Parameters.searchString))) //Se modificó el valor APLICADO por PROCESANDO, debido a que es mas conveniente y no necesita mayor cambio && (Parameters.onlyAplicados?x.Status == enumEstatusMovimiento.Procesando.GetHashCode():true) ) ) ).Select(x => new EstadoCuentaVM { PayCenterId = x.PayCenterId, Motivo = ((enumMotivo)x.Motivo).ToString(), CuentaId = x.CuentaId, MovimientoId = x.MovimientoId, Id = x.Id, CuentaOrigenId = x.CuentaOrigenId, Clave = x.Clave, Comentarios =x.Comentarios, Concepto = x.Concepto + " - " + ((enumMotivo)x.Motivo).ToString(), Abono = x.IsAbono ? x.Monto.ToString("C2", ci) : string.Empty, Cargo = !x.IsAbono ? x.Monto.ToString("C2", ci) : string.Empty, Saldo = ((enumEstatusMovimiento)x.Status) == enumEstatusMovimiento.Procesando || ((enumEstatusMovimiento)x.Status) == enumEstatusMovimiento.Cancelado || !x.SaldoActual.HasValue ? "-" : ((decimal)x.SaldoActual).ToString("C2", ci), FechaCreacion = x.FechaCreacion.GetCurrentTime().ToString(), Status = x.Status }); if (PayCenterId > 0) { EstadoCuentaBR estadoCuentaBR = new EstadoCuentaBR(); var saldos = estadoCuentaBR.GetSaldosPagoServicio(PayCenterId); //todo:Checar que tipo de saldo debo de mostrar ViewData["Eventos"] = saldos.EventosDisponibles; ViewData["SaldoActual"] = saldos.SaldoActual.ToString("C"); ViewData["SaldoDisponible"] = saldos.SaldoDisponible.ToString("C"); } if (Parameters != null) { simpleGridResult.CurrentPage = Parameters.pageNumber; simpleGridResult.PageSize = Parameters.pageSize; if (Parameters.pageSize > 0) { var pageNumber = Parameters.pageNumber >= 0 ? Parameters.pageNumber : 0; simpleGridResult.CurrentPage = pageNumber; simpleGridResult.TotalRows = estadosDeCuentaVM.Count(); estadosDeCuentaVM = estadosDeCuentaVM.Skip(pageNumber * Parameters.pageSize).Take(Parameters.pageSize); } } simpleGridResult.Result = estadosDeCuentaVM; return simpleGridResult; }
public ViewResult Confirm(IEnumerable<PaqueteVM> model) { Succeed = false; //TODO:Validar que tenga el saldo suficiente. Quiero agregar un campo al PayCenter para determinar su saldo sin tener que recalcularlo PaycenterBR payCenterBR = new PaycenterBR(); var cuentaId = payCenterBR.GetOrCreateCuentaPayCenter(PayCenterId, enumTipoCuenta.Pago_de_Servicios, PROVEEDOR_EVOLUCIONAMOVIL); EstadoCuentaBR estadoCuentaBR = new EstadoCuentaBR(repository.context); decimal totalCompra = 0; List<CompraEvento> paquetesComprados = new List<CompraEvento>(); foreach (var paquete in model) { //TODO:Esta validación debería estar en un BR aparte var p = repository.LoadById(paquete.PaqueteId); if (p == null) { AddValidationMessage(enumMessageType.BRException, "No se ha encontrado el paquete de " + paquete.Creditos.ToString() + "créditos"); break; } if (p.FechaVencimiento >= DateTime.UtcNow.GetCurrentTime()) { totalCompra += p.Creditos; CompraEvento compraEvento = new CompraEvento { Consumidos = 0, Eventos = p.Creditos, FechaCreacion = DateTime.UtcNow.GetCurrentTime(), Monto = p.Precio, PaqueteId = p.PaqueteId, PayCenterId = PayCenterId }; //Agrego a la lista de paquetes que se van a agregar paquetesComprados.Add(compraEvento); //Agrego al repositorio repository.Add(compraEvento); var movimiento = estadoCuentaBR.CrearMovimiento(PayCenterId, enumTipoMovimiento.Cargo, 0, cuentaId, p.Precio, enumMotivo.Compra, PayCenterName, enumEstatusMovimiento.Aplicado); //Agrego movimiento de abono para la empresa //TODO: ESTO DEBE DE IR EN EstadoCuentaBR //TODO: Revisar el saldo actual //****************************************************************************************************+ var movimientoEmpresaPago = new MovimientoEmpresa { Clave = DateTime.UtcNow.GetCurrentTime().ToString("yyyyMMdd") + "0" + ((Int16)enumMotivo.Financiamiento).ToString() + new Random().Next(0, 99999).ToString(), IsAbono = true, Monto = p.Precio, Motivo = (short)enumMotivo.Compra, Movimiento = movimiento, //SaldoActual = saldoActual, Status = (short)enumEstatusMovimiento.Procesando, UserName = PayCenterName, FechaCreacion = DateTime.UtcNow.GetCurrentTime(), FechaActualizacion = DateTime.UtcNow.GetCurrentTime() }; MovimientosEmpresaRepository movimientosEmpresaRepository = new MovimientosEmpresaRepository(repository.context); movimientosEmpresaRepository.Add(movimientoEmpresaPago); //****************************************************************************************************+ } else { AddValidationMessage(enumMessageType.BRException, "El paquete seleccionado ha expirado. Intente con otro paquete o pongase en contacto con soporte"); break; } } var saldos = estadoCuentaBR.GetSaldosPagoServicio(PayCenterId); if (saldos.SaldoDisponible < totalCompra) { AddValidationMessage(enumMessageType.BRException, "No cuenta con saldo suficiente para comprar más paquetes"); return View(model); } Succeed = repository.Save(); ViewBag.Succeed = Succeed; if (Succeed) { AddValidationMessage(enumMessageType.Succeed, "Se ha realizado la compra de " + totalCompra + " créditos exitosamente."); //Julius: Permite avisar a los emails configurados en el momento que se realizó la compra del paquete StringBuilder emailMessage = new StringBuilder(); emailMessage.AppendLine("<p>El Paycenter <b>" + this.PayCenterName + "</b> ha realizado la compra de:<p>"); emailMessage.AppendLine("<table>"); paquetesComprados.ForEach(x => { emailMessage.AppendLine("<tr>"); emailMessage.AppendLine("<td>Paquete: <b>PAQ" + x.PaqueteId + "</b></td>"); emailMessage.AppendLine("<td>Eventos: <b>" + x.Eventos.ToString() + "</b></td>"); emailMessage.AppendLine("<td>Monto: <b>" + x.Monto.ToString("C") + "</b></td>"); emailMessage.AppendLine("</tr>"); }); emailMessage.AppendLine("<p>Fecha de compra: " + DateTime.Now.GetCurrentTime().ToString() + "</p>"); emailMessage.AppendLine("</table>"); var paquetesEmail = ConfigurationManager.AppSettings.Get("PaquetesEmail"); EmailHelper.Enviar(emailMessage.ToString(), "Compra Paquete - " + this.PayCenterName, paquetesEmail); } else { //TODO: Leer de los mensajes que vengan del save //ValidationMessages = repository.ValidationMessages AddValidationMessage(enumMessageType.UnhandledException, "No fue posible realizar la compra. Intente más tarde"); } return View(model); }
public ActionResult Create(PagoVM model) { if (PayCenterId == 0) { model.PayCenterName = string.Empty; AddValidationMessage(enumMessageType.DataValidation, "Por favor, seleccione primero un PayCenter."); return View(model); } EstadoCuentaBR br = new EstadoCuentaBR(repository.context); var saldo = br.GetSaldosPagoServicio(PayCenterId); ViewData["SaldoActual"] = saldo.SaldoActual.ToString("C"); ViewData["SaldoDisponible"] = saldo.SaldoDisponible.ToString("C"); ViewData["Eventos"] = saldo.EventosDisponibles; if (model.Importe <= 0) { AddValidationMessage(enumMessageType.DataValidation, "El importe no puede ser menor a $0.00."); return View(model); } if (ModelState.IsValid) { #region Crear Movimiento Inicial Pago pago = new Pago(); PaycenterBR payCenterBR = new PaycenterBR(); var cuentaId = payCenterBR.GetOrCreateCuentaPayCenter(PayCenterId, enumTipoCuenta.Pago_de_Servicios, PROVEEDOR_EVOLUCIONAMOVIL); //Devuelve si usa evento en el pago bool usaEvento = false; List<Movimiento> movimientos = br.CrearMovimientosPagoServicios(PayCenterId, (Decimal)model.Importe, PayCenterName, out usaEvento); Succeed = br.Succeed; ValidationMessages = br.ValidationMessages; if (!Succeed) { return View(model); } #endregion #region Registro de Pago string Referencia = ""; Mapper.CreateMap<PagoVM, Pago>().ForMember(dest => dest.DetallePagos, opt => opt.Ignore()); Mapper.Map(model, pago); pago.Servicio = model.Servicios.Where(x => x.Value == model.ServicioId).FirstOrDefault().Text; pago.PayCenterId = PayCenterId; pago.Movimiento = movimientos.Where(x => x.Motivo == (short)enumMotivo.Pago).First(); pago.UsoEvento = usaEvento; var iDetalles = serviciosRepository.LoadDetallesServicioByServicioID(pago.ServicioId); foreach (DetalleServicio d in iDetalles) { var valor = Request.Form[d.DetalleServicioId.ToString()]; if (d.EsReferencia) Referencia = valor; pago.DetallePagos.Add(new DetallePago { Campo = d.Campo, Valor = valor }); } repository.Add(pago); repository.Save(); //Actualizo el Id de referencia del Pago en los movimientos correspondientes br.ActualizaReferenciaIdMovimiento(pago.MovimientoId, pago.PagoId); repository.Save(); model.PagoId = pago.PagoId; #endregion #region Registro Ticket try { //Verifica si tiene configurada la comisión que mostrará al cliente, se toma el valor para mostrar en el ticket ParametrosRepository parametrosRepository = new ParametrosRepository(); var parametrosPayCenter = parametrosRepository.GetParametrosPayCenter(PayCenterId); var parametrosGlobales = parametrosRepository.GetParametrosGlobales(); Ticket ticket = new Ticket(); ticket.ClienteEmail = ""; ticket.ClienteNombre = pago.ClienteNombre; ticket.ClienteTelefono = ""; ticket.Comision = (parametrosPayCenter != null && parametrosPayCenter.ComisionCliente != null ? (Decimal)parametrosPayCenter.ComisionCliente : 0); //Comision configurada del paycenter ticket.FechaCreacion = DateTime.UtcNow.GetCurrentTime(); ticket.Folio = createFolio(pago.PagoId); ticket.Importe = pago.Importe; ticket.Leyenda = parametrosGlobales != null ? parametrosGlobales.LeyendaTicket : null; ticket.PagoId = pago.PagoId; ticket.PayCenterId = pago.PayCenterId; ticket.TipoServicio = pago.Servicio; ticket.Referencia = Referencia; ticket.PayCenterName = PayCenterName; ticket.FechaVencimiento = pago.FechaVencimiento; tRepository.Add(ticket); Succeed = tRepository.Save(); if (!Succeed) { AddValidationMessage(enumMessageType.UnhandledException, "Su pago ha sido Registrado con éxito. Sin embargo, no se pudo generar el ticket, favor de comunicarse con un ejecutivo. "); } //Ejecuta el envío de correo de forma asíncrona EnviarTicketDelegate enviarDelegate = new EnviarTicketDelegate(EnviarTicketEmail); var result = enviarDelegate.BeginInvoke(pago,null, null); return RedirectToAction("Ticket/" + ticket.PagoId.ToString()); } catch (Exception ex) { AddValidationMessage(enumMessageType.UnhandledException, "Su pago ha sido Registrado con éxito. Sin embargo, no se pudo generar el ticket, favor de comunicarse con un ejecutivo. "); return View(model); } #endregion } else { AddValidationMessage(enumMessageType.BRException, "Los datos no son válidos"); } return View(model); }
public ViewResult Details(PagoVM model) { //Aquí van las acciones del PayCenter y Staf para el depósito var id = model.PagoId; var action = model.CambioEstatusVM.Estatus; string comentario = model.CambioEstatusVM.Comentario != null ? model.CambioEstatusVM.Comentario.TrimEnd() : null; Pago pago = repository.ListAll().Where(x => x.PagoId == model.PagoId).FirstOrDefault(); //Reinicio el ModelState porque no valido sus valores ModelState.Clear(); if (id > 0) { var movimiento = pago.Movimiento; //validar que exista el moviento y sino mandar mensaje de error if (movimiento != null) { EstadoCuentaBR estadoCuentaBR = new EstadoCuentaBR(repository.context); //Asigno valor default en caso de que entre en ningún case de switch enumEstatusMovimiento nuevoEstatus = (enumEstatusMovimiento)movimiento.Status; switch (action) { case "Cancelar": nuevoEstatus = enumEstatusMovimiento.Cancelado; break; case "Aplicar": nuevoEstatus = enumEstatusMovimiento.Aplicado; break; case "Rechazar": nuevoEstatus = enumEstatusMovimiento.Rechazado; break; } movimiento = estadoCuentaBR.ActualizarMovimiento(pago.MovimientoId, nuevoEstatus, comentario); Succeed = estadoCuentaBR.Succeed; ValidationMessages = estadoCuentaBR.ValidationMessages; if (Succeed) { pago.Status = movimiento.Status; Succeed = repository.Save(); if (Succeed) { ModelState.Clear(); AddValidationMessage(enumMessageType.Succeed, "El reporte de depósito ha sido " + nuevoEstatus.ToString() + " correctamente"); var paycenter = pRepository.LoadById(pago.PayCenter.PayCenterId); if (paycenter != null) { //Ejecuta el envío de correo de forma asíncrona EnviarCambioEstatusDelegate enviarDelegate = new EnviarCambioEstatusDelegate(EnviarCambioEstatusEmail); var result = enviarDelegate.BeginInvoke(nuevoEstatus, pago,paycenter, null, null); EnviarCambioEstatusEmail(nuevoEstatus, pago, paycenter); } //No obtuve lo errores por que es una clase estática y va a almacenar los de todas las sesiones //ValidationMessages.AddRange(EmailHelper //AddValidationMessage(enumMessageType.Notification, "No pudo enviarse el email de aviso. Comuníquelo al administrador"); //return Details(id); } else { //TODO: implemtar código que traiga mensajes del repositorio } } } else { AddValidationMessage(enumMessageType.BRException, "No se encontró el movimiento para el depósito."); } } else { AddValidationMessage(enumMessageType.BRException, "No existe el depósito."); } return Details(id); }
private SimpleGridResult<PagoServicioVM> getPagosServicio(ServiceParameterVM Parameters = null) { IEnumerable<SP_PagosSel_Result> pagos; pagos = repository.GetPagosList(PayCenterId); SimpleGridResult<PagoServicioVM> simpleGridResult = new SimpleGridResult<PagoServicioVM>(); var pagosServicioVM = pagos.Where(x => (Parameters == null || ( (Parameters.fechaInicio == null || (Parameters.fechaInicio < x.FechaCreacion)) && (Parameters.fechaFin == null || Parameters.fechaFin > x.FechaCreacion) //Se modificó el valor APLICADO por PROCESANDO, debido a que es mas conveniente y no necesita mayor cambio && (Parameters.onlyAplicados ? x.Status == enumEstatusMovimiento.Procesando.GetHashCode() : true) ) ) ).Select(x => new PagoServicioVM { PayCenterId = x.PayCenterId != null ? (int)x.PayCenterId : 0, Folio = x.Folio != null ? x.Folio : "NA", Servicio = x.Servicio, NombreCliente = x.ClienteNombre, PayCenterName = x.Nombre != null ? x.Nombre : "[Desconocido]", PagoId = x.PagoId, //todo:Optimizar esta consulta para que no haga un load por cada registro que levante. Comentarios = x.Comentarios != null? x.Comentarios : "Sin comentarios", Monto = x.Importe.ToString("C"), FechaCreacion = x.FechaCreacion.GetCurrentTime().ToString(), FechaVencimiento = x.FechaVencimiento.GetCurrentTime().ToString(), Status = ((enumEstatusMovimiento)x.Status).ToString() }); //Filtrar por searchString: Lo puse después del primer filtro porque se complicaba obtener los strings de las tablas referenciadas como bancos, cuenta bancaria, etc. if (Parameters != null && !string.IsNullOrEmpty(Parameters.searchString)) { pagosServicioVM = pagosServicioVM.Where(x => Parameters.searchString == null || ( x.Comentarios.ContainsInvariant(Parameters.searchString) || x.Folio.ContainsInvariant(Parameters.searchString) || x.NombreCliente.ContainsInvariant(Parameters.searchString) || x.Servicio.ContainsInvariant(Parameters.searchString) || x.Status.ContainsInvariant(Parameters.searchString) )); } //Estas líneas están de más, ya que el filtro se aplicó arriba //if (Parameters != null && Parameters.onlyAplicados) // //Se modificó el valor APLICADO por PROCESANDO, debido a que es mas conveniente y no necesita mayor cambio // pagosServicioVM = pagosServicioVM.Where(x => x.Status == enumEstatusMovimiento.Procesando.ToString()); if (Parameters != null && !string.IsNullOrEmpty(Parameters.searchString)) pagosServicioVM = pagosServicioVM.Where(x => x.NombreCliente.ToLower().Contains(Parameters.searchString.ToLower()) || x.Servicio.ToLower().Contains(Parameters.searchString.ToLower())); if (PayCenterId > 0) { EstadoCuentaBR estadoCuentaBR = new EstadoCuentaBR(); var saldos = estadoCuentaBR.GetSaldosPagoServicio(PayCenterId); //todo:Checar que tipo de saldo debo de mostrar ViewData["Eventos"] = saldos.EventosDisponibles; ViewData["SaldoActual"] = saldos.SaldoActual.ToString("C"); ViewData["SaldoDisponible"] = saldos.SaldoDisponible.ToString("C"); } if (Parameters != null) { simpleGridResult.CurrentPage = Parameters.pageNumber; simpleGridResult.PageSize = Parameters.pageSize; if (Parameters.pageSize > 0) { var pageNumber = Parameters.pageNumber >= 0 ? Parameters.pageNumber : 0; simpleGridResult.CurrentPage = pageNumber; simpleGridResult.TotalRows = pagosServicioVM.Count(); pagosServicioVM = pagosServicioVM.Skip(pageNumber * Parameters.pageSize).Take(Parameters.pageSize); } } simpleGridResult.Result = pagosServicioVM; return simpleGridResult; }
public ActionResult Confirm(AbonoVM model) { bool exito = true; if (!(validations.IsValidReferenciaDeposito(model.Referencia, model.BancoId))) { //todo:Preguntar de esta validacion AddValidationMessage(enumMessageType.BRException, "La referencia especificada ya existe en el sistema. Favor de verificarla."); exito = false; } if (Convert.ToDateTime(model.FechaPago).CompareTo(DateTime.UtcNow.GetCurrentTime()) == 1) { AddValidationMessage(enumMessageType.BRException, "La fecha de depósito debe ser menor o igual a la fecha actual."); exito = false; } if (exito) { if (ModelState.IsValid) { PaycenterBR payCenterBR = new PaycenterBR(); model.CuentaId=payCenterBR.GetOrCreateCuentaPayCenter(PayCenterId, model.TipoCuenta,model.ProveedorId); Abono abono = new Abono { BancoId = model.BancoId, CuentaBancariaId = model.CuentaBancariaId, CuentaId = model.CuentaId, Status = (Int16)enumEstatusMovimiento.Procesando, FechaCreacion = DateTime.UtcNow.GetCurrentTime(), FechaPago = (DateTime)model.FechaPago, Monto = (Decimal)model.Monto, PayCenterId = PayCenterId, Referencia = model.Referencia, RutaFichaDeposito = model.RutaFichaDeposito, ProveedorId = (short)model.ProveedorId }; repository.Add(abono); EstadoCuentaBR estadoCuentaBR = new EstadoCuentaBR(repository.context); var movimiento = estadoCuentaBR.CrearMovimiento(PayCenterId, enumTipoMovimiento.Abono, model.AbonoId, model.CuentaId, (Decimal)model.Monto, enumMotivo.Deposito, PayCenterName); abono.Clave = movimiento.Clave; exito = repository.Save(); //Julius: Tuve que guardar otra vez para guardar el abonoId generado en la BD estadoCuentaBR.ActualizaReferenciaIdMovimiento(movimiento.MovimientoId, abono.AbonoId); repository.Save(); model.AbonoId = abono.AbonoId; AddValidationMessage(enumMessageType.Succeed, "Se ha registrado su depósito con éxito con clave " + movimiento.Clave + ". En breve será revisado y aplicado."); } } else { AddValidationMessage(enumMessageType.BRException, "No fue posible guardar el reporte de depósito."); } model.FechaCreacion = DateTime.UtcNow.GetCurrentTime(); return View(model); }
public ActionResult Report() { ReporteDepositoVM model = new ReporteDepositoVM(); model.PayCenterId = PayCenterId; if (PayCenterId > 0) { EstadoCuentaBR estadoCuenta = new EstadoCuentaBR(); var saldos = estadoCuenta.GetSaldosPagoServicio(PayCenterId); ViewBag.SaldoActual = saldos.SaldoActual.ToString("C"); ViewBag.SaldoDisponible = saldos.SaldoDisponible.ToString("C"); ViewBag.Eventos = saldos.EventosDisponibles.ToString(); } LlenarBancos_Cuentas(); ViewBag.ReferenceCaptions = Newtonsoft.Json.JsonConvert.SerializeObject(new CuentasBancariasRepository().GetReferenceCaptions().Select(x => new { BancoId = x.BancoId, CuentaId = x.CuentaId, ReferenceCaption = x.ReferenceCaption })); return View(model); }
public ViewResult Details(AbonoVM model) { //Aquí van las acciones del PayCenter y Staf para el depósito var id = model.AbonoId; var action = model.CambioEstatusVM.Estatus; string comentario = model.CambioEstatusVM.Comentario != null ? model.CambioEstatusVM.Comentario.TrimEnd() : null; Abono abono = repository.LoadById(id); if (id > 0) { var movimiento = abono.CuentaPayCenter.Movimientos.Where(x => x.Motivo == enumMotivo.Deposito.GetHashCode() && x.Id == abono.AbonoId).FirstOrDefault(); //validar que exista el moviento y sino mandar mensaje de error if (movimiento != null) { EstadoCuentaBR estadoCuentaBR = new EstadoCuentaBR(repository.context); //Asigno valor default en caso de que entre en ningún case de switch enumEstatusMovimiento nuevoEstatus = (enumEstatusMovimiento)movimiento.Status; switch (action) { case "Cancelar": nuevoEstatus = enumEstatusMovimiento.Cancelado; break; case "Aplicar": nuevoEstatus = enumEstatusMovimiento.Aplicado; break; case "Rechazar": nuevoEstatus = enumEstatusMovimiento.Rechazado; break; } abono.Status = (Int16)nuevoEstatus; movimiento = estadoCuentaBR.ActualizarMovimiento(movimiento.MovimientoId, nuevoEstatus, comentario); this.Succeed = estadoCuentaBR.Succeed; this.ValidationMessages = estadoCuentaBR.ValidationMessages; if (Succeed) { Succeed = repository.Save(); if (Succeed) { ModelState.Clear(); AddValidationMessage(enumMessageType.Succeed, "El reporte de depósito ha sido " + nuevoEstatus.ToString() + " correctamente"); //return Details(id); } else { //TODO: implemtar código que traiga mensajes del repositorio } } } else { this.AddValidationMessage(enumMessageType.BRException, "No se encontró el movimiento para el depósito."); } } else { this.AddValidationMessage(enumMessageType.BRException, "No existe el depósito."); } return Details(id); }
private PayCenterVM FillPayCenterVM(int Id) { PayCenter paycenter = repository.LoadById(Id); if (paycenter == null) { return null; } PayCenterVM paycenterVM = new PayCenterVM(); Mapper.Map(paycenter, paycenterVM); //<author>Moisés Cauich</author> //<comments>Obtener los datos de EstadoCuentaBR</comments> //<before> ////Cargar los movimientos para calcular el saldo //EstadoDeCuentaRepository edoCuentaRepository = new EstadoDeCuentaRepository(); //var edoCuenta = edoCuentaRepository.GetMovimientosByPayCenterId(paycenterVM.PayCenterId); //paycenterVM.SaldoActual = (edoCuenta.Where(x => x.IsAbono).Sum(x => x.Monto) - edoCuenta.Where(x => !x.IsAbono).Sum(x => x.Monto)).ToString("C"); ////Cargar los eventos //PaquetesRepository paquetesRepository = new PaquetesRepository(); //paycenterVM.Eventos = paquetesRepository.GetEventosByPayCenter(paycenterVM.PayCenterId).ToString(); ////Asignar pagos realizados //paycenterVM.PagosRealizados = paycenter.Pagos.Count.ToString(); //</before> //<after> EstadoCuentaBR estadoCuenta = new EstadoCuentaBR(); var saldos = estadoCuenta.GetSaldosPagoServicio(Id); paycenterVM.SaldoActual = saldos.SaldoActual.ToString("C"); paycenterVM.SaldoDisponible = saldos.SaldoDisponible.ToString("C"); paycenterVM.Eventos = saldos.EventosDisponibles.ToString(); paycenterVM.PagosRealizados = paycenter.Pagos.Count(p => p.Status == enumEstatusMovimiento.Aplicado.GetHashCode()).ToString(); //</after> return paycenterVM; }
public string GetSaldosPagoServicio(int PayCenterId) { EstadoCuentaBR br = new EstadoCuentaBR(); var saldo = br.GetSaldosPagoServicio(PayCenterId); return Newtonsoft.Json.JsonConvert.SerializeObject(saldo); }