|
|
|
|
using System.IO;
|
|
|
|
|
using Microsoft.AspNet.Authorization;
|
|
|
|
|
using Microsoft.AspNet.Mvc;
|
|
|
|
|
using System.Web.Routing;
|
|
|
|
|
using Microsoft.AspNet.Mvc.ViewComponents;
|
|
|
|
|
using Microsoft.AspNet.Razor;
|
|
|
|
|
|
|
|
|
|
namespace Yavsc.ApiControllers
|
|
|
|
|
{
|
|
|
|
|
using Models;
|
|
|
|
|
|
|
|
|
|
[Route("api/pdfestimate"), Authorize]
|
|
|
|
|
public class PdfEstimateController : Controller
|
|
|
|
|
{
|
|
|
|
|
ApplicationDbContext dbContext;
|
|
|
|
|
DefaultViewComponentHelper helper;
|
|
|
|
|
IViewComponentDescriptorCollectionProvider provider;
|
|
|
|
|
IViewComponentInvokerFactory factory;
|
|
|
|
|
RazorEngineHost host;
|
|
|
|
|
RazorTemplateEngine engine;
|
|
|
|
|
IViewComponentSelector selector;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public PdfEstimateController(
|
|
|
|
|
IViewComponentDescriptorCollectionProvider provider,
|
|
|
|
|
IViewComponentSelector selector,
|
|
|
|
|
IViewComponentInvokerFactory factory,
|
|
|
|
|
ApplicationDbContext context)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
this.selector = selector;
|
|
|
|
|
this.provider = provider;
|
|
|
|
|
this.factory = factory;
|
|
|
|
|
helper = new DefaultViewComponentHelper(provider, selector, factory);
|
|
|
|
|
dbContext = context;
|
|
|
|
|
|
|
|
|
|
var language = new CSharpRazorCodeLanguage();
|
|
|
|
|
host = new RazorEngineHost(language)
|
|
|
|
|
{
|
|
|
|
|
DefaultBaseClass = "RazorPage",
|
|
|
|
|
DefaultClassName = "Estimate",
|
|
|
|
|
DefaultNamespace = "Yavsc",
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// Everyone needs the System namespace, right?
|
|
|
|
|
host.NamespaceImports.Add("System");
|
|
|
|
|
engine = new RazorTemplateEngine(host);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
GeneratorResults razorResult =
|
|
|
|
|
engine.GenerateCode(
|
|
|
|
|
|
|
|
|
|
) */
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
[HttpGet("get/{id}", Name = "Get"), Authorize]
|
|
|
|
|
public IActionResult Get(long id)
|
|
|
|
|
{
|
|
|
|
|
var filename = $"estimate-{id}.pdf";
|
|
|
|
|
|
|
|
|
|
var cd = new System.Net.Mime.ContentDisposition
|
|
|
|
|
{
|
|
|
|
|
// for example foo.bak
|
|
|
|
|
FileName = filename,
|
|
|
|
|
|
|
|
|
|
// always prompt the user for downloading, set to true if you want
|
|
|
|
|
// the browser to try to show the file inline
|
|
|
|
|
Inline = false,
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
FileInfo fi = new FileInfo(Path.Combine(Startup.UserBillsDirName, filename));
|
|
|
|
|
if (!fi.Exists) return Ok(new { Error = "Not generated" });
|
|
|
|
|
return File(fi.OpenRead(), "application/x-pdf", filename); ;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[HttpGet("estimate-{id}.tex", Name = "GetTex"), Authorize]
|
|
|
|
|
public IActionResult GetTex(long id)
|
|
|
|
|
{
|
|
|
|
|
Response.ContentType = "text/x-tex";
|
|
|
|
|
return ViewComponent("Estimate",new object[] { id, false });
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[HttpPost("gen/{id}")]
|
|
|
|
|
public IActionResult GeneratePdf(long id)
|
|
|
|
|
{
|
|
|
|
|
return ViewComponent("Estimate",new object[] { id, true } );
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|