Wednesday, June 29, 2016

Html Reporting

Print Preview 


http://etimbo.github.io/jquery-print-preview-plugin/example/index.html

Example




report.cshtml file


    <script src="http://kendo.cdn.telerik.com/2016.2.607/js/kendo.all.min.js"></script>
    <script src="~/assest/grid/Comman.js"></script>
    <script src="~/assest/grid/Reporting.js"></script>

@{
    ViewBag.Title = "Index";
    Layout = "~/Views/Shared/_Layout.cshtml";
}


<div class="container" id="content">
    <h2 data-bind="text:Titile"></h2>
    <p data-bind="text:Date"> </p>
    <table class="table">
        <thead>
            <tr>
                <th>Id</th>
                <th>Name</th>
                <th>Address</th>
            </tr>
        </thead>
        <tbody id="detailTableGrid">
         
        </tbody>
    </table>
    Total Amount <h3 data-bind="text:total"></h3>
</div>

<script type="text/x-kendo-template" id="booking-details">

                        # for(var key=0; key < data.e.Report.length; key++){#
                        <tr>
                            <td>
                                #= data.e.Report[key]["Id"] #
                            </td>
                            <td>
                                #= data.e.Report[key]["Name"] #
                            </td>
                            <td>
                                #= data.e.Report[key]["Address"] #
                            </td>
                            <td>
                                #= data.e.Report[key]["Payment"] #
                            </td>
                        </tr>

                        #}#

</script>

----------------------------------

Reporting.ts file


/// <reference path="comman.ts" />

module Reporting {

    $(function () {

        new serverCaller().callservice("/Reporting/GetReportInfo", null).done(function (e) {

            console.log(e);

            const template = kendo.template($('#booking-details').html());
            var data: any = {
                e: e
            };
            var xxx: any = {
                total: getTotal(data.e.Report),
                Titile: data.e.ReportHeader.Titile ,
                Date : data.e.ReportHeader.Date 
            };
            kendo.bind($("#content"), xxx);
            $('#detailTableGrid').html(template(data));
        });


        function getTotal(e): number {

            var total: number = 0;
            $.each(e, function (i, d) {
                total += Number(d["Payment"]);
            });

            return total;
        }
    });

  
    class serverCaller extends JTypeScipt.apiConnector { }
}

----------------------

Controller.cs file

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace XXXZX.Controllers
{
    public class ReportingController : Controller
    {
        // GET: Reporting
        public ActionResult Index()
        {
            return View();
        }

        public JsonResult GetReportInfo() {

            return Json(new ReportRepo().GetReport(), JsonRequestBehavior.AllowGet);
        }
    }


    public class ReportRepo{


        public View GetReport() {

            Random rd = new Random();
            var x = new List<Report>();
            for (int i = 0; i < 5; i++)
            {
                x.Add(new Report {
                     Address = $"address {i}",
                     Id = i,
                     Name = $"name {i}",
                     Payment = rd.Next(100,500)
                });
            }

            return new View {
                Report = x,
                ReportHeader = new ReportHeader {
                    Date = DateTime.Today.ToShortDateString(),
                    Titile = "Simple Report",
                }
            };
        }

    }

    public class View {

        public ReportHeader ReportHeader { get; set; }
        public List<Report> Report { get; set;}
    }

    public class ReportHeader {

        public string Titile { get; set; }
        public string Date { get; set; }
    }

    public class Report {

        public int Id { get; set; }
        public string Name { get; set; }
        public string Address { get; set; }
        public int Payment { get; set; }
    }
}

---------------


Sample Json


{"ReportHeader":{"Titile":"Simple Report","Date":"6/29/2016"},"Report":[{"Id":0,"Name":"name 0","Address":"address 0","Payment":218},{"Id":1,"Name":"name 1","Address":"address 1","Payment":246},{"Id":2,"Name":"name 2","Address":"address 2","Payment":135},{"Id":3,"Name":"name 3","Address":"address 3","Payment":318},{"Id":4,"Name":"name 4","Address":"address 4","Payment":483}]}



Print Content




function printTicket() {
           var mywindow = window.open('', 'PRINT', 'height=400,width=600');
           mywindow.document.write('<html><head><title>' + document.title + '</title>');
 
           mywindow.document.write('</head><body>');
           mywindow.document.write($('#ticket-report').html());
           mywindow.document.write('</body></html>');
 
           mywindow.document.close(); // necessary for IE >= 10
           mywindow.focus(); // necessary for IE >= 10*/
 
           mywindow.print();
           mywindow.close();
           return true;
   }


Report Attachment as Email

nuget :
 HtmlRenderer.PdfSharp

[HttpGet]
      public FileResult GetTicketAttachmetPreview()
      {
          Byte[] res = null;
          using (MemoryStream ms = new MemoryStream())
          {
              var pdf = TheArtOfDev.HtmlRenderer.PdfSharp.PdfGenerator.
GeneratePdf($"<html>{TempData["content"]}</html>", PdfSharp.PageSize.A4);
              pdf.Save(ms);
              res = ms.ToArray();
          }
          return File(res, System.Net.Mime.MediaTypeNames.Application.Octet, 
Guid.NewGuid() + ".pdf");
      }




No comments:

Post a Comment

Sql server row level policy