Feature: Document Template Packages
Document Templates can be grouped into a package and generated on-demand in the same was as individual document templates. Packages can be generated in bulk.
This commit is contained in:
@@ -1,7 +1,9 @@
|
||||
using Disco.BI.Extensions;
|
||||
using Disco.Models.Repository;
|
||||
using Disco.Models.UI.Config.DocumentTemplate;
|
||||
using Disco.Services;
|
||||
using Disco.Services.Authorization;
|
||||
using Disco.Services.Documents;
|
||||
using Disco.Services.Documents.ManagedGroups;
|
||||
using Disco.Services.Expressions;
|
||||
using Disco.Services.Plugins.Features.UIExtension;
|
||||
@@ -20,7 +22,8 @@ namespace Disco.Web.Areas.Config.Controllers
|
||||
{
|
||||
if (string.IsNullOrEmpty(id))
|
||||
{
|
||||
var m = new Models.DocumentTemplate.IndexModel() {
|
||||
var m = new Models.DocumentTemplate.IndexModel()
|
||||
{
|
||||
DocumentTemplates = Database.DocumentTemplates
|
||||
.Select(dt => new
|
||||
{
|
||||
@@ -30,7 +33,8 @@ namespace Disco.Web.Areas.Config.Controllers
|
||||
Database.JobAttachments.Count(a => a.DocumentTemplateId == dt.Id) +
|
||||
Database.UserAttachments.Count(a => a.DocumentTemplateId == dt.Id)
|
||||
})
|
||||
.ToDictionary(i => i.documentTemplate, i => i.storedInstances)
|
||||
.ToDictionary(i => i.documentTemplate, i => i.storedInstances),
|
||||
Packages = DocumentTemplatePackages.GetPackages()
|
||||
};
|
||||
|
||||
// UI Extensions
|
||||
@@ -40,10 +44,15 @@ namespace Disco.Web.Areas.Config.Controllers
|
||||
}
|
||||
else
|
||||
{
|
||||
// Normal Document Template
|
||||
var m = new Models.DocumentTemplate.ShowModel()
|
||||
{
|
||||
DocumentTemplate = Database.DocumentTemplates.Include("JobSubTypes").FirstOrDefault(at => at.Id == id)
|
||||
};
|
||||
if (m.DocumentTemplate == null)
|
||||
throw new ArgumentException("Invalid Document Template Id", nameof(id));
|
||||
|
||||
m.TemplatePagesHaveAttachmentId = m.DocumentTemplate.PdfPageHasAttachmentId(Database);
|
||||
m.TemplateExpressions = m.DocumentTemplate.ExtractPdfExpressions(Database);
|
||||
m.UpdateModel(Database);
|
||||
|
||||
@@ -61,6 +70,32 @@ namespace Disco.Web.Areas.Config.Controllers
|
||||
}
|
||||
}
|
||||
|
||||
public virtual ActionResult ShowPackage(string id)
|
||||
{
|
||||
// Document Template Package
|
||||
var m = new Models.DocumentTemplate.ShowPackageModel()
|
||||
{
|
||||
Package = DocumentTemplatePackages.GetPackage(id)
|
||||
};
|
||||
if (m.Package == null)
|
||||
throw new ArgumentException("Invalid Document Template Package Id", nameof(id));
|
||||
|
||||
if (m.Package.Scope == AttachmentTypes.Job)
|
||||
{
|
||||
m.JobTypes = Database.JobTypes.Include("JobSubTypes").ToList();
|
||||
m.JobSubTypesSelected = m.Package.GetJobSubTypes(m.JobTypes.SelectMany(jt => jt.JobSubTypes));
|
||||
}
|
||||
var packageScopeString = m.Package.Scope.ToString();
|
||||
|
||||
m.DocumentTemplates = Database.DocumentTemplates.Where(dt => dt.Scope == packageScopeString).ToList();
|
||||
m.DocumentTemplatesSelected = m.Package.GetDocumentTemplates(m.DocumentTemplates);
|
||||
|
||||
// UI Extensions
|
||||
UIExtensions.ExecuteExtensions<ConfigDocumentTemplateShowPackageModel>(this.ControllerContext, m);
|
||||
|
||||
return View(MVC.Config.DocumentTemplate.Views.ShowPackage, m);
|
||||
}
|
||||
|
||||
[DiscoAuthorize(Claims.Config.DocumentTemplate.ShowStatus)]
|
||||
public virtual ActionResult ImportStatus()
|
||||
{
|
||||
@@ -130,7 +165,7 @@ namespace Disco.Web.Areas.Config.Controllers
|
||||
}
|
||||
else
|
||||
{
|
||||
ModelState.AddModelError("Name", "A Document Template with this Name already exists.");
|
||||
ModelState.AddModelError("Id", "A Document Template with this Id already exists.");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -140,6 +175,42 @@ namespace Disco.Web.Areas.Config.Controllers
|
||||
return View(model);
|
||||
}
|
||||
|
||||
[DiscoAuthorizeAll(Claims.Config.DocumentTemplate.Create, Claims.Config.DocumentTemplate.Configure)]
|
||||
public virtual ActionResult CreatePackage()
|
||||
{
|
||||
var m = new Models.DocumentTemplate.CreatePackageModel();
|
||||
|
||||
// UI Extensions
|
||||
UIExtensions.ExecuteExtensions<ConfigDocumentTemplateCreatePackageModel>(this.ControllerContext, m);
|
||||
|
||||
return View(m);
|
||||
}
|
||||
|
||||
[DiscoAuthorizeAll(Claims.Config.DocumentTemplate.Create, Claims.Config.DocumentTemplate.Configure), HttpPost]
|
||||
public virtual ActionResult CreatePackage(Models.DocumentTemplate.CreatePackageModel model)
|
||||
{
|
||||
if (ModelState.IsValid)
|
||||
{
|
||||
// Check for Existing
|
||||
var existing = DocumentTemplatePackages.GetPackage(model.Package.Id);
|
||||
if (existing == null)
|
||||
{
|
||||
DocumentTemplatePackages.CreatePackage(model.Package);
|
||||
|
||||
return RedirectToAction(MVC.Config.DocumentTemplate.ShowPackage(model.Package.Id));
|
||||
}
|
||||
else
|
||||
{
|
||||
ModelState.AddModelError("Id", "A Document Template Package with this Id already exists.");
|
||||
}
|
||||
}
|
||||
|
||||
// UI Extensions
|
||||
UIExtensions.ExecuteExtensions<ConfigDocumentTemplateCreatePackageModel>(this.ControllerContext, model);
|
||||
|
||||
return View(model);
|
||||
}
|
||||
|
||||
[DiscoAuthorize(Claims.Config.Show)]
|
||||
public virtual ActionResult ExpressionBrowser(string type, bool StaticDeclaredMembersOnly = false)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user