public ViewResult Index(ServiceParameterVM parameters)
        {
            ModelState.Clear();
            ViewBag.PageSize = parameters.pageSize;
            ViewBag.PageNumber = parameters.pageNumber;
            ViewBag.SearchString = parameters.searchString;
            ViewBag.fechaInicio = parameters.fechaInicio != null ? ((DateTime)parameters.fechaInicio).GetCurrentTime().ToShortDateString() : "";
            ViewBag.FechaFin = parameters.fechaFin != null ? ((DateTime)parameters.fechaFin).GetCurrentTime().ToShortDateString() : "";
            ViewBag.OnlyAplicados = parameters.onlyAplicados;
            ViewBag.PayCenterId = parameters.PayCenterId;
            ViewBag.PayCenterName = parameters.PayCenterName;

            return View(getEstadoDeCuenta(parameters));
        }
        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;
        }
        private SimpleGridResult<ProspectoPaycenterVM> getProspectos(ServiceParameterVM Parameters = null)
        {
            var prospectos = repository.GetProspectosPayCenter();

            //Aplicar filtros
               if (Parameters != null && (Parameters.fechaInicio != null || Parameters.fechaFin != null || Parameters.searchString != null))
            {
                 prospectos = prospectos.Where(x => (Parameters.fechaInicio == null || Parameters.fechaInicio <= x.FechaCreacion)
                                            && (Parameters.fechaFin == null || Parameters.fechaFin >= x.FechaCreacion)
                                            && ((string.IsNullOrEmpty(Parameters.searchString) || x.Nombre.Contains(Parameters.searchString))
                                             || (string.IsNullOrEmpty(Parameters.searchString) || x.Email.Contains(Parameters.searchString)))
                                            );

            }

            prospectos = prospectos.OrderByDescending(x => x.ProspectoId);

            SimpleGridResult<ProspectoPaycenterVM> simpleGridResult = new SimpleGridResult<ProspectoPaycenterVM>();
            IEnumerable<ProspectoPaycenterVM> ProspectosPaged = null;
            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 = prospectos.Count();
                    ProspectosPaged = prospectos.Skip(pageNumber * Parameters.pageSize).Take(Parameters.pageSize);
                }
            }
            simpleGridResult.Result = ProspectosPaged.OrderByDescending(x => x.FechaCreacion);

            return simpleGridResult;
        }
 public string GetProspectos(ServiceParameterVM parameters)
 {
     var ProspectosResult = getProspectos(parameters);
     return Newtonsoft.Json.JsonConvert.SerializeObject(ProspectosResult);
 }
        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 string GetPagoServicios(ServiceParameterVM parameters)
 {
     var pagoServiciosResult = getPagosServicio(parameters);
     return Newtonsoft.Json.JsonConvert.SerializeObject(pagoServiciosResult);
 }
        private SimpleGridResult<DepositoVM> getDepositos(ServiceParameterVM Parameters = null)
        {
            IEnumerable<Abono> depositos;
            if (PayCenterId == 0 && Parameters.ProveedorId == 0)
            {
                depositos = repository.ListAll().OrderByDescending(m => m.FechaCreacion);
            }
            else
            {
                if (PayCenterId > 0 && Parameters.ProveedorId > 0)
                {
                    depositos = repository.GetByPayCenterIdProveedorId(PayCenterId, Parameters.ProveedorId).OrderByDescending(m => m.FechaCreacion);
                }
                else
                {
                    if (PayCenterId > 0)
                    {
                        depositos = repository.GetByPayCenterId(PayCenterId).OrderByDescending(m => m.FechaCreacion);
                    }
                    else
                    {
                        depositos = repository.GetByProveedorId(Parameters.ProveedorId).OrderByDescending(m => m.FechaCreacion);
                    }
                }

            }

            var bancos = new BancosRepository().ListAll();

            SimpleGridResult<DepositoVM> simpleGridResult = new SimpleGridResult<DepositoVM>();
            var abonosVM = depositos.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 DepositoVM
                {
                    AbonoId = x.AbonoId,
                    PayCenterId = x.PayCenterId,
                    Banco = getBancoById(x.BancoId, ref bancos),
                    Comentarios = getComentarioCambioEstatus(x.AbonoId),
                    CuentaBancaria = getCuentaById(x.CuentaBancariaId, ref bancos),
                    FechaPago = x.FechaPago.GetCurrentTime().ToShortDateString(),
                    FechaCreacion = x.FechaCreacion.GetCurrentTime().ToShortDateString(),
                    Monto = x.Monto.ToString("C"),
                    PayCenter = x.PayCenter.UserName,
                    Referencia = x.Referencia,
                    Status = x.Status,
                    TipoCuenta = ((enumTipoCuenta)x.CuentaPayCenter.TipoCuenta).ToString(),
                    ProveedorName = GetNombreProveedor(x.ProveedorId),
                    Clave = x.Clave
                });

            //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))
            {
                abonosVM = abonosVM.Where(x => Parameters.searchString == null || (
                    x.Referencia.ContainsInvariant(Parameters.searchString) ||
                    x.Banco.ContainsInvariant(Parameters.searchString) ||
                    x.CuentaBancaria.ContainsInvariant(Parameters.searchString) ||
                    x.TipoCuenta.ContainsInvariant(Parameters.searchString) ||
                    x.StatusString.ContainsInvariant(Parameters.searchString) ||
                    ((enumEstatusMovimiento)x.Status).ToString().ContainsInvariant(Parameters.searchString) ||
                    x.Clave.ContainsInvariant(Parameters.searchString)
                    ));
            }
            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 = abonosVM.Count();
                    abonosVM = abonosVM.Skip(pageNumber * Parameters.pageSize).Take(Parameters.pageSize);
                }
            }
            simpleGridResult.Result = abonosVM;

            return simpleGridResult;
        }
        private SimpleGridResult<PayCenterVM> getPaycenters(ServiceParameterVM Parameters = null)
        {
            var paycenters = repository.ListAll();

            //Aplicar filtros
            if (Parameters != null && (Parameters.fechaInicio != null || Parameters.fechaFin != null || Parameters.searchString != null))
            {
                //Separar el searchString para obtener el filtro de estatus y el de nombre
                string filtroEstatus = null, filtroNombre = null;
                if (Parameters.searchString != null)
                {
                    string[] filtros = Parameters.searchString.Split(',');
                    filtroEstatus = filtros[0];
                    if (filtros.Length > 1) filtroNombre = filtros[1];
                }

                //<author>Moisés Cauich</author>
                //<comments>Se cambió el where porque ya no se usan el searchString directamente, se usan las variables string obenenidas en el paso anterior</comments>
                //<before>
                //paycenters = paycenters.Where(x => (Parameters.fechaInicio == null || Parameters.fechaInicio <= x.FechaIngreso)
                //                            && (Parameters.fechaFin == null || Parameters.fechaFin >= x.FechaIngreso)
                //                            && (Parameters.searchString == null || Parameters.searchString == "Todos"
                //                                || (Parameters.searchString == "Activo" && x.Activo == true)
                //                                || (Parameters.searchString == "Inactivo" && x.Activo == false)));
                //</before>
                //<after>
                paycenters = paycenters.Where(x => (Parameters.fechaInicio == null || Parameters.fechaInicio <= x.FechaIngreso)
                                            && (Parameters.fechaFin == null || Parameters.fechaFin >= x.FechaIngreso)
                                            && (string.IsNullOrEmpty(filtroEstatus) || filtroEstatus == "Todos"
                                                || (filtroEstatus == "Activo" && x.Activo == true)
                                                || (filtroEstatus == "Inactivo" && x.Activo == false))
                                            && (string.IsNullOrEmpty(filtroNombre) || x.UserName.Contains(filtroNombre)));
                //</after>
            }
            paycenters = paycenters.OrderByDescending(x => x.PayCenterId);
            SimpleGridResult<PayCenterVM> simpleGridResult = new SimpleGridResult<PayCenterVM>();
            IEnumerable<PayCenter> paycentersPaged = null;
            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 = paycenters.Count();
                    paycentersPaged = paycenters.Skip(pageNumber * Parameters.pageSize).Take(Parameters.pageSize);
                }
            }
            simpleGridResult.Result = paycentersPaged.ToListOfDestination<PayCenterVM>().OrderByDescending(x => x.FechaCreacion);

            return simpleGridResult;
        }
 public string GetPayCenters(ServiceParameterVM parameters)
 {
     var estadoCuentaResult = getPaycenters(parameters);
     return Newtonsoft.Json.JsonConvert.SerializeObject(estadoCuentaResult);
 }