public static int CantidadDePublicacionesAComprar(String descripcion = null, RangoFechas rango = null, List <Rubro> rubros = null)
        {
            var    parametros = new List <QueryParameter>();
            String sql        = "select count(*) as cantidad " + GetBusquedaQuery(descripcion, rango, rubros, parametros);

            var dt = DataBase.GetInstance().TypedQuery(sql, parametros.ToArray());

            return(Convert.ToInt32(dt.Rows[0]["cantidad"]));
        }
        public static String GetBusquedaQuery(String descripcion, RangoFechas rango, List <Rubro> rubros, List <QueryParameter> parametros)
        {
            var condiciones = new List <String>();

            if (descripcion != null && !descripcion.Trim().Equals(""))
            {
                var condicion = "upper(descripcion) like @descripcionParam";
                condiciones.Add(condicion);
                parametros.Add(new QueryParameter("descripcionParam", SqlDbType.NVarChar, "%" + descripcion.ToUpper() + "%"));
            }
            if (rango != null)
            {
                var condicion = String.Format("fecha_espectaculo between @inicio and @fin");
                condiciones.Add(condicion);
                parametros.Add(new QueryParameter("inicio", SqlDbType.DateTime, rango.inicio));
                parametros.Add(new QueryParameter("fin", SqlDbType.DateTime, rango.fin));
            }
            else
            {
                var condicion = String.Format("fecha_espectaculo >= @fechaActualSistema");
                condiciones.Add(condicion);
                parametros.Add(new QueryParameter("fechaActualSistema", SqlDbType.DateTime, Contexto.FechaActual));
            }
            if (rubros != null && rubros.Count != 0)
            {
                var filtrosRubro = new List <String>();

                foreach (Rubro r in rubros)
                {
                    var s = String.Format("rubro_id = {0}", r.id);
                    filtrosRubro.Add(s);
                }
                var condicion = "(" + filtrosRubro.Aggregate((x, y) => x + " or " + y) + ")";

                condiciones.Add(condicion);
            }

            String condicionWhere = String.Format("where estado = '{0}' and (fecha_vencimiento > @fechaActual or fecha_vencimiento is null ) ",
                                                  new Publicado().Codigo());

            parametros.Add(new QueryParameter("fechaActual", SqlDbType.DateTime, Contexto.FechaActual));

            if (condiciones.Count != 0)
            {
                condicionWhere += " and " + condiciones.Aggregate((prod, next) => prod + " and " + next);
            }

            var sql = "from COMPUMUNDOHIPERMEGARED.PublicacionesView "
                      + condicionWhere;

            return(sql);
        }
        public static List <Publicacion> FiltrarPublicacionesAComprar(String descripcion = null, RangoFechas rango = null, List <Rubro> rubros = null, Pagina pag = null)
        {
            if (pag == null)
            {
                pag = new Pagina(1, 10);
            }

            var    parametros = new List <QueryParameter>();
            String sql        = "select * " + GetBusquedaQuery(descripcion, rango, rubros, parametros)
                                + " order by grado_comision desc, fecha_espectaculo asc "
                                + String.Format(" OFFSET {0} ROWS FETCH NEXT {1} ROWS ONLY", pag.FirstResultIndex(), pag.pageSize);

            var dt = DataBase.GetInstance().TypedQuery(sql, parametros.ToArray());

            return(PublicacionesFromDataTable(dt));
        }