<%@ WebHandler Language="C#" Class="ShowPdf" %>

using System;
using System.Web;
using MercatorApi;
using System.Collections.Generic;

public class ShowPdf : IHttpHandler, System.Web.SessionState.IRequiresSessionState {

    public void ProcessRequest(HttpContext context)
    {
        context.Response.Cache.SetCacheability(HttpCacheability.Public);
        context.Response.Cache.SetExpires(DateTime.Now.AddHours(1));
        context.Response.Buffer = false;
        context.Response.ContentType = "application/pdf";

        if (string.IsNullOrEmpty(context.Request.Params["id"]) || string.IsNullOrEmpty(context.Request.Params["journal"]) || string.IsNullOrEmpty(context.Request.Params["piece"]))
        {
            context.Response.StatusCode = 500;
            context.Response.End();
            return;
        }

        string id = context.Request.Params["id"];
        string journal = context.Request.Params["journal"];
        Int64 piece = Api.ValSafeInt64(context.Request.Params["piece"]);
        int type = 1;
        using (MercatorUi.Engine.Gescom.BillingEngine billingEngine = MercatorUi.Engine.Gescom.BillingEngine.InitExisting(MercatorUi.Engine.Gescom.Billing.TypeVAEnum.V, type, id, journal, piece))
        {
            if (billingEngine.DataSet == null)
            {
                context.Response.StatusCode = 404;
                context.Response.End();
                return;
            }
            MercatorUi.Reporting.OutputDescriptorExport outputDescriptorExport = new MercatorUi.Reporting.OutputDescriptorExport(MercatorUi.Reporting.ExportReportEnum.PDF, null, MercatorUi.Reporting.ExportOpenAfterEnum.No);
            outputDescriptorExport.ExportToBytes = true;
            List<MercatorUi.Reporting.OutputDescriptor> outputDescriptors = new List<MercatorUi.Reporting.OutputDescriptor>();
            outputDescriptors.Add(outputDescriptorExport);
            System.Data.DataSet dataSetPrintPrev = billingEngine.PrepareDataSetForPrint();
            Dictionary<string, object> parametersPrintPrev = billingEngine.PrepareParametersForPrint();
            Api.LastError = "";
            MercatorUi.Reporting.ReportingStatic.Reporting.RunReport("", billingEngine.SEQUENC["MODELEX_1"].ToString(), dataSetPrintPrev, outputDescriptors, parametersPrintPrev);
            if (!string.IsNullOrEmpty(Api.LastError) || (outputDescriptorExport.FileContent == null) || (outputDescriptorExport.FileContent.Length == 0))
            {
                context.Response.StatusCode = 500;
                context.Response.End();
                return;
            }
            context.Response.AddHeader("Content-Disposition",
                            "attachment; " +
                            "filename=\"" + journal + "_"  + piece.ToString() + ".pdf\"; " +
                            "size=" + outputDescriptorExport.FileContent.Length.ToString() + "; " +
                            "creation-date=" + DateTime.Now.ToString("R").Replace(",", "") + "; " +
                            "modification-date=" + DateTime.Now.ToString("R").Replace(",", "") + "; " +
                            "read-date=" + DateTime.Now.ToString("R").Replace(",", ""));
            context.Response.BinaryWrite(outputDescriptorExport.FileContent);
        }
    }

    public bool IsReusable {
        get {
            return false;
        }
    }

}