|
|
|
using System;
|
|
|
|
using System.IO;
|
|
|
|
using System.Linq;
|
|
|
|
using System.Threading.Tasks;
|
|
|
|
using Microsoft.AspNet.Mvc;
|
|
|
|
using Microsoft.Data.Entity;
|
|
|
|
using Yavsc.Models;
|
|
|
|
using Yavsc.Models.Billing;
|
|
|
|
using Yavsc.ViewModels.Gen;
|
|
|
|
|
|
|
|
namespace Yavsc.ViewComponents
|
|
|
|
{
|
|
|
|
public class EstimateViewComponent : ViewComponent
|
|
|
|
{
|
|
|
|
ApplicationDbContext dbContext;
|
|
|
|
public EstimateViewComponent(ApplicationDbContext dbContext)
|
|
|
|
{
|
|
|
|
this.dbContext = dbContext;
|
|
|
|
}
|
|
|
|
public async Task<IViewComponentResult> InvokeAsync(long id)
|
|
|
|
{
|
|
|
|
return await InvokeAsync(id,"Html");
|
|
|
|
}
|
|
|
|
public async Task<IViewComponentResult> InvokeAsync(long id, string outputFormat ="Html")
|
|
|
|
{
|
|
|
|
return await InvokeAsync(id,outputFormat,false,false);
|
|
|
|
}
|
|
|
|
public async Task<IViewComponentResult> InvokeAsync(long id, string outputFormat ="Html", bool asBill = false, bool acquitted = false)
|
|
|
|
{
|
|
|
|
return await Task.Run( ()=> {
|
|
|
|
Estimate estimate =
|
|
|
|
dbContext.Estimates.Include(x => x.Query)
|
|
|
|
.Include(x => x.Query.Client)
|
|
|
|
.Include(x => x.Query.PerformerProfile)
|
|
|
|
.Include(x => x.Query.PerformerProfile.OrganizationAddress)
|
|
|
|
.Include(x => x.Query.PerformerProfile.Performer)
|
|
|
|
.Include(e => e.Bill).FirstOrDefault(x => x.Id == id);
|
|
|
|
if (estimate == null)
|
|
|
|
throw new Exception("No data");
|
|
|
|
var di = new DirectoryInfo(Startup.SiteSetup.UserFiles.Bills);
|
|
|
|
var dia = new DirectoryInfo(Startup.SiteSetup.UserFiles.Avatars);
|
|
|
|
ViewBag.BillsDir = di.FullName;
|
|
|
|
ViewBag.AvatarsDir = dia.FullName;
|
|
|
|
ViewBag.AsBill = asBill;
|
|
|
|
ViewBag.Acquitted = acquitted;
|
|
|
|
if (outputFormat == "LaTeX") {
|
|
|
|
return this.View("Estimate_tex", estimate);
|
|
|
|
}
|
|
|
|
else if (outputFormat == "Pdf")
|
|
|
|
{
|
|
|
|
// Sorry for this code
|
|
|
|
string tex = null;
|
|
|
|
var oldWriter = ViewComponentContext.ViewContext.Writer;
|
|
|
|
using (var writer = new StringWriter())
|
|
|
|
{
|
|
|
|
this.ViewComponentContext.ViewContext.Writer = writer;
|
|
|
|
|
|
|
|
var resultTex = View("Estimate_tex", estimate);
|
|
|
|
resultTex.Execute(this.ViewComponentContext);
|
|
|
|
tex = writer.ToString();
|
|
|
|
|
|
|
|
}
|
|
|
|
ViewComponentContext.ViewContext.Writer = oldWriter;
|
|
|
|
|
|
|
|
return this.View("Estimate_pdf",
|
|
|
|
new PdfGenerationViewModel{
|
|
|
|
Temp = Startup.Temp,
|
|
|
|
TeXSource = tex,
|
|
|
|
DestDir = Startup.UserBillsDirName,
|
|
|
|
BaseFileName = $"estimate-{id}"
|
|
|
|
} );
|
|
|
|
}
|
|
|
|
return View("Default",estimate);
|
|
|
|
}
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|