yavsc/Yavsc/ApiControllers/PdfEstimateController.cs

119 lines
4.3 KiB
C#

8 years ago
using System.IO;
using Microsoft.AspNet.Authorization;
using Microsoft.AspNet.Mvc;
8 years ago
using System.Web.Routing;
8 years ago
namespace Yavsc.ApiControllers
{
8 years ago
using Models;
using Helpers;
using System.Linq;
using Microsoft.Data.Entity;
using System.Threading.Tasks;
using Microsoft.Extensions.Logging;
using System;
8 years ago
using System.Security.Claims;
8 years ago
8 years ago
[Route("api/pdfestimate"), Authorize]
public class PdfEstimateController : Controller
{
8 years ago
ApplicationDbContext dbContext;
private IAuthorizationService authorizationService;
private ILogger logger;
8 years ago
public PdfEstimateController(
IAuthorizationService authorizationService,
ILoggerFactory loggerFactory,
8 years ago
ApplicationDbContext context)
{
this.authorizationService = authorizationService;
8 years ago
dbContext = context;
logger = loggerFactory.CreateLogger<PdfEstimateController>();
8 years ago
}
[HttpGet("get/{id}", Name = "Get"), Authorize]
public async Task<IActionResult> Get(long id)
8 years ago
{
var estimate = dbContext.Estimates.Include(
e=>e.Query
).FirstOrDefault(e=>e.Id == id);
if (!await authorizationService.AuthorizeAsync(User, estimate, new ViewRequirement()))
{
return new ChallengeResult();
}
8 years ago
var filename = $"estimate-{id}.pdf";
8 years ago
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 async Task<IActionResult> GetTex(long id)
8 years ago
{
var estimate = dbContext.Estimates.Include(
e=>e.Query
).FirstOrDefault(e=>e.Id == id);
if (!await authorizationService.AuthorizeAsync(User, estimate, new ViewRequirement()))
{
return new ChallengeResult();
}
8 years ago
Response.ContentType = "text/x-tex";
return ViewComponent("Estimate",new object[] { id, "LaTeX" });
8 years ago
}
[HttpPost("gen/{id}")]
public async Task<IActionResult> GeneratePdf(long id)
8 years ago
{
var estimate = dbContext.Estimates.Include(
e=>e.Query
).FirstOrDefault(e=>e.Id == id);
if (!await authorizationService.AuthorizeAsync(User, estimate, new ViewRequirement()))
{
return new ChallengeResult();
}
return ViewComponent("Estimate",new object[] { id, "Pdf" } );
8 years ago
}
[HttpPost("prosign/{id}")]
public async Task<IActionResult> ProSign(long id)
{
8 years ago
var uid = User.GetUserId();
var estimate = dbContext.Estimates.Include(
e=>e.Query
8 years ago
).FirstOrDefault(e=>e.Id == id && e.OwnerId == uid );
if (!await authorizationService.AuthorizeAsync(User, estimate, new ViewRequirement()))
{
return new ChallengeResult();
}
if (Request.Form.Files.Count!=1)
return new BadRequestResult();
8 years ago
User.ReceiveSignature(id,Request.Form.Files[0],"pro");
estimate.ProviderValidationDate = DateTime.Now;
dbContext.SaveChanges();
return Ok (new { ProviderValidationDate = estimate.ProviderValidationDate });
}
8 years ago
[HttpPost("clisign/{id}")]
public async Task<IActionResult> CliSign(long id)
{
var uid = User.GetUserId();
var estimate = dbContext.Estimates.Include( e=>e.Query
).FirstOrDefault( e=> e.Id == id && e.Query.ClientId == uid );
if (!await authorizationService.AuthorizeAsync(User, estimate, new ViewRequirement()))
{
return new ChallengeResult();
}
if (Request.Form.Files.Count!=1)
return new BadRequestResult();
User.ReceiveSignature(id,Request.Form.Files[0],"cli");
estimate.ClientValidationDate = DateTime.Now;
dbContext.SaveChanges();
return Ok (new { ClientValidationDate = estimate.ClientValidationDate });
}
8 years ago
}
}