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
@@ -1,6 +1,5 @@
using System;
using System.Collections;
using System.Globalization;
using System.IO;
using System.Runtime.InteropServices;
using System.Text;
-1
View File
@@ -2,7 +2,6 @@
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
namespace Disco.Models.Repository
{
@@ -1,5 +1,4 @@
using Disco.Models.Services.Authorization;
using System.Collections.Generic;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
@@ -1,5 +1,4 @@
using Disco.Models.Services.Authorization;
using System.Collections.Generic;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
@@ -7,13 +7,22 @@ namespace Disco.Models.UI.Config.DocumentTemplate
Repository.DocumentTemplate DocumentTemplate { get; set; }
int TemplatePageCount { get; set; }
List<ItemWithCount<Repository.UserFlag>> UserFlags { get; set; }
List<ItemWithCount<Repository.DeviceProfile>> DeviceProfiles { get; set; }
List<ItemWithCount<Repository.DeviceBatch>> DeviceBatches { get; set; }
List<ItemWithCount<Repository.DocumentTemplate>> DocumentTemplates { get; set; }
List<ItemWithCount<string>> UserDetails { get; set; }
}
public interface ConfigDocumentTemplateBulkGenerateUser : ConfigDocumentTemplateBulkGenerate
{
List<ItemWithCount<Repository.UserFlag>> UserFlags { get; set; }
}
public interface ConfigDocumentTemplateBulkGenerateDevice : ConfigDocumentTemplateBulkGenerate
{
List<ItemWithCount<Repository.DeviceFlag>> DeviceFlags { get; set; }
}
public class ItemWithCount<T>
{
public T Item { get; set; }
@@ -1,6 +1,5 @@
using Disco.Data.Repository;
using Disco.Models.Repository;
using Disco.Services.Authorization;
using Disco.Services.Devices.DeviceFlags;
using Disco.Services.Expressions;
using Disco.Services.Logging;
@@ -1,7 +1,6 @@
using Disco.Data.Repository;
using Disco.Models.Repository;
using Disco.Models.Services.Documents;
using Disco.Models.UI.Config.DocumentTemplate;
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
@@ -1,5 +1,4 @@
using Disco.Data.Repository;
using Disco.Models.Services.Interop.DiscoServices;
using Disco.Services.Interop.DiscoServices;
using Disco.Services.Tasks;
using Quartz;
@@ -1,6 +1,5 @@
using Disco.Data.Repository;
using Disco.Models.Repository;
using Disco.Services.Authorization;
using Disco.Services.Expressions;
using Disco.Services.Logging;
using Disco.Services.Users;
@@ -1,5 +1,4 @@
using Disco.Models.BI.Config;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.Mvc;
@@ -5,7 +5,6 @@ using Disco.Services.Devices.DeviceFlags;
using Disco.Services.Exporting;
using Disco.Services.Interop.ActiveDirectory;
using Disco.Services.Tasks;
using Disco.Services.Users.UserFlags;
using Disco.Services.Web;
using Disco.Web.Areas.API.Models.Shared;
using Disco.Web.Areas.Config.Models.DeviceFlag;
File diff suppressed because it is too large Load Diff
@@ -1,6 +1,5 @@
using Disco.Models.Repository;
using Disco.Services;
using Disco.Services.Authorization;
using Disco.Services.Web;
using System;
using System.Data.Entity;
@@ -1,11 +1,11 @@
namespace Disco.Web.Areas.API.Models.DocumentTemplate
{
public class BulkGenerateUserModel
public class BulkGenerateItemModel
{
public string Id { get; set; }
public string UserEmailAddress { get; set; }
public string DisplayName { get; set; }
public string UserDisplayName { get; set; }
public string Scope { get; set; }
public bool IsError { get; set; }
}
}
}
@@ -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
@@ -1,36 +1,36 @@
$(() => {
const users = [];
const $table = $('#DocumentTemplate_BulkGenerate table');
const records = [];
const $table = $('#DocumentTemplate_BulkGenerate_Records');
const scope = $table.attr('data-scope');
function redrawTable() {
if (users.length > 0) {
if (records.length > 0) {
$table.find('tbody tr:first-child').hide();
}
const $tbody = $table.find('tbody');
let checkedCount = 0;
for (var i = 0; i < users.length; i++) {
var user = users[i];
if (user.checkbox === undefined) {
const tr = $('<tr><td><input id="BulkGenerate_User_' + i.toString() + '" type="checkbox" /></td><td><label for="BulkGenerate_User_' + i.toString() + '"></label></td><td><span class="name"></span></td><td><span class="scope"></span></td></tr>');
for (var i = 0; i < records.length; i++) {
var record = records[i];
if (record.checkbox === undefined) {
const tr = $('<tr><td><input id="BulkGenerate_User_' + i.toString() + '" type="checkbox" /></td><td><label for="BulkGenerate_User_' + i.toString() + '"></label></td><td class="name"><span class="name"></span></td><td><span class="scope"></span></td></tr>');
const checkbox = tr.find('input')[0];
const label = tr.find('label');
const name = tr.find('span.name');
const scope = tr.find('span.scope');
label.text(user.Id);
scope.text(user.Scope);
if (!user.IsError) {
label.text(record.Id);
scope.text(record.Scope);
if (!record.IsError) {
checkbox.checked = true;
name.text(user.DisplayName);
name.text(record.UserDisplayName);
checkedCount++;
} else {
tr.addClass('error');
checkbox.checked = false;
checkbox.disabled = true;
}
user.checkbox = checkbox;
record.checkbox = checkbox;
$tbody.append(tr);
} else {
if (!user.IsError && user.checkbox.checked) {
if (!record.IsError && record.checkbox.checked) {
checkedCount++;
}
}
@@ -42,13 +42,13 @@ $(() => {
}
}
function addUsers(r) {
function addRecords(r) {
let changeCount = 0;
for (var i = 0; i < r.length; i++) {
const user = r[i];
const record = users.find(u => u.Id === user.Id);
if (record === undefined || user.IsError) {
users.push(user);
const item = r[i];
const record = records.find(u => u.Id === item.Id);
if (record === undefined || item.IsError) {
records.push(item);
changeCount++;
} else if (record.checkbox !== undefined && !record.checkbox.checked && !record.IsError) {
record.checkbox.checked = true;
@@ -60,11 +60,11 @@ $(() => {
}
}
function excludeUsers(r) {
function excludeRecords(r) {
let changeCount = 0;
for (var i = 0; i < r.length; i++) {
const user = r[i];
const record = users.find(u => u.Id === user.Id);
const record = records.find(u => u.Id === user.Id);
if (record !== undefined && record.checkbox !== undefined) {
record.checkbox.checked = false;
changeCount++;
@@ -75,12 +75,12 @@ $(() => {
}
}
function excludeOtherUsers(r) {
function excludeOtherRecords(r) {
let changeCount = 0;
for (var i = 0; i < users.length; i++) {
const user = users[i];
if (!r.find(u => u.Id === user.Id)) {
user.checkbox.checked = false;
for (var i = 0; i < records.length; i++) {
const record = records[i];
if (!r.find(u => u.Id === record.Id)) {
record.checkbox.checked = false;
changeCount++;
}
}
@@ -94,15 +94,15 @@ $(() => {
});
$('#BulkGenerate').click(e => {
let userIds = [];
for (var i = 0; i < users.length; i++) {
var user = users[i];
if (!user.IsError && user.checkbox !== undefined && user.checkbox.checked) {
userIds.push(user.Id);
let dataIds = [];
for (var i = 0; i < records.length; i++) {
var record = records[i];
if (!record.IsError && record.checkbox !== undefined && record.checkbox.checked) {
dataIds.push(record.Id);
}
}
if (userIds.length > 0) {
$('#DocumentTemplate_BulkGenerate_DataIds').val(userIds.join('\r\n'));
if (dataIds.length > 0) {
$('#DocumentTemplate_BulkGenerate_DataIds').val(dataIds.join('\r\n'));
$('#BulkGenerate').closest('form').submit();
}
});
@@ -113,45 +113,91 @@ $(() => {
let dialog = dialogAddUsers;
if (!dialog) {
const action = function (applier) {
const action = async function (applier) {
const form = dialog.find('form')[0];
if (form.reportValidity()) {
const body = new FormData(form);
fetch(form.action, {
method: 'POST',
body: body
})
.then(r => r.json())
.then(r => {
applier(r);
dialog.find('textarea').html('').val('');
dialog.dialog("close");
dialog.dialog("enable");
})
.catch(reason => {
alert('Failed to validate users: ' + reason);
try {
const response = await fetch(form.action, {
method: 'POST',
body: body
});
const results = await response.json();
applier(results);
dialog.find('textarea').html('').val('');
dialog.dialog("close");
} catch (e) {
alert('Failed to validate users: ' + e);
}
}
dialog.dialog("disable");
}
const target = scope === 'user' ? 'Users' : 'Assigned Devices';
const buttons = {};
buttons[`Exclude Other ${target}`] = function () {
action(excludeOtherRecords);
};
buttons[`Exclude ${target}`] = function () {
action(excludeRecords);
};
buttons[`Add ${target}`] = function () {
action(addRecords);
};
dialog = $('#DocumentTemplate_BulkGenerate_Dialog_AddUsers').dialog({
resizable: false,
modal: true,
autoOpen: false,
width: 460,
width: 550,
buttons: buttons
});
dialogAddUsers = dialog;
}
dialog.dialog('open');
return false;
});
let dialogAddDevices = null;
$('#AddDevices').click(e => {
e.preventDefault();
let dialog = dialogAddDevices;
if (!dialog) {
const action = async function (applier) {
const form = dialog.find('form')[0];
if (form.reportValidity()) {
const body = new FormData(form);
try {
const response = await fetch(form.action, {
method: 'POST',
body: body
});
const results = await response.json();
applier(results);
dialog.find('textarea').html('').val('');
dialog.dialog("close");
} catch (e) {
alert('Failed to validate devices: ' + e);
}
}
}
dialog = $('#DocumentTemplate_BulkGenerate_Dialog_AddDevices').dialog({
resizable: false,
modal: true,
autoOpen: false,
width: 550,
buttons: {
"Exclude Other Users": function () {
action(excludeOtherUsers);
"Exclude Unmatched Devices": function () {
action(excludeOtherRecords);
},
"Exclude Users": function () {
action(excludeUsers);
"Exclude Devices": function () {
action(excludeRecords);
},
"Add Users": function () {
action(addUsers);
"Add Devices": function () {
action(addRecords);
}
}
});
dialogAddUsers = dialog;
dialogAddDevices = dialog;
}
dialog.dialog('open');
return false;
@@ -163,41 +209,38 @@ $(() => {
let dialog = dialogAddGroupMembers;
if (!dialog) {
const action = function (applier) {
const action = async function (applier) {
const form = dialog.find('form')[0];
if (form.reportValidity()) {
const body = new FormData(form);
fetch(form.action, {
method: 'POST',
body: body
})
.then(r => r.json())
.then(r => {
applier(r);
dialog.find('input[type="text"]').val('');
dialog.dialog("close");
dialog.dialog("enable");
})
.catch(reason => {
alert('Failed to validate group: ' + reason);
try {
const response = await fetch(form.action, {
method: 'POST',
body: body
});
const result = await response.json();
applier(result);
dialog.find('input[type="text"]').val('');
dialog.dialog("close");
} catch (e) {
alert('Failed to validate group: ' + e);
}
}
dialog.dialog("disable");
}
dialog = $('#DocumentTemplate_BulkGenerate_Dialog_AddGroupMembers').dialog({
resizable: false,
modal: true,
autoOpen: false,
width: 460,
width: 550,
buttons: {
"Exclude Non-Group Members": function () {
action(excludeOtherUsers);
action(excludeOtherRecords);
},
"Exclude Group Members": function () {
action(excludeUsers);
action(excludeRecords);
},
"Add Group Members": function () {
action(addUsers);
action(addRecords);
}
}
});
@@ -227,42 +270,39 @@ $(() => {
let dialog = dialogAddUserFlag;
if (!dialog) {
const action = function (applier) {
const action = async function (applier) {
const form = dialog.find('form')[0];
if (form.reportValidity()) {
const body = new FormData(form);
fetch(form.action, {
method: 'POST',
body: body
})
.then(r => r.json())
.then(r => {
applier(r);
dialog.find('input[name="flagId"]').val('');
dialog.find('div.item').removeClass('selected');
dialog.dialog("close");
dialog.dialog("enable");
})
.catch(reason => {
alert('Failed to validate user flag: ' + reason);
try {
const response = await fetch(form.action, {
method: 'POST',
body: body
});
const result = await response.json();
applier(result);
dialog.find('input[name="flagId"]').val('');
dialog.find('div.item').removeClass('selected');
dialog.dialog("close");
} catch (e) {
alert('Failed to validate user flag: ' + e);
}
}
dialog.dialog("disable");
}
dialog = $('#DocumentTemplate_BulkGenerate_Dialog_AddUserFlag').dialog({
resizable: false,
modal: true,
autoOpen: false,
width: 460,
width: 550,
buttons: {
"Exclude Unassigned Users": function () {
action(excludeOtherUsers);
action(excludeOtherRecords);
},
"Exclude Assigned Users": function () {
action(excludeUsers);
action(excludeRecords);
},
"Add Assigned Users": function () {
action(addUsers);
action(addRecords);
}
}
});
@@ -281,52 +321,107 @@ $(() => {
return false;
});
let dialogAddDeviceFlag = null;
$('#AddDeviceFlag').click(e => {
e.preventDefault();
let dialog = dialogAddDeviceFlag;
if (!dialog) {
const action = async function (applier) {
const form = dialog.find('form')[0];
if (form.reportValidity()) {
const body = new FormData(form);
try {
const response = await fetch(form.action, {
method: 'POST',
body: body
});
const result = await response.json();
applier(result);
dialog.find('input[name="flagId"]').val('');
dialog.find('div.item').removeClass('selected');
dialog.dialog("close");
} catch (e) {
alert('Failed to validate device flag: ' + e);
}
}
}
dialog = $('#DocumentTemplate_BulkGenerate_Dialog_AddDeviceFlag').dialog({
resizable: false,
modal: true,
autoOpen: false,
width: 550,
buttons: {
"Exclude Unassigned Devices": function () {
action(excludeOtherRecords);
},
"Exclude Assigned Devices": function () {
action(excludeRecords);
},
"Add Assigned Devices": function () {
action(addRecords);
}
}
});
const $input = dialog.find('input[name="flagId"]');
dialog.on('click', 'div.item:not(.disabled)', e => {
e.preventDefault();
const $target = $(e.currentTarget);
$input.val($target.attr('data-userflagid'));
dialog.find('div.item').removeClass('selected');
$target.addClass('selected');
return false;
});
dialogAddDeviceFlag = dialog;
}
dialog.dialog('open');
return false;
});
let dialogAddDeviceProfile = null;
$('#AddDeviceProfile').click(e => {
e.preventDefault();
let dialog = dialogAddDeviceProfile;
if (!dialog) {
const action = function (applier) {
const action = async function (applier) {
const form = dialog.find('form')[0];
const input = dialog.find('input[name="deviceProfileId"]');
if (input.val()) {
if (form.reportValidity()) {
const body = new FormData(form);
fetch(form.action, {
method: 'POST',
body: body
})
.then(r => r.json())
.then(r => {
applier(r);
input.val('');
dialog.find('div.item').removeClass('selected');
dialog.dialog("close");
dialog.dialog("enable");
})
.catch(reason => {
alert('Failed to validate device profile: ' + reason);
try {
const response = await fetch(form.action, {
method: 'POST',
body: body
});
dialog.dialog("disable");
const result = await response.json();
applier(result);
input.val('');
dialog.find('div.item').removeClass('selected');
dialog.dialog("close");
} catch (e) {
alert('Failed to validate device profile: ' + e);
}
}
}
}
const target = scope === 'user' ? 'Assigned Users' : 'Devices';
const buttons = {};
buttons[`Exclude Other ${target}`] = function () {
action(excludeOtherRecords);
};
buttons[`Exclude ${target}`] = function () {
action(excludeRecords);
};
buttons[`Add ${target}`] = function () {
action(addRecords);
};
dialog = $('#DocumentTemplate_BulkGenerate_Dialog_AddDeviceProfile').dialog({
resizable: false,
modal: true,
autoOpen: false,
width: 460,
buttons: {
"Exclude Unassigned Users": function () {
action(excludeOtherUsers);
},
"Exclude Assigned Users": function () {
action(excludeUsers);
},
"Add Assigned Users": function () {
action(addUsers);
}
}
width: 550,
buttons: buttons
});
const $input = dialog.find('input[name="deviceProfileId"]');
dialog.on('click', 'div.item:not(.disabled)', e => {
@@ -348,47 +443,45 @@ $(() => {
e.preventDefault();
let dialog = dialogAddDeviceBatch;
if (!dialog) {
const action = function (applier) {
const action = async function (applier) {
const form = dialog.find('form')[0];
const input = dialog.find('input[name="deviceBatchId"]');
if (input.val()) {
if (form.reportValidity()) {
const body = new FormData(form);
fetch(form.action, {
method: 'POST',
body: body
})
.then(r => r.json())
.then(r => {
applier(r);
input.val('');
dialog.find('div.item').removeClass('selected');
dialog.dialog("close");
dialog.dialog("enable");
})
.catch(reason => {
alert('Failed to validate device batch: ' + reason);
try {
const response = await fetch(form.action, {
method: 'POST',
body: body
});
dialog.dialog("disable");
const result = await response.json();
applier(result);
input.val('');
dialog.find('div.item').removeClass('selected');
dialog.dialog("close");
} catch (e) {
alert('Failed to validate device batch: ' + e);
}
}
}
}
const target = scope === 'user' ? 'Assigned Users' : 'Devices';
const buttons = {};
buttons[`Exclude Other ${target}`] = function () {
action(excludeOtherRecords);
};
buttons[`Exclude ${target}`] = function () {
action(excludeRecords);
};
buttons[`Add ${target}`] = function () {
action(addRecords);
};
dialog = $('#DocumentTemplate_BulkGenerate_Dialog_AddDeviceBatch').dialog({
resizable: false,
modal: true,
autoOpen: false,
width: 460,
buttons: {
"Exclude Unassigned Users": function () {
action(excludeOtherUsers);
},
"Exclude Assigned Users": function () {
action(excludeUsers);
},
"Add Assigned Users": function () {
action(addUsers);
}
}
width: 550,
buttons: buttons
});
const $input = dialog.find('input[name="deviceBatchId"]');
dialog.on('click', 'div.item:not(.disabled)', e => {
@@ -410,47 +503,45 @@ $(() => {
e.preventDefault();
let dialog = dialogAddDocumentAttachment;
if (!dialog) {
const action = function (applier) {
const action = async function (applier) {
const form = dialog.find('form')[0];
const input = dialog.find('input[name="documentTemplateId"]');
if (input.val()) {
if (form.reportValidity()) {
const body = new FormData(form);
fetch(form.action, {
method: 'POST',
body: body
})
.then(r => r.json())
.then(r => {
applier(r);
input.val('');
dialog.find('div.item').removeClass('selected');
dialog.dialog("close");
dialog.dialog("enable");
})
.catch(reason => {
alert('Failed to validate device batch: ' + reason);
try {
const response = await fetch(form.action, {
method: 'POST',
body: body
});
dialog.dialog("disable");
const result = await response.json();
applier(result);
input.val('');
dialog.find('div.item').removeClass('selected');
dialog.dialog("close");
} catch (e) {
alert('Failed to validate device batch: ' + e);
}
}
}
}
const target = scope === 'user' ? 'Users' : 'Devices';
const buttons = {};
buttons[`Exclude Unassigned ${target}`] = function () {
action(excludeOtherRecords);
};
buttons[`Exclude Assigned ${target}`] = function () {
action(excludeRecords);
};
buttons[`Add Assigned ${target}`] = function () {
action(addRecords);
};
dialog = $('#DocumentTemplate_BulkGenerate_Dialog_AddDocumentAttachment').dialog({
resizable: false,
modal: true,
autoOpen: false,
width: 460,
buttons: {
"Exclude Unassigned Users": function () {
action(excludeOtherUsers);
},
"Exclude Assigned Users": function () {
action(excludeUsers);
},
"Add Assigned Users": function () {
action(addUsers);
}
}
width: 550,
buttons: buttons
});
const $input = dialog.find('input[name="documentTemplateId"]');
dialog.on('click', 'div.item:not(.disabled)', e => {
@@ -472,49 +563,47 @@ $(() => {
e.preventDefault();
let dialog = dialogAddUserDetail;
if (!dialog) {
const action = function (applier) {
const action = async function (applier) {
const form = dialog.find('form')[0];
const key = $(form).find('input[name="key"]');
if (key.val()) {
if (form.reportValidity()) {
const body = new FormData(form);
fetch(form.action, {
method: 'POST',
body: body
})
.then(r => r.json())
.then(r => {
applier(r);
key.val('');
$(form).find('input[name="value"]').val('');
$('#DocumentTemplate_BulkGenerate_Dialog_AddUserDetail_Value').empty();
dialog.find('div.item').removeClass('selected');
dialog.dialog("close");
dialog.dialog("enable");
})
.catch(reason => {
alert('Failed to validate user detail: ' + reason);
try {
const response = await fetch(form.action, {
method: 'POST',
body: body
});
dialog.dialog("disable");
const result = await response.json();
applier(result);
key.val('');
$(form).find('input[name="value"]').val('');
$('#DocumentTemplate_BulkGenerate_Dialog_AddUserDetail_Value').empty();
dialog.find('div.item').removeClass('selected');
dialog.dialog("close");
} catch (e) {
alert('Failed to validate user detail: ' + e);
}
}
}
}
const target = scope === 'user' ? 'Users' : 'Devices';
const buttons = {};
buttons[`Exclude Unmatched ${target}`] = function () {
action(excludeOtherRecords);
};
buttons[`Exclude Matched ${target}`] = function () {
action(excludeRecords);
};
buttons[`Add Matched ${target}`] = function () {
action(addRecords);
};
dialog = $('#DocumentTemplate_BulkGenerate_Dialog_AddUserDetail').dialog({
resizable: false,
modal: true,
autoOpen: false,
width: 690,
buttons: {
"Exclude Unmatched Users": function () {
action(excludeOtherUsers);
},
"Exclude Matched Users": function () {
action(excludeUsers);
},
"Add Matched Users": function () {
action(addUsers);
}
}
buttons: buttons
});
const $key = dialog.find('input[name="key"]');
const $value = dialog.find('input[name="value"]');
File diff suppressed because one or more lines are too long
@@ -1,36 +1,36 @@
$(() => {
const users = [];
const $table = $('#DocumentTemplate_BulkGenerate table');
const records = [];
const $table = $('#DocumentTemplate_BulkGenerate_Records');
const scope = $table.attr('data-scope');
function redrawTable() {
if (users.length > 0) {
if (records.length > 0) {
$table.find('tbody tr:first-child').hide();
}
const $tbody = $table.find('tbody');
let checkedCount = 0;
for (var i = 0; i < users.length; i++) {
var user = users[i];
if (user.checkbox === undefined) {
const tr = $('<tr><td><input id="BulkGenerate_User_' + i.toString() + '" type="checkbox" /></td><td><label for="BulkGenerate_User_' + i.toString() + '"></label></td><td><span class="name"></span></td><td><span class="scope"></span></td></tr>');
for (var i = 0; i < records.length; i++) {
var record = records[i];
if (record.checkbox === undefined) {
const tr = $('<tr><td><input id="BulkGenerate_User_' + i.toString() + '" type="checkbox" /></td><td><label for="BulkGenerate_User_' + i.toString() + '"></label></td><td class="name"><span class="name"></span></td><td><span class="scope"></span></td></tr>');
const checkbox = tr.find('input')[0];
const label = tr.find('label');
const name = tr.find('span.name');
const scope = tr.find('span.scope');
label.text(user.Id);
scope.text(user.Scope);
if (!user.IsError) {
label.text(record.Id);
scope.text(record.Scope);
if (!record.IsError) {
checkbox.checked = true;
name.text(user.DisplayName);
name.text(record.UserDisplayName);
checkedCount++;
} else {
tr.addClass('error');
checkbox.checked = false;
checkbox.disabled = true;
}
user.checkbox = checkbox;
record.checkbox = checkbox;
$tbody.append(tr);
} else {
if (!user.IsError && user.checkbox.checked) {
if (!record.IsError && record.checkbox.checked) {
checkedCount++;
}
}
@@ -42,13 +42,13 @@
}
}
function addUsers(r) {
function addRecords(r) {
let changeCount = 0;
for (var i = 0; i < r.length; i++) {
const user = r[i];
const record = users.find(u => u.Id === user.Id);
if (record === undefined || user.IsError) {
users.push(user);
const item = r[i];
const record = records.find(u => u.Id === item.Id);
if (record === undefined || item.IsError) {
records.push(item);
changeCount++;
} else if (record.checkbox !== undefined && !record.checkbox.checked && !record.IsError) {
record.checkbox.checked = true;
@@ -60,11 +60,11 @@
}
}
function excludeUsers(r) {
function excludeRecords(r) {
let changeCount = 0;
for (var i = 0; i < r.length; i++) {
const user = r[i];
const record = users.find(u => u.Id === user.Id);
const record = records.find(u => u.Id === user.Id);
if (record !== undefined && record.checkbox !== undefined) {
record.checkbox.checked = false;
changeCount++;
@@ -75,12 +75,12 @@
}
}
function excludeOtherUsers(r) {
function excludeOtherRecords(r) {
let changeCount = 0;
for (var i = 0; i < users.length; i++) {
const user = users[i];
if (!r.find(u => u.Id === user.Id)) {
user.checkbox.checked = false;
for (var i = 0; i < records.length; i++) {
const record = records[i];
if (!r.find(u => u.Id === record.Id)) {
record.checkbox.checked = false;
changeCount++;
}
}
@@ -94,15 +94,15 @@
});
$('#BulkGenerate').click(e => {
let userIds = [];
for (var i = 0; i < users.length; i++) {
var user = users[i];
if (!user.IsError && user.checkbox !== undefined && user.checkbox.checked) {
userIds.push(user.Id);
let dataIds = [];
for (var i = 0; i < records.length; i++) {
var record = records[i];
if (!record.IsError && record.checkbox !== undefined && record.checkbox.checked) {
dataIds.push(record.Id);
}
}
if (userIds.length > 0) {
$('#DocumentTemplate_BulkGenerate_DataIds').val(userIds.join('\r\n'));
if (dataIds.length > 0) {
$('#DocumentTemplate_BulkGenerate_DataIds').val(dataIds.join('\r\n'));
$('#BulkGenerate').closest('form').submit();
}
});
@@ -113,45 +113,91 @@
let dialog = dialogAddUsers;
if (!dialog) {
const action = function (applier) {
const action = async function (applier) {
const form = dialog.find('form')[0];
if (form.reportValidity()) {
const body = new FormData(form);
fetch(form.action, {
method: 'POST',
body: body
})
.then(r => r.json())
.then(r => {
applier(r);
dialog.find('textarea').html('').val('');
dialog.dialog("close");
dialog.dialog("enable");
})
.catch(reason => {
alert('Failed to validate users: ' + reason);
try {
const response = await fetch(form.action, {
method: 'POST',
body: body
});
const results = await response.json();
applier(results);
dialog.find('textarea').html('').val('');
dialog.dialog("close");
} catch (e) {
alert('Failed to validate users: ' + e);
}
}
dialog.dialog("disable");
}
const target = scope === 'user' ? 'Users' : 'Assigned Devices';
const buttons = {};
buttons[`Exclude Other ${target}`] = function () {
action(excludeOtherRecords);
};
buttons[`Exclude ${target}`] = function () {
action(excludeRecords);
};
buttons[`Add ${target}`] = function () {
action(addRecords);
};
dialog = $('#DocumentTemplate_BulkGenerate_Dialog_AddUsers').dialog({
resizable: false,
modal: true,
autoOpen: false,
width: 460,
width: 550,
buttons: buttons
});
dialogAddUsers = dialog;
}
dialog.dialog('open');
return false;
});
let dialogAddDevices = null;
$('#AddDevices').click(e => {
e.preventDefault();
let dialog = dialogAddDevices;
if (!dialog) {
const action = async function (applier) {
const form = dialog.find('form')[0];
if (form.reportValidity()) {
const body = new FormData(form);
try {
const response = await fetch(form.action, {
method: 'POST',
body: body
});
const results = await response.json();
applier(results);
dialog.find('textarea').html('').val('');
dialog.dialog("close");
} catch (e) {
alert('Failed to validate devices: ' + e);
}
}
}
dialog = $('#DocumentTemplate_BulkGenerate_Dialog_AddDevices').dialog({
resizable: false,
modal: true,
autoOpen: false,
width: 550,
buttons: {
"Exclude Other Users": function () {
action(excludeOtherUsers);
"Exclude Unmatched Devices": function () {
action(excludeOtherRecords);
},
"Exclude Users": function () {
action(excludeUsers);
"Exclude Devices": function () {
action(excludeRecords);
},
"Add Users": function () {
action(addUsers);
"Add Devices": function () {
action(addRecords);
}
}
});
dialogAddUsers = dialog;
dialogAddDevices = dialog;
}
dialog.dialog('open');
return false;
@@ -163,41 +209,38 @@
let dialog = dialogAddGroupMembers;
if (!dialog) {
const action = function (applier) {
const action = async function (applier) {
const form = dialog.find('form')[0];
if (form.reportValidity()) {
const body = new FormData(form);
fetch(form.action, {
method: 'POST',
body: body
})
.then(r => r.json())
.then(r => {
applier(r);
dialog.find('input[type="text"]').val('');
dialog.dialog("close");
dialog.dialog("enable");
})
.catch(reason => {
alert('Failed to validate group: ' + reason);
try {
const response = await fetch(form.action, {
method: 'POST',
body: body
});
const result = await response.json();
applier(result);
dialog.find('input[type="text"]').val('');
dialog.dialog("close");
} catch (e) {
alert('Failed to validate group: ' + e);
}
}
dialog.dialog("disable");
}
dialog = $('#DocumentTemplate_BulkGenerate_Dialog_AddGroupMembers').dialog({
resizable: false,
modal: true,
autoOpen: false,
width: 460,
width: 550,
buttons: {
"Exclude Non-Group Members": function () {
action(excludeOtherUsers);
action(excludeOtherRecords);
},
"Exclude Group Members": function () {
action(excludeUsers);
action(excludeRecords);
},
"Add Group Members": function () {
action(addUsers);
action(addRecords);
}
}
});
@@ -227,42 +270,39 @@
let dialog = dialogAddUserFlag;
if (!dialog) {
const action = function (applier) {
const action = async function (applier) {
const form = dialog.find('form')[0];
if (form.reportValidity()) {
const body = new FormData(form);
fetch(form.action, {
method: 'POST',
body: body
})
.then(r => r.json())
.then(r => {
applier(r);
dialog.find('input[name="flagId"]').val('');
dialog.find('div.item').removeClass('selected');
dialog.dialog("close");
dialog.dialog("enable");
})
.catch(reason => {
alert('Failed to validate user flag: ' + reason);
try {
const response = await fetch(form.action, {
method: 'POST',
body: body
});
const result = await response.json();
applier(result);
dialog.find('input[name="flagId"]').val('');
dialog.find('div.item').removeClass('selected');
dialog.dialog("close");
} catch (e) {
alert('Failed to validate user flag: ' + e);
}
}
dialog.dialog("disable");
}
dialog = $('#DocumentTemplate_BulkGenerate_Dialog_AddUserFlag').dialog({
resizable: false,
modal: true,
autoOpen: false,
width: 460,
width: 550,
buttons: {
"Exclude Unassigned Users": function () {
action(excludeOtherUsers);
action(excludeOtherRecords);
},
"Exclude Assigned Users": function () {
action(excludeUsers);
action(excludeRecords);
},
"Add Assigned Users": function () {
action(addUsers);
action(addRecords);
}
}
});
@@ -281,52 +321,107 @@
return false;
});
let dialogAddDeviceFlag = null;
$('#AddDeviceFlag').click(e => {
e.preventDefault();
let dialog = dialogAddDeviceFlag;
if (!dialog) {
const action = async function (applier) {
const form = dialog.find('form')[0];
if (form.reportValidity()) {
const body = new FormData(form);
try {
const response = await fetch(form.action, {
method: 'POST',
body: body
});
const result = await response.json();
applier(result);
dialog.find('input[name="flagId"]').val('');
dialog.find('div.item').removeClass('selected');
dialog.dialog("close");
} catch (e) {
alert('Failed to validate device flag: ' + e);
}
}
}
dialog = $('#DocumentTemplate_BulkGenerate_Dialog_AddDeviceFlag').dialog({
resizable: false,
modal: true,
autoOpen: false,
width: 550,
buttons: {
"Exclude Unassigned Devices": function () {
action(excludeOtherRecords);
},
"Exclude Assigned Devices": function () {
action(excludeRecords);
},
"Add Assigned Devices": function () {
action(addRecords);
}
}
});
const $input = dialog.find('input[name="flagId"]');
dialog.on('click', 'div.item:not(.disabled)', e => {
e.preventDefault();
const $target = $(e.currentTarget);
$input.val($target.attr('data-userflagid'));
dialog.find('div.item').removeClass('selected');
$target.addClass('selected');
return false;
});
dialogAddDeviceFlag = dialog;
}
dialog.dialog('open');
return false;
});
let dialogAddDeviceProfile = null;
$('#AddDeviceProfile').click(e => {
e.preventDefault();
let dialog = dialogAddDeviceProfile;
if (!dialog) {
const action = function (applier) {
const action = async function (applier) {
const form = dialog.find('form')[0];
const input = dialog.find('input[name="deviceProfileId"]');
if (input.val()) {
if (form.reportValidity()) {
const body = new FormData(form);
fetch(form.action, {
method: 'POST',
body: body
})
.then(r => r.json())
.then(r => {
applier(r);
input.val('');
dialog.find('div.item').removeClass('selected');
dialog.dialog("close");
dialog.dialog("enable");
})
.catch(reason => {
alert('Failed to validate device profile: ' + reason);
try {
const response = await fetch(form.action, {
method: 'POST',
body: body
});
dialog.dialog("disable");
const result = await response.json();
applier(result);
input.val('');
dialog.find('div.item').removeClass('selected');
dialog.dialog("close");
} catch (e) {
alert('Failed to validate device profile: ' + e);
}
}
}
}
const target = scope === 'user' ? 'Assigned Users' : 'Devices';
const buttons = {};
buttons[`Exclude Other ${target}`] = function () {
action(excludeOtherRecords);
};
buttons[`Exclude ${target}`] = function () {
action(excludeRecords);
};
buttons[`Add ${target}`] = function () {
action(addRecords);
};
dialog = $('#DocumentTemplate_BulkGenerate_Dialog_AddDeviceProfile').dialog({
resizable: false,
modal: true,
autoOpen: false,
width: 460,
buttons: {
"Exclude Unassigned Users": function () {
action(excludeOtherUsers);
},
"Exclude Assigned Users": function () {
action(excludeUsers);
},
"Add Assigned Users": function () {
action(addUsers);
}
}
width: 550,
buttons: buttons
});
const $input = dialog.find('input[name="deviceProfileId"]');
dialog.on('click', 'div.item:not(.disabled)', e => {
@@ -348,47 +443,45 @@
e.preventDefault();
let dialog = dialogAddDeviceBatch;
if (!dialog) {
const action = function (applier) {
const action = async function (applier) {
const form = dialog.find('form')[0];
const input = dialog.find('input[name="deviceBatchId"]');
if (input.val()) {
if (form.reportValidity()) {
const body = new FormData(form);
fetch(form.action, {
method: 'POST',
body: body
})
.then(r => r.json())
.then(r => {
applier(r);
input.val('');
dialog.find('div.item').removeClass('selected');
dialog.dialog("close");
dialog.dialog("enable");
})
.catch(reason => {
alert('Failed to validate device batch: ' + reason);
try {
const response = await fetch(form.action, {
method: 'POST',
body: body
});
dialog.dialog("disable");
const result = await response.json();
applier(result);
input.val('');
dialog.find('div.item').removeClass('selected');
dialog.dialog("close");
} catch (e) {
alert('Failed to validate device batch: ' + e);
}
}
}
}
const target = scope === 'user' ? 'Assigned Users' : 'Devices';
const buttons = {};
buttons[`Exclude Other ${target}`] = function () {
action(excludeOtherRecords);
};
buttons[`Exclude ${target}`] = function () {
action(excludeRecords);
};
buttons[`Add ${target}`] = function () {
action(addRecords);
};
dialog = $('#DocumentTemplate_BulkGenerate_Dialog_AddDeviceBatch').dialog({
resizable: false,
modal: true,
autoOpen: false,
width: 460,
buttons: {
"Exclude Unassigned Users": function () {
action(excludeOtherUsers);
},
"Exclude Assigned Users": function () {
action(excludeUsers);
},
"Add Assigned Users": function () {
action(addUsers);
}
}
width: 550,
buttons: buttons
});
const $input = dialog.find('input[name="deviceBatchId"]');
dialog.on('click', 'div.item:not(.disabled)', e => {
@@ -410,47 +503,45 @@
e.preventDefault();
let dialog = dialogAddDocumentAttachment;
if (!dialog) {
const action = function (applier) {
const action = async function (applier) {
const form = dialog.find('form')[0];
const input = dialog.find('input[name="documentTemplateId"]');
if (input.val()) {
if (form.reportValidity()) {
const body = new FormData(form);
fetch(form.action, {
method: 'POST',
body: body
})
.then(r => r.json())
.then(r => {
applier(r);
input.val('');
dialog.find('div.item').removeClass('selected');
dialog.dialog("close");
dialog.dialog("enable");
})
.catch(reason => {
alert('Failed to validate device batch: ' + reason);
try {
const response = await fetch(form.action, {
method: 'POST',
body: body
});
dialog.dialog("disable");
const result = await response.json();
applier(result);
input.val('');
dialog.find('div.item').removeClass('selected');
dialog.dialog("close");
} catch (e) {
alert('Failed to validate device batch: ' + e);
}
}
}
}
const target = scope === 'user' ? 'Users' : 'Devices';
const buttons = {};
buttons[`Exclude Unassigned ${target}`] = function () {
action(excludeOtherRecords);
};
buttons[`Exclude Assigned ${target}`] = function () {
action(excludeRecords);
};
buttons[`Add Assigned ${target}`] = function () {
action(addRecords);
};
dialog = $('#DocumentTemplate_BulkGenerate_Dialog_AddDocumentAttachment').dialog({
resizable: false,
modal: true,
autoOpen: false,
width: 460,
buttons: {
"Exclude Unassigned Users": function () {
action(excludeOtherUsers);
},
"Exclude Assigned Users": function () {
action(excludeUsers);
},
"Add Assigned Users": function () {
action(addUsers);
}
}
width: 550,
buttons: buttons
});
const $input = dialog.find('input[name="documentTemplateId"]');
dialog.on('click', 'div.item:not(.disabled)', e => {
@@ -472,49 +563,47 @@
e.preventDefault();
let dialog = dialogAddUserDetail;
if (!dialog) {
const action = function (applier) {
const action = async function (applier) {
const form = dialog.find('form')[0];
const key = $(form).find('input[name="key"]');
if (key.val()) {
if (form.reportValidity()) {
const body = new FormData(form);
fetch(form.action, {
method: 'POST',
body: body
})
.then(r => r.json())
.then(r => {
applier(r);
key.val('');
$(form).find('input[name="value"]').val('');
$('#DocumentTemplate_BulkGenerate_Dialog_AddUserDetail_Value').empty();
dialog.find('div.item').removeClass('selected');
dialog.dialog("close");
dialog.dialog("enable");
})
.catch(reason => {
alert('Failed to validate user detail: ' + reason);
try {
const response = await fetch(form.action, {
method: 'POST',
body: body
});
dialog.dialog("disable");
const result = await response.json();
applier(result);
key.val('');
$(form).find('input[name="value"]').val('');
$('#DocumentTemplate_BulkGenerate_Dialog_AddUserDetail_Value').empty();
dialog.find('div.item').removeClass('selected');
dialog.dialog("close");
} catch (e) {
alert('Failed to validate user detail: ' + e);
}
}
}
}
const target = scope === 'user' ? 'Users' : 'Devices';
const buttons = {};
buttons[`Exclude Unmatched ${target}`] = function () {
action(excludeOtherRecords);
};
buttons[`Exclude Matched ${target}`] = function () {
action(excludeRecords);
};
buttons[`Add Matched ${target}`] = function () {
action(addRecords);
};
dialog = $('#DocumentTemplate_BulkGenerate_Dialog_AddUserDetail').dialog({
resizable: false,
modal: true,
autoOpen: false,
width: 690,
buttons: {
"Exclude Unmatched Users": function () {
action(excludeOtherUsers);
},
"Exclude Matched Users": function () {
action(excludeUsers);
},
"Add Matched Users": function () {
action(addUsers);
}
}
buttons: buttons
});
const $key = dialog.find('input[name="key"]');
const $value = dialog.find('input[name="value"]');
+5 -2
View File
@@ -1981,14 +1981,17 @@ h1.Config_DocumentTemplates {
padding-bottom: 0.5em;
text-align: right;
}
#DocumentTemplate_BulkGenerate table {
#DocumentTemplate_BulkGenerate_Records {
max-width: 850px;
margin: auto;
}
#DocumentTemplate_BulkGenerate table tr.when-none {
#DocumentTemplate_BulkGenerate_Records tr.when-none {
text-align: center;
font-style: italic;
}
#DocumentTemplate_BulkGenerate_Records[data-scope="device"] .name {
display: none;
}
.dialog-item-picker {
height: 300px;
overflow-y: auto;
+12 -6
View File
@@ -2386,14 +2386,20 @@ h1.Config_DocumentTemplates {
padding-bottom: .5em;
text-align: right;
}
}
table {
max-width: 850px;
margin: auto;
#DocumentTemplate_BulkGenerate_Records {
max-width: 850px;
margin: auto;
tr.when-none {
text-align: center;
font-style: italic;
tr.when-none {
text-align: center;
font-style: italic;
}
&[data-scope="device"] {
.name {
display: none;
}
}
}
File diff suppressed because one or more lines are too long
+23 -5
View File
@@ -222,7 +222,7 @@
<Compile Include="Areas\API\Models\Activation\CallbackModel.cs" />
<Compile Include="Areas\API\Models\DeviceModel\TestComputerNameTemplateModel.cs" />
<Compile Include="Areas\API\Models\DocumentTemplate\AddOnImportUserFlagRuleModel.cs" />
<Compile Include="Areas\API\Models\DocumentTemplate\BulkGenerateUserModel.cs" />
<Compile Include="Areas\API\Models\DocumentTemplate\BulkGenerateItemModel.cs" />
<Compile Include="Areas\API\Models\DocumentTemplate\DocumentHandlersModel.cs" />
<Compile Include="Areas\API\Models\Job\DeviceHeldLocationModel.cs" />
<Compile Include="Areas\API\Models\Shared\SubjectDescriptorModel.cs" />
@@ -293,10 +293,15 @@
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
</Compile>
<Compile Include="Areas\Config\Views\DocumentTemplate\BulkGenerate.generated.cs">
<Compile Include="Areas\Config\Views\DocumentTemplate\BulkGenerateDevice.generated.cs">
<DependentUpon>BulkGenerateDevice.cshtml</DependentUpon>
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>BulkGenerate.cshtml</DependentUpon>
</Compile>
<Compile Include="Areas\Config\Views\DocumentTemplate\BulkGenerateUser.generated.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>BulkGenerateUser.cshtml</DependentUpon>
</Compile>
<Compile Include="Areas\Config\Views\DocumentTemplate\CreatePackage.generated.cs">
<DependentUpon>CreatePackage.cshtml</DependentUpon>
@@ -313,6 +318,11 @@
<DesignTime>True</DesignTime>
<DependentUpon>ShowPackage.cshtml</DependentUpon>
</Compile>
<Compile Include="Areas\Config\Views\DocumentTemplate\_BulkGenerateShared.generated.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>_BulkGenerateShared.cshtml</DependentUpon>
</Compile>
<Compile Include="Areas\Config\Views\Export\_Edit.generated.cs">
<DependentUpon>_Edit.cshtml</DependentUpon>
<AutoGen>True</AutoGen>
@@ -1393,9 +1403,13 @@
<Generator>RazorGenerator</Generator>
<LastGenOutput>Create.generated.cs</LastGenOutput>
</None>
<None Include="Areas\Config\Views\DocumentTemplate\BulkGenerate.cshtml">
<Content Include="Areas\Config\Views\DocumentTemplate\BulkGenerateDevice.cshtml">
<Generator>RazorGenerator</Generator>
<LastGenOutput>BulkGenerate.generated.cs</LastGenOutput>
<LastGenOutput>BulkGenerateDevice.generated.cs</LastGenOutput>
</Content>
<None Include="Areas\Config\Views\DocumentTemplate\BulkGenerateUser.cshtml">
<Generator>RazorGenerator</Generator>
<LastGenOutput>BulkGenerateUser.generated.cs</LastGenOutput>
</None>
<None Include="Areas\Config\Views\DocumentTemplate\Export.cshtml">
<Generator>RazorGenerator</Generator>
@@ -1409,6 +1423,10 @@
<Generator>RazorGenerator</Generator>
<LastGenOutput>CreatePackage.generated.cs</LastGenOutput>
</None>
<None Include="Areas\Config\Views\DocumentTemplate\_BulkGenerateShared.cshtml">
<Generator>RazorGenerator</Generator>
<LastGenOutput>_BulkGenerateShared.generated.cs</LastGenOutput>
</None>
<None Include="Areas\Config\Views\Export\Create.cshtml">
<Generator>RazorGenerator</Generator>
<LastGenOutput>Create.generated.cs</LastGenOutput>
@@ -205,6 +205,12 @@ namespace Disco.Web.Areas.API.Controllers
}
[NonAction]
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
public virtual System.Web.Mvc.ActionResult BulkGenerateAddDevices()
{
return new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.BulkGenerateAddDevices);
}
[NonAction]
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
public virtual System.Web.Mvc.ActionResult BulkGenerateAddGroupMembers()
{
return new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.BulkGenerateAddGroupMembers);
@@ -217,6 +223,12 @@ namespace Disco.Web.Areas.API.Controllers
}
[NonAction]
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
public virtual System.Web.Mvc.ActionResult BulkGenerateAddDeviceFlag()
{
return new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.BulkGenerateAddDeviceFlag);
}
[NonAction]
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
public virtual System.Web.Mvc.ActionResult BulkGenerateAddDeviceProfile()
{
return new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.BulkGenerateAddDeviceProfile);
@@ -340,8 +352,10 @@ namespace Disco.Web.Areas.API.Controllers
public readonly string BulkGenerate = "BulkGenerate";
public readonly string BulkGenerateDownload = "BulkGenerateDownload";
public readonly string BulkGenerateAddUsers = "BulkGenerateAddUsers";
public readonly string BulkGenerateAddDevices = "BulkGenerateAddDevices";
public readonly string BulkGenerateAddGroupMembers = "BulkGenerateAddGroupMembers";
public readonly string BulkGenerateAddUserFlag = "BulkGenerateAddUserFlag";
public readonly string BulkGenerateAddDeviceFlag = "BulkGenerateAddDeviceFlag";
public readonly string BulkGenerateAddDeviceProfile = "BulkGenerateAddDeviceProfile";
public readonly string BulkGenerateAddDeviceBatch = "BulkGenerateAddDeviceBatch";
public readonly string BulkGenerateAddDocumentAttachment = "BulkGenerateAddDocumentAttachment";
@@ -386,8 +400,10 @@ namespace Disco.Web.Areas.API.Controllers
public const string BulkGenerate = "BulkGenerate";
public const string BulkGenerateDownload = "BulkGenerateDownload";
public const string BulkGenerateAddUsers = "BulkGenerateAddUsers";
public const string BulkGenerateAddDevices = "BulkGenerateAddDevices";
public const string BulkGenerateAddGroupMembers = "BulkGenerateAddGroupMembers";
public const string BulkGenerateAddUserFlag = "BulkGenerateAddUserFlag";
public const string BulkGenerateAddDeviceFlag = "BulkGenerateAddDeviceFlag";
public const string BulkGenerateAddDeviceProfile = "BulkGenerateAddDeviceProfile";
public const string BulkGenerateAddDeviceBatch = "BulkGenerateAddDeviceBatch";
public const string BulkGenerateAddDocumentAttachment = "BulkGenerateAddDocumentAttachment";
@@ -635,8 +651,17 @@ namespace Disco.Web.Areas.API.Controllers
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
public class ActionParamsClass_BulkGenerateAddUsers
{
public readonly string scope = "scope";
public readonly string userIds = "userIds";
}
static readonly ActionParamsClass_BulkGenerateAddDevices s_params_BulkGenerateAddDevices = new ActionParamsClass_BulkGenerateAddDevices();
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
public ActionParamsClass_BulkGenerateAddDevices BulkGenerateAddDevicesParams { get { return s_params_BulkGenerateAddDevices; } }
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
public class ActionParamsClass_BulkGenerateAddDevices
{
public readonly string deviceSerialNumbers = "deviceSerialNumbers";
}
static readonly ActionParamsClass_BulkGenerateAddGroupMembers s_params_BulkGenerateAddGroupMembers = new ActionParamsClass_BulkGenerateAddGroupMembers();
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
public ActionParamsClass_BulkGenerateAddGroupMembers BulkGenerateAddGroupMembersParams { get { return s_params_BulkGenerateAddGroupMembers; } }
@@ -653,12 +678,21 @@ namespace Disco.Web.Areas.API.Controllers
{
public readonly string flagId = "flagId";
}
static readonly ActionParamsClass_BulkGenerateAddDeviceFlag s_params_BulkGenerateAddDeviceFlag = new ActionParamsClass_BulkGenerateAddDeviceFlag();
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
public ActionParamsClass_BulkGenerateAddDeviceFlag BulkGenerateAddDeviceFlagParams { get { return s_params_BulkGenerateAddDeviceFlag; } }
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
public class ActionParamsClass_BulkGenerateAddDeviceFlag
{
public readonly string flagId = "flagId";
}
static readonly ActionParamsClass_BulkGenerateAddDeviceProfile s_params_BulkGenerateAddDeviceProfile = new ActionParamsClass_BulkGenerateAddDeviceProfile();
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
public ActionParamsClass_BulkGenerateAddDeviceProfile BulkGenerateAddDeviceProfileParams { get { return s_params_BulkGenerateAddDeviceProfile; } }
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
public class ActionParamsClass_BulkGenerateAddDeviceProfile
{
public readonly string scope = "scope";
public readonly string deviceProfileId = "deviceProfileId";
}
static readonly ActionParamsClass_BulkGenerateAddDeviceBatch s_params_BulkGenerateAddDeviceBatch = new ActionParamsClass_BulkGenerateAddDeviceBatch();
@@ -667,6 +701,7 @@ namespace Disco.Web.Areas.API.Controllers
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
public class ActionParamsClass_BulkGenerateAddDeviceBatch
{
public readonly string scope = "scope";
public readonly string deviceBatchId = "deviceBatchId";
}
static readonly ActionParamsClass_BulkGenerateAddDocumentAttachment s_params_BulkGenerateAddDocumentAttachment = new ActionParamsClass_BulkGenerateAddDocumentAttachment();
@@ -675,6 +710,7 @@ namespace Disco.Web.Areas.API.Controllers
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
public class ActionParamsClass_BulkGenerateAddDocumentAttachment
{
public readonly string scope = "scope";
public readonly string documentTemplateId = "documentTemplateId";
public readonly string threshold = "threshold";
}
@@ -692,6 +728,7 @@ namespace Disco.Web.Areas.API.Controllers
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
public class ActionParamsClass_BulkGenerateAddUserDetail
{
public readonly string scope = "scope";
public readonly string key = "key";
public readonly string value = "value";
}
@@ -1135,14 +1172,27 @@ namespace Disco.Web.Areas.API.Controllers
}
[NonAction]
partial void BulkGenerateAddUsersOverride(T4MVC_System_Web_Mvc_ActionResult callInfo, string userIds);
partial void BulkGenerateAddUsersOverride(T4MVC_System_Web_Mvc_ActionResult callInfo, string scope, string userIds);
[NonAction]
public override System.Web.Mvc.ActionResult BulkGenerateAddUsers(string userIds)
public override System.Web.Mvc.ActionResult BulkGenerateAddUsers(string scope, string userIds)
{
var callInfo = new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.BulkGenerateAddUsers);
ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "scope", scope);
ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "userIds", userIds);
BulkGenerateAddUsersOverride(callInfo, userIds);
BulkGenerateAddUsersOverride(callInfo, scope, userIds);
return callInfo;
}
[NonAction]
partial void BulkGenerateAddDevicesOverride(T4MVC_System_Web_Mvc_ActionResult callInfo, string deviceSerialNumbers);
[NonAction]
public override System.Web.Mvc.ActionResult BulkGenerateAddDevices(string deviceSerialNumbers)
{
var callInfo = new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.BulkGenerateAddDevices);
ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "deviceSerialNumbers", deviceSerialNumbers);
BulkGenerateAddDevicesOverride(callInfo, deviceSerialNumbers);
return callInfo;
}
@@ -1171,39 +1221,54 @@ namespace Disco.Web.Areas.API.Controllers
}
[NonAction]
partial void BulkGenerateAddDeviceProfileOverride(T4MVC_System_Web_Mvc_ActionResult callInfo, int deviceProfileId);
partial void BulkGenerateAddDeviceFlagOverride(T4MVC_System_Web_Mvc_ActionResult callInfo, int flagId);
[NonAction]
public override System.Web.Mvc.ActionResult BulkGenerateAddDeviceProfile(int deviceProfileId)
public override System.Web.Mvc.ActionResult BulkGenerateAddDeviceFlag(int flagId)
{
var callInfo = new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.BulkGenerateAddDeviceFlag);
ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "flagId", flagId);
BulkGenerateAddDeviceFlagOverride(callInfo, flagId);
return callInfo;
}
[NonAction]
partial void BulkGenerateAddDeviceProfileOverride(T4MVC_System_Web_Mvc_ActionResult callInfo, string scope, int deviceProfileId);
[NonAction]
public override System.Web.Mvc.ActionResult BulkGenerateAddDeviceProfile(string scope, int deviceProfileId)
{
var callInfo = new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.BulkGenerateAddDeviceProfile);
ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "scope", scope);
ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "deviceProfileId", deviceProfileId);
BulkGenerateAddDeviceProfileOverride(callInfo, deviceProfileId);
BulkGenerateAddDeviceProfileOverride(callInfo, scope, deviceProfileId);
return callInfo;
}
[NonAction]
partial void BulkGenerateAddDeviceBatchOverride(T4MVC_System_Web_Mvc_ActionResult callInfo, int deviceBatchId);
partial void BulkGenerateAddDeviceBatchOverride(T4MVC_System_Web_Mvc_ActionResult callInfo, string scope, int deviceBatchId);
[NonAction]
public override System.Web.Mvc.ActionResult BulkGenerateAddDeviceBatch(int deviceBatchId)
public override System.Web.Mvc.ActionResult BulkGenerateAddDeviceBatch(string scope, int deviceBatchId)
{
var callInfo = new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.BulkGenerateAddDeviceBatch);
ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "scope", scope);
ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "deviceBatchId", deviceBatchId);
BulkGenerateAddDeviceBatchOverride(callInfo, deviceBatchId);
BulkGenerateAddDeviceBatchOverride(callInfo, scope, deviceBatchId);
return callInfo;
}
[NonAction]
partial void BulkGenerateAddDocumentAttachmentOverride(T4MVC_System_Web_Mvc_ActionResult callInfo, string documentTemplateId, System.DateTime? threshold);
partial void BulkGenerateAddDocumentAttachmentOverride(T4MVC_System_Web_Mvc_ActionResult callInfo, string scope, string documentTemplateId, System.DateTime? threshold);
[NonAction]
public override System.Web.Mvc.ActionResult BulkGenerateAddDocumentAttachment(string documentTemplateId, System.DateTime? threshold)
public override System.Web.Mvc.ActionResult BulkGenerateAddDocumentAttachment(string scope, string documentTemplateId, System.DateTime? threshold)
{
var callInfo = new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.BulkGenerateAddDocumentAttachment);
ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "scope", scope);
ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "documentTemplateId", documentTemplateId);
ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "threshold", threshold);
BulkGenerateAddDocumentAttachmentOverride(callInfo, documentTemplateId, threshold);
BulkGenerateAddDocumentAttachmentOverride(callInfo, scope, documentTemplateId, threshold);
return callInfo;
}
@@ -1220,15 +1285,16 @@ namespace Disco.Web.Areas.API.Controllers
}
[NonAction]
partial void BulkGenerateAddUserDetailOverride(T4MVC_System_Web_Mvc_ActionResult callInfo, string key, string value);
partial void BulkGenerateAddUserDetailOverride(T4MVC_System_Web_Mvc_ActionResult callInfo, string scope, string key, string value);
[NonAction]
public override System.Web.Mvc.ActionResult BulkGenerateAddUserDetail(string key, string value)
public override System.Web.Mvc.ActionResult BulkGenerateAddUserDetail(string scope, string key, string value)
{
var callInfo = new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.BulkGenerateAddUserDetail);
ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "scope", scope);
ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "key", key);
ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "value", value);
BulkGenerateAddUserDetailOverride(callInfo, key, value);
BulkGenerateAddUserDetailOverride(callInfo, scope, key, value);
return callInfo;
}
@@ -186,8 +186,10 @@ namespace Disco.Web.Areas.Config.Controllers
public _ViewNamesClass ViewNames { get { return s_ViewNames; } }
public class _ViewNamesClass
{
public readonly string _BulkGenerateShared = "_BulkGenerateShared";
public readonly string _ExpressionsTable = "_ExpressionsTable";
public readonly string BulkGenerate = "BulkGenerate";
public readonly string BulkGenerateDevice = "BulkGenerateDevice";
public readonly string BulkGenerateUser = "BulkGenerateUser";
public readonly string Create = "Create";
public readonly string CreatePackage = "CreatePackage";
public readonly string Export = "Export";
@@ -197,8 +199,10 @@ namespace Disco.Web.Areas.Config.Controllers
public readonly string ShowPackage = "ShowPackage";
public readonly string UndetectedPages = "UndetectedPages";
}
public readonly string _BulkGenerateShared = "~/Areas/Config/Views/DocumentTemplate/_BulkGenerateShared.cshtml";
public readonly string _ExpressionsTable = "~/Areas/Config/Views/DocumentTemplate/_ExpressionsTable.cshtml";
public readonly string BulkGenerate = "~/Areas/Config/Views/DocumentTemplate/BulkGenerate.cshtml";
public readonly string BulkGenerateDevice = "~/Areas/Config/Views/DocumentTemplate/BulkGenerateDevice.cshtml";
public readonly string BulkGenerateUser = "~/Areas/Config/Views/DocumentTemplate/BulkGenerateUser.cshtml";
public readonly string Create = "~/Areas/Config/Views/DocumentTemplate/Create.cshtml";
public readonly string CreatePackage = "~/Areas/Config/Views/DocumentTemplate/CreatePackage.cshtml";
public readonly string Export = "~/Areas/Config/Views/DocumentTemplate/Export.cshtml";
+12 -22
View File
@@ -171,8 +171,8 @@ namespace Links
public static readonly string disco_uicore_js_ = T4MVCHelpers.IsProduction() && T4Extensions.FileExists(UrlPath + "/disco.uicore.min.js") ? Url("disco.uicore.min.js") : Url("disco.uicore.js");
public static readonly string disco_unobtrusiveValidation_extensions_js = T4MVCHelpers.IsProduction() && T4Extensions.FileExists(UrlPath + "/disco.unobtrusiveValidation.extensions.min.js") ? Url("disco.unobtrusiveValidation.extensions.min.js") : Url("disco.unobtrusiveValidation.extensions.js");
public static readonly string disco_unobtrusiveValidation_extensions_js_ = T4MVCHelpers.IsProduction() && T4Extensions.FileExists(UrlPath + "/disco.unobtrusiveValidation.extensions.min.js") ? Url("disco.unobtrusiveValidation.extensions.min.js") : Url("disco.unobtrusiveValidation.extensions.js");
public static readonly string jquery_2_1_1_js = T4MVCHelpers.IsProduction() && T4Extensions.FileExists(UrlPath + "/jquery-2.1.1.min.js") ? Url("jquery-2.1.1.min.js") : Url("jquery-2.1.1.js");
public static readonly string jquery_ui_1_10_4_js = T4MVCHelpers.IsProduction() && T4Extensions.FileExists(UrlPath + "/jquery-ui-1.10.4.min.js") ? Url("jquery-ui-1.10.4.min.js") : Url("jquery-ui-1.10.4.js");
public static readonly string jquery_3_7_1_js = T4MVCHelpers.IsProduction() && T4Extensions.FileExists(UrlPath + "/jquery-3.7.1.min.js") ? Url("jquery-3.7.1.min.js") : Url("jquery-3.7.1.js");
public static readonly string jquery_ui_js = T4MVCHelpers.IsProduction() && T4Extensions.FileExists(UrlPath + "/jquery-ui.min.js") ? Url("jquery-ui.min.js") : Url("jquery-ui.js");
public static readonly string jquery_dataTables_js = T4MVCHelpers.IsProduction() && T4Extensions.FileExists(UrlPath + "/jquery.dataTables.min.js") ? Url("jquery.dataTables.min.js") : Url("jquery.dataTables.js");
public static readonly string jquery_dataTables_js_ = T4MVCHelpers.IsProduction() && T4Extensions.FileExists(UrlPath + "/jquery.dataTables.min.js") ? Url("jquery.dataTables.min.js") : Url("jquery.dataTables.js");
public static readonly string jquery_validate_js = T4MVCHelpers.IsProduction() && T4Extensions.FileExists(UrlPath + "/jquery.validate.min.js") ? Url("jquery.validate.min.js") : Url("jquery.validate.js");
@@ -354,7 +354,7 @@ namespace Links
public static string Url(string fileName) { return T4MVCHelpers.ProcessVirtualPath(UrlPath + "/" + fileName); }
public static readonly string disco_hubs_js = T4MVCHelpers.IsProduction() && T4Extensions.FileExists(UrlPath + "/disco-hubs.min.js") ? Url("disco-hubs.min.js") : Url("disco-hubs.js");
public static readonly string disco_hubs_js_ = T4MVCHelpers.IsProduction() && T4Extensions.FileExists(UrlPath + "/disco-hubs.min.js") ? Url("disco-hubs.min.js") : Url("disco-hubs.js");
public static readonly string jquery_signalR_2_1_2_js = T4MVCHelpers.IsProduction() && T4Extensions.FileExists(UrlPath + "/jquery.signalR-2.1.2.min.js") ? Url("jquery.signalR-2.1.2.min.js") : Url("jquery.signalR-2.1.2.js");
public static readonly string jquery_signalR_2_4_3_js = T4MVCHelpers.IsProduction() && T4Extensions.FileExists(UrlPath + "/jquery.signalR-2.4.3.min.js") ? Url("jquery.signalR-2.4.3.min.js") : Url("jquery.signalR-2.4.3.js");
}
public static readonly string jQuery_SignalR_js = T4MVCHelpers.IsProduction() && T4Extensions.FileExists(UrlPath + "/jQuery-SignalR.min.js") ? Url("jQuery-SignalR.min.js") : Url("jQuery-SignalR.js");
@@ -725,25 +725,15 @@ namespace Links
public const string UrlPath = "~/ClientSource/Style/jQueryUI/images";
public static string Url() { return T4MVCHelpers.ProcessVirtualPath(UrlPath); }
public static string Url(string fileName) { return T4MVCHelpers.ProcessVirtualPath(UrlPath + "/" + fileName); }
public static readonly string animated_overlay_gif = Url("animated-overlay.gif");
public static readonly string ui_bg_flat_0_aaaaaa_40x100_png = Url("ui-bg_flat_0_aaaaaa_40x100.png");
public static readonly string ui_bg_flat_75_ffffff_40x100_png = Url("ui-bg_flat_75_ffffff_40x100.png");
public static readonly string ui_bg_glass_55_fbf9ee_1x400_png = Url("ui-bg_glass_55_fbf9ee_1x400.png");
public static readonly string ui_bg_glass_65_ffffff_1x400_png = Url("ui-bg_glass_65_ffffff_1x400.png");
public static readonly string ui_bg_glass_75_dadada_1x400_png = Url("ui-bg_glass_75_dadada_1x400.png");
public static readonly string ui_bg_glass_75_e6e6e6_1x400_png = Url("ui-bg_glass_75_e6e6e6_1x400.png");
public static readonly string ui_bg_glass_95_fef1ec_1x400_png = Url("ui-bg_glass_95_fef1ec_1x400.png");
public static readonly string ui_bg_highlight_soft_75_cccccc_1x100_png = Url("ui-bg_highlight-soft_75_cccccc_1x100.png");
public static readonly string ui_icons_222222_256x240_png = Url("ui-icons_222222_256x240.png");
public static readonly string ui_icons_2e83ff_256x240_png = Url("ui-icons_2e83ff_256x240.png");
public static readonly string ui_icons_454545_256x240_png = Url("ui-icons_454545_256x240.png");
public static readonly string ui_icons_888888_256x240_png = Url("ui-icons_888888_256x240.png");
public static readonly string ui_icons_cd0a0a_256x240_png = Url("ui-icons_cd0a0a_256x240.png");
public static readonly string ui_icons_444444_256x240_png = Url("ui-icons_444444_256x240.png");
public static readonly string ui_icons_555555_256x240_png = Url("ui-icons_555555_256x240.png");
public static readonly string ui_icons_777620_256x240_png = Url("ui-icons_777620_256x240.png");
public static readonly string ui_icons_777777_256x240_png = Url("ui-icons_777777_256x240.png");
public static readonly string ui_icons_cc0000_256x240_png = Url("ui-icons_cc0000_256x240.png");
public static readonly string ui_icons_ffffff_256x240_png = Url("ui-icons_ffffff_256x240.png");
}
public static readonly string jquery_ui_less = Url("jquery-ui.less");
public static readonly string jquery_ui_css = T4MVCHelpers.IsProduction() && T4Extensions.FileExists(UrlPath + "/jquery-ui.min.css") ? Url("jquery-ui.min.css") : Url("jquery-ui.css");
public static readonly string jquery_ui_min_css = Url("jquery-ui.min.css");
}
public static readonly string jQueryUIExtensions_less = Url("jQueryUIExtensions.less");
@@ -913,8 +903,8 @@ namespace Links
public const string disco_uicore_js_ = "~/ClientSource/Scripts/Core/disco.uicore.js";
public const string disco_unobtrusiveValidation_extensions_js = "~/ClientSource/Scripts/Core/disco.unobtrusiveValidation.extensions.js";
public const string disco_unobtrusiveValidation_extensions_js_ = "~/ClientSource/Scripts/Core/disco.unobtrusiveValidation.extensions.js";
public const string jquery_2_1_1_js = "~/ClientSource/Scripts/Core/jquery-2.1.1.js";
public const string jquery_ui_1_10_4_js = "~/ClientSource/Scripts/Core/jquery-ui-1.10.4.js";
public const string jquery_3_7_1_js = "~/ClientSource/Scripts/Core/jquery-3.7.1.js";
public const string jquery_ui_js = "~/ClientSource/Scripts/Core/jquery-ui.js";
public const string jquery_dataTables_js = "~/ClientSource/Scripts/Core/jquery.dataTables.js";
public const string jquery_dataTables_js_ = "~/ClientSource/Scripts/Core/jquery.dataTables.js";
public const string jquery_validate_js = "~/ClientSource/Scripts/Core/jquery.validate.js";
@@ -1038,7 +1028,7 @@ namespace Links
{
public const string disco_hubs_js = "~/ClientSource/Scripts/Modules/jQuery-SignalR/disco-hubs.js";
public const string disco_hubs_js_ = "~/ClientSource/Scripts/Modules/jQuery-SignalR/disco-hubs.js";
public const string jquery_signalR_2_1_2_js = "~/ClientSource/Scripts/Modules/jQuery-SignalR/jquery.signalR-2.1.2.js";
public const string jquery_signalR_2_4_3_js = "~/ClientSource/Scripts/Modules/jQuery-SignalR/jquery.signalR-2.4.3.js";
}
}
public static partial class jQueryUI_DynaTree
-1
View File
@@ -6,7 +6,6 @@
<package id="EntityFramework" version="5.0.0" targetFramework="net45" />
<package id="EntityFramework.SqlServerCompact" version="4.3.6" targetFramework="net45" />
<package id="FontAwesome" version="4.1.0" targetFramework="net45" />
<package id="jQuery" version="1.9.0" targetFramework="net462" />
<package id="knockoutjs" version="3.1.0" targetFramework="net45" />
<package id="MarkdownSharp" version="1.13.0.0" targetFramework="net45" />
<package id="Microsoft.AspNet.Mvc" version="4.0.30506.0" targetFramework="net45" />