feature: device document template bulk generation

This commit is contained in:
Gary Sharp
2025-08-17 18:22:03 +10:00
parent 676ff82e4b
commit ca7193a8fc
39 changed files with 4437 additions and 2429 deletions
@@ -2,7 +2,6 @@
using Disco.Models.UI.Config.DeviceBatch;
using Disco.Services;
using Disco.Services.Authorization;
using Disco.Services.Devices;
using Disco.Services.Devices.ManagedGroups;
using Disco.Services.Plugins.Features.UIExtension;
using Disco.Services.Web;
@@ -1,5 +1,4 @@
using Disco.Models.Areas.Config.UI.DeviceFlag;
using Disco.Models.Repository;
using Disco.Models.Services.Devices.DeviceFlag;
using Disco.Models.UI.Config.DeviceFlag;
using Disco.Services.Authorization;
@@ -209,7 +209,7 @@ namespace Disco.Web.Areas.Config.Controllers
}
else
{
ModelState.AddModelError("Id", "A Document Template Package with this Id already exists.");
ModelState.AddModelError(nameof(model.Id), "A Document Template Package with this Id already exists.");
}
}
@@ -219,67 +219,134 @@ namespace Disco.Web.Areas.Config.Controllers
return View(model);
}
public static ConfigDocumentTemplateBulkGenerate BuildBulkGenerateModel(DocumentTemplate documentTemplate, DiscoDataContext database, AuthorizationToken authorization)
public static (string viewName, ConfigDocumentTemplateBulkGenerate model) BuildBulkGenerateModel(DocumentTemplate documentTemplate, DiscoDataContext database, AuthorizationToken authorization)
{
var model = new BulkGenerateModel()
{
DocumentTemplate = documentTemplate,
};
BulkGenerateModel model;
string viewName;
model.TemplatePageCount = model.DocumentTemplate.PdfPageHasAttachmentId(database).Count;
model.UserFlags = database.UserFlags.Select(f => new ItemWithCount<UserFlag>()
if (documentTemplate.Scope == DocumentTemplate.DocumentTemplateScopes.User)
{
Item = f,
Count = f.UserFlagAssignments.Where(a => a.RemovedDate == null).Count(),
}).ToList();
model.DeviceProfiles = database.DeviceProfiles.Select(p => new ItemWithCount<DeviceProfile>()
{
Item = p,
Count = p.Devices.Where(d => d.AssignedUserId != null).Count(),
}).ToList();
model.DeviceBatches = database.DeviceBatches.Select(p => new ItemWithCount<DeviceBatch>()
{
Item = p,
Count = p.Devices.Where(d => d.AssignedUserId != null).Count(),
}).ToList();
model.DocumentTemplates = database.DocumentTemplates.Select(dt => new ItemWithCount<DocumentTemplate>()
{
Item = dt,
}).ToList();
foreach (var record in model.DocumentTemplates)
{
switch (record.Item.AttachmentType)
authorization.Require(Claims.User.Actions.GenerateDocuments);
model = new BulkGenerateUserModel()
{
case AttachmentTypes.Device:
record.Count = database.DeviceAttachments.Where(a => a.DocumentTemplateId == record.Item.Id).Select(a => a.Device.AssignedUser).Distinct().Count();
break;
case AttachmentTypes.Job:
record.Count = database.JobAttachments.Where(a => a.DocumentTemplateId == record.Item.Id).Select(a => a.Job.User).Distinct().Count();
break;
case AttachmentTypes.User:
record.Count = database.UserAttachments.Where(a => a.DocumentTemplateId == record.Item.Id).Select(a => a.User).Distinct().Count();
break;
default:
throw new NotSupportedException();
}
}
if (authorization.Has(Claims.User.ShowDetails))
{
model.UserDetails = database.UserDetails.Where(d => d.Scope == "Details").GroupBy(d => d.Key).Select(g => new ItemWithCount<string>()
UserFlags = database.UserFlags.Select(f => new ItemWithCount<UserFlag>()
{
Item = f,
Count = f.UserFlagAssignments.Where(a => a.RemovedDate == null).Count(),
}).ToList(),
};
model.DeviceProfiles = database.DeviceProfiles.Select(p => new ItemWithCount<DeviceProfile>()
{
Item = g.Key,
Count = g.Count(),
Item = p,
Count = p.Devices.Where(d => d.AssignedUserId != null).Count(),
}).ToList();
model.DeviceBatches = database.DeviceBatches.Select(p => new ItemWithCount<DeviceBatch>()
{
Item = p,
Count = p.Devices.Where(d => d.AssignedUserId != null).Count(),
}).ToList();
model.DocumentTemplates = database.DocumentTemplates.Select(dt => new ItemWithCount<DocumentTemplate>()
{
Item = dt,
}).ToList();
foreach (var record in model.DocumentTemplates)
{
switch (record.Item.AttachmentType)
{
case AttachmentTypes.Device:
record.Count = database.DeviceAttachments.Where(a => a.DocumentTemplateId == record.Item.Id).Select(a => a.Device.AssignedUser).Distinct().Count();
break;
case AttachmentTypes.Job:
record.Count = database.JobAttachments.Where(a => a.DocumentTemplateId == record.Item.Id).Select(a => a.Job.User).Distinct().Count();
break;
case AttachmentTypes.User:
record.Count = database.UserAttachments.Where(a => a.DocumentTemplateId == record.Item.Id).Select(a => a.User).Distinct().Count();
break;
default:
throw new NotSupportedException();
}
}
if (authorization.Has(Claims.User.ShowDetails))
{
model.UserDetails = database.UserDetails.Where(d => d.Scope == "Details").GroupBy(d => d.Key).Select(g => new ItemWithCount<string>()
{
Item = g.Key,
Count = g.Count(),
}).ToList();
}
else
{
model.UserDetails = new List<ItemWithCount<string>>();
}
viewName = MVC.Config.DocumentTemplate.Views.BulkGenerateUser;
}
else if (documentTemplate.Scope == DocumentTemplate.DocumentTemplateScopes.Device)
{
authorization.Require(Claims.Device.Actions.GenerateDocuments);
model = new BulkGenerateDeviceModel()
{
DeviceFlags = database.DeviceFlags.Select(f => new ItemWithCount<DeviceFlag>()
{
Item = f,
Count = f.DeviceFlagAssignments.Where(a => a.RemovedDate == null).Count(),
}).ToList(),
};
model.DeviceProfiles = database.DeviceProfiles.Select(p => new ItemWithCount<DeviceProfile>()
{
Item = p,
Count = p.Devices.Count(),
}).ToList();
model.DeviceBatches = database.DeviceBatches.Select(p => new ItemWithCount<DeviceBatch>()
{
Item = p,
Count = p.Devices.Count(),
}).ToList();
model.DocumentTemplates = database.DocumentTemplates.Select(dt => new ItemWithCount<DocumentTemplate>()
{
Item = dt,
}).ToList();
foreach (var record in model.DocumentTemplates)
{
switch (record.Item.AttachmentType)
{
case AttachmentTypes.Device:
record.Count = database.DeviceAttachments.Where(a => a.DocumentTemplateId == record.Item.Id).Select(a => a.Device).Distinct().Count();
break;
case AttachmentTypes.Job:
record.Count = database.JobAttachments.Where(a => a.DocumentTemplateId == record.Item.Id).Select(a => a.Job.Device).Distinct().Count();
break;
case AttachmentTypes.User:
record.Count = database.UserAttachments.Where(a => a.DocumentTemplateId == record.Item.Id).SelectMany(a => a.User.DeviceUserAssignments).Where(a => a.UnassignedDate == null).Select(a => a.DeviceSerialNumber).Distinct().Count();
break;
default:
throw new NotSupportedException();
}
}
if (authorization.Has(Claims.User.ShowDetails))
{
model.UserDetails = database.UserDetails.Where(d => d.Scope == "Details").GroupBy(d => d.Key).Select(g => new ItemWithCount<string>()
{
Item = g.Key,
Count = g.Select(i => i.User).SelectMany(u => u.DeviceUserAssignments).Where(a => a.UnassignedDate == null).Count(),
}).ToList();
}
else
{
model.UserDetails = new List<ItemWithCount<string>>();
}
viewName = MVC.Config.DocumentTemplate.Views.BulkGenerateDevice;
}
else
{
model.UserDetails = new List<ItemWithCount<string>>();
}
throw new NotSupportedException("Only user and device scoped document templates can be bulk generated using this method");
return model;
model.DocumentTemplate = documentTemplate;
model.TemplatePageCount = model.DocumentTemplate.PdfPageHasAttachmentId(database).Count;
return (viewName, model);
}
[DiscoAuthorizeAll(Claims.Config.DocumentTemplate.BulkGenerate, Claims.User.Actions.GenerateDocuments)]
[DiscoAuthorizeAll(Claims.Config.DocumentTemplate.BulkGenerate)]
public virtual ActionResult BulkGenerate(string id)
{
var documentTemplate = Database.DocumentTemplates.FirstOrDefault(at => at.Id == id);
@@ -287,16 +354,15 @@ namespace Disco.Web.Areas.Config.Controllers
if (documentTemplate == null)
throw new ArgumentException("Invalid Document Template Id", nameof(id));
if (documentTemplate.Scope != DocumentTemplate.DocumentTemplateScopes.User)
if (documentTemplate.Scope != DocumentTemplate.DocumentTemplateScopes.User && documentTemplate.Scope != DocumentTemplate.DocumentTemplateScopes.Device)
throw new NotSupportedException("Only user-scoped document templates can be bulk generated using this method");
var model = BuildBulkGenerateModel(documentTemplate, Database, Authorization);
var (viewName, model) = BuildBulkGenerateModel(documentTemplate, Database, Authorization);
// UI Extensions
UIExtensions.ExecuteExtensions(ControllerContext, model);
return View(MVC.Config.DocumentTemplate.Views.BulkGenerate, model);
return View(viewName, model);
}
[HttpGet]
@@ -1,5 +1,4 @@
using Disco.Models.Repository;
using Disco.Models.Services.Jobs.JobQueues;
using Disco.Models.Services.Jobs.JobQueues;
using Disco.Models.UI.Config.JobQueue;
using Disco.Services.Authorization;
using Disco.Services.Extensions;
@@ -7,10 +7,19 @@ namespace Disco.Web.Areas.Config.Models.DocumentTemplate
{
public Disco.Models.Repository.DocumentTemplate DocumentTemplate { get; set; }
public int TemplatePageCount { get; set; }
public List<ItemWithCount<Disco.Models.Repository.UserFlag>> UserFlags { get; set; }
public List<ItemWithCount<Disco.Models.Repository.DeviceProfile>> DeviceProfiles { get; set; }
public List<ItemWithCount<Disco.Models.Repository.DeviceBatch>> DeviceBatches { get; set; }
public List<ItemWithCount<Disco.Models.Repository.DocumentTemplate>> DocumentTemplates { get; set; }
public List<ItemWithCount<string>> UserDetails { get; set; }
}
}
public class BulkGenerateUserModel : BulkGenerateModel, ConfigDocumentTemplateBulkGenerateUser
{
public List<ItemWithCount<Disco.Models.Repository.UserFlag>> UserFlags { get; set; }
}
public class BulkGenerateDeviceModel : BulkGenerateModel, ConfigDocumentTemplateBulkGenerateDevice
{
public List<ItemWithCount<Disco.Models.Repository.DeviceFlag>> DeviceFlags { get; set; }
}
}
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,61 @@
@model Disco.Web.Areas.Config.Models.DocumentTemplate.BulkGenerateDeviceModel
@{
Authorization.RequireAll(Claims.Config.DocumentTemplate.BulkGenerate, Claims.User.Actions.GenerateDocuments);
ViewBag.Title = Html.ToBreadcrumb("Configuration", MVC.Config.Config.Index(), "Document Templates", MVC.Config.DocumentTemplate.Index(null), Model.DocumentTemplate.Description, MVC.Config.DocumentTemplate.Index(Model.DocumentTemplate.Id), "Bulk Generate");
Html.BundleDeferred("~/ClientScripts/Modules/Disco-DocumentBulkGenerate");
}
<div id="DocumentTemplate_BulkGenerate">
<div class="actions">
@using (Html.BeginForm(MVC.API.DocumentTemplate.BulkGenerate(Model.DocumentTemplate.Id)))
{
if (Model.TemplatePageCount > 1 && Model.TemplatePageCount % 2 != 0)
{
<input id="DocumentTemplate_BulkGenerate_InsertBlankPage" type="checkbox" name="InsertBlankPage" value="True" checked /><label for="DocumentTemplate_BulkGenerate_InsertBlankPage">Insert Blank Pages for Double-Sided Printing</label>
}
<input id="DocumentTemplate_BulkGenerate_DataIds" name="DataIds" type="hidden" />
<button id="BulkGenerate" class="button" disabled>Bulk Generate</button>
@Html.AntiForgeryToken()
}
<br />
<button id="AddDevices" class="button small">Add Devices</button>
@if (Model.DeviceFlags.Any(f => f.Count > 0))
{
<button id="AddDeviceFlag" class="button small">Add With Device Flag</button>
}
@if (Model.DeviceProfiles.Any(b => b.Count > 0))
{
<button id="AddDeviceProfile" class="button small">Add With Device Profile</button>
}
@if (Model.DeviceBatches.Any(b => b.Count > 0))
{
<button id="AddDeviceBatch" class="button small">Add With Device Batch</button>
}
@if (Model.DocumentTemplates.Any(b => b.Count > 0))
{
<button id="AddDocumentAttachment" class="button small">Add With Document Attachment</button>
}
<button id="AddUsers" class="button small">Add With Assigned User</button>
@if (Model.UserDetails.Any(b => b.Count > 0))
{
<button id="AddUserDetail" class="button small">Add With Assigned User Detail</button>
}
</div>
<table id="DocumentTemplate_BulkGenerate_Records" class="genericData" data-scope="device">
<thead>
<tr>
<th>&nbsp;</th>
<th>Serial Number</th>
<th class="name">&nbsp;</th>
<th>Scope</th>
</tr>
</thead>
<tbody>
<tr class="when-none">
<td colspan="4">Add Devices</td>
</tr>
</tbody>
</table>
</div>
@Html.Partial(MVC.Config.DocumentTemplate.Views._BulkGenerateShared, Model)
@@ -0,0 +1,332 @@
#pragma warning disable 1591
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace Disco.Web.Areas.Config.Views.DocumentTemplate
{
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Web;
using System.Web.Helpers;
using System.Web.Mvc;
using System.Web.Mvc.Ajax;
using System.Web.Mvc.Html;
using System.Web.Routing;
using System.Web.Security;
using System.Web.UI;
using System.Web.WebPages;
using Disco;
using Disco.Models.Repository;
using Disco.Services;
using Disco.Services.Authorization;
using Disco.Services.Web;
using Disco.Web;
using Disco.Web.Extensions;
[System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")]
[System.Web.WebPages.PageVirtualPathAttribute("~/Areas/Config/Views/DocumentTemplate/BulkGenerateDevice.cshtml")]
public partial class BulkGenerateDevice : Disco.Services.Web.WebViewPage<Disco.Web.Areas.Config.Models.DocumentTemplate.BulkGenerateDeviceModel>
{
public BulkGenerateDevice()
{
}
public override void Execute()
{
#line 2 "..\..\Areas\Config\Views\DocumentTemplate\BulkGenerateDevice.cshtml"
Authorization.RequireAll(Claims.Config.DocumentTemplate.BulkGenerate, Claims.User.Actions.GenerateDocuments);
ViewBag.Title = Html.ToBreadcrumb("Configuration", MVC.Config.Config.Index(), "Document Templates", MVC.Config.DocumentTemplate.Index(null), Model.DocumentTemplate.Description, MVC.Config.DocumentTemplate.Index(Model.DocumentTemplate.Id), "Bulk Generate");
Html.BundleDeferred("~/ClientScripts/Modules/Disco-DocumentBulkGenerate");
#line default
#line hidden
WriteLiteral("\r\n<div");
WriteLiteral(" id=\"DocumentTemplate_BulkGenerate\"");
WriteLiteral(">\r\n <div");
WriteLiteral(" class=\"actions\"");
WriteLiteral(">\r\n");
#line 10 "..\..\Areas\Config\Views\DocumentTemplate\BulkGenerateDevice.cshtml"
#line default
#line hidden
#line 10 "..\..\Areas\Config\Views\DocumentTemplate\BulkGenerateDevice.cshtml"
using (Html.BeginForm(MVC.API.DocumentTemplate.BulkGenerate(Model.DocumentTemplate.Id)))
{
if (Model.TemplatePageCount > 1 && Model.TemplatePageCount % 2 != 0)
{
#line default
#line hidden
WriteLiteral(" <input");
WriteLiteral(" id=\"DocumentTemplate_BulkGenerate_InsertBlankPage\"");
WriteLiteral(" type=\"checkbox\"");
WriteLiteral(" name=\"InsertBlankPage\"");
WriteLiteral(" value=\"True\"");
WriteLiteral(" checked />");
WriteLiteral("<label");
WriteLiteral(" for=\"DocumentTemplate_BulkGenerate_InsertBlankPage\"");
WriteLiteral(">Insert Blank Pages for Double-Sided Printing</label>\r\n");
#line 15 "..\..\Areas\Config\Views\DocumentTemplate\BulkGenerateDevice.cshtml"
}
#line default
#line hidden
WriteLiteral(" <input");
WriteLiteral(" id=\"DocumentTemplate_BulkGenerate_DataIds\"");
WriteLiteral(" name=\"DataIds\"");
WriteLiteral(" type=\"hidden\"");
WriteLiteral(" />\r\n");
WriteLiteral(" <button");
WriteLiteral(" id=\"BulkGenerate\"");
WriteLiteral(" class=\"button\"");
WriteLiteral(" disabled>Bulk Generate</button>\r\n");
#line 18 "..\..\Areas\Config\Views\DocumentTemplate\BulkGenerateDevice.cshtml"
#line default
#line hidden
#line 18 "..\..\Areas\Config\Views\DocumentTemplate\BulkGenerateDevice.cshtml"
Write(Html.AntiForgeryToken());
#line default
#line hidden
#line 18 "..\..\Areas\Config\Views\DocumentTemplate\BulkGenerateDevice.cshtml"
}
#line default
#line hidden
WriteLiteral(" <br />\r\n <button");
WriteLiteral(" id=\"AddDevices\"");
WriteLiteral(" class=\"button small\"");
WriteLiteral(">Add Devices</button>\r\n");
#line 22 "..\..\Areas\Config\Views\DocumentTemplate\BulkGenerateDevice.cshtml"
#line default
#line hidden
#line 22 "..\..\Areas\Config\Views\DocumentTemplate\BulkGenerateDevice.cshtml"
if (Model.DeviceFlags.Any(f => f.Count > 0))
{
#line default
#line hidden
WriteLiteral(" <button");
WriteLiteral(" id=\"AddDeviceFlag\"");
WriteLiteral(" class=\"button small\"");
WriteLiteral(">Add With Device Flag</button>\r\n");
#line 25 "..\..\Areas\Config\Views\DocumentTemplate\BulkGenerateDevice.cshtml"
}
#line default
#line hidden
WriteLiteral(" ");
#line 26 "..\..\Areas\Config\Views\DocumentTemplate\BulkGenerateDevice.cshtml"
if (Model.DeviceProfiles.Any(b => b.Count > 0))
{
#line default
#line hidden
WriteLiteral(" <button");
WriteLiteral(" id=\"AddDeviceProfile\"");
WriteLiteral(" class=\"button small\"");
WriteLiteral(">Add With Device Profile</button>\r\n");
#line 29 "..\..\Areas\Config\Views\DocumentTemplate\BulkGenerateDevice.cshtml"
}
#line default
#line hidden
WriteLiteral(" ");
#line 30 "..\..\Areas\Config\Views\DocumentTemplate\BulkGenerateDevice.cshtml"
if (Model.DeviceBatches.Any(b => b.Count > 0))
{
#line default
#line hidden
WriteLiteral(" <button");
WriteLiteral(" id=\"AddDeviceBatch\"");
WriteLiteral(" class=\"button small\"");
WriteLiteral(">Add With Device Batch</button>\r\n");
#line 33 "..\..\Areas\Config\Views\DocumentTemplate\BulkGenerateDevice.cshtml"
}
#line default
#line hidden
WriteLiteral(" ");
#line 34 "..\..\Areas\Config\Views\DocumentTemplate\BulkGenerateDevice.cshtml"
if (Model.DocumentTemplates.Any(b => b.Count > 0))
{
#line default
#line hidden
WriteLiteral(" <button");
WriteLiteral(" id=\"AddDocumentAttachment\"");
WriteLiteral(" class=\"button small\"");
WriteLiteral(">Add With Document Attachment</button>\r\n");
#line 37 "..\..\Areas\Config\Views\DocumentTemplate\BulkGenerateDevice.cshtml"
}
#line default
#line hidden
WriteLiteral(" <button");
WriteLiteral(" id=\"AddUsers\"");
WriteLiteral(" class=\"button small\"");
WriteLiteral(">Add With Assigned User</button>\r\n");
#line 39 "..\..\Areas\Config\Views\DocumentTemplate\BulkGenerateDevice.cshtml"
#line default
#line hidden
#line 39 "..\..\Areas\Config\Views\DocumentTemplate\BulkGenerateDevice.cshtml"
if (Model.UserDetails.Any(b => b.Count > 0))
{
#line default
#line hidden
WriteLiteral(" <button");
WriteLiteral(" id=\"AddUserDetail\"");
WriteLiteral(" class=\"button small\"");
WriteLiteral(">Add With Assigned User Detail</button>\r\n");
#line 42 "..\..\Areas\Config\Views\DocumentTemplate\BulkGenerateDevice.cshtml"
}
#line default
#line hidden
WriteLiteral(" </div>\r\n <table");
WriteLiteral(" id=\"DocumentTemplate_BulkGenerate_Records\"");
WriteLiteral(" class=\"genericData\"");
WriteLiteral(" data-scope=\"device\"");
WriteLiteral(">\r\n <thead>\r\n <tr>\r\n <th>&nbsp;</th>\r\n " +
" <th>Serial Number</th>\r\n <th");
WriteLiteral(" class=\"name\"");
WriteLiteral(">&nbsp;</th>\r\n <th>Scope</th>\r\n </tr>\r\n </thead>" +
"\r\n <tbody>\r\n <tr");
WriteLiteral(" class=\"when-none\"");
WriteLiteral(">\r\n <td");
WriteLiteral(" colspan=\"4\"");
WriteLiteral(">Add Devices</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n</div>\r\n\r\n");
#line 61 "..\..\Areas\Config\Views\DocumentTemplate\BulkGenerateDevice.cshtml"
Write(Html.Partial(MVC.Config.DocumentTemplate.Views._BulkGenerateShared, Model));
#line default
#line hidden
WriteLiteral("\r\n");
}
}
}
#pragma warning restore 1591
@@ -0,0 +1,62 @@
@model Disco.Web.Areas.Config.Models.DocumentTemplate.BulkGenerateUserModel
@using Disco.Services.Interop.ActiveDirectory;
@{
Authorization.RequireAll(Claims.Config.DocumentTemplate.BulkGenerate, Claims.User.Actions.GenerateDocuments);
ViewBag.Title = Html.ToBreadcrumb("Configuration", MVC.Config.Config.Index(), "Document Templates", MVC.Config.DocumentTemplate.Index(null), Model.DocumentTemplate.Description, MVC.Config.DocumentTemplate.Index(Model.DocumentTemplate.Id), "Bulk Generate");
Html.BundleDeferred("~/ClientScripts/Modules/Disco-DocumentBulkGenerate");
}
<div id="DocumentTemplate_BulkGenerate">
<div class="actions">
@using (Html.BeginForm(MVC.API.DocumentTemplate.BulkGenerate(Model.DocumentTemplate.Id)))
{
if (Model.TemplatePageCount > 1 && Model.TemplatePageCount % 2 != 0)
{
<input id="DocumentTemplate_BulkGenerate_InsertBlankPage" type="checkbox" name="InsertBlankPage" value="True" checked /><label for="DocumentTemplate_BulkGenerate_InsertBlankPage">Insert Blank Pages for Double-Sided Printing</label>
}
<input id="DocumentTemplate_BulkGenerate_DataIds" name="DataIds" type="hidden" />
<button id="BulkGenerate" class="button" disabled>Bulk Generate</button>
@Html.AntiForgeryToken()
}
<br />
<button id="AddUsers" class="button small">Add Users</button>
<button id="AddGroupMembers" class="button small">Add Group Members</button>
@if (Model.UserFlags.Any(f => f.Count > 0))
{
<button id="AddUserFlag" class="button small">Add With User Flag</button>
}
@if (Model.DeviceProfiles.Any(b => b.Count > 0))
{
<button id="AddDeviceProfile" class="button small">Add With Device Profile</button>
}
@if (Model.DeviceBatches.Any(b => b.Count > 0))
{
<button id="AddDeviceBatch" class="button small">Add With Device Batch</button>
}
@if (Model.DocumentTemplates.Any(b => b.Count > 0))
{
<button id="AddDocumentAttachment" class="button small">Add With Document Attachment</button>
}
@if (Model.UserDetails.Any(b => b.Count > 0))
{
<button id="AddUserDetail" class="button small">Add With User Detail</button>
}
</div>
<table id="DocumentTemplate_BulkGenerate_Records" class="genericData" data-scope="user">
<thead>
<tr>
<th>&nbsp;</th>
<th>Username</th>
<th class="name">Name</th>
<th>Scope</th>
</tr>
</thead>
<tbody>
<tr class="when-none">
<td colspan="4">Add Users</td>
</tr>
</tbody>
</table>
</div>
@Html.Partial(MVC.Config.DocumentTemplate.Views._BulkGenerateShared, Model)
@@ -0,0 +1,332 @@
#pragma warning disable 1591
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.42000
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace Disco.Web.Areas.Config.Views.DocumentTemplate
{
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Web;
using System.Web.Helpers;
using System.Web.Mvc;
using System.Web.Mvc.Ajax;
using System.Web.Mvc.Html;
using System.Web.Routing;
using System.Web.Security;
using System.Web.UI;
using System.Web.WebPages;
using Disco;
using Disco.Models.Repository;
using Disco.Services;
using Disco.Services.Authorization;
#line 2 "..\..\Areas\Config\Views\DocumentTemplate\BulkGenerateUser.cshtml"
using Disco.Services.Interop.ActiveDirectory;
#line default
#line hidden
using Disco.Services.Web;
using Disco.Web;
using Disco.Web.Extensions;
[System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")]
[System.Web.WebPages.PageVirtualPathAttribute("~/Areas/Config/Views/DocumentTemplate/BulkGenerateUser.cshtml")]
public partial class BulkGenerateUser : Disco.Services.Web.WebViewPage<Disco.Web.Areas.Config.Models.DocumentTemplate.BulkGenerateUserModel>
{
public BulkGenerateUser()
{
}
public override void Execute()
{
#line 3 "..\..\Areas\Config\Views\DocumentTemplate\BulkGenerateUser.cshtml"
Authorization.RequireAll(Claims.Config.DocumentTemplate.BulkGenerate, Claims.User.Actions.GenerateDocuments);
ViewBag.Title = Html.ToBreadcrumb("Configuration", MVC.Config.Config.Index(), "Document Templates", MVC.Config.DocumentTemplate.Index(null), Model.DocumentTemplate.Description, MVC.Config.DocumentTemplate.Index(Model.DocumentTemplate.Id), "Bulk Generate");
Html.BundleDeferred("~/ClientScripts/Modules/Disco-DocumentBulkGenerate");
#line default
#line hidden
WriteLiteral("\r\n<div");
WriteLiteral(" id=\"DocumentTemplate_BulkGenerate\"");
WriteLiteral(">\r\n <div");
WriteLiteral(" class=\"actions\"");
WriteLiteral(">\r\n");
#line 11 "..\..\Areas\Config\Views\DocumentTemplate\BulkGenerateUser.cshtml"
#line default
#line hidden
#line 11 "..\..\Areas\Config\Views\DocumentTemplate\BulkGenerateUser.cshtml"
using (Html.BeginForm(MVC.API.DocumentTemplate.BulkGenerate(Model.DocumentTemplate.Id)))
{
if (Model.TemplatePageCount > 1 && Model.TemplatePageCount % 2 != 0)
{
#line default
#line hidden
WriteLiteral(" <input");
WriteLiteral(" id=\"DocumentTemplate_BulkGenerate_InsertBlankPage\"");
WriteLiteral(" type=\"checkbox\"");
WriteLiteral(" name=\"InsertBlankPage\"");
WriteLiteral(" value=\"True\"");
WriteLiteral(" checked />");
WriteLiteral("<label");
WriteLiteral(" for=\"DocumentTemplate_BulkGenerate_InsertBlankPage\"");
WriteLiteral(">Insert Blank Pages for Double-Sided Printing</label>\r\n");
#line 16 "..\..\Areas\Config\Views\DocumentTemplate\BulkGenerateUser.cshtml"
}
#line default
#line hidden
WriteLiteral(" <input");
WriteLiteral(" id=\"DocumentTemplate_BulkGenerate_DataIds\"");
WriteLiteral(" name=\"DataIds\"");
WriteLiteral(" type=\"hidden\"");
WriteLiteral(" />\r\n");
WriteLiteral(" <button");
WriteLiteral(" id=\"BulkGenerate\"");
WriteLiteral(" class=\"button\"");
WriteLiteral(" disabled>Bulk Generate</button>\r\n");
#line 19 "..\..\Areas\Config\Views\DocumentTemplate\BulkGenerateUser.cshtml"
#line default
#line hidden
#line 19 "..\..\Areas\Config\Views\DocumentTemplate\BulkGenerateUser.cshtml"
Write(Html.AntiForgeryToken());
#line default
#line hidden
#line 19 "..\..\Areas\Config\Views\DocumentTemplate\BulkGenerateUser.cshtml"
}
#line default
#line hidden
WriteLiteral(" <br />\r\n <button");
WriteLiteral(" id=\"AddUsers\"");
WriteLiteral(" class=\"button small\"");
WriteLiteral(">Add Users</button>\r\n <button");
WriteLiteral(" id=\"AddGroupMembers\"");
WriteLiteral(" class=\"button small\"");
WriteLiteral(">Add Group Members</button>\r\n");
#line 24 "..\..\Areas\Config\Views\DocumentTemplate\BulkGenerateUser.cshtml"
#line default
#line hidden
#line 24 "..\..\Areas\Config\Views\DocumentTemplate\BulkGenerateUser.cshtml"
if (Model.UserFlags.Any(f => f.Count > 0))
{
#line default
#line hidden
WriteLiteral(" <button");
WriteLiteral(" id=\"AddUserFlag\"");
WriteLiteral(" class=\"button small\"");
WriteLiteral(">Add With User Flag</button>\r\n");
#line 27 "..\..\Areas\Config\Views\DocumentTemplate\BulkGenerateUser.cshtml"
}
#line default
#line hidden
WriteLiteral(" ");
#line 28 "..\..\Areas\Config\Views\DocumentTemplate\BulkGenerateUser.cshtml"
if (Model.DeviceProfiles.Any(b => b.Count > 0))
{
#line default
#line hidden
WriteLiteral(" <button");
WriteLiteral(" id=\"AddDeviceProfile\"");
WriteLiteral(" class=\"button small\"");
WriteLiteral(">Add With Device Profile</button>\r\n");
#line 31 "..\..\Areas\Config\Views\DocumentTemplate\BulkGenerateUser.cshtml"
}
#line default
#line hidden
WriteLiteral(" ");
#line 32 "..\..\Areas\Config\Views\DocumentTemplate\BulkGenerateUser.cshtml"
if (Model.DeviceBatches.Any(b => b.Count > 0))
{
#line default
#line hidden
WriteLiteral(" <button");
WriteLiteral(" id=\"AddDeviceBatch\"");
WriteLiteral(" class=\"button small\"");
WriteLiteral(">Add With Device Batch</button>\r\n");
#line 35 "..\..\Areas\Config\Views\DocumentTemplate\BulkGenerateUser.cshtml"
}
#line default
#line hidden
WriteLiteral(" ");
#line 36 "..\..\Areas\Config\Views\DocumentTemplate\BulkGenerateUser.cshtml"
if (Model.DocumentTemplates.Any(b => b.Count > 0))
{
#line default
#line hidden
WriteLiteral(" <button");
WriteLiteral(" id=\"AddDocumentAttachment\"");
WriteLiteral(" class=\"button small\"");
WriteLiteral(">Add With Document Attachment</button>\r\n");
#line 39 "..\..\Areas\Config\Views\DocumentTemplate\BulkGenerateUser.cshtml"
}
#line default
#line hidden
WriteLiteral(" ");
#line 40 "..\..\Areas\Config\Views\DocumentTemplate\BulkGenerateUser.cshtml"
if (Model.UserDetails.Any(b => b.Count > 0))
{
#line default
#line hidden
WriteLiteral(" <button");
WriteLiteral(" id=\"AddUserDetail\"");
WriteLiteral(" class=\"button small\"");
WriteLiteral(">Add With User Detail</button>\r\n");
#line 43 "..\..\Areas\Config\Views\DocumentTemplate\BulkGenerateUser.cshtml"
}
#line default
#line hidden
WriteLiteral(" </div>\r\n <table");
WriteLiteral(" id=\"DocumentTemplate_BulkGenerate_Records\"");
WriteLiteral(" class=\"genericData\"");
WriteLiteral(" data-scope=\"user\"");
WriteLiteral(">\r\n <thead>\r\n <tr>\r\n <th>&nbsp;</th>\r\n " +
" <th>Username</th>\r\n <th");
WriteLiteral(" class=\"name\"");
WriteLiteral(">Name</th>\r\n <th>Scope</th>\r\n </tr>\r\n </thead>\r\n" +
" <tbody>\r\n <tr");
WriteLiteral(" class=\"when-none\"");
WriteLiteral(">\r\n <td");
WriteLiteral(" colspan=\"4\"");
WriteLiteral(">Add Users</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n</div>\r\n\r\n");
#line 62 "..\..\Areas\Config\Views\DocumentTemplate\BulkGenerateUser.cshtml"
Write(Html.Partial(MVC.Config.DocumentTemplate.Views._BulkGenerateShared, Model));
#line default
#line hidden
WriteLiteral("\r\n");
}
}
}
#pragma warning restore 1591
@@ -1039,7 +1039,7 @@
}
@if (canBulkGenerate)
{
if (Model.DocumentTemplate.Scope == DocumentTemplate.DocumentTemplateScopes.User)
if (Model.DocumentTemplate.Scope == DocumentTemplate.DocumentTemplateScopes.User || Model.DocumentTemplate.Scope == DocumentTemplate.DocumentTemplateScopes.Device)
{
@Html.ActionLinkButton("Bulk Generate", MVC.Config.DocumentTemplate.BulkGenerate(Model.DocumentTemplate.Id))
}
@@ -3289,7 +3289,7 @@ WriteLiteral(" ");
#line 1040 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
if (canBulkGenerate)
{
if (Model.DocumentTemplate.Scope == DocumentTemplate.DocumentTemplateScopes.User)
if (Model.DocumentTemplate.Scope == DocumentTemplate.DocumentTemplateScopes.User || Model.DocumentTemplate.Scope == DocumentTemplate.DocumentTemplateScopes.Device)
{
@@ -3328,16 +3328,16 @@ WriteLiteral(" id=\"dialogBulkGenerate\"");
WriteLiteral(" class=\"dialog dialog-bulk-generate\"");
WriteAttribute("title", Tuple.Create(" title=\"", 62559), Tuple.Create("\"", 62610)
, Tuple.Create(Tuple.Create("", 62567), Tuple.Create("Bulk", 62567), true)
, Tuple.Create(Tuple.Create(" ", 62571), Tuple.Create("Generate:", 62572), true)
WriteAttribute("title", Tuple.Create(" title=\"", 62641), Tuple.Create("\"", 62692)
, Tuple.Create(Tuple.Create("", 62649), Tuple.Create("Bulk", 62649), true)
, Tuple.Create(Tuple.Create(" ", 62653), Tuple.Create("Generate:", 62654), true)
#line 1049 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
, Tuple.Create(Tuple.Create(" ", 62581), Tuple.Create<System.Object, System.Int32>(Model.DocumentTemplate.Id
, Tuple.Create(Tuple.Create(" ", 62663), Tuple.Create<System.Object, System.Int32>(Model.DocumentTemplate.Id
#line default
#line hidden
, 62582), false)
, 62664), false)
);
WriteLiteral(">\r\n <div");
@@ -3631,14 +3631,14 @@ WriteLiteral(" title=\"Download Bulk Documents\"");
WriteLiteral(">\r\n <a");
WriteAttribute("href", Tuple.Create(" href=\"", 67770), Tuple.Create("\"", 67907)
WriteAttribute("href", Tuple.Create(" href=\"", 67852), Tuple.Create("\"", 67989)
#line 1138 "..\..\Areas\Config\Views\DocumentTemplate\Show.cshtml"
, Tuple.Create(Tuple.Create("", 67777), Tuple.Create<System.Object, System.Int32>(Url.Action(MVC.API.DocumentTemplate.BulkGenerateDownload(Model.BulkGenerateDownloadId.Value, Model.BulkGenerateDownloadFilename))
, Tuple.Create(Tuple.Create("", 67859), Tuple.Create<System.Object, System.Int32>(Url.Action(MVC.API.DocumentTemplate.BulkGenerateDownload(Model.BulkGenerateDownloadId.Value, Model.BulkGenerateDownloadFilename))
#line default
#line hidden
, 67777), false)
, 67859), false)
);
WriteLiteral(" class=\"button\"");
@@ -1,119 +1,133 @@
@model Disco.Web.Areas.Config.Models.DocumentTemplate.BulkGenerateModel
@using Disco.Services.Interop.ActiveDirectory;
@{
Authorization.RequireAll(Claims.Config.DocumentTemplate.BulkGenerate, Claims.User.Actions.GenerateDocuments);
ViewBag.Title = Html.ToBreadcrumb("Configuration", MVC.Config.Config.Index(), "Document Templates", MVC.Config.DocumentTemplate.Index(null), Model.DocumentTemplate.Description, MVC.Config.DocumentTemplate.Index(Model.DocumentTemplate.Id), "Bulk Generate");
Html.BundleDeferred("~/ClientScripts/Modules/Disco-DocumentBulkGenerate");
if (Model == null)
{
throw new ArgumentNullException("Model", "Model cannot be null.");
}
var userModel = Model as Disco.Web.Areas.Config.Models.DocumentTemplate.BulkGenerateUserModel;
var deviceModel = Model as Disco.Web.Areas.Config.Models.DocumentTemplate.BulkGenerateDeviceModel;
string scope;
if (userModel != null)
{
scope = "user";
}
else if (deviceModel != null)
{
scope = "device";
}
else
{
throw new InvalidOperationException("Unexpected model: " + Model.GetType().FullName);
}
}
<div id="DocumentTemplate_BulkGenerate">
<div class="actions">
@using (Html.BeginForm(MVC.API.DocumentTemplate.BulkGenerate(Model.DocumentTemplate.Id)))
{
if (Model.TemplatePageCount > 1 && Model.TemplatePageCount % 2 != 0)
{
<input id="DocumentTemplate_BulkGenerate_InsertBlankPage" type="checkbox" name="InsertBlankPage" value="True" checked /><label for="DocumentTemplate_BulkGenerate_InsertBlankPage">Insert Blank Pages for Double-Sided Printing</label>
}
<input id="DocumentTemplate_BulkGenerate_DataIds" name="DataIds" type="hidden" />
<button id="BulkGenerate" class="button" disabled>Bulk Generate</button>
@Html.AntiForgeryToken()
}
<br />
<button id="AddUsers" class="button small">Add Users</button>
<button id="AddGroupMembers" class="button small">Add Group Members</button>
@if (Model.UserFlags.Any(f => f.Count > 0))
{
<button id="AddUserFlag" class="button small">Add With User Flag</button>
}
@if (Model.DeviceProfiles.Any(b => b.Count > 0))
{
<button id="AddDeviceProfile" class="button small">Add With Device Profile</button>
}
@if (Model.DeviceBatches.Any(b => b.Count > 0))
{
<button id="AddDeviceBatch" class="button small">Add With Device Batch</button>
}
@if (Model.DocumentTemplates.Any(b => b.Count > 0))
{
<button id="AddDocumentAttachment" class="button small">Add With Document Attachment</button>
}
@if (Model.UserDetails.Any(b => b.Count > 0))
{
<button id="AddUserDetail" class="button small">Add With User Detail</button>
}
</div>
<table class="genericData">
<thead>
<tr>
<th>&nbsp;</th>
<th>Username</th>
<th>Name</th>
<th>Scope</th>
</tr>
</thead>
<tbody>
<tr class="when-none">
<td colspan="4">Add Users</td>
</tr>
</tbody>
</table>
</div>
<div id="DocumentTemplate_BulkGenerate_Dialog_AddUsers" class="dialog dialog-bulk-generate" title="@(Model.DocumentTemplate.Description): Add Users">
<div id="DocumentTemplate_BulkGenerate_Dialog_AddUsers" class="dialog dialog-bulk-generate" title="@(Model.DocumentTemplate.Description): Add by Users">
<div class="brief">
<div>
Enter multiple <span class="scopeDescBulkGenerate">User Ids</span> separated by <code>&lt;new line&gt;</code>, commas (<code>,</code>) or semicolons (<code>;</code>).
</div>
<div>
Security Groups can also be included. Members will be resolved and added.
</div>
@if (userModel != null)
{
<div>
Security Groups can also be included. Members will be resolved and added.
</div>
}
@if (deviceModel != null)
{
<div>
Devices associated with the users will be added.
</div>
}
<div class="examples clearfix">
<h4>Examples:</h4>
<div class="example1 code">
user6<br />
smi0099<br />
@(ActiveDirectory.Context.PrimaryDomain.NetBiosName)\rsmith<br />
Domain Admins
@if (userModel != null)
{
<text>Domain Admins</text>
}
</div>
<div class="example2 code">
user6,smi0099,@(ActiveDirectory.Context.PrimaryDomain.NetBiosName)\rsmith
</div>
<div class="example3 code">
user6;smi0099;@(ActiveDirectory.Context.PrimaryDomain.NetBiosName)\rsmith
</div>
<div class="example2 code">user6,smi0099,@(ActiveDirectory.Context.PrimaryDomain.NetBiosName)\rsmith,Domain Admins</div>
<div class="example3 code">user6;smi0099;@(ActiveDirectory.Context.PrimaryDomain.NetBiosName)\rsmith;Domain Admins</div>
</div>
</div>
@using (Html.BeginForm(MVC.API.DocumentTemplate.BulkGenerateAddUsers()))
{
<div class="field-validation-valid" data-valmsg-replace="true" data-valmsg-for="userIds"></div>
<textarea id="inputBulkGenerateDataIds" name="userIds" data-val="true" data-val-required="Identifiers are required" required></textarea>
<input type="hidden" name="scope" value="@scope" />
@Html.AntiForgeryToken()
}
</div>
<div id="DocumentTemplate_BulkGenerate_Dialog_AddGroupMembers" class="dialog dialog-bulk-generate" title="@(Model.DocumentTemplate.Description): Add Group Members">
<div class="brief">
<div>
Add all members of a group (including recursive members) to the bulk generation.
</div>
</div>
@using (Html.BeginForm(MVC.API.DocumentTemplate.BulkGenerateAddGroupMembers()))
{
<table class="input">
<tbody>
<tr>
<th>
<label for="DocumentTemplate_BulkGenerate_Dialog_AddGroupMembers_Group">Group:</label>
</th>
<td>
<input id="DocumentTemplate_BulkGenerate_Dialog_AddGroupMembers_Group" type="text" name="groupId" data-autocomplete-src="@(Url.Action(MVC.API.System.SearchGroupSubjects()))" required />
</td>
</tr>
</tbody>
</table>
@Html.AntiForgeryToken()
}
</div>
@if (Model.UserFlags.Any(f => f.Count > 0))
@if (deviceModel != null)
{
<div id="DocumentTemplate_BulkGenerate_Dialog_AddUserFlag" class="dialog dialog-bulk-generate" title="@(Model.DocumentTemplate.Description): Add User Flag Assignments">
<div id="DocumentTemplate_BulkGenerate_Dialog_AddDevices" class="dialog dialog-bulk-generate" title="@(Model.DocumentTemplate.Description): Add by Devices">
<div class="brief">
<div>
Enter multiple <span class="scopeDescBulkGenerate">Device Serial Numbers</span> separated by <code>&lt;new line&gt;</code>, commas (<code>,</code>) or semicolons (<code>;</code>).
</div>
<div class="examples clearfix">
<h4>Examples:</h4>
<div class="example1 code">
LAPTOP-12345<br />
TAB-987654<br />
PHONE-ABC321
</div>
<div class="example2 code">
LAPTOP-12345,TAB-987654,PHONE-ABC321
</div>
<div class="example3 code">
LAPTOP-12345;TAB-987654;PHONE-ABC321
</div>
</div>
</div>
@using (Html.BeginForm(MVC.API.DocumentTemplate.BulkGenerateAddDevices()))
{
<div class="field-validation-valid" data-valmsg-replace="true" data-valmsg-for="userIds"></div>
<textarea name="deviceSerialNumbers" data-val="true" data-val-required="Identifiers are required" required></textarea>
<input type="hidden" name="scope" value="@scope" />
@Html.AntiForgeryToken()
}
</div>
}
@if (userModel != null)
{
<div id="DocumentTemplate_BulkGenerate_Dialog_AddGroupMembers" class="dialog dialog-bulk-generate" title="@(Model.DocumentTemplate.Description): Add by Group Members">
<div class="brief">
<div>
Add all members of a group (including recursive members) to the bulk generation.
</div>
</div>
@using (Html.BeginForm(MVC.API.DocumentTemplate.BulkGenerateAddGroupMembers()))
{
<table class="input">
<tbody>
<tr>
<th>
<label for="DocumentTemplate_BulkGenerate_Dialog_AddGroupMembers_Group">Group:</label>
</th>
<td>
<input id="DocumentTemplate_BulkGenerate_Dialog_AddGroupMembers_Group" type="text" name="groupId" data-autocomplete-src="@(Url.Action(MVC.API.System.SearchGroupSubjects()))" required />
</td>
</tr>
</tbody>
</table>
@Html.AntiForgeryToken()
}
</div>
}
@if (userModel != null && userModel.UserFlags.Any(f => f.Count > 0))
{
<div id="DocumentTemplate_BulkGenerate_Dialog_AddUserFlag" class="dialog dialog-bulk-generate" title="@(Model.DocumentTemplate.Description): Add User Flag">
<div class="brief">
<div>
Add all users associated with the flag to the bulk generation.
@@ -123,10 +137,35 @@
{
<input name="flagId" type="hidden" required />
<div class="dialog-item-picker">
@foreach (var flag in Model.UserFlags)
@foreach (var flag in userModel.UserFlags)
{
<div class="item @(flag.Count == 0 ? "disabled" : null)" data-userflagid="@flag.Item.Id">
<i class="fa fa-@(flag.Item.Icon) fa-fw fa-lg d-@(flag.Item.IconColour)"></i>@flag.Item.Name <small>(@flag.Count.ToString("N0") user@(flag.Count == 1 ? null : "s"))</small>
<i class="fa fa-@(flag.Item.Icon) fa-fw fa-lg d-@(flag.Item.IconColour)"></i>@flag.Item.Name <small>(@flag.Count.ToString("N0") @scope@(flag.Count == 1 ? null : "s"))</small>
</div>
}
</div>
@Html.AntiForgeryToken()
}
</div>
}
@if (deviceModel != null && deviceModel.DeviceFlags.Any(f => f.Count > 0))
{
<div id="DocumentTemplate_BulkGenerate_Dialog_AddDeviceFlag" class="dialog dialog-bulk-generate" title="@(Model.DocumentTemplate.Description): Add Device Flag">
<div class="brief">
<div>
Add all devices associated with the flag to the bulk generation.
</div>
</div>
@using (Html.BeginForm(MVC.API.DocumentTemplate.BulkGenerateAddDeviceFlag()))
{
<input name="flagId" type="hidden" required />
<div class="dialog-item-picker">
@foreach (var flag in deviceModel.DeviceFlags)
{
<div class="item @(flag.Count == 0 ? "disabled" : null)" data-userflagid="@flag.Item.Id">
<i class="fa fa-@(flag.Item.Icon) fa-fw fa-lg d-@(flag.Item.IconColour)"></i>@flag.Item.Name <small>(@flag.Count.ToString("N0") @scope@(flag.Count == 1 ? null : "s"))</small>
</div>
}
@@ -138,12 +177,15 @@
@if (Model.DeviceProfiles.Any(b => b.Count > 0))
{
<div id="DocumentTemplate_BulkGenerate_Dialog_AddDeviceProfile" class="dialog dialog-bulk-generate" title="@(Model.DocumentTemplate.Description): Add User by Assigned Device Profile">
<div class="brief">
<div>
Add all users associated with a device in the selected profile to the bulk generation.
<div id="DocumentTemplate_BulkGenerate_Dialog_AddDeviceProfile" class="dialog dialog-bulk-generate" title="@(Model.DocumentTemplate.Description): Add by Device Profile">
@if (userModel != null)
{
<div class="brief">
<div>
Add all users associated with a device in the selected profile to the bulk generation.
</div>
</div>
</div>
}
@using (Html.BeginForm(MVC.API.DocumentTemplate.BulkGenerateAddDeviceProfile()))
{
<input name="deviceProfileId" type="hidden" required />
@@ -151,10 +193,11 @@
@foreach (var profile in Model.DeviceProfiles)
{
<div class="item @(profile.Count == 0 ? "disabled" : null)" data-id="@profile.Item.Id">
<i class="fa fa-cog fa-fw fa-lg"></i>@profile.Item.Name <small>(@profile.Count.ToString("N0") user@(profile.Count == 1 ? null : "s"))</small>
<i class="fa fa-cog fa-fw fa-lg"></i>@profile.Item.Name <small>(@profile.Count.ToString("N0") @scope@(profile.Count == 1 ? null : "s"))</small>
</div>
}
</div>
<input type="hidden" name="scope" value="@scope" />
@Html.AntiForgeryToken()
}
</div>
@@ -162,7 +205,7 @@
@if (Model.DeviceBatches.Any(b => b.Count > 0))
{
<div id="DocumentTemplate_BulkGenerate_Dialog_AddDeviceBatch" class="dialog dialog-bulk-generate" title="@(Model.DocumentTemplate.Description): Add User by Assigned Device Batch">
<div id="DocumentTemplate_BulkGenerate_Dialog_AddDeviceBatch" class="dialog dialog-bulk-generate" title="@(Model.DocumentTemplate.Description): Add by Device Batch">
<div class="brief">
<div>
Add all users associated with a device in the selected batch to the bulk generation.
@@ -175,10 +218,11 @@
@foreach (var batch in Model.DeviceBatches)
{
<div class="item @(batch.Count == 0 ? "disabled" : null)" data-id="@batch.Item.Id">
<i class="fa fa-cog fa-fw fa-lg"></i>@batch.Item.Name <small>(@batch.Count.ToString("N0") user@(batch.Count == 1 ? null : "s"))</small>
<i class="fa fa-cog fa-fw fa-lg"></i>@batch.Item.Name <small>(@batch.Count.ToString("N0") @scope@(batch.Count == 1 ? null : "s"))</small>
</div>
}
</div>
<input type="hidden" name="scope" value="@scope" />
@Html.AntiForgeryToken()
}
</div>
@@ -186,7 +230,7 @@
@if (Model.DocumentTemplates.Any(b => b.Count > 0))
{
<div id="DocumentTemplate_BulkGenerate_Dialog_AddDocumentAttachment" class="dialog dialog-bulk-generate" title="@(Model.DocumentTemplate.Description): Add User by Assigned Device Batch">
<div id="DocumentTemplate_BulkGenerate_Dialog_AddDocumentAttachment" class="dialog dialog-bulk-generate" title="@(Model.DocumentTemplate.Description): Add by Document Attachment">
<div class="brief">
<div>
Add all users associated with an attachment of the selected document template to the bulk generation.
@@ -199,7 +243,7 @@
@foreach (var template in Model.DocumentTemplates)
{
<div class="item @(template.Count == 0 ? "disabled" : null)" data-id="@template.Item.Id">
<i class="fa fa-file-text-o fa-fw fa-lg"></i>@template.Item.Id: @template.Item.Description <small>(@template.Count.ToString("N0") user@(template.Count == 1 ? null : "s"))</small>
<i class="fa fa-file-text-o fa-fw fa-lg"></i>@template.Item.Id: @template.Item.Description <small>(@template.Count.ToString("N0") @scope@(template.Count == 1 ? null : "s"))</small>
</div>
}
</div>
@@ -207,6 +251,7 @@
<label for="DocumentTemplate_BulkGenerate_Dialog_AddDocumentAttachment_Threshold">Attachment Added After <small>(optional)</small></label>
<input id="DocumentTemplate_BulkGenerate_Dialog_AddDocumentAttachment_Threshold" name="threshold" type="date" />
</div>
<input type="hidden" name="scope" value="@scope" />
@Html.AntiForgeryToken()
}
</div>
@@ -214,11 +259,20 @@
@if (Model.UserDetails.Any(b => b.Count > 0))
{
<div id="DocumentTemplate_BulkGenerate_Dialog_AddUserDetail" class="dialog dialog-bulk-generate" title="@(Model.DocumentTemplate.Description): Add User by Detail">
<div id="DocumentTemplate_BulkGenerate_Dialog_AddUserDetail" class="dialog dialog-bulk-generate" title="@(Model.DocumentTemplate.Description): Add by User Detail">
<div class="brief">
<div>
Add all users with a matching user detail to the bulk generation.
</div>
@if (userModel != null)
{
<div>
Add all users with a matching user detail to the bulk generation.
</div>
}
@if (deviceModel != null)
{
<div>
Add all devices assigned to users with a matching user detail to the bulk generation.
</div>
}
</div>
@using (Html.BeginForm(MVC.API.DocumentTemplate.BulkGenerateAddUserDetail()))
{
@@ -229,11 +283,11 @@
@foreach (var key in Model.UserDetails)
{
<div class="item @(key.Count == 0 ? "disabled" : null)" data-id="@key.Item">
<i class="fa fa-info fa-fw fa-lg"></i>@key.Item.TrimEnd('*', '&') <small>(@key.Count.ToString("N0") user@(key.Count == 1 ? null : "s"))</small>
<i class="fa fa-info fa-fw fa-lg"></i>@key.Item.TrimEnd('*', '&') <small>(@key.Count.ToString("N0") @scope@(key.Count == 1 ? null : "s"))</small>
</div>
}
</div>
<input type="hidden" name="scope" value="@scope" />
@Html.AntiForgeryToken()
}
@using (Html.BeginForm(MVC.API.DocumentTemplate.BulkGenerateGetUserDetailValues()))
@@ -242,8 +296,7 @@
<div id="DocumentTemplate_BulkGenerate_Dialog_AddUserDetail_Value" class="dialog-item-picker" style="width: 49%; float: left; margin-left: 1%;">
</div>
@Html.AntiForgeryToken()
}
</div>
}
}
File diff suppressed because it is too large Load Diff