Exemple #1
0
        /// <summary>
        /// Genera el contenido html
        /// </summary>
        /// <param name="reporte">Nombre del reporte</param>
        /// <param name="parametros">Parametros</param>
        /// <param name="format">Formato</param>
        /// <returns></returns>
        public static string Render(string reporte, string parametros, EnumRenderFormat format)
        {
            System.Globalization.CultureInfo ci = new System.Globalization.CultureInfo("es-ES");
            System.Threading.Thread.CurrentThread.CurrentCulture = ci;
            DotLiquid.Template.RegisterFilter(typeof(Reports.LiquidFilters));


            var obj_parametros = Newtonsoft.Json.JsonConvert.DeserializeObject <Dictionary <string, object> >(parametros);

            string texto = System.IO.File.ReadAllText(HttpContext.Current.Server.MapPath("~/Reports/" + reporte + ".html"));

            var xml = XDocument.Load(HttpContext.Current.Server.MapPath("~/Reports/" + reporte + ".data"));
            Dictionary <string, object> objeto = new Dictionary <string, object>();

            if (xml != null)
            {
                XNamespace ns      = xml.Root.GetDefaultNamespace();
                var        x       = xml.Descendants().Where(q => q.Name.LocalName == "DataSets").FirstOrDefault();
                string     strconn = xml.Descendants().Where(q => q.Name.LocalName == "DataSource").FirstOrDefault().Value;
                x.Elements().ToList().ForEach((e) =>
                {
                    bool IsMultiRecords = e.Attribute("IsMultiRecords") != null ? e.Attribute("IsMultiRecords").Value == "1" : false;
                    string Type         = e.Attribute("type") == null ? "query" : e.Attribute("type").Value;
                    string Name         = e.Attribute("name").Value;
                    string SQL          = e.Element(e.GetDefaultNamespace() + "SQL").Value;

                    System.Data.CommandType commandType = Type == "query" ? System.Data.CommandType.Text : System.Data.CommandType.StoredProcedure;
                    using (var conn = DbFactory.Conn(strconn))
                    {
                        conn.Open();

                        DynamicParameters parameters = new DynamicParameters();
                        e.Element(e.GetDefaultNamespace() + "Parameters").Elements().ToList().ForEach((a) =>
                        {
                            string parameterName      = a.Attribute("name").Value;
                            object value              = obj_parametros[parameterName];
                            System.Data.DbType dbType = GetType(a.Attribute("type") == null ? "string" : a.Attribute("type").Value);
                            parameters.Add(parameterName, value, dbType);
                        });
                        if (IsMultiRecords) //Si es tiene mas de una fila
                        {
                            List <object> datos = new List <object>();
                            conn.Query(sql: SQL, param: parameters, commandType: commandType).ToList().ForEach((f) =>
                            {
                                datos.Add(DapperHelpers.ToExpandoObject(f));
                            });
                            objeto.Add(Name, datos);
                        }

                        else
                        {
                            var firstOrDefault = conn.Query(sql: SQL, param: parameters, commandType: commandType).FirstOrDefault();
                            objeto.Add(Name, firstOrDefault);
                        }
                    }
                });
            }
            //variable globales que pueden ser usadas en el reporte
            objeto.Add("RenderFormat", format.ToString());
            objeto.Add("Today", DateTime.Now);
            DotLiquid.Template template = DotLiquid.Template.Parse(texto);
            string             html     = template.Render(Hash.FromDictionary(objeto));

            return(html);
        }