#34 Feature: Detailed Device Exporting

Many additional device properties are available to export. The previous
export configuration is remembered.
This commit is contained in:
Gary Sharp
2014-05-22 01:22:57 +10:00
parent 53ca13c7f4
commit 3fdb4f1053
54 changed files with 1750 additions and 397 deletions
@@ -497,25 +497,5 @@ namespace Disco.Web.Areas.API.Controllers
}
#endregion
#region Exporting
[DiscoAuthorizeAll(Claims.Config.DeviceBatch.Show, Claims.Device.Actions.Export)]
public virtual ActionResult ExportDevices(int id)
{
DeviceBatch db = Database.DeviceBatches.Find(id);
if (db == null)
throw new ArgumentNullException("id", "Invalid Device Batch Id");
var devices = Database.Devices.Where(d => !d.DecommissionedDate.HasValue && d.DeviceBatchId == db.Id);
var export = BI.DeviceBI.Importing.Export.GenerateExport(devices);
var filename = string.Format("DiscoDeviceExport-Batch_{0}-{1:yyyyMMdd-HHmmss}.csv", db.Id, DateTime.Now);
return File(export, "text/csv", filename);
}
#endregion
}
}
@@ -1,12 +1,15 @@
using Disco.BI.Extensions;
using Disco.Services.Authorization;
using Disco.Services.Devices.Export;
using Disco.Services.Interop.ActiveDirectory;
using Disco.Services.Users;
using Disco.Services.Web;
using Disco.Web.Models.Device;
using System;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.Caching;
using System.Web.Mvc;
namespace Disco.Web.Areas.API.Controllers
@@ -265,7 +268,7 @@ namespace Disco.Web.Areas.API.Controllers
{
if (d.CanDecommission())
{
d.OnDecommission((Disco.Models.Repository.Device.DecommissionReasons)Reason);
d.OnDecommission((Disco.Models.Repository.DecommissionReasons)Reason);
Database.SaveChanges();
if (redirect)
@@ -526,7 +529,7 @@ namespace Disco.Web.Areas.API.Controllers
#endregion
#region Importing / Exporting
#region Importing
[DiscoAuthorize(Claims.Device.Actions.Import)]
public virtual ActionResult ImportParse(HttpPostedFileBase ImportFile)
@@ -558,18 +561,57 @@ namespace Disco.Web.Areas.API.Controllers
return RedirectToAction(MVC.Config.Logging.TaskStatus(status.SessionId));
}
#endregion
#region Exporting
private const string ExportSessionCacheKey = "DeviceExportContext_{0}";
[DiscoAuthorize(Claims.Device.Actions.Export)]
public virtual ActionResult ExportAllDevices()
public virtual ActionResult Export(ExportModel Model)
{
// Non-Decommissioned Devices
var devices = Database.Devices.Where(d => !d.DecommissionedDate.HasValue);
if (Model == null || Model.Options == null)
throw new ArgumentNullException("Model");
var export = BI.DeviceBI.Importing.Export.GenerateExport(devices);
// Write Options to Configuration
Database.DiscoConfiguration.Devices.LastExportOptions = Model.Options;
Database.SaveChanges();
var filename = string.Format("DiscoDeviceExport-AllDevices-{0:yyyyMMdd-HHmmss}.csv", DateTime.Now);
// Start Export
var exportContext = DeviceExportTask.ScheduleNow(Model.Options);
// Store Export Context in Web Cache
string key = string.Format(ExportSessionCacheKey, exportContext.TaskStatus.SessionId);
HttpRuntime.Cache.Insert(key, exportContext, null, DateTime.Now.AddMinutes(60), Cache.NoSlidingExpiration, CacheItemPriority.NotRemovable, null);
return File(export, "text/csv", filename);
// Set Task Finished Url
var finishedActionResult = MVC.Device.Export(exportContext.TaskStatus.SessionId, null, null);
exportContext.TaskStatus.SetFinishedUrl(Url.Action(finishedActionResult));
// Try waiting for completion
if (exportContext.TaskStatus.WaitUntilFinished(TimeSpan.FromSeconds(1.5)))
return RedirectToAction(finishedActionResult);
else
return RedirectToAction(MVC.Config.Logging.TaskStatus(exportContext.TaskStatus.SessionId));
}
[DiscoAuthorize(Claims.Device.Actions.Export)]
public virtual ActionResult ExportRetrieve(string Id)
{
if (string.IsNullOrWhiteSpace(Id))
throw new ArgumentNullException("Id");
string key = string.Format(ExportSessionCacheKey, Id);
var context = HttpRuntime.Cache.Get(key) as DeviceExportTaskContext;
if (context == null)
throw new ArgumentException("The Id specified is invalid, or the export data expired (60 minutes)", "Id");
if (context.CsvResult == null)
throw new ArgumentException("The export session is still running, or failed to complete successfully", "Id");
var filename = string.Format("DiscoDeviceExport-{0:yyyyMMdd-HHmmss}.csv", context.TaskStatus.StartedTimestamp.Value);
return File(context.CsvResult.ToArray(), "text/csv", filename);
}
#endregion
@@ -356,23 +356,5 @@ namespace Disco.Web.Areas.API.Controllers
}
#endregion
#region Exporting
[DiscoAuthorizeAll(Claims.Config.DeviceModel.Show, Claims.Device.Actions.Export)]
public virtual ActionResult ExportDevices(int id)
{
DeviceModel dm = Database.DeviceModels.Find(id);
if (dm == null)
throw new ArgumentNullException("id", "Invalid Device Model Id");
var devices = Database.Devices.Where(d => !d.DecommissionedDate.HasValue && d.DeviceModelId == dm.Id);
var export = BI.DeviceBI.Importing.Export.GenerateExport(devices);
var filename = string.Format("DiscoDeviceExport-Model_{0}-{1:yyyyMMdd-HHmmss}.csv", dm.Id, DateTime.Now);
return File(export, "text/csv", filename);
}
#endregion
}
}
@@ -461,23 +461,5 @@ namespace Disco.Web.Areas.API.Controllers
#endregion
#region Exporting
[DiscoAuthorizeAll(Claims.Config.DeviceProfile.Show, Claims.Device.Actions.Export)]
public virtual ActionResult ExportDevices(int id)
{
DeviceProfile dp = Database.DeviceProfiles.Find(id);
if (dp == null)
throw new ArgumentNullException("id", "Invalid Device Profile Id");
var devices = Database.Devices.Where(d => !d.DecommissionedDate.HasValue && d.DeviceProfileId == dp.Id);
var export = BI.DeviceBI.Importing.Export.GenerateExport(devices);
var filename = string.Format("DiscoDeviceExport-Profile_{0}-{1:yyyyMMdd-HHmmss}.csv", dp.Id, DateTime.Now);
return File(export, "text/csv", filename);
}
#endregion
}
}
@@ -663,7 +663,7 @@
{
if (Authorization.Has(Claims.Device.Actions.Export))
{
@Html.ActionLinkButton("Export Devices", MVC.API.DeviceBatch.ExportDevices(Model.DeviceBatch.Id))
@Html.ActionLinkButton("Export Devices", MVC.Device.Export(null, Disco.Models.Services.Devices.Exporting.DeviceExportTypes.Batch, Model.DeviceBatch.Id))
}
if (Authorization.Has(Claims.Device.Search))
{
@@ -2,7 +2,7 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.34011
// Runtime Version:4.0.30319.34014
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
@@ -2016,14 +2016,14 @@ WriteLiteral(" ");
#line hidden
#line 666 "..\..\Areas\Config\Views\DeviceBatch\Show.cshtml"
Write(Html.ActionLinkButton("Export Devices", MVC.API.DeviceBatch.ExportDevices(Model.DeviceBatch.Id)));
Write(Html.ActionLinkButton("Export Devices", MVC.Device.Export(null, Disco.Models.Services.Devices.Exporting.DeviceExportTypes.Batch, Model.DeviceBatch.Id)));
#line default
#line hidden
#line 666 "..\..\Areas\Config\Views\DeviceBatch\Show.cshtml"
}
if (Authorization.Has(Claims.Device.Search))
{
@@ -250,7 +250,7 @@
{
if (Authorization.Has(Claims.Device.Actions.Export))
{
@Html.ActionLinkButton("Export Devices", MVC.API.DeviceModel.ExportDevices(Model.DeviceModel.Id))
@Html.ActionLinkButton("Export Devices", MVC.Device.Export(null, Disco.Models.Services.Devices.Exporting.DeviceExportTypes.Model, Model.DeviceModel.Id))
}
if (Authorization.Has(Claims.Device.Search))
{
@@ -2,7 +2,7 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.34011
// Runtime Version:4.0.30319.34014
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
@@ -723,14 +723,14 @@ WriteLiteral(" ");
#line hidden
#line 253 "..\..\Areas\Config\Views\DeviceModel\Show.cshtml"
Write(Html.ActionLinkButton("Export Devices", MVC.API.DeviceModel.ExportDevices(Model.DeviceModel.Id)));
Write(Html.ActionLinkButton("Export Devices", MVC.Device.Export(null, Disco.Models.Services.Devices.Exporting.DeviceExportTypes.Model, Model.DeviceModel.Id)));
#line default
#line hidden
#line 253 "..\..\Areas\Config\Views\DeviceModel\Show.cshtml"
}
if (Authorization.Has(Claims.Device.Search))
{
@@ -735,7 +735,7 @@
}
@if (Authorization.Has(Claims.Device.Actions.Export))
{
@Html.ActionLinkButton("Export Devices", MVC.API.DeviceProfile.ExportDevices(Model.DeviceProfile.Id))
@Html.ActionLinkButton("Export Devices", MVC.Device.Export(null, Disco.Models.Services.Devices.Exporting.DeviceExportTypes.Profile, Model.DeviceProfile.Id))
}
@if (Authorization.Has(Claims.Device.Search))
{
@@ -2032,14 +2032,14 @@ WriteLiteral(" ");
#line hidden
#line 738 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml"
Write(Html.ActionLinkButton("Export Devices", MVC.API.DeviceProfile.ExportDevices(Model.DeviceProfile.Id)));
Write(Html.ActionLinkButton("Export Devices", MVC.Device.Export(null, Disco.Models.Services.Devices.Exporting.DeviceExportTypes.Profile, Model.DeviceProfile.Id)));
#line default
#line hidden
#line 738 "..\..\Areas\Config\Views\DeviceProfile\Show.cshtml"
}
+3 -2
View File
@@ -3651,6 +3651,9 @@ a.button:hover {
border: 1px solid #6b6b6b;
background: #9e9e9e;
}
a.button i {
margin-right: 10px;
}
div.actionBar {
margin: 0 -30px 0 -30px;
padding: 10px;
@@ -4123,11 +4126,9 @@ select {
border: 1px solid #ccc;
padding: 2px;
color: #444;
min-width: 200px;
}
select.small {
padding: 0;
min-width: 150px;
}
input[type="submit"],
button {
File diff suppressed because one or more lines are too long
+24
View File
@@ -341,6 +341,30 @@
background-color: #ededed;
border: 1px solid #cccccc;
}
#Devices_Export .Devices_Export_Type_Target {
margin-top: 10px;
display: none;
}
#Devices_Export #Devices_Export_Fields #Devices_Export_Fields_Defaults {
font-size: .75em;
}
#Devices_Export #Devices_Export_Fields th {
font-size: 1.05em;
}
#Devices_Export #Devices_Export_Fields th span {
margin-top: 4px;
font-size: .8em;
}
#Devices_Export_Download_Dialog {
padding-top: 20px;
text-align: center;
}
#Devices_Export_Download_Dialog h4 {
margin-bottom: 30px;
}
#Devices_Export_Download_Dialog a {
margin-bottom: 20px;
}
#deviceImport #ImportFile {
width: 100%;
}
+35
View File
@@ -312,6 +312,41 @@
}
}
#Devices_Export {
.Devices_Export_Type_Target {
margin-top: 10px;
display: none;
}
#Devices_Export_Fields {
#Devices_Export_Fields_Defaults {
font-size: .75em;
}
th {
font-size: 1.05em;
span {
margin-top: 4px;
font-size: .8em;
}
}
}
}
#Devices_Export_Download_Dialog {
padding-top: 20px;
text-align: center;
h4 {
margin-bottom: 30px;
}
a {
margin-bottom: 20px;
}
}
#deviceImport {
#ImportFile {
width: 100%;
File diff suppressed because one or more lines are too long
+3 -2
View File
@@ -474,6 +474,9 @@ a.button:hover {
border: 1px solid #6b6b6b;
background: #9e9e9e;
}
a.button i {
margin-right: 10px;
}
div.actionBar {
margin: 0 -30px 0 -30px;
padding: 10px;
@@ -946,11 +949,9 @@ select {
border: 1px solid #ccc;
padding: 2px;
color: #444;
min-width: 200px;
}
select.small {
padding: 0;
min-width: 150px;
}
input[type="submit"],
button {
+4 -2
View File
@@ -422,6 +422,10 @@ a {
border: 1px solid @ButtonBorderHoverColour;
background: @ButtonHoverColour;
}
i {
margin-right: 10px;
}
}
div.actionBar {
@@ -901,12 +905,10 @@ select {
border: 1px solid #ccc;
padding: 2px;
color: #444;
min-width: 200px;
}
select.small {
padding: 0;
min-width: 150px;
}
input[type="submit"], button {
File diff suppressed because one or more lines are too long
+35 -2
View File
@@ -1,5 +1,6 @@
using Disco.BI.Extensions;
using Disco.Models.Repository;
using Disco.Models.Services.Devices.Exporting;
using Disco.Models.Services.Jobs.JobLists;
using Disco.Models.UI.Device;
using Disco.Services;
@@ -9,6 +10,8 @@ using Disco.Services.Plugins.Features.UIExtension;
using Disco.Services.Users;
using Disco.Services.Web;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web.Mvc;
@@ -37,10 +40,10 @@ namespace Disco.Web.Controllers
{
DefaultDeviceProfileId = Database.DiscoConfiguration.DeviceProfiles.DefaultAddDeviceOfflineDeviceProfileId
};
if (Authorization.Has(Claims.Device.Properties.DeviceBatch))
m.DeviceBatches = Database.DeviceBatches.ToList();
if (Authorization.Has(Claims.Device.Properties.DeviceProfile))
{
m.DeviceProfiles = Database.DeviceProfiles.ToList();
@@ -81,6 +84,36 @@ namespace Disco.Web.Controllers
}
#endregion
#region Export
[DiscoAuthorizeAny(Claims.Device.Actions.Export), HttpGet]
public virtual ActionResult Export(string DownloadId, DeviceExportTypes? ExportType, int? ExportTypeTargetId)
{
var m = new Models.Device.ExportModel()
{
Options = Database.DiscoConfiguration.Devices.LastExportOptions,
DeviceBatches = Database.DeviceBatches.OrderBy(db => db.Name).Select(db => new { Key = db.Id, Value = db.Name }).ToList().Select(i => new KeyValuePair<int, string>(i.Key, i.Value)),
DeviceModels = Database.DeviceModels.OrderBy(dm => dm.Description).Select(dm => new { Key = dm.Id, Value = dm.Description }).ToList().Select(i => new KeyValuePair<int, string>(i.Key, i.Value)),
DeviceProfiles = Database.DeviceProfiles.OrderBy(dp => dp.Name).Select(dp => new { Key = dp.Id, Value = dp.Name }).ToList().Select(i => new KeyValuePair<int, string>(i.Key, i.Value))
};
if (!string.IsNullOrWhiteSpace(DownloadId))
m.DownloadExportSessionId = DownloadId;
if (ExportType.HasValue && ExportTypeTargetId.HasValue)
{
m.Options.ExportType = ExportType.Value;
m.Options.ExportTypeTargetId = ExportTypeTargetId.Value;
}
// UI Extensions
UIExtensions.ExecuteExtensions<DeviceExportModel>(this.ControllerContext, m);
return View(m);
}
#endregion
#region Import/Export
[DiscoAuthorizeAny(Claims.Device.Actions.Import, Claims.Device.Actions.Export), HttpGet]
public virtual ActionResult ImportExport()
+11 -1
View File
@@ -544,7 +544,13 @@
<DesignTime>True</DesignTime>
</Compile>
<Compile Include="Extensions\T4MVCExtensions.cs" />
<Compile Include="Models\Device\ExportModel.cs" />
<Compile Include="Models\InitialConfig\AdministratorsModel.cs" />
<Compile Include="Views\Device\Export.generated.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>Export.cshtml</DependentUpon>
</Compile>
<Compile Include="Views\InitialConfig\Administrators.generated.cs">
<DependentUpon>Administrators.cshtml</DependentUpon>
<AutoGen>True</AutoGen>
@@ -1544,6 +1550,10 @@
<Generator>RazorGenerator</Generator>
<LastGenOutput>_Subject.generated.cs</LastGenOutput>
</None>
<None Include="Views\Device\Export.cshtml">
<Generator>RazorGenerator</Generator>
<LastGenOutput>Export.generated.cs</LastGenOutput>
</None>
<None Include="Views\Device\ImportExport.cshtml">
<Generator>RazorGenerator</Generator>
<LastGenOutput>ImportExport.generated.cs</LastGenOutput>
@@ -2053,7 +2063,7 @@
<SaveServerSettingsInUserFile>False</SaveServerSettingsInUserFile>
</WebProjectProperties>
</FlavorProperties>
<UserProperties BuildVersion_UpdateFileVersion="True" BuildVersion_UpdateAssemblyVersion="True" BuildVersion_BuildVersioningStyle="None.DeltaBaseYear.MonthAndDayStamp.TimeStamp" BuildVersion_DetectChanges="False" BuildVersion_UseGlobalSettings="False" BuildVersion_BuildAction="Both" BuildVersion_StartDate="2011/7/1" />
<UserProperties BuildVersion_StartDate="2011/7/1" BuildVersion_BuildAction="Both" BuildVersion_UseGlobalSettings="False" BuildVersion_DetectChanges="False" BuildVersion_BuildVersioningStyle="None.DeltaBaseYear.MonthAndDayStamp.TimeStamp" BuildVersion_UpdateAssemblyVersion="True" BuildVersion_UpdateFileVersion="True" />
</VisualStudio>
</ProjectExtensions>
<Import Project="$(SolutionDir)\.nuget\nuget.targets" />
+17
View File
@@ -0,0 +1,17 @@
using Disco.Models.Services.Devices.Exporting;
using Disco.Models.UI.Device;
using System.Collections.Generic;
namespace Disco.Web.Models.Device
{
public class ExportModel : DeviceExportModel
{
public DeviceExportOptions Options { get; set; }
public string DownloadExportSessionId { get; set; }
public IEnumerable<KeyValuePair<int, string>> DeviceBatches { get; set; }
public IEnumerable<KeyValuePair<int, string>> DeviceModels { get; set; }
public IEnumerable<KeyValuePair<int, string>> DeviceProfiles { get; set; }
}
}
+2
View File
@@ -2,12 +2,14 @@
using Disco.Models.Services.Jobs.JobLists;
using Disco.Models.UI.Search;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
namespace Disco.Web.Models.Search
{
public class QueryModel : SearchQueryModel
{
public string FriendlyTerm { get; set; }
[Required, MinLength(2)]
public string Term { get; set; }
public bool Success { get; set; }
public string ErrorMessage { get; set; }
+79 -84
View File
@@ -881,6 +881,12 @@ namespace Disco.Web.Controllers
return RedirectToRoutePermanent(callInfo.RouteValueDictionary);
}
[NonAction]
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
public virtual System.Web.Mvc.ActionResult Export()
{
return new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.Export);
}
[NonAction]
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
public virtual System.Web.Mvc.ActionResult ImportReview()
@@ -911,6 +917,7 @@ namespace Disco.Web.Controllers
{
public readonly string Index = "Index";
public readonly string AddOffline = "AddOffline";
public readonly string Export = "Export";
public readonly string ImportExport = "ImportExport";
public readonly string ImportReview = "ImportReview";
public readonly string Show = "Show";
@@ -921,6 +928,7 @@ namespace Disco.Web.Controllers
{
public const string Index = "Index";
public const string AddOffline = "AddOffline";
public const string Export = "Export";
public const string ImportExport = "ImportExport";
public const string ImportReview = "ImportReview";
public const string Show = "Show";
@@ -935,6 +943,16 @@ namespace Disco.Web.Controllers
{
public readonly string m = "m";
}
static readonly ActionParamsClass_Export s_params_Export = new ActionParamsClass_Export();
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
public ActionParamsClass_Export ExportParams { get { return s_params_Export; } }
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
public class ActionParamsClass_Export
{
public readonly string DownloadId = "DownloadId";
public readonly string ExportType = "ExportType";
public readonly string ExportTypeTargetId = "ExportTypeTargetId";
}
static readonly ActionParamsClass_ImportReview s_params_ImportReview = new ActionParamsClass_ImportReview();
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
public ActionParamsClass_ImportReview ImportReviewParams { get { return s_params_ImportReview; } }
@@ -964,6 +982,7 @@ namespace Disco.Web.Controllers
public readonly string _DeviceTable = "_DeviceTable";
public readonly string _ViewStart = "_ViewStart";
public readonly string AddOffline = "AddOffline";
public readonly string Export = "Export";
public readonly string ImportExport = "ImportExport";
public readonly string ImportReview = "ImportReview";
public readonly string Index = "Index";
@@ -972,6 +991,7 @@ namespace Disco.Web.Controllers
public readonly string _DeviceTable = "~/Views/Device/_DeviceTable.cshtml";
public readonly string _ViewStart = "~/Views/Device/_ViewStart.cshtml";
public readonly string AddOffline = "~/Views/Device/AddOffline.cshtml";
public readonly string Export = "~/Views/Device/Export.cshtml";
public readonly string ImportExport = "~/Views/Device/ImportExport.cshtml";
public readonly string ImportReview = "~/Views/Device/ImportReview.cshtml";
public readonly string Index = "~/Views/Device/Index.cshtml";
@@ -1035,6 +1055,18 @@ namespace Disco.Web.Controllers
return callInfo;
}
partial void ExportOverride(T4MVC_System_Web_Mvc_ActionResult callInfo, string DownloadId, Disco.Models.Services.Devices.Exporting.DeviceExportTypes? ExportType, int? ExportTypeTargetId);
public override System.Web.Mvc.ActionResult Export(string DownloadId, Disco.Models.Services.Devices.Exporting.DeviceExportTypes? ExportType, int? ExportTypeTargetId)
{
var callInfo = new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.Export);
ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "DownloadId", DownloadId);
ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "ExportType", ExportType);
ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "ExportTypeTargetId", ExportTypeTargetId);
ExportOverride(callInfo, DownloadId, ExportType, ExportTypeTargetId);
return callInfo;
}
partial void ImportExportOverride(T4MVC_System_Web_Mvc_ActionResult callInfo);
public override System.Web.Mvc.ActionResult ImportExport()
@@ -2822,12 +2854,6 @@ namespace Disco.Web.Areas.API.Controllers
{
return new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.Index);
}
[NonAction]
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
public virtual System.Web.Mvc.ActionResult ExportDevices()
{
return new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.ExportDevices);
}
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
public DeviceBatchController Actions { get { return MVC.API.DeviceBatch; } }
@@ -2862,7 +2888,6 @@ namespace Disco.Web.Areas.API.Controllers
public readonly string Delete = "Delete";
public readonly string Index = "Index";
public readonly string Timeline = "Timeline";
public readonly string ExportDevices = "ExportDevices";
}
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
@@ -2886,7 +2911,6 @@ namespace Disco.Web.Areas.API.Controllers
public const string Delete = "Delete";
public const string Index = "Index";
public const string Timeline = "Timeline";
public const string ExportDevices = "ExportDevices";
}
@@ -3058,14 +3082,6 @@ namespace Disco.Web.Areas.API.Controllers
{
public readonly string id = "id";
}
static readonly ActionParamsClass_ExportDevices s_params_ExportDevices = new ActionParamsClass_ExportDevices();
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
public ActionParamsClass_ExportDevices ExportDevicesParams { get { return s_params_ExportDevices; } }
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
public class ActionParamsClass_ExportDevices
{
public readonly string id = "id";
}
static readonly ViewsClass s_views = new ViewsClass();
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
public ViewsClass Views { get { return s_views; } }
@@ -3296,16 +3312,6 @@ namespace Disco.Web.Areas.API.Controllers
return callInfo;
}
partial void ExportDevicesOverride(T4MVC_System_Web_Mvc_ActionResult callInfo, int id);
public override System.Web.Mvc.ActionResult ExportDevices(int id)
{
var callInfo = new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.ExportDevices);
ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "id", id);
ExportDevicesOverride(callInfo, id);
return callInfo;
}
}
}
@@ -3555,6 +3561,18 @@ namespace Disco.Web.Areas.API.Controllers
{
return new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.ImportProcess);
}
[NonAction]
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
public virtual System.Web.Mvc.ActionResult Export()
{
return new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.Export);
}
[NonAction]
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
public virtual System.Web.Mvc.ActionResult ExportRetrieve()
{
return new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.ExportRetrieve);
}
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
public DeviceController Actions { get { return MVC.API.Device; } }
@@ -3592,7 +3610,8 @@ namespace Disco.Web.Areas.API.Controllers
public readonly string AttachmentRemove = "AttachmentRemove";
public readonly string ImportParse = "ImportParse";
public readonly string ImportProcess = "ImportProcess";
public readonly string ExportAllDevices = "ExportAllDevices";
public readonly string Export = "Export";
public readonly string ExportRetrieve = "ExportRetrieve";
public readonly string MigrateDeviceMacAddressesFromLog = "MigrateDeviceMacAddressesFromLog";
}
@@ -3620,7 +3639,8 @@ namespace Disco.Web.Areas.API.Controllers
public const string AttachmentRemove = "AttachmentRemove";
public const string ImportParse = "ImportParse";
public const string ImportProcess = "ImportProcess";
public const string ExportAllDevices = "ExportAllDevices";
public const string Export = "Export";
public const string ExportRetrieve = "ExportRetrieve";
public const string MigrateDeviceMacAddressesFromLog = "MigrateDeviceMacAddressesFromLog";
}
@@ -3817,6 +3837,22 @@ namespace Disco.Web.Areas.API.Controllers
{
public readonly string ParseTaskSessionKey = "ParseTaskSessionKey";
}
static readonly ActionParamsClass_Export s_params_Export = new ActionParamsClass_Export();
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
public ActionParamsClass_Export ExportParams { get { return s_params_Export; } }
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
public class ActionParamsClass_Export
{
public readonly string Model = "Model";
}
static readonly ActionParamsClass_ExportRetrieve s_params_ExportRetrieve = new ActionParamsClass_ExportRetrieve();
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
public ActionParamsClass_ExportRetrieve ExportRetrieveParams { get { return s_params_ExportRetrieve; } }
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
public class ActionParamsClass_ExportRetrieve
{
public readonly string Id = "Id";
}
static readonly ViewsClass s_views = new ViewsClass();
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
public ViewsClass Views { get { return s_views; } }
@@ -4070,12 +4106,23 @@ namespace Disco.Web.Areas.API.Controllers
return callInfo;
}
partial void ExportAllDevicesOverride(T4MVC_System_Web_Mvc_ActionResult callInfo);
partial void ExportOverride(T4MVC_System_Web_Mvc_ActionResult callInfo, Disco.Web.Models.Device.ExportModel Model);
public override System.Web.Mvc.ActionResult ExportAllDevices()
public override System.Web.Mvc.ActionResult Export(Disco.Web.Models.Device.ExportModel Model)
{
var callInfo = new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.ExportAllDevices);
ExportAllDevicesOverride(callInfo);
var callInfo = new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.Export);
ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "Model", Model);
ExportOverride(callInfo, Model);
return callInfo;
}
partial void ExportRetrieveOverride(T4MVC_System_Web_Mvc_ActionResult callInfo, string Id);
public override System.Web.Mvc.ActionResult ExportRetrieve(string Id)
{
var callInfo = new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.ExportRetrieve);
ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "Id", Id);
ExportRetrieveOverride(callInfo, Id);
return callInfo;
}
@@ -4181,12 +4228,6 @@ namespace Disco.Web.Areas.API.Controllers
{
return new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.ComponentRemove);
}
[NonAction]
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
public virtual System.Web.Mvc.ActionResult ExportDevices()
{
return new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.ExportDevices);
}
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
public DeviceModelController Actions { get { return MVC.API.DeviceModel; } }
@@ -4215,7 +4256,6 @@ namespace Disco.Web.Areas.API.Controllers
public readonly string ComponentUpdate = "ComponentUpdate";
public readonly string ComponentRemove = "ComponentRemove";
public readonly string Index = "Index";
public readonly string ExportDevices = "ExportDevices";
}
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
@@ -4233,7 +4273,6 @@ namespace Disco.Web.Areas.API.Controllers
public const string ComponentUpdate = "ComponentUpdate";
public const string ComponentRemove = "ComponentRemove";
public const string Index = "Index";
public const string ExportDevices = "ExportDevices";
}
@@ -4343,14 +4382,6 @@ namespace Disco.Web.Areas.API.Controllers
{
public readonly string id = "id";
}
static readonly ActionParamsClass_ExportDevices s_params_ExportDevices = new ActionParamsClass_ExportDevices();
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
public ActionParamsClass_ExportDevices ExportDevicesParams { get { return s_params_ExportDevices; } }
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
public class ActionParamsClass_ExportDevices
{
public readonly string id = "id";
}
static readonly ViewsClass s_views = new ViewsClass();
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
public ViewsClass Views { get { return s_views; } }
@@ -4517,16 +4548,6 @@ namespace Disco.Web.Areas.API.Controllers
return callInfo;
}
partial void ExportDevicesOverride(T4MVC_System_Web_Mvc_ActionResult callInfo, int id);
public override System.Web.Mvc.ActionResult ExportDevices(int id)
{
var callInfo = new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.ExportDevices);
ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "id", id);
ExportDevicesOverride(callInfo, id);
return callInfo;
}
}
}
@@ -4656,12 +4677,6 @@ namespace Disco.Web.Areas.API.Controllers
{
return new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.DefaultAddDeviceOffline);
}
[NonAction]
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
public virtual System.Web.Mvc.ActionResult ExportDevices()
{
return new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.ExportDevices);
}
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
public DeviceProfileController Actions { get { return MVC.API.DeviceProfile; } }
@@ -4695,7 +4710,6 @@ namespace Disco.Web.Areas.API.Controllers
public readonly string Delete = "Delete";
public readonly string Default = "Default";
public readonly string DefaultAddDeviceOffline = "DefaultAddDeviceOffline";
public readonly string ExportDevices = "ExportDevices";
}
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
@@ -4718,7 +4732,6 @@ namespace Disco.Web.Areas.API.Controllers
public const string Delete = "Delete";
public const string Default = "Default";
public const string DefaultAddDeviceOffline = "DefaultAddDeviceOffline";
public const string ExportDevices = "ExportDevices";
}
@@ -4890,14 +4903,6 @@ namespace Disco.Web.Areas.API.Controllers
public readonly string id = "id";
public readonly string redirect = "redirect";
}
static readonly ActionParamsClass_ExportDevices s_params_ExportDevices = new ActionParamsClass_ExportDevices();
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
public ActionParamsClass_ExportDevices ExportDevicesParams { get { return s_params_ExportDevices; } }
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
public class ActionParamsClass_ExportDevices
{
public readonly string id = "id";
}
static readonly ViewsClass s_views = new ViewsClass();
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
public ViewsClass Views { get { return s_views; } }
@@ -5119,16 +5124,6 @@ namespace Disco.Web.Areas.API.Controllers
return callInfo;
}
partial void ExportDevicesOverride(T4MVC_System_Web_Mvc_ActionResult callInfo, int id);
public override System.Web.Mvc.ActionResult ExportDevices(int id)
{
var callInfo = new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.ExportDevices);
ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "id", id);
ExportDevicesOverride(callInfo, id);
return callInfo;
}
}
}
@@ -673,11 +673,11 @@
</div>
<div>
<ul class="none">
@foreach (Device.DecommissionReasons decommissionReason in Enum.GetValues(typeof(Device.DecommissionReasons)))
@foreach (DecommissionReasons decommissionReason in Enum.GetValues(typeof(DecommissionReasons)))
{
<li>
<input type="radio" id="Device_Show_Device_Actions_Decommission_Reason_@((int)decommissionReason)"
name="Device_Show_Device_Actions_Decommission_Reason" value="@((int)decommissionReason)" @((decommissionReason == Device.DecommissionReasons.EndOfLife) ? "checked=\"checked\"" : string.Empty)/>
name="Device_Show_Device_Actions_Decommission_Reason" value="@((int)decommissionReason)" @((decommissionReason == DecommissionReasons.EndOfLife) ? "checked=\"checked\"" : string.Empty)/>
<label for="Device_Show_Device_Actions_Decommission_Reason_@((int)decommissionReason)">@(decommissionReason.ReasonMessage())</label>
</li>
}
@@ -2304,7 +2304,7 @@ WriteLiteral(">\r\n");
#line hidden
#line 676 "..\..\Views\Device\DeviceParts\_Subject.cshtml"
foreach (Device.DecommissionReasons decommissionReason in Enum.GetValues(typeof(Device.DecommissionReasons)))
foreach (DecommissionReasons decommissionReason in Enum.GetValues(typeof(DecommissionReasons)))
{
@@ -2314,50 +2314,50 @@ WriteLiteral(" <li>\r\n
WriteLiteral(" type=\"radio\"");
WriteAttribute("id", Tuple.Create(" id=\"", 41943), Tuple.Create("\"", 42021)
, Tuple.Create(Tuple.Create("", 41948), Tuple.Create("Device_Show_Device_Actions_Decommission_Reason_", 41948), true)
WriteAttribute("id", Tuple.Create(" id=\"", 41929), Tuple.Create("\"", 42007)
, Tuple.Create(Tuple.Create("", 41934), Tuple.Create("Device_Show_Device_Actions_Decommission_Reason_", 41934), true)
#line 679 "..\..\Views\Device\DeviceParts\_Subject.cshtml"
, Tuple.Create(Tuple.Create("", 41995), Tuple.Create<System.Object, System.Int32>((int)decommissionReason
, Tuple.Create(Tuple.Create("", 41981), Tuple.Create<System.Object, System.Int32>((int)decommissionReason
#line default
#line hidden
, 41995), false)
, 41981), false)
);
WriteLiteral("\r\n name=\"Device_Show_Device_Actions_Decomm" +
"ission_Reason\"");
WriteAttribute("value", Tuple.Create(" value=\"", 42117), Tuple.Create("\"", 42151)
WriteAttribute("value", Tuple.Create(" value=\"", 42103), Tuple.Create("\"", 42137)
#line 680 "..\..\Views\Device\DeviceParts\_Subject.cshtml"
, Tuple.Create(Tuple.Create("", 42125), Tuple.Create<System.Object, System.Int32>((int)decommissionReason
, Tuple.Create(Tuple.Create("", 42111), Tuple.Create<System.Object, System.Int32>((int)decommissionReason
#line default
#line hidden
, 42125), false)
, 42111), false)
);
WriteLiteral(" ");
#line 680 "..\..\Views\Device\DeviceParts\_Subject.cshtml"
Write((decommissionReason == Device.DecommissionReasons.EndOfLife) ? "checked=\"checked\"" : string.Empty);
Write((decommissionReason == DecommissionReasons.EndOfLife) ? "checked=\"checked\"" : string.Empty);
#line default
#line hidden
WriteLiteral("/>\r\n <label");
WriteAttribute("for", Tuple.Create(" for=\"", 42301), Tuple.Create("\"", 42380)
, Tuple.Create(Tuple.Create("", 42307), Tuple.Create("Device_Show_Device_Actions_Decommission_Reason_", 42307), true)
WriteAttribute("for", Tuple.Create(" for=\"", 42280), Tuple.Create("\"", 42359)
, Tuple.Create(Tuple.Create("", 42286), Tuple.Create("Device_Show_Device_Actions_Decommission_Reason_", 42286), true)
#line 681 "..\..\Views\Device\DeviceParts\_Subject.cshtml"
, Tuple.Create(Tuple.Create("", 42354), Tuple.Create<System.Object, System.Int32>((int)decommissionReason
, Tuple.Create(Tuple.Create("", 42333), Tuple.Create<System.Object, System.Int32>((int)decommissionReason
#line default
#line hidden
, 42354), false)
, 42333), false)
);
WriteLiteral(">");
+150
View File
@@ -0,0 +1,150 @@
@using Disco.Web.Models.Device;
@using Disco.Models.Services.Devices;
@model ExportModel
@{
Authorization.RequireAny(Claims.Device.Actions.Export);
ViewBag.Title = Html.ToBreadcrumb("Devices", MVC.Device.Index(), "Export Devices");
var optionsMetadata = ModelMetadata.FromLambdaExpression(m => m.Options, ViewData);
var optionGroups = optionsMetadata.Properties.Where(p => p.ShortDisplayName != null && p.ModelType == typeof(bool))
.GroupBy(m => m.ShortDisplayName);
}
<div id="Devices_Export">
@if (!string.IsNullOrEmpty(Model.DownloadExportSessionId))
{
<div id="Devices_Export_Download_Dialog" class="dialog" title="Export Devices">
<h4>The Device Export was completed successfully.</h4>
<a href="@Url.Action(MVC.API.Device.ExportRetrieve(Model.DownloadExportSessionId))" class="button"><i class="fa fa-download fa-lg"></i>Download Device Export</a>
</div>
<script>
$(function () {
$('#Devices_Export_Download_Dialog')
.dialog({
width: 400,
resizable: false,
modal: true,
autoOpen: true
});
});
</script>
}
@using (Html.BeginForm(MVC.API.Device.Export()))
{
<div id="Devices_Export_Type" class="form" style="width: 530px">
<h2>Export Type</h2>
<table>
<tr>
<th style="width: 150px">Type:
</th>
<td>
@Html.DropDownListFor(m => m.Options.ExportType, Enum.GetNames(typeof(Disco.Models.Services.Devices.Exporting.DeviceExportTypes)).Select(t => new SelectListItem() { Text = t, Value = t }))
<div id="Devices_Export_Type_Target_Batch" class="Devices_Export_Type_Target">
@Html.DropDownListFor(m => m.Options.ExportTypeTargetId, Model.DeviceBatches.Select(i => new SelectListItem() { Value = i.Key.ToString(), Text = i.Value }))
</div>
<div id="Devices_Export_Type_Target_Model" class="Devices_Export_Type_Target">
@Html.DropDownListFor(m => m.Options.ExportTypeTargetId, Model.DeviceModels.Select(i => new SelectListItem() { Value = i.Key.ToString(), Text = i.Value }))
</div>
<div id="Devices_Export_Type_Target_Profile" class="Devices_Export_Type_Target">
@Html.DropDownListFor(m => m.Options.ExportTypeTargetId, Model.DeviceProfiles.Select(i => new SelectListItem() { Value = i.Key.ToString(), Text = i.Value }))
</div>
</td>
</tr>
</table>
</div>
<div id="Devices_Export_Fields" class="form" style="width: 530px; margin-top: 15px;">
<h2>Export Fields <a id="Devices_Export_Fields_Defaults" href="#">(Defaults)</a></h2>
<table>
@foreach (var optionGroup in optionGroups)
{
var optionFields = optionGroup.ToList();
var itemsPerColumn = (int)Math.Ceiling((double)optionFields.Count / 2);
<tr>
<th style="width: 120px;">
@optionGroup.Key
@if (optionFields.Count > 2)
{
<span style="display: block;" class="select"><a class="selectAll" href="#">ALL</a> | <a class="selectNone" href="#">NONE</a></span>
}
</th>
<td>
<div class="Devices_Export_Fields_Group">
<table class="none">
<tr>
<td style="width: 50%">
<ul class="none">
@foreach (var optionItem in optionFields.Take(itemsPerColumn))
{
<li title="@optionItem.Description">
<input type="checkbox" id="Options_@optionItem.PropertyName" name="Options.@optionItem.PropertyName" value="true" @(((bool)optionItem.Model) ? "checked " : null)/><label for="Options_@optionItem.PropertyName">@optionItem.DisplayName</label></li>
}
</ul>
</td>
<td style="width: 50%">
<ul class="none">
@foreach (var optionItem in optionFields.Skip(itemsPerColumn))
{
<li title="@optionItem.Description">
<input type="checkbox" id="Options_@optionItem.PropertyName" name="Options.@optionItem.PropertyName" value="true" @(((bool)optionItem.Model) ? "checked " : null)/><label for="Options_@optionItem.PropertyName">@optionItem.DisplayName</label></li>
}
</ul>
</td>
</tr>
</table>
</div>
</td>
</tr>
}
</table>
</div>
<script>
$(function () {
exportDefaultFields = ['DeviceSerialNumber', 'ModelId', 'ProfileId', 'BatchId', 'AssignedUserId', 'DeviceLocation', 'DeviceAssetNumber'];
$exportFields = $('#Devices_Export_Fields');
$exportType = $('#Options_ExportType');
$exportTypeTargetContainers = $('#Devices_Export_Type').find('.Devices_Export_Type_Target');
function exportTypeChange() {
$exportTypeTargetContainers.hide();
$exportTypeTargetContainers.find('select').prop('disabled', true);
switch ($exportType.val()) {
case 'Batch':
$('#Devices_Export_Type_Target_Batch').show().find('select').prop('disabled', false);
break;
case 'Profile':
$('#Devices_Export_Type_Target_Profile').show().find('select').prop('disabled', false);
break;
case 'Model':
$('#Devices_Export_Type_Target_Model').show().find('select').prop('disabled', false);
break;
}
}
$exportType.change(exportTypeChange);
exportTypeChange();
$exportFields.on('click', 'a.selectAll,a.selectNone', function () {
$this = $(this);
$this.closest('tr').find('input').prop('checked', $this.is('.selectAll'));
return false;
});
$('#Devices_Export_Fields_Defaults').click(function () {
$exportFields.find('input').prop('checked', false);
$.each(exportDefaultFields, function (index, value) {
$('#Options_' + value).prop('checked', true);
});
return false;
});
});
</script>
<div class="actionBar">
<input type="submit" class="button" value="Export Devices" />
</div>
}
</div>
+611
View File
@@ -0,0 +1,611 @@
#pragma warning disable 1591
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.34014
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace Disco.Web.Views.Device
{
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.BI.Extensions;
using Disco.Models.Repository;
#line 2 "..\..\Views\Device\Export.cshtml"
using Disco.Models.Services.Devices;
#line default
#line hidden
using Disco.Services;
using Disco.Services.Authorization;
using Disco.Services.Web;
using Disco.Web;
using Disco.Web.Extensions;
#line 1 "..\..\Views\Device\Export.cshtml"
using Disco.Web.Models.Device;
#line default
#line hidden
[System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")]
[System.Web.WebPages.PageVirtualPathAttribute("~/Views/Device/Export.cshtml")]
public partial class Export : Disco.Services.Web.WebViewPage<ExportModel>
{
public Export()
{
}
public override void Execute()
{
#line 4 "..\..\Views\Device\Export.cshtml"
Authorization.RequireAny(Claims.Device.Actions.Export);
ViewBag.Title = Html.ToBreadcrumb("Devices", MVC.Device.Index(), "Export Devices");
var optionsMetadata = ModelMetadata.FromLambdaExpression(m => m.Options, ViewData);
var optionGroups = optionsMetadata.Properties.Where(p => p.ShortDisplayName != null && p.ModelType == typeof(bool))
.GroupBy(m => m.ShortDisplayName);
#line default
#line hidden
WriteLiteral("\r\n<div");
WriteLiteral(" id=\"Devices_Export\"");
WriteLiteral(">\r\n");
#line 14 "..\..\Views\Device\Export.cshtml"
#line default
#line hidden
#line 14 "..\..\Views\Device\Export.cshtml"
if (!string.IsNullOrEmpty(Model.DownloadExportSessionId))
{
#line default
#line hidden
WriteLiteral(" <div");
WriteLiteral(" id=\"Devices_Export_Download_Dialog\"");
WriteLiteral(" class=\"dialog\"");
WriteLiteral(" title=\"Export Devices\"");
WriteLiteral(">\r\n <h4>The Device Export was completed successfully.</h4>\r\n " +
" <a");
WriteAttribute("href", Tuple.Create(" href=\"", 776), Tuple.Create("\"", 856)
#line 18 "..\..\Views\Device\Export.cshtml"
, Tuple.Create(Tuple.Create("", 783), Tuple.Create<System.Object, System.Int32>(Url.Action(MVC.API.Device.ExportRetrieve(Model.DownloadExportSessionId))
#line default
#line hidden
, 783), false)
);
WriteLiteral(" class=\"button\"");
WriteLiteral("><i");
WriteLiteral(" class=\"fa fa-download fa-lg\"");
WriteLiteral("></i>Download Device Export</a>\r\n </div>\r\n");
WriteLiteral(@" <script>
$(function () {
$('#Devices_Export_Download_Dialog')
.dialog({
width: 400,
resizable: false,
modal: true,
autoOpen: true
});
});
</script>
");
#line 31 "..\..\Views\Device\Export.cshtml"
}
#line default
#line hidden
WriteLiteral(" ");
#line 32 "..\..\Views\Device\Export.cshtml"
using (Html.BeginForm(MVC.API.Device.Export()))
{
#line default
#line hidden
WriteLiteral(" <div");
WriteLiteral(" id=\"Devices_Export_Type\"");
WriteLiteral(" class=\"form\"");
WriteLiteral(" style=\"width: 530px\"");
WriteLiteral(">\r\n <h2>Export Type</h2>\r\n <table>\r\n <tr>\r\n " +
" <th");
WriteLiteral(" style=\"width: 150px\"");
WriteLiteral(">Type:\r\n </th>\r\n <td>\r\n");
WriteLiteral(" ");
#line 41 "..\..\Views\Device\Export.cshtml"
Write(Html.DropDownListFor(m => m.Options.ExportType, Enum.GetNames(typeof(Disco.Models.Services.Devices.Exporting.DeviceExportTypes)).Select(t => new SelectListItem() { Text = t, Value = t })));
#line default
#line hidden
WriteLiteral("\r\n <div");
WriteLiteral(" id=\"Devices_Export_Type_Target_Batch\"");
WriteLiteral(" class=\"Devices_Export_Type_Target\"");
WriteLiteral(">\r\n");
WriteLiteral(" ");
#line 43 "..\..\Views\Device\Export.cshtml"
Write(Html.DropDownListFor(m => m.Options.ExportTypeTargetId, Model.DeviceBatches.Select(i => new SelectListItem() { Value = i.Key.ToString(), Text = i.Value })));
#line default
#line hidden
WriteLiteral("\r\n </div>\r\n <div");
WriteLiteral(" id=\"Devices_Export_Type_Target_Model\"");
WriteLiteral(" class=\"Devices_Export_Type_Target\"");
WriteLiteral(">\r\n");
WriteLiteral(" ");
#line 46 "..\..\Views\Device\Export.cshtml"
Write(Html.DropDownListFor(m => m.Options.ExportTypeTargetId, Model.DeviceModels.Select(i => new SelectListItem() { Value = i.Key.ToString(), Text = i.Value })));
#line default
#line hidden
WriteLiteral("\r\n </div>\r\n <div");
WriteLiteral(" id=\"Devices_Export_Type_Target_Profile\"");
WriteLiteral(" class=\"Devices_Export_Type_Target\"");
WriteLiteral(">\r\n");
WriteLiteral(" ");
#line 49 "..\..\Views\Device\Export.cshtml"
Write(Html.DropDownListFor(m => m.Options.ExportTypeTargetId, Model.DeviceProfiles.Select(i => new SelectListItem() { Value = i.Key.ToString(), Text = i.Value })));
#line default
#line hidden
WriteLiteral("\r\n </div>\r\n </td>\r\n </tr" +
">\r\n </table>\r\n </div>\r\n");
WriteLiteral(" <div");
WriteLiteral(" id=\"Devices_Export_Fields\"");
WriteLiteral(" class=\"form\"");
WriteLiteral(" style=\"width: 530px; margin-top: 15px;\"");
WriteLiteral(">\r\n <h2>Export Fields <a");
WriteLiteral(" id=\"Devices_Export_Fields_Defaults\"");
WriteLiteral(" href=\"#\"");
WriteLiteral(">(Defaults)</a></h2>\r\n <table>\r\n");
#line 58 "..\..\Views\Device\Export.cshtml"
#line default
#line hidden
#line 58 "..\..\Views\Device\Export.cshtml"
foreach (var optionGroup in optionGroups)
{
var optionFields = optionGroup.ToList();
var itemsPerColumn = (int)Math.Ceiling((double)optionFields.Count / 2);
#line default
#line hidden
WriteLiteral(" <tr>\r\n <th");
WriteLiteral(" style=\"width: 120px;\"");
WriteLiteral(">\r\n");
WriteLiteral(" ");
#line 64 "..\..\Views\Device\Export.cshtml"
Write(optionGroup.Key);
#line default
#line hidden
WriteLiteral("\r\n");
#line 65 "..\..\Views\Device\Export.cshtml"
#line default
#line hidden
#line 65 "..\..\Views\Device\Export.cshtml"
if (optionFields.Count > 2)
{
#line default
#line hidden
WriteLiteral(" <span");
WriteLiteral(" style=\"display: block;\"");
WriteLiteral(" class=\"select\"");
WriteLiteral("><a");
WriteLiteral(" class=\"selectAll\"");
WriteLiteral(" href=\"#\"");
WriteLiteral(">ALL</a> | <a");
WriteLiteral(" class=\"selectNone\"");
WriteLiteral(" href=\"#\"");
WriteLiteral(">NONE</a></span>\r\n");
#line 68 "..\..\Views\Device\Export.cshtml"
}
#line default
#line hidden
WriteLiteral(" </th>\r\n <td>\r\n " +
" <div");
WriteLiteral(" class=\"Devices_Export_Fields_Group\"");
WriteLiteral(">\r\n <table");
WriteLiteral(" class=\"none\"");
WriteLiteral(">\r\n <tr>\r\n " +
" <td");
WriteLiteral(" style=\"width: 50%\"");
WriteLiteral(">\r\n <ul");
WriteLiteral(" class=\"none\"");
WriteLiteral(">\r\n");
#line 76 "..\..\Views\Device\Export.cshtml"
#line default
#line hidden
#line 76 "..\..\Views\Device\Export.cshtml"
foreach (var optionItem in optionFields.Take(itemsPerColumn))
{
#line default
#line hidden
WriteLiteral(" <li");
WriteAttribute("title", Tuple.Create(" title=\"", 4330), Tuple.Create("\"", 4361)
#line 78 "..\..\Views\Device\Export.cshtml"
, Tuple.Create(Tuple.Create("", 4338), Tuple.Create<System.Object, System.Int32>(optionItem.Description
#line default
#line hidden
, 4338), false)
);
WriteLiteral(">\r\n <input");
WriteLiteral(" type=\"checkbox\"");
WriteAttribute("id", Tuple.Create(" id=\"", 4443), Tuple.Create("\"", 4480)
, Tuple.Create(Tuple.Create("", 4448), Tuple.Create("Options_", 4448), true)
#line 79 "..\..\Views\Device\Export.cshtml"
, Tuple.Create(Tuple.Create("", 4456), Tuple.Create<System.Object, System.Int32>(optionItem.PropertyName
#line default
#line hidden
, 4456), false)
);
WriteAttribute("name", Tuple.Create(" name=\"", 4481), Tuple.Create("\"", 4520)
, Tuple.Create(Tuple.Create("", 4488), Tuple.Create("Options.", 4488), true)
#line 79 "..\..\Views\Device\Export.cshtml"
, Tuple.Create(Tuple.Create("", 4496), Tuple.Create<System.Object, System.Int32>(optionItem.PropertyName
#line default
#line hidden
, 4496), false)
);
WriteLiteral(" value=\"true\"");
WriteLiteral(" ");
#line 79 "..\..\Views\Device\Export.cshtml"
Write(((bool)optionItem.Model) ? "checked " : null);
#line default
#line hidden
WriteLiteral("/><label");
WriteAttribute("for", Tuple.Create(" for=\"", 4590), Tuple.Create("\"", 4628)
, Tuple.Create(Tuple.Create("", 4596), Tuple.Create("Options_", 4596), true)
#line 79 "..\..\Views\Device\Export.cshtml"
, Tuple.Create(Tuple.Create("", 4604), Tuple.Create<System.Object, System.Int32>(optionItem.PropertyName
#line default
#line hidden
, 4604), false)
);
WriteLiteral(">");
#line 79 "..\..\Views\Device\Export.cshtml"
Write(optionItem.DisplayName);
#line default
#line hidden
WriteLiteral("</label></li>\r\n");
#line 80 "..\..\Views\Device\Export.cshtml"
}
#line default
#line hidden
WriteLiteral(" </ul>\r\n " +
" </td>\r\n <td");
WriteLiteral(" style=\"width: 50%\"");
WriteLiteral(">\r\n <ul");
WriteLiteral(" class=\"none\"");
WriteLiteral(">\r\n");
#line 85 "..\..\Views\Device\Export.cshtml"
#line default
#line hidden
#line 85 "..\..\Views\Device\Export.cshtml"
foreach (var optionItem in optionFields.Skip(itemsPerColumn))
{
#line default
#line hidden
WriteLiteral(" <li");
WriteAttribute("title", Tuple.Create(" title=\"", 5163), Tuple.Create("\"", 5194)
#line 87 "..\..\Views\Device\Export.cshtml"
, Tuple.Create(Tuple.Create("", 5171), Tuple.Create<System.Object, System.Int32>(optionItem.Description
#line default
#line hidden
, 5171), false)
);
WriteLiteral(">\r\n <input");
WriteLiteral(" type=\"checkbox\"");
WriteAttribute("id", Tuple.Create(" id=\"", 5276), Tuple.Create("\"", 5313)
, Tuple.Create(Tuple.Create("", 5281), Tuple.Create("Options_", 5281), true)
#line 88 "..\..\Views\Device\Export.cshtml"
, Tuple.Create(Tuple.Create("", 5289), Tuple.Create<System.Object, System.Int32>(optionItem.PropertyName
#line default
#line hidden
, 5289), false)
);
WriteAttribute("name", Tuple.Create(" name=\"", 5314), Tuple.Create("\"", 5353)
, Tuple.Create(Tuple.Create("", 5321), Tuple.Create("Options.", 5321), true)
#line 88 "..\..\Views\Device\Export.cshtml"
, Tuple.Create(Tuple.Create("", 5329), Tuple.Create<System.Object, System.Int32>(optionItem.PropertyName
#line default
#line hidden
, 5329), false)
);
WriteLiteral(" value=\"true\"");
WriteLiteral(" ");
#line 88 "..\..\Views\Device\Export.cshtml"
Write(((bool)optionItem.Model) ? "checked " : null);
#line default
#line hidden
WriteLiteral("/><label");
WriteAttribute("for", Tuple.Create(" for=\"", 5423), Tuple.Create("\"", 5461)
, Tuple.Create(Tuple.Create("", 5429), Tuple.Create("Options_", 5429), true)
#line 88 "..\..\Views\Device\Export.cshtml"
, Tuple.Create(Tuple.Create("", 5437), Tuple.Create<System.Object, System.Int32>(optionItem.PropertyName
#line default
#line hidden
, 5437), false)
);
WriteLiteral(">");
#line 88 "..\..\Views\Device\Export.cshtml"
Write(optionItem.DisplayName);
#line default
#line hidden
WriteLiteral("</label></li>\r\n");
#line 89 "..\..\Views\Device\Export.cshtml"
}
#line default
#line hidden
WriteLiteral(@" </ul>
</td>
</tr>
</table>
</div>
</td>
</tr>
");
#line 97 "..\..\Views\Device\Export.cshtml"
}
#line default
#line hidden
WriteLiteral(" </table>\r\n </div>\r\n");
WriteLiteral(" <script>\r\n $(function () {\r\n exportDefaultField" +
"s = [\'DeviceSerialNumber\', \'ModelId\', \'ProfileId\', \'BatchId\', \'AssignedUserId\', " +
"\'DeviceLocation\', \'DeviceAssetNumber\'];\r\n $exportFields = $(\'#Dev" +
"ices_Export_Fields\');\r\n $exportType = $(\'#Options_ExportType\');\r\n" +
" $exportTypeTargetContainers = $(\'#Devices_Export_Type\').find(\'.D" +
"evices_Export_Type_Target\');\r\n\r\n function exportTypeChange() {\r\n " +
" $exportTypeTargetContainers.hide();\r\n $exp" +
"ortTypeTargetContainers.find(\'select\').prop(\'disabled\', true);\r\n\r\n " +
" switch ($exportType.val()) {\r\n case \'Batch\':\r\n " +
" $(\'#Devices_Export_Type_Target_Batch\').show().find(\'selec" +
"t\').prop(\'disabled\', false);\r\n break;\r\n " +
" case \'Profile\':\r\n $(\'#Devices_Export_Type_T" +
"arget_Profile\').show().find(\'select\').prop(\'disabled\', false);\r\n " +
" break;\r\n case \'Model\':\r\n " +
" $(\'#Devices_Export_Type_Target_Model\').show().find(\'select\').prop(\'disabl" +
"ed\', false);\r\n break;\r\n }\r\n " +
" }\r\n $exportType.change(exportTypeChange);\r\n " +
" exportTypeChange();\r\n\r\n $exportFields.on(\'click\', \'a.selectAll" +
",a.selectNone\', function () {\r\n $this = $(this);\r\n\r\n " +
" $this.closest(\'tr\').find(\'input\').prop(\'checked\', $this.is(\'.selectAl" +
"l\'));\r\n\r\n return false;\r\n });\r\n\r\n " +
" $(\'#Devices_Export_Fields_Defaults\').click(function () {\r\n\r\n " +
" $exportFields.find(\'input\').prop(\'checked\', false);\r\n\r\n $." +
"each(exportDefaultFields, function (index, value) {\r\n $(\'" +
"#Options_\' + value).prop(\'checked\', true);\r\n });\r\n\r\n " +
" return false;\r\n });\r\n });\r\n </script" +
">\r\n");
WriteLiteral(" <div");
WriteLiteral(" class=\"actionBar\"");
WriteLiteral(">\r\n <input");
WriteLiteral(" type=\"submit\"");
WriteLiteral(" class=\"button\"");
WriteLiteral(" value=\"Export Devices\"");
WriteLiteral(" />\r\n </div>\r\n");
#line 149 "..\..\Views\Device\Export.cshtml"
}
#line default
#line hidden
WriteLiteral("</div>\r\n");
}
}
}
#pragma warning restore 1591
@@ -189,9 +189,4 @@
</script>
</div>
</div>
}
@if (Authorization.Has(Claims.Device.Actions.Export)){
<div class="actionBar">
@Html.ActionLinkButton("Export All Devices", MVC.API.Device.ExportAllDevices())
</div>
}
@@ -2,7 +2,7 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.34011
// Runtime Version:4.0.30319.34014
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
@@ -544,37 +544,6 @@ WriteLiteral(" </tbody>\r\n </table>\r\n </div>
#line 192 "..\..\Views\Device\ImportExport.cshtml"
}
#line default
#line hidden
#line 193 "..\..\Views\Device\ImportExport.cshtml"
if (Authorization.Has(Claims.Device.Actions.Export)){
#line default
#line hidden
WriteLiteral("<div");
WriteLiteral(" class=\"actionBar\"");
WriteLiteral(">\r\n");
WriteLiteral(" ");
#line 195 "..\..\Views\Device\ImportExport.cshtml"
Write(Html.ActionLinkButton("Export All Devices", MVC.API.Device.ExportAllDevices()));
#line default
#line hidden
WriteLiteral("\r\n</div>\r\n");
#line 197 "..\..\Views\Device\ImportExport.cshtml"
}
#line default
#line hidden
+5 -5
View File
@@ -9,13 +9,13 @@
@if (Authorization.HasAny(Claims.Device.Actions.Import, Claims.Device.Actions.Export, Claims.Device.Actions.EnrolDevices))
{
<div class="actionBar">
@if (Authorization.HasAll(Claims.Device.Actions.Import, Claims.Device.Actions.Export))
@if (Authorization.Has(Claims.Device.Actions.Import))
{
@Html.ActionLinkButton("Import/Export Devices", MVC.Device.ImportExport())
}else if (Authorization.Has(Claims.Device.Actions.Import)){
@Html.ActionLinkButton("Import Devices", MVC.Device.ImportExport())
}else if (Authorization.Has(Claims.Device.Actions.Export)){
@Html.ActionLinkButton("Export All Devices", MVC.API.Device.ExportAllDevices())
}
@if (Authorization.Has(Claims.Device.Actions.Export))
{
@Html.ActionLinkButton("Export Devices", MVC.Device.Export())
}
@if (Authorization.Has(Claims.Device.Actions.EnrolDevices))
{
+16 -21
View File
@@ -2,7 +2,7 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.34011
// Runtime Version:4.0.30319.34014
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
@@ -107,7 +107,7 @@ WriteLiteral(">\r\n");
#line hidden
#line 12 "..\..\Views\Device\Index.cshtml"
if (Authorization.HasAll(Claims.Device.Actions.Import, Claims.Device.Actions.Export))
if (Authorization.Has(Claims.Device.Actions.Import))
{
@@ -115,44 +115,39 @@ WriteLiteral(">\r\n");
#line hidden
#line 14 "..\..\Views\Device\Index.cshtml"
Write(Html.ActionLinkButton("Import/Export Devices", MVC.Device.ImportExport()));
#line default
#line hidden
#line 14 "..\..\Views\Device\Index.cshtml"
}else if (Authorization.Has(Claims.Device.Actions.Import)){
#line default
#line hidden
#line 16 "..\..\Views\Device\Index.cshtml"
Write(Html.ActionLinkButton("Import Devices", MVC.Device.ImportExport()));
#line default
#line hidden
#line 16 "..\..\Views\Device\Index.cshtml"
#line 14 "..\..\Views\Device\Index.cshtml"
}else if (Authorization.Has(Claims.Device.Actions.Export)){
}
#line default
#line hidden
WriteLiteral(" ");
#line 16 "..\..\Views\Device\Index.cshtml"
if (Authorization.Has(Claims.Device.Actions.Export))
{
#line default
#line hidden
#line 18 "..\..\Views\Device\Index.cshtml"
Write(Html.ActionLinkButton("Export All Devices", MVC.API.Device.ExportAllDevices()));
Write(Html.ActionLinkButton("Export Devices", MVC.Device.Export()));
#line default
#line hidden
#line 18 "..\..\Views\Device\Index.cshtml"
}