bug fix #185: fix document package generation

This commit is contained in:
Gary Sharp
2025-12-03 15:49:10 +11:00
parent 529bba5c72
commit 94a31282eb
11 changed files with 218 additions and 31 deletions
@@ -149,27 +149,28 @@ namespace Disco.Services
template = database.DocumentTemplates.Find(templateId); template = database.DocumentTemplates.Find(templateId);
if (template == null) if (template == null)
throw new ArgumentException("Invalid document template id", nameof(templateId)); throw new ArgumentException("Invalid document template id", nameof(templateId));
if (!Enum.TryParse(template.Scope, out AttachmentTypes scope))
throw new InvalidOperationException("Unknown DocumentType Scope");
// validate authorization // validate authorization
switch (template.Scope) switch (scope)
{ {
case DocumentTemplate.DocumentTemplateScopes.Device: case AttachmentTypes.Device:
authorization.Require(Claims.Device.Actions.GenerateDocuments); authorization.Require(Claims.Device.Actions.GenerateDocuments);
break; break;
case DocumentTemplate.DocumentTemplateScopes.Job: case AttachmentTypes.Job:
authorization.Require(Claims.Job.Actions.GenerateDocuments); authorization.Require(Claims.Job.Actions.GenerateDocuments);
break; break;
case DocumentTemplate.DocumentTemplateScopes.User: case AttachmentTypes.User:
authorization.Require(Claims.User.Actions.GenerateDocuments); authorization.Require(Claims.User.Actions.GenerateDocuments);
break; break;
default: default:
throw new InvalidOperationException("Unknown DocumentType Scope"); throw new InvalidOperationException("Unsupported DocumentType Scope");
} }
// resolve target // resolve target
target = template.ResolveScopeTarget(database, targetId, out targetUser); target = template.ResolveScopeTarget(database, targetId, out targetUser)
if (target == null) ?? throw new ArgumentException("Target not found", nameof(targetId));
throw new ArgumentException("Target not found", nameof(targetId));
} }
public static IEnumerable<OnImportUserFlagRule> GetOnImportUserFlagRuleDetails(this DocumentTemplate template, DiscoDataContext database) public static IEnumerable<OnImportUserFlagRule> GetOnImportUserFlagRuleDetails(this DocumentTemplate template, DiscoDataContext database)
@@ -1,6 +1,8 @@
using Disco.Data.Repository; using Disco.Data.Repository;
using Disco.Models.Repository; using Disco.Models.Repository;
using Disco.Models.Services.Documents; using Disco.Models.Services.Documents;
using Disco.Services.Authorization;
using Disco.Services.Documents;
using Disco.Services.Expressions; using Disco.Services.Expressions;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
@@ -139,12 +141,46 @@ namespace Disco.Services
} }
public static IAttachmentTarget ResolveScopeTarget(this DocumentTemplatePackage templatePackage, DiscoDataContext database, string targetId) public static IAttachmentTarget ResolveScopeTarget(this DocumentTemplatePackage templatePackage, DiscoDataContext database, string targetId)
=> templatePackage.ResolveScopeTarget(database, targetId, out _);
public static IAttachmentTarget ResolveScopeTarget(this DocumentTemplatePackage templatePackage, DiscoDataContext database, string targetId, out User targetUser)
{ {
if (templatePackage == null) if (templatePackage == null)
throw new ArgumentNullException(nameof(templatePackage)); throw new ArgumentNullException(nameof(templatePackage));
return templatePackage.Scope.ResolveScopeTarget(database, targetId); return templatePackage.Scope.ResolveScopeTarget(database, targetId, out targetUser);
} }
public static void GetPackageAndTarget(DiscoDataContext database, AuthorizationToken authorization, string packageId, string targetId, out DocumentTemplatePackage package, out IAttachmentTarget target, out User targetUser)
{
if (string.IsNullOrWhiteSpace(packageId))
throw new ArgumentNullException(nameof(packageId));
if (string.IsNullOrWhiteSpace(targetId))
throw new ArgumentNullException(nameof(targetId));
// get template
package = DocumentTemplatePackages.GetPackage(packageId)
?? throw new ArgumentException("Invalid document template package id", nameof(packageId));
// validate authorization
switch (package.Scope)
{
case AttachmentTypes.Device:
authorization.Require(Claims.Device.Actions.GenerateDocuments);
break;
case AttachmentTypes.Job:
authorization.Require(Claims.Job.Actions.GenerateDocuments);
break;
case AttachmentTypes.User:
authorization.Require(Claims.User.Actions.GenerateDocuments);
break;
default:
throw new InvalidOperationException("Unsupported DocumentType Scope");
}
// resolve target
target = package.ResolveScopeTarget(database, targetId, out targetUser)
?? throw new ArgumentException("Target not found", nameof(targetId));
}
} }
} }
@@ -1961,9 +1961,9 @@ namespace Disco.Web.Areas.API.Controllers
#region Handlers #region Handlers
[HttpPost, ValidateAntiForgeryToken] [HttpPost, ValidateAntiForgeryToken]
public virtual ActionResult GenerateDocumentHandlerUi(string templateId, string targetId, string handlerId) public virtual ActionResult GenerateDocumentHandlerUi(string id, string targetId, string handlerId)
{ {
Disco.Services.DocumentTemplateExtensions.GetTemplateAndTarget(Database, Authorization, templateId, targetId, out var template, out var target, out var targetUser); Disco.Services.DocumentTemplateExtensions.GetTemplateAndTarget(Database, Authorization, id, targetId, out var template, out var target, out var targetUser);
var handlerManifest = Plugins.GetPluginFeature(handlerId, typeof(DocumentHandlerProviderFeature)); var handlerManifest = Plugins.GetPluginFeature(handlerId, typeof(DocumentHandlerProviderFeature));
@@ -1984,9 +1984,9 @@ namespace Disco.Web.Areas.API.Controllers
} }
[HttpPost, ValidateAntiForgeryToken] [HttpPost, ValidateAntiForgeryToken]
public virtual ActionResult DocumentHandlers(string templateId, string targetId) public virtual ActionResult DocumentHandlers(string id, string targetId)
{ {
Disco.Services.DocumentTemplateExtensions.GetTemplateAndTarget(Database, Authorization, templateId, targetId, out var template, out var target, out _); Disco.Services.DocumentTemplateExtensions.GetTemplateAndTarget(Database, Authorization, id, targetId, out var template, out var target, out _);
var handlers = Plugins.GetPluginFeatures(typeof(DocumentHandlerProviderFeature)) var handlers = Plugins.GetPluginFeatures(typeof(DocumentHandlerProviderFeature))
.SelectMany(f => .SelectMany(f =>
@@ -4,8 +4,11 @@ using Disco.Models.Services.Documents;
using Disco.Services; using Disco.Services;
using Disco.Services.Authorization; using Disco.Services.Authorization;
using Disco.Services.Documents; using Disco.Services.Documents;
using Disco.Services.Plugins;
using Disco.Services.Plugins.Features.DocumentHandlerProvider;
using Disco.Services.Users; using Disco.Services.Users;
using Disco.Services.Web; using Disco.Services.Web;
using Disco.Web.Areas.API.Models.DocumentTemplate;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
@@ -470,5 +473,65 @@ namespace Disco.Web.Areas.API.Controllers
} }
#endregion #endregion
#region Handlers
[HttpPost, ValidateAntiForgeryToken]
public virtual ActionResult GenerateDocumentHandlerUi(string id, string targetId, string handlerId)
{
DocumentTemplatePackageExtensions.GetPackageAndTarget(Database, Authorization, id, targetId, out var package, out var target, out var targetUser);
var handlerManifest = Plugins.GetPluginFeature(handlerId, typeof(DocumentHandlerProviderFeature));
using (var handler = handlerManifest.CreateInstance<DocumentHandlerProviderFeature>())
{
if (!handler.CanHandle(package, target))
throw new NotSupportedException("Handler does not support this Document Template and Target");
var handlerPartialView = handler.GenerationOptionsUi;
if (handlerPartialView == null)
throw new NotSupportedException("Handler does not have a Generation Options UI");
var model = handler.GetGenerationOptionsUiModel(package, target, targetUser, CurrentUser);
return this.PrecompiledPartialView(handlerPartialView, model);
}
}
[HttpPost, ValidateAntiForgeryToken]
public virtual ActionResult DocumentHandlers(string id, string targetId)
{
DocumentTemplatePackageExtensions.GetPackageAndTarget(Database, Authorization, id, targetId, out var package, out var target, out _);
var handlers = Plugins.GetPluginFeatures(typeof(DocumentHandlerProviderFeature))
.SelectMany(f =>
{
using (var handler = f.CreateInstance<DocumentHandlerProviderFeature>())
{
if (handler.CanHandle(package, target))
return OneOf.Create(new DocumentHandlerModel()
{
Id = f.Id,
Title = handler.HandlerTitle,
Description = handler.HandlerDescription,
UiUrl = handler.GenerationOptionsUi == null ? null : Url.Action(MVC.API.DocumentTemplatePackage.GenerateDocumentHandlerUi(package.Id, target.AttachmentReferenceId, f.Id)),
Icon = handler.GenerationOptionsIcon,
});
}
return Enumerable.Empty<DocumentHandlerModel>();
}).ToList();
var model = new DocumentHandlersModel()
{
TemplateId = package.Id,
TemplateName = package.Description,
TargetId = target.AttachmentReferenceId,
TargetName = target.ToString(),
Handlers = handlers,
};
return Json(model);
}
#endregion
} }
} }
@@ -9,13 +9,14 @@
const generatePackageUrl = $container.attr('data-generatepackageurl'); const generatePackageUrl = $container.attr('data-generatepackageurl');
const handlersPresent = $container.attr('data-handlerspresent') === 'true'; const handlersPresent = $container.attr('data-handlerspresent') === 'true';
const handlersUrl = $container.attr('data-handlersurl'); const handlersUrl = $container.attr('data-handlersurl');
const handlersPackageUrl = $container.attr('data-handlerspackageurl');
let $handlersDialog = null; let $handlersDialog = null;
let lastTemplateId = null; let lastTemplateId = null;
const downloadPdf = function (templateId) { const downloadPdf = function (templateId) {
let action = generatePdfUrl; let action = generatePdfUrl;
if (templateId.lastIndexOf('Package:', 0) === 0) { if (templateId.lastIndexOf('Package:', 0) === 0) {
templateId + templateId.substring(8); templateId = templateId.substring(8);
action = generatePackageUrl; action = generatePackageUrl;
} }
@@ -35,6 +36,12 @@
} }
const updateHandlers = function (templateId) { const updateHandlers = function (templateId) {
let action = handlersUrl;
if (templateId.lastIndexOf('Package:', 0) === 0) {
templateId = templateId.substring(8);
action = handlersPackageUrl;
}
const $handlerPicker = $handlersDialog.find('.handlerPicker'); const $handlerPicker = $handlersDialog.find('.handlerPicker');
const $loadingUi = $handlersDialog.find('#Document_Generation_Dialog_Handlers_Loading'); const $loadingUi = $handlersDialog.find('#Document_Generation_Dialog_Handlers_Loading');
@@ -43,9 +50,9 @@
var formData = new FormData(); var formData = new FormData();
formData.append('__RequestVerificationToken', document.body.dataset.antiforgery); formData.append('__RequestVerificationToken', document.body.dataset.antiforgery);
formData.append('templateId', decodeURI(templateId)); formData.append('id', decodeURI(templateId));
formData.append('targetId', decodeURI(targetId)); formData.append('targetId', decodeURI(targetId));
fetch(handlersUrl, { fetch(action, {
method: 'POST', method: 'POST',
body: formData body: formData
}).then(r => r.json()) }).then(r => r.json())
@@ -1 +1 @@
(function(n,t,i){i(function(){let u=null;const r=i("#Document_Generation_Container"),f=r.find("#Document_Generate"),e=r.attr("data-targetid"),y=r.attr("data-targettype"),h=r.attr("data-generatepdfurl"),c=r.attr("data-generatepackageurl"),l=r.attr("data-handlerspresent")==="true",a=r.attr("data-handlersurl");let n=null,o=null;const s=function(n){let f=h;n.lastIndexOf("Package:",0)===0&&(n+n.substring(8),f=c);u||(u=i("<iframe>").attr("title","Document Generation Host").addClass("hidden").appendTo("body").contents(),u[0].body.innerHTML='<form method="post"><input type="hidden" name="__RequestVerificationToken" value="'+t.body.dataset.antiforgery+'"><input type="hidden" name="id"><input type="hidden" name="targetId"><\/form>');const r=u[0].forms[0];r.action=f;r.id.value=n;r.targetId.value=e;r.submit()},v=function(r){const f=n.find(".handlerPicker"),o=n.find("#Document_Generation_Dialog_Handlers_Loading");f.find("div.handler").remove();o.show();var u=new FormData;u.append("__RequestVerificationToken",t.body.dataset.antiforgery);u.append("templateId",decodeURI(r));u.append("targetId",decodeURI(e));fetch(a,{method:"POST",body:u}).then(n=>n.json()).then(n=>{o.hide(),i.each(n.Handlers,(n,t)=>{i('<div class="handler">').text(t.Title).attr({"data-id":t.Id,"data-uiurl":t.UiUrl}).prepend(i('<i class="fa fa-fw fa-lg">').addClass("fa-"+t.Icon)).appendTo(f)})})};f.change(function(){var u=f.val();if(u){if(o=u,l){if(!n){n=r.find("#Document_Generation_Dialog");n.dialog({width:750,height:500,resizable:!1,modal:!0,autoOpen:!1,buttons:{Cancel:function(){i(this).dialog("close")}}});n.find("#Document_Generation_Dialog_Download").click(t=>(t.preventDefault(),s(o),n.dialog("close"),!1));const f=n.find(".handlerPicker"),e=n.find("#Document_Generation_Dialog_Download_Container"),u=n.find("#Document_Generation_Dialog_HandlerUI");f.on("click","div[data-id]",n=>{f.find("div").removeClass("selected");const r=i(n.currentTarget);r.addClass("selected");const o=r.attr("data-id");if(o==="download")e.show(),u.hide(),u.empty();else{e.hide();u.empty();u.show();const i=r.attr("data-uiurl"),n=new FormData;n.append("__RequestVerificationToken",t.body.dataset.antiforgery);fetch(i,{method:"POST",body:n}).then(n=>n.text()).then(n=>{u.html(n)})}})}const e=n.find(".handlerPicker"),c=n.find("#Document_Generation_Dialog_Download_Container"),h=n.find("#Document_Generation_Dialog_HandlerUI");e.find("div").removeClass("selected");e.find("div[data-id=download]").addClass("selected");c.show();h.hide();h.empty();n.dialog("option","title","Generate Document: "+f[0].selectedOptions[0].label);n.dialog("open");v(u)}else s(u);f.val("").blur()}})})})(window,document,$); (function(n,t,i){i(function(){let u=null;const r=i("#Document_Generation_Container"),f=r.find("#Document_Generate"),e=r.attr("data-targetid"),p=r.attr("data-targettype"),h=r.attr("data-generatepdfurl"),c=r.attr("data-generatepackageurl"),l=r.attr("data-handlerspresent")==="true",a=r.attr("data-handlersurl"),v=r.attr("data-handlerspackageurl");let n=null,o=null;const s=function(n){let f=h;n.lastIndexOf("Package:",0)===0&&(n=n.substring(8),f=c);u||(u=i("<iframe>").attr("title","Document Generation Host").addClass("hidden").appendTo("body").contents(),u[0].body.innerHTML='<form method="post"><input type="hidden" name="__RequestVerificationToken" value="'+t.body.dataset.antiforgery+'"><input type="hidden" name="id"><input type="hidden" name="targetId"><\/form>');const r=u[0].forms[0];r.action=f;r.id.value=n;r.targetId.value=e;r.submit()},y=function(r){let f=a;r.lastIndexOf("Package:",0)===0&&(r=r.substring(8),f=v);const o=n.find(".handlerPicker"),s=n.find("#Document_Generation_Dialog_Handlers_Loading");o.find("div.handler").remove();s.show();var u=new FormData;u.append("__RequestVerificationToken",t.body.dataset.antiforgery);u.append("id",decodeURI(r));u.append("targetId",decodeURI(e));fetch(f,{method:"POST",body:u}).then(n=>n.json()).then(n=>{s.hide(),i.each(n.Handlers,(n,t)=>{i('<div class="handler">').text(t.Title).attr({"data-id":t.Id,"data-uiurl":t.UiUrl}).prepend(i('<i class="fa fa-fw fa-lg">').addClass("fa-"+t.Icon)).appendTo(o)})})};f.change(function(){var u=f.val();if(u){if(o=u,l){if(!n){n=r.find("#Document_Generation_Dialog");n.dialog({width:750,height:500,resizable:!1,modal:!0,autoOpen:!1,buttons:{Cancel:function(){i(this).dialog("close")}}});n.find("#Document_Generation_Dialog_Download").click(t=>(t.preventDefault(),s(o),n.dialog("close"),!1));const f=n.find(".handlerPicker"),e=n.find("#Document_Generation_Dialog_Download_Container"),u=n.find("#Document_Generation_Dialog_HandlerUI");f.on("click","div[data-id]",n=>{f.find("div").removeClass("selected");const r=i(n.currentTarget);r.addClass("selected");const o=r.attr("data-id");if(o==="download")e.show(),u.hide(),u.empty();else{e.hide();u.empty();u.show();const i=r.attr("data-uiurl"),n=new FormData;n.append("__RequestVerificationToken",t.body.dataset.antiforgery);fetch(i,{method:"POST",body:n}).then(n=>n.text()).then(n=>{u.html(n)})}})}const e=n.find(".handlerPicker"),c=n.find("#Document_Generation_Dialog_Download_Container"),h=n.find("#Document_Generation_Dialog_HandlerUI");e.find("div").removeClass("selected");e.find("div[data-id=download]").addClass("selected");c.show();h.hide();h.empty();n.dialog("option","title","Generate Document: "+f[0].selectedOptions[0].label);n.dialog("open");y(u)}else s(u);f.val("").blur()}})})})(window,document,$);
@@ -9,13 +9,14 @@
const generatePackageUrl = $container.attr('data-generatepackageurl'); const generatePackageUrl = $container.attr('data-generatepackageurl');
const handlersPresent = $container.attr('data-handlerspresent') === 'true'; const handlersPresent = $container.attr('data-handlerspresent') === 'true';
const handlersUrl = $container.attr('data-handlersurl'); const handlersUrl = $container.attr('data-handlersurl');
const handlersPackageUrl = $container.attr('data-handlerspackageurl');
let $handlersDialog = null; let $handlersDialog = null;
let lastTemplateId = null; let lastTemplateId = null;
const downloadPdf = function (templateId) { const downloadPdf = function (templateId) {
let action = generatePdfUrl; let action = generatePdfUrl;
if (templateId.lastIndexOf('Package:', 0) === 0) { if (templateId.lastIndexOf('Package:', 0) === 0) {
templateId + templateId.substring(8); templateId = templateId.substring(8);
action = generatePackageUrl; action = generatePackageUrl;
} }
@@ -35,6 +36,12 @@
} }
const updateHandlers = function (templateId) { const updateHandlers = function (templateId) {
let action = handlersUrl;
if (templateId.lastIndexOf('Package:', 0) === 0) {
templateId = templateId.substring(8);
action = handlersPackageUrl;
}
const $handlerPicker = $handlersDialog.find('.handlerPicker'); const $handlerPicker = $handlersDialog.find('.handlerPicker');
const $loadingUi = $handlersDialog.find('#Document_Generation_Dialog_Handlers_Loading'); const $loadingUi = $handlersDialog.find('#Document_Generation_Dialog_Handlers_Loading');
@@ -43,9 +50,9 @@
var formData = new FormData(); var formData = new FormData();
formData.append('__RequestVerificationToken', document.body.dataset.antiforgery); formData.append('__RequestVerificationToken', document.body.dataset.antiforgery);
formData.append('templateId', decodeURI(templateId)); formData.append('id', decodeURI(templateId));
formData.append('targetId', decodeURI(targetId)); formData.append('targetId', decodeURI(targetId));
fetch(handlersUrl, { fetch(action, {
method: 'POST', method: 'POST',
body: formData body: formData
}).then(r => r.json()) }).then(r => r.json())
@@ -794,7 +794,7 @@ namespace Disco.Web.Areas.API.Controllers
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
public class ActionParamsClass_GenerateDocumentHandlerUi public class ActionParamsClass_GenerateDocumentHandlerUi
{ {
public readonly string templateId = "templateId"; public readonly string id = "id";
public readonly string targetId = "targetId"; public readonly string targetId = "targetId";
public readonly string handlerId = "handlerId"; public readonly string handlerId = "handlerId";
} }
@@ -804,7 +804,7 @@ namespace Disco.Web.Areas.API.Controllers
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
public class ActionParamsClass_DocumentHandlers public class ActionParamsClass_DocumentHandlers
{ {
public readonly string templateId = "templateId"; public readonly string id = "id";
public readonly string targetId = "targetId"; public readonly string targetId = "targetId";
} }
static readonly ActionParamsClass_Export s_params_Export = new ActionParamsClass_Export(); static readonly ActionParamsClass_Export s_params_Export = new ActionParamsClass_Export();
@@ -1385,29 +1385,29 @@ namespace Disco.Web.Areas.API.Controllers
} }
[NonAction] [NonAction]
partial void GenerateDocumentHandlerUiOverride(T4MVC_System_Web_Mvc_ActionResult callInfo, string templateId, string targetId, string handlerId); partial void GenerateDocumentHandlerUiOverride(T4MVC_System_Web_Mvc_ActionResult callInfo, string id, string targetId, string handlerId);
[NonAction] [NonAction]
public override System.Web.Mvc.ActionResult GenerateDocumentHandlerUi(string templateId, string targetId, string handlerId) public override System.Web.Mvc.ActionResult GenerateDocumentHandlerUi(string id, string targetId, string handlerId)
{ {
var callInfo = new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.GenerateDocumentHandlerUi); var callInfo = new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.GenerateDocumentHandlerUi);
ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "templateId", templateId); ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "id", id);
ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "targetId", targetId); ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "targetId", targetId);
ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "handlerId", handlerId); ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "handlerId", handlerId);
GenerateDocumentHandlerUiOverride(callInfo, templateId, targetId, handlerId); GenerateDocumentHandlerUiOverride(callInfo, id, targetId, handlerId);
return callInfo; return callInfo;
} }
[NonAction] [NonAction]
partial void DocumentHandlersOverride(T4MVC_System_Web_Mvc_ActionResult callInfo, string templateId, string targetId); partial void DocumentHandlersOverride(T4MVC_System_Web_Mvc_ActionResult callInfo, string id, string targetId);
[NonAction] [NonAction]
public override System.Web.Mvc.ActionResult DocumentHandlers(string templateId, string targetId) public override System.Web.Mvc.ActionResult DocumentHandlers(string id, string targetId)
{ {
var callInfo = new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.DocumentHandlers); var callInfo = new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.DocumentHandlers);
ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "templateId", templateId); ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "id", id);
ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "targetId", targetId); ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "targetId", targetId);
DocumentHandlersOverride(callInfo, templateId, targetId); DocumentHandlersOverride(callInfo, id, targetId);
return callInfo; return callInfo;
} }
@@ -131,6 +131,18 @@ namespace Disco.Web.Areas.API.Controllers
{ {
return new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.Delete); return new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.Delete);
} }
[NonAction]
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
public virtual System.Web.Mvc.ActionResult GenerateDocumentHandlerUi()
{
return new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.GenerateDocumentHandlerUi);
}
[NonAction]
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
public virtual System.Web.Mvc.ActionResult DocumentHandlers()
{
return new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.DocumentHandlers);
}
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
public DocumentTemplatePackageController Actions { get { return MVC.API.DocumentTemplatePackage; } } public DocumentTemplatePackageController Actions { get { return MVC.API.DocumentTemplatePackage; } }
@@ -159,6 +171,8 @@ namespace Disco.Web.Areas.API.Controllers
public readonly string BulkGenerate = "BulkGenerate"; public readonly string BulkGenerate = "BulkGenerate";
public readonly string Generate = "Generate"; public readonly string Generate = "Generate";
public readonly string Delete = "Delete"; public readonly string Delete = "Delete";
public readonly string GenerateDocumentHandlerUi = "GenerateDocumentHandlerUi";
public readonly string DocumentHandlers = "DocumentHandlers";
} }
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
@@ -176,6 +190,8 @@ namespace Disco.Web.Areas.API.Controllers
public const string BulkGenerate = "BulkGenerate"; public const string BulkGenerate = "BulkGenerate";
public const string Generate = "Generate"; public const string Generate = "Generate";
public const string Delete = "Delete"; public const string Delete = "Delete";
public const string GenerateDocumentHandlerUi = "GenerateDocumentHandlerUi";
public const string DocumentHandlers = "DocumentHandlers";
} }
@@ -297,6 +313,25 @@ namespace Disco.Web.Areas.API.Controllers
public readonly string id = "id"; public readonly string id = "id";
public readonly string redirect = "redirect"; public readonly string redirect = "redirect";
} }
static readonly ActionParamsClass_GenerateDocumentHandlerUi s_params_GenerateDocumentHandlerUi = new ActionParamsClass_GenerateDocumentHandlerUi();
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
public ActionParamsClass_GenerateDocumentHandlerUi GenerateDocumentHandlerUiParams { get { return s_params_GenerateDocumentHandlerUi; } }
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
public class ActionParamsClass_GenerateDocumentHandlerUi
{
public readonly string id = "id";
public readonly string targetId = "targetId";
public readonly string handlerId = "handlerId";
}
static readonly ActionParamsClass_DocumentHandlers s_params_DocumentHandlers = new ActionParamsClass_DocumentHandlers();
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
public ActionParamsClass_DocumentHandlers DocumentHandlersParams { get { return s_params_DocumentHandlers; } }
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
public class ActionParamsClass_DocumentHandlers
{
public readonly string id = "id";
public readonly string targetId = "targetId";
}
static readonly ViewsClass s_views = new ViewsClass(); static readonly ViewsClass s_views = new ViewsClass();
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
public ViewsClass Views { get { return s_views; } } public ViewsClass Views { get { return s_views; } }
@@ -482,6 +517,33 @@ namespace Disco.Web.Areas.API.Controllers
return callInfo; return callInfo;
} }
[NonAction]
partial void GenerateDocumentHandlerUiOverride(T4MVC_System_Web_Mvc_ActionResult callInfo, string id, string targetId, string handlerId);
[NonAction]
public override System.Web.Mvc.ActionResult GenerateDocumentHandlerUi(string id, string targetId, string handlerId)
{
var callInfo = new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.GenerateDocumentHandlerUi);
ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "id", id);
ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "targetId", targetId);
ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "handlerId", handlerId);
GenerateDocumentHandlerUiOverride(callInfo, id, targetId, handlerId);
return callInfo;
}
[NonAction]
partial void DocumentHandlersOverride(T4MVC_System_Web_Mvc_ActionResult callInfo, string id, string targetId);
[NonAction]
public override System.Web.Mvc.ActionResult DocumentHandlers(string id, string targetId)
{
var callInfo = new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.DocumentHandlers);
ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "id", id);
ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "targetId", targetId);
DocumentHandlersOverride(callInfo, id, targetId);
return callInfo;
}
} }
} }
@@ -5,7 +5,7 @@
selectListItems.Add(new SelectListItem() { Selected = true, Value = string.Empty, Text = "Generate Document" }); selectListItems.Add(new SelectListItem() { Selected = true, Value = string.Empty, Text = "Generate Document" });
selectListItems.AddRange(Model.Templates.ToSelectListItems()); selectListItems.AddRange(Model.Templates.ToSelectListItems());
selectListItems.AddRange(Model.TemplatePackages.ToSelectListItems()); selectListItems.AddRange(Model.TemplatePackages.ToSelectListItems());
<div id="Document_Generation_Container" data-targetid="@Model.Target.AttachmentReferenceId" data-targettype="@Model.Target.HasAttachmentType" data-generatepdfurl="@Url.Action(MVC.API.DocumentTemplate.Generate())" data-generatepackageurl="@Url.Action(MVC.API.DocumentTemplatePackage.Generate())" data-handlerspresent="@(Model.HandlersPresent ? "true" : "false")" data-handlersurl="@Url.Action(MVC.API.DocumentTemplate.DocumentHandlers())"> <div id="Document_Generation_Container" data-targetid="@Model.Target.AttachmentReferenceId" data-targettype="@Model.Target.HasAttachmentType" data-generatepdfurl="@Url.Action(MVC.API.DocumentTemplate.Generate())" data-generatepackageurl="@Url.Action(MVC.API.DocumentTemplatePackage.Generate())" data-handlerspresent="@(Model.HandlersPresent ? "true" : "false")" data-handlersurl="@Url.Action(MVC.API.DocumentTemplate.DocumentHandlers())" data-handlerspackageurl="@Url.Action(MVC.API.DocumentTemplatePackage.DocumentHandlers())">
@Html.DropDownList("Document_Generate", selectListItems) @Html.DropDownList("Document_Generate", selectListItems)
@if (Model.HandlersPresent) @if (Model.HandlersPresent)
{ {
@@ -125,6 +125,17 @@ WriteLiteral(" data-handlersurl=\"");
#line hidden #line hidden
WriteLiteral("\""); WriteLiteral("\"");
WriteLiteral(" data-handlerspackageurl=\"");
#line 8 "..\..\Views\Shared\_GenerateDocumentControl.cshtml"
Write(Url.Action(MVC.API.DocumentTemplatePackage.DocumentHandlers()));
#line default
#line hidden
WriteLiteral("\"");
WriteLiteral(">\r\n"); WriteLiteral(">\r\n");
WriteLiteral(" "); WriteLiteral(" ");