Update: Device Battery field, Excel CSV Format

Device Battery import & export; Leading zero workaround for Excel
This commit is contained in:
Gary Sharp
2014-05-27 16:36:42 +10:00
parent 825627e345
commit 4e69253852
16 changed files with 400 additions and 80 deletions
@@ -66,7 +66,7 @@ namespace Disco.BI.Extensions
detail.Value = Value; detail.Value = Value;
} }
} }
} }
#endregion #endregion
#region LanMacAddress #region LanMacAddress
@@ -84,7 +84,7 @@ namespace Disco.BI.Extensions
public static void LanMacAddress(this IEnumerable<DeviceDetail> details, Device device, string LanMacAddress) public static void LanMacAddress(this IEnumerable<DeviceDetail> details, Device device, string LanMacAddress)
{ {
device.SetDetail(DeviceDetail.ScopeHardware, DeviceDetail.HardwareKeyLanMacAddress, LanMacAddress); device.SetDetail(DeviceDetail.ScopeHardware, DeviceDetail.HardwareKeyLanMacAddress, LanMacAddress);
} }
#endregion #endregion
#region WLanMacAddress #region WLanMacAddress
@@ -102,7 +102,7 @@ namespace Disco.BI.Extensions
public static void WLanMacAddress(this IEnumerable<DeviceDetail> details, Device device, string WLanMacAddress) public static void WLanMacAddress(this IEnumerable<DeviceDetail> details, Device device, string WLanMacAddress)
{ {
device.SetDetail(DeviceDetail.ScopeHardware, DeviceDetail.HardwareKeyWLanMacAddress, WLanMacAddress); device.SetDetail(DeviceDetail.ScopeHardware, DeviceDetail.HardwareKeyWLanMacAddress, WLanMacAddress);
} }
#endregion #endregion
#region ACAdapter #region ACAdapter
@@ -123,5 +123,22 @@ namespace Disco.BI.Extensions
} }
#endregion #endregion
#region Battery
/// <summary>
/// Gets the Battery Device Detail Value
/// </summary>
/// <returns>The Battery or null</returns>
public static string Battery(this IEnumerable<DeviceDetail> details)
{
return details.GetDetail(DeviceDetail.ScopeHardware, DeviceDetail.HardwareKeyBattery);
}
/// <summary>
/// Sets the Battery Device Detail Value
/// </summary>
public static void Battery(this IEnumerable<DeviceDetail> details, Device device, string Battery)
{
device.SetDetail(DeviceDetail.ScopeHardware, DeviceDetail.HardwareKeyBattery, Battery);
}
#endregion
} }
} }
@@ -14,6 +14,7 @@ namespace Disco.Models.Repository
public const string HardwareKeyLanMacAddress = "LanMacAddress"; public const string HardwareKeyLanMacAddress = "LanMacAddress";
public const string HardwareKeyWLanMacAddress = "WLanMacAddress"; public const string HardwareKeyWLanMacAddress = "WLanMacAddress";
public const string HardwareKeyACAdapter = "ACAdapter"; public const string HardwareKeyACAdapter = "ACAdapter";
public const string HardwareKeyBattery = "Battery";
[Column(Order = 0), Key] [Column(Order = 0), Key]
public string DeviceSerialNumber { get; set; } public string DeviceSerialNumber { get; set; }
@@ -11,6 +11,11 @@ namespace Disco.Models.Services.Devices.Exporting
{ {
public DeviceExportTypes ExportType { get; set; } public DeviceExportTypes ExportType { get; set; }
public int? ExportTypeTargetId { get; set; } public int? ExportTypeTargetId { get; set; }
/// <summary>
/// Adds '=' to the beginning of the string to stop Excel removing the leading zeros
/// </summary>
public bool ExcelCsvFormat { get; set; }
// Device // Device
[Display(ShortName = "Device", Name = "Serial Number", Description = "The device serial number")] [Display(ShortName = "Device", Name = "Serial Number", Description = "The device serial number")]
@@ -41,6 +46,8 @@ namespace Disco.Models.Services.Devices.Exporting
public bool DetailWLanMacAddress { get; set; } public bool DetailWLanMacAddress { get; set; }
[Display(ShortName = "Details", Name = "AC Adapter", Description = "The AC Adapter associated with the device")] [Display(ShortName = "Details", Name = "AC Adapter", Description = "The AC Adapter associated with the device")]
public bool DetailACAdapter { get; set; } public bool DetailACAdapter { get; set; }
[Display(ShortName = "Details", Name = "Battery", Description = "The Battery associated with the device")]
public bool DetailBattery { get; set; }
// Model // Model
[Display(ShortName = "Model", Name = "Identifier", Description = "The identifier of the device model associated with the device")] [Display(ShortName = "Model", Name = "Identifier", Description = "The identifier of the device model associated with the device")]
@@ -124,6 +131,7 @@ namespace Disco.Models.Services.Devices.Exporting
return new DeviceExportOptions() return new DeviceExportOptions()
{ {
ExportType = DeviceExportTypes.All, ExportType = DeviceExportTypes.All,
ExcelCsvFormat = true,
DeviceSerialNumber = true, DeviceSerialNumber = true,
ModelId = true, ModelId = true,
ProfileId = true, ProfileId = true,
@@ -26,6 +26,8 @@ namespace Disco.Models.Services.Devices.Importing
DetailWLanMacAddress, DetailWLanMacAddress,
[Display(Name = "Device AC Adapter", Description = "The AC Adapter associated with the device")] [Display(Name = "Device AC Adapter", Description = "The AC Adapter associated with the device")]
DetailACAdapter, DetailACAdapter,
[Display(Name = "Device Battery", Description = "The Battery associated with the device")]
DetailBattery,
[Display(Name = "Model Identifier", Description = "The identifier of the device model associated with the device")] [Display(Name = "Model Identifier", Description = "The identifier of the device model associated with the device")]
ModelId, ModelId,
@@ -39,7 +39,7 @@ namespace Disco.Services.Devices.Exporting
{ {
UserService.GetUser(userId, Database); UserService.GetUser(userId, Database);
} }
catch (Exception) {} // Ignore Errors catch (Exception) { } // Ignore Errors
}); });
} }
@@ -74,9 +74,19 @@ namespace Disco.Services.Devices.Exporting
foreach (var record in records) foreach (var record in records)
{ {
writer.WriteLine(); writer.WriteLine();
writer.Write(string.Join(",", metadata.Select(m => { writer.Write(string.Join(",", metadata.Select(m =>
{
var value = m.Item3(record); var value = m.Item3(record);
return (m.Item4 && value != null) ? string.Concat("\"", value, "\"") : value; var isString = m.Item4;
if (value == null)
return null;
else if (!isString)
return value;
else if (Options.ExcelCsvFormat)
return string.Concat("=\"", value, "\"");
else
return string.Concat("\"", value, "\"");
}))); })));
} }
} }
@@ -116,12 +126,17 @@ namespace Disco.Services.Devices.Exporting
private static IEnumerable<DeviceExportRecord> BuildRecords(IQueryable<Device> Devices) private static IEnumerable<DeviceExportRecord> BuildRecords(IQueryable<Device> Devices)
{ {
var deviceDetailHardwareKeys = new List<string> { DeviceDetail.HardwareKeyLanMacAddress, DeviceDetail.HardwareKeyWLanMacAddress, DeviceDetail.HardwareKeyACAdapter }; var deviceDetailHardwareKeys = new List<string> {
DeviceDetail.HardwareKeyLanMacAddress,
DeviceDetail.HardwareKeyWLanMacAddress,
DeviceDetail.HardwareKeyACAdapter,
DeviceDetail.HardwareKeyBattery
};
return Devices.Select(d => new DeviceExportRecord() return Devices.Select(d => new DeviceExportRecord()
{ {
Device = d, Device = d,
DeviceDetails = d.DeviceDetails.Where(dd => dd.Scope == DeviceDetail.ScopeHardware && deviceDetailHardwareKeys.Contains(dd.Key)), DeviceDetails = d.DeviceDetails.Where(dd => dd.Scope == DeviceDetail.ScopeHardware && deviceDetailHardwareKeys.Contains(dd.Key)),
ModelId = d.DeviceModelId, ModelId = d.DeviceModelId,
@@ -165,7 +180,8 @@ namespace Disco.Services.Devices.Exporting
.Where(p => p.PropertyType == typeof(bool)) .Where(p => p.PropertyType == typeof(bool))
.Select(p => Tuple.Create(p, (DisplayAttribute)p.GetCustomAttributes(typeof(DisplayAttribute), false).FirstOrDefault())) .Select(p => Tuple.Create(p, (DisplayAttribute)p.GetCustomAttributes(typeof(DisplayAttribute), false).FirstOrDefault()))
.Where(p => p.Item2 != null && (bool)p.Item1.GetValue(Options)) .Where(p => p.Item2 != null && (bool)p.Item1.GetValue(Options))
.Select(p => { .Select(p =>
{
var accessor = allAssessors.First(i => i.Item1 == p.Item1.Name); var accessor = allAssessors.First(i => i.Item1 == p.Item1.Name);
var columnName = (p.Item2.ShortName == "Device" || p.Item2.ShortName == "Details") ? p.Item2.Name : string.Format("{0} {1}", p.Item2.ShortName, p.Item2.Name); var columnName = (p.Item2.ShortName == "Device" || p.Item2.ShortName == "Details") ? p.Item2.Name : string.Format("{0} {1}", p.Item2.ShortName, p.Item2.Name);
return Tuple.Create(p.Item1.Name, columnName, accessor.Item2, accessor.Item3); return Tuple.Create(p.Item1.Name, columnName, accessor.Item2, accessor.Item3);
@@ -188,12 +204,13 @@ namespace Disco.Services.Devices.Exporting
yield return new Tuple<string, Func<DeviceExportRecord, string>, bool>("DeviceFirstEnrolledDate", r => r.Device.EnrolledDate.HasValue ? r.Device.EnrolledDate.Value.ToString(DateTimeFormat) : null, false); yield return new Tuple<string, Func<DeviceExportRecord, string>, bool>("DeviceFirstEnrolledDate", r => r.Device.EnrolledDate.HasValue ? r.Device.EnrolledDate.Value.ToString(DateTimeFormat) : null, false);
yield return new Tuple<string, Func<DeviceExportRecord, string>, bool>("DeviceLastEnrolledDate", r => r.Device.LastEnrolDate.HasValue ? r.Device.LastEnrolDate.Value.ToString(DateTimeFormat) : null, false); yield return new Tuple<string, Func<DeviceExportRecord, string>, bool>("DeviceLastEnrolledDate", r => r.Device.LastEnrolDate.HasValue ? r.Device.LastEnrolDate.Value.ToString(DateTimeFormat) : null, false);
yield return new Tuple<string, Func<DeviceExportRecord, string>, bool>("DeviceDecommissionedDate", r => r.Device.DecommissionedDate.HasValue ? r.Device.DecommissionedDate.Value.ToString(DateTimeFormat) : null, false); yield return new Tuple<string, Func<DeviceExportRecord, string>, bool>("DeviceDecommissionedDate", r => r.Device.DecommissionedDate.HasValue ? r.Device.DecommissionedDate.Value.ToString(DateTimeFormat) : null, false);
yield return new Tuple<string, Func<DeviceExportRecord, string>, bool>("DeviceDecommissionedReason", r => r.Device.DecommissionReason.HasValue ? r.Device.DecommissionReason.Value.ToString() : null, true); yield return new Tuple<string, Func<DeviceExportRecord, string>, bool>("DeviceDecommissionedReason", r => r.Device.DecommissionReason.HasValue ? r.Device.DecommissionReason.Value.ToString() : null, true);
// Details // Details
yield return new Tuple<string, Func<DeviceExportRecord, string>, bool>("DetailLanMacAddress", r => r.DeviceDetails.Where(dd => dd.Key == DeviceDetail.HardwareKeyLanMacAddress).Select(dd => dd.Value).FirstOrDefault(), true); yield return new Tuple<string, Func<DeviceExportRecord, string>, bool>("DetailLanMacAddress", r => r.DeviceDetails.Where(dd => dd.Key == DeviceDetail.HardwareKeyLanMacAddress).Select(dd => dd.Value).FirstOrDefault(), true);
yield return new Tuple<string, Func<DeviceExportRecord, string>, bool>("DetailWLanMacAddress", r => r.DeviceDetails.Where(dd => dd.Key == DeviceDetail.HardwareKeyWLanMacAddress).Select(dd => dd.Value).FirstOrDefault(), true); yield return new Tuple<string, Func<DeviceExportRecord, string>, bool>("DetailWLanMacAddress", r => r.DeviceDetails.Where(dd => dd.Key == DeviceDetail.HardwareKeyWLanMacAddress).Select(dd => dd.Value).FirstOrDefault(), true);
yield return new Tuple<string, Func<DeviceExportRecord, string>, bool>("DetailACAdapter", r => r.DeviceDetails.Where(dd => dd.Key == DeviceDetail.HardwareKeyACAdapter).Select(dd => dd.Value).FirstOrDefault(), true); yield return new Tuple<string, Func<DeviceExportRecord, string>, bool>("DetailACAdapter", r => r.DeviceDetails.Where(dd => dd.Key == DeviceDetail.HardwareKeyACAdapter).Select(dd => dd.Value).FirstOrDefault(), true);
yield return new Tuple<string, Func<DeviceExportRecord, string>, bool>("DetailBattery", r => r.DeviceDetails.Where(dd => dd.Key == DeviceDetail.HardwareKeyBattery).Select(dd => dd.Value).FirstOrDefault(), true);
// Model // Model
yield return new Tuple<string, Func<DeviceExportRecord, string>, bool>("ModelId", r => r.ModelId.HasValue ? r.ModelId.Value.ToString() : null, false); yield return new Tuple<string, Func<DeviceExportRecord, string>, bool>("ModelId", r => r.ModelId.HasValue ? r.ModelId.Value.ToString() : null, false);
@@ -30,6 +30,7 @@ namespace Disco.Services.Devices.Importing
{ DeviceImportFieldTypes.DetailLanMacAddress, typeof(DetailLanMacAddressImportField) }, { DeviceImportFieldTypes.DetailLanMacAddress, typeof(DetailLanMacAddressImportField) },
{ DeviceImportFieldTypes.DetailWLanMacAddress, typeof(DetailWLanMacAddressImportField) }, { DeviceImportFieldTypes.DetailWLanMacAddress, typeof(DetailWLanMacAddressImportField) },
{ DeviceImportFieldTypes.DetailACAdapter, typeof(DetailACAdapterImportField) }, { DeviceImportFieldTypes.DetailACAdapter, typeof(DetailACAdapterImportField) },
{ DeviceImportFieldTypes.DetailBattery, typeof(DetailBatteryImportField) },
{ DeviceImportFieldTypes.ModelId, typeof(ModelIdImportField) }, { DeviceImportFieldTypes.ModelId, typeof(ModelIdImportField) },
@@ -5,7 +5,6 @@ using Disco.Services.Users;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Data; using System.Data;
using System.Globalization;
using System.Linq; using System.Linq;
namespace Disco.Services.Devices.Importing.Fields namespace Disco.Services.Devices.Importing.Fields
@@ -0,0 +1,98 @@
using Disco.Data.Repository;
using Disco.Models.Repository;
using Disco.Models.Services.Devices.Importing;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
namespace Disco.Services.Devices.Importing.Fields
{
internal class DetailBatteryImportField : DeviceImportFieldBase
{
private string parsedValue;
private string previousValue;
public override DeviceImportFieldTypes FieldType { get { return DeviceImportFieldTypes.DetailBattery; } }
public override object RawParsedValue { get { return parsedValue; } }
public override string FriendlyValue { get { return parsedValue; } }
public override string FriendlyPreviousValue { get { return previousValue; } }
public override bool Parse(DiscoDataContext Database, IDeviceImportCache Cache, DeviceImportContext Context, int RecordIndex, string DeviceSerialNumber, Device ExistingDevice, Dictionary<DeviceImportFieldTypes, string> Values, string Value)
{
if (string.IsNullOrWhiteSpace(Value))
parsedValue = null;
else
{
parsedValue = Value.Trim();
}
if (ExistingDevice == null && parsedValue != null)
return Success(EntityState.Added);
else if (ExistingDevice != null)
{
var detail = ExistingDevice.DeviceDetails.FirstOrDefault(dd => dd.Scope == DeviceDetail.ScopeHardware && dd.Key == DeviceDetail.HardwareKeyBattery);
if (detail == null && parsedValue == null)
return Success(EntityState.Unchanged);
else if (detail == null && parsedValue != null)
{
return Success(EntityState.Modified);
}
else if (detail.Value != parsedValue)
{
previousValue = detail.Value;
return Success(EntityState.Modified);
}
else
return Success(EntityState.Unchanged);
}
else
return Success(EntityState.Unchanged);
}
public override bool Apply(DiscoDataContext Database, Device Device)
{
if (this.FieldAction == EntityState.Added ||
this.FieldAction == EntityState.Modified)
{
DeviceDetail detail = Database.DeviceDetails.FirstOrDefault(dd =>
dd.DeviceSerialNumber == Device.SerialNumber &&
dd.Scope == DeviceDetail.ScopeHardware &&
dd.Key == DeviceDetail.HardwareKeyBattery);
if (detail == null)
{
detail = new DeviceDetail()
{
Device = Device,
DeviceSerialNumber = Device.SerialNumber,
Scope = DeviceDetail.ScopeHardware,
Key = DeviceDetail.HardwareKeyBattery
};
Database.DeviceDetails.Add(detail);
}
detail.Value = parsedValue;
return true;
}
else
{
return false;
}
}
public override int? GuessHeader(DiscoDataContext Database, DeviceImportContext Context)
{
// column name
var possibleColumns = Context.Header
.Select((h, i) => Tuple.Create(h, i))
.Where(h => h.Item1.Item2 == DeviceImportFieldTypes.IgnoreColumn &&
h.Item1.Item1.IndexOf("battery", System.StringComparison.OrdinalIgnoreCase) >= 0);
return possibleColumns.Select(h => (int?)h.Item2).FirstOrDefault();
}
}
}
@@ -4,9 +4,7 @@ using Disco.Models.Services.Devices.Importing;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Data; using System.Data;
using System.Globalization;
using System.Linq; using System.Linq;
using System.Text;
namespace Disco.Services.Devices.Importing.Fields namespace Disco.Services.Devices.Importing.Fields
{ {
+2 -1
View File
@@ -188,6 +188,7 @@
<Compile Include="Devices\Importing\DeviceImportRecord.cs" /> <Compile Include="Devices\Importing\DeviceImportRecord.cs" />
<Compile Include="Devices\Importing\Fields\BatchIdImportField.cs" /> <Compile Include="Devices\Importing\Fields\BatchIdImportField.cs" />
<Compile Include="Devices\Importing\Fields\AssignedUserIdImportField.cs" /> <Compile Include="Devices\Importing\Fields\AssignedUserIdImportField.cs" />
<Compile Include="Devices\Importing\Fields\DetailBatteryImportField.cs" />
<Compile Include="Devices\Importing\Fields\DeviceDecommissionedReasonImportField.cs" /> <Compile Include="Devices\Importing\Fields\DeviceDecommissionedReasonImportField.cs" />
<Compile Include="Devices\Importing\Fields\DeviceDecommissionedDateImportField.cs" /> <Compile Include="Devices\Importing\Fields\DeviceDecommissionedDateImportField.cs" />
<Compile Include="Devices\Importing\Fields\ProfileIdImportField.cs" /> <Compile Include="Devices\Importing\Fields\ProfileIdImportField.cs" />
@@ -326,7 +327,7 @@
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<ProjectExtensions> <ProjectExtensions>
<VisualStudio> <VisualStudio>
<UserProperties BuildVersion_UpdateFileVersion="True" BuildVersion_UpdateAssemblyVersion="True" BuildVersion_BuildVersioningStyle="None.DeltaBaseYear.MonthAndDayStamp.TimeStamp" BuildVersion_StartDate="2011/7/1" BuildVersion_BuildAction="Both" BuildVersion_DetectChanges="False" BuildVersion_UseGlobalSettings="False" /> <UserProperties BuildVersion_UseGlobalSettings="False" BuildVersion_DetectChanges="False" BuildVersion_BuildAction="Both" BuildVersion_StartDate="2011/7/1" BuildVersion_BuildVersioningStyle="None.DeltaBaseYear.MonthAndDayStamp.TimeStamp" BuildVersion_UpdateAssemblyVersion="True" BuildVersion_UpdateFileVersion="True" />
</VisualStudio> </VisualStudio>
</ProjectExtensions> </ProjectExtensions>
<PropertyGroup> <PropertyGroup>
@@ -27,6 +27,7 @@ namespace Disco.Web.Areas.API.Controllers
const string pLocation = "location"; const string pLocation = "location";
const string pAllowUnauthenticatedEnrol = "allowunauthenticatedenrol"; const string pAllowUnauthenticatedEnrol = "allowunauthenticatedenrol";
const string pDetailACAdapter = "detailacadapter"; const string pDetailACAdapter = "detailacadapter";
const string pDetailBattery = "detailbattery";
public virtual ActionResult Update(string id, string key, string value = null, bool redirect = false) public virtual ActionResult Update(string id, string key, string value = null, bool redirect = false)
{ {
@@ -71,6 +72,10 @@ namespace Disco.Web.Areas.API.Controllers
Authorization.Require(Claims.Device.Properties.Details); Authorization.Require(Claims.Device.Properties.Details);
UpdateDetailACAdapter(device, value); UpdateDetailACAdapter(device, value);
break; break;
case pDetailBattery:
Authorization.Require(Claims.Device.Properties.Details);
UpdateDetailBattery(device, value);
break;
default: default:
throw new Exception("Invalid Update Key"); throw new Exception("Invalid Update Key");
} }
@@ -145,6 +150,12 @@ namespace Disco.Web.Areas.API.Controllers
return Update(id, pDetailACAdapter, DetailACAdapter, redirect); return Update(id, pDetailACAdapter, DetailACAdapter, redirect);
} }
[DiscoAuthorize(Claims.Device.Properties.Details)]
public virtual ActionResult UpdateDetailBattery(string id, string DetailBattery = null, bool redirect = false)
{
return Update(id, pDetailBattery, DetailBattery, redirect);
}
#endregion #endregion
#region Update Properties #region Update Properties
@@ -258,6 +269,14 @@ namespace Disco.Web.Areas.API.Controllers
device.DeviceDetails.ACAdapter(device, ACAdapter.Trim()); device.DeviceDetails.ACAdapter(device, ACAdapter.Trim());
Database.SaveChanges(); Database.SaveChanges();
} }
private void UpdateDetailBattery(Disco.Models.Repository.Device device, string Battery)
{
if (string.IsNullOrWhiteSpace(Battery))
device.DeviceDetails.Battery(device, null);
else
device.DeviceDetails.Battery(device, Battery.Trim());
Database.SaveChanges();
}
#endregion #endregion
#region Device Actions #region Device Actions
+30
View File
@@ -3543,6 +3543,12 @@ namespace Disco.Web.Areas.API.Controllers
} }
[NonAction] [NonAction]
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
public virtual System.Web.Mvc.ActionResult UpdateDetailBattery()
{
return new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.UpdateDetailBattery);
}
[NonAction]
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
public virtual System.Web.Mvc.ActionResult Decommission() public virtual System.Web.Mvc.ActionResult Decommission()
{ {
return new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.Decommission); return new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.Decommission);
@@ -3661,6 +3667,7 @@ namespace Disco.Web.Areas.API.Controllers
public readonly string UpdateAssignedUserId = "UpdateAssignedUserId"; public readonly string UpdateAssignedUserId = "UpdateAssignedUserId";
public readonly string UpdateAllowUnauthenticatedEnrol = "UpdateAllowUnauthenticatedEnrol"; public readonly string UpdateAllowUnauthenticatedEnrol = "UpdateAllowUnauthenticatedEnrol";
public readonly string UpdateDetailACAdapter = "UpdateDetailACAdapter"; public readonly string UpdateDetailACAdapter = "UpdateDetailACAdapter";
public readonly string UpdateDetailBattery = "UpdateDetailBattery";
public readonly string Decommission = "Decommission"; public readonly string Decommission = "Decommission";
public readonly string Recommission = "Recommission"; public readonly string Recommission = "Recommission";
public readonly string Delete = "Delete"; public readonly string Delete = "Delete";
@@ -3691,6 +3698,7 @@ namespace Disco.Web.Areas.API.Controllers
public const string UpdateAssignedUserId = "UpdateAssignedUserId"; public const string UpdateAssignedUserId = "UpdateAssignedUserId";
public const string UpdateAllowUnauthenticatedEnrol = "UpdateAllowUnauthenticatedEnrol"; public const string UpdateAllowUnauthenticatedEnrol = "UpdateAllowUnauthenticatedEnrol";
public const string UpdateDetailACAdapter = "UpdateDetailACAdapter"; public const string UpdateDetailACAdapter = "UpdateDetailACAdapter";
public const string UpdateDetailBattery = "UpdateDetailBattery";
public const string Decommission = "Decommission"; public const string Decommission = "Decommission";
public const string Recommission = "Recommission"; public const string Recommission = "Recommission";
public const string Delete = "Delete"; public const string Delete = "Delete";
@@ -3793,6 +3801,16 @@ namespace Disco.Web.Areas.API.Controllers
public readonly string DetailACAdapter = "DetailACAdapter"; public readonly string DetailACAdapter = "DetailACAdapter";
public readonly string redirect = "redirect"; public readonly string redirect = "redirect";
} }
static readonly ActionParamsClass_UpdateDetailBattery s_params_UpdateDetailBattery = new ActionParamsClass_UpdateDetailBattery();
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
public ActionParamsClass_UpdateDetailBattery UpdateDetailBatteryParams { get { return s_params_UpdateDetailBattery; } }
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
public class ActionParamsClass_UpdateDetailBattery
{
public readonly string id = "id";
public readonly string DetailBattery = "DetailBattery";
public readonly string redirect = "redirect";
}
static readonly ActionParamsClass_Decommission s_params_Decommission = new ActionParamsClass_Decommission(); static readonly ActionParamsClass_Decommission s_params_Decommission = new ActionParamsClass_Decommission();
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode] [GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
public ActionParamsClass_Decommission DecommissionParams { get { return s_params_Decommission; } } public ActionParamsClass_Decommission DecommissionParams { get { return s_params_Decommission; } }
@@ -4046,6 +4064,18 @@ namespace Disco.Web.Areas.API.Controllers
return callInfo; return callInfo;
} }
partial void UpdateDetailBatteryOverride(T4MVC_System_Web_Mvc_ActionResult callInfo, string id, string DetailBattery, bool redirect);
public override System.Web.Mvc.ActionResult UpdateDetailBattery(string id, string DetailBattery, bool redirect)
{
var callInfo = new T4MVC_System_Web_Mvc_ActionResult(Area, Name, ActionNames.UpdateDetailBattery);
ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "id", id);
ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "DetailBattery", DetailBattery);
ModelUnbinderHelpers.AddRouteValues(callInfo.RouteValueDictionary, "redirect", redirect);
UpdateDetailBatteryOverride(callInfo, id, DetailBattery, redirect);
return callInfo;
}
partial void DecommissionOverride(T4MVC_System_Web_Mvc_ActionResult callInfo, string id, int Reason, bool redirect); partial void DecommissionOverride(T4MVC_System_Web_Mvc_ActionResult callInfo, string id, int Reason, bool redirect);
public override System.Web.Mvc.ActionResult Decommission(string id, int Reason, bool redirect) public override System.Web.Mvc.ActionResult Decommission(string id, int Reason, bool redirect)
@@ -38,6 +38,23 @@
} }
</td> </td>
</tr> </tr>
<tr>
<th>Battery</th>
<td>@if (canConfig)
{
@Html.TextBox("DeviceDetail_Battery", Model.Device.DeviceDetails.Battery()) @AjaxHelpers.AjaxSave() @AjaxHelpers.AjaxLoader()
<script>
$(function () {
document.DiscoFunctions.PropertyChangeHelper($('#DeviceDetail_Battery'), 'Unknown', '@Url.Action(MVC.API.Device.UpdateDetailBattery(Model.Device.SerialNumber, null))', 'DetailBattery');
});
</script>
}
else
{
@(Model.Device.DeviceDetails.Battery() ?? "Unknown")
}
</td>
</tr>
</tbody> </tbody>
</table> </table>
</div> </div>
@@ -2,7 +2,7 @@
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
// <auto-generated> // <auto-generated>
// This code was generated by a tool. // 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 // Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated. // the code is regenerated.
@@ -188,6 +188,95 @@ WriteLiteral("\', \'DetailACAdapter\');\r\n });\r\n
} }
#line default
#line hidden
WriteLiteral(" </td>\r\n </tr>\r\n <tr>\r\n " +
" <th>Battery</th>\r\n <td>");
#line 43 "..\..\Views\Device\DeviceParts\_Details.cshtml"
if (canConfig)
{
#line default
#line hidden
#line 45 "..\..\Views\Device\DeviceParts\_Details.cshtml"
Write(Html.TextBox("DeviceDetail_Battery", Model.Device.DeviceDetails.Battery()));
#line default
#line hidden
#line 45 "..\..\Views\Device\DeviceParts\_Details.cshtml"
#line default
#line hidden
#line 45 "..\..\Views\Device\DeviceParts\_Details.cshtml"
Write(AjaxHelpers.AjaxSave());
#line default
#line hidden
#line 45 "..\..\Views\Device\DeviceParts\_Details.cshtml"
#line default
#line hidden
#line 45 "..\..\Views\Device\DeviceParts\_Details.cshtml"
Write(AjaxHelpers.AjaxLoader());
#line default
#line hidden
#line 45 "..\..\Views\Device\DeviceParts\_Details.cshtml"
#line default
#line hidden
WriteLiteral(" <script>\r\n $(function () {\r\n " +
" document.DiscoFunctions.PropertyChangeHelper($(\'#D" +
"eviceDetail_Battery\'), \'Unknown\', \'");
#line 48 "..\..\Views\Device\DeviceParts\_Details.cshtml"
Write(Url.Action(MVC.API.Device.UpdateDetailBattery(Model.Device.SerialNumber, null)));
#line default
#line hidden
WriteLiteral("\', \'DetailBattery\');\r\n });\r\n </" +
"script>\r\n");
#line 51 "..\..\Views\Device\DeviceParts\_Details.cshtml"
}
else
{
#line default
#line hidden
#line 54 "..\..\Views\Device\DeviceParts\_Details.cshtml"
Write(Model.Device.DeviceDetails.Battery() ?? "Unknown");
#line default
#line hidden
#line 54 "..\..\Views\Device\DeviceParts\_Details.cshtml"
}
#line default #line default
#line hidden #line hidden
WriteLiteral(" </td>\r\n </tr>\r\n </tbody>\r\n <" + WriteLiteral(" </td>\r\n </tr>\r\n </tbody>\r\n <" +
+6
View File
@@ -32,6 +32,12 @@
</div> </div>
</td> </td>
</tr> </tr>
<tr>
<th>&nbsp;</th>
<td>
@Html.CheckBoxFor(m => m.Options.ExcelCsvFormat) <label for="Options_ExcelCsvFormat">Microsoft Excel CSV Format</label>
</td>
</tr>
</table> </table>
</div> </div>
<div id="Devices_Export_Fields" class="form" style="width: 530px; margin-top: 15px;"> <div id="Devices_Export_Fields" class="form" style="width: 530px; margin-top: 15px;">
+82 -65
View File
@@ -166,7 +166,24 @@ WriteLiteral(" ");
#line default #line default
#line hidden #line hidden
WriteLiteral("\r\n </div>\r\n </td>\r\n </tr" + WriteLiteral("\r\n </div>\r\n </td>\r\n </tr" +
">\r\n </table>\r\n </div>\r\n"); ">\r\n <tr>\r\n <th>&nbsp;</th>\r\n " +
" <td>\r\n");
WriteLiteral(" ");
#line 38 "..\..\Views\Device\Export.cshtml"
Write(Html.CheckBoxFor(m => m.Options.ExcelCsvFormat));
#line default
#line hidden
WriteLiteral(" <label");
WriteLiteral(" for=\"Options_ExcelCsvFormat\"");
WriteLiteral(">Microsoft Excel CSV Format</label>\r\n </td>\r\n <" +
"/tr>\r\n </table>\r\n </div>\r\n");
WriteLiteral(" <div"); WriteLiteral(" <div");
@@ -185,13 +202,13 @@ WriteLiteral(" href=\"#\"");
WriteLiteral(">(Defaults)</a></h2>\r\n <table>\r\n"); WriteLiteral(">(Defaults)</a></h2>\r\n <table>\r\n");
#line 40 "..\..\Views\Device\Export.cshtml" #line 46 "..\..\Views\Device\Export.cshtml"
#line default #line default
#line hidden #line hidden
#line 40 "..\..\Views\Device\Export.cshtml" #line 46 "..\..\Views\Device\Export.cshtml"
foreach (var optionGroup in optionGroups) foreach (var optionGroup in optionGroups)
{ {
var optionFields = optionGroup.ToList(); var optionFields = optionGroup.ToList();
@@ -209,7 +226,7 @@ WriteLiteral(">\r\n");
WriteLiteral(" "); WriteLiteral(" ");
#line 46 "..\..\Views\Device\Export.cshtml" #line 52 "..\..\Views\Device\Export.cshtml"
Write(optionGroup.Key); Write(optionGroup.Key);
@@ -218,13 +235,13 @@ WriteLiteral(" ");
WriteLiteral("\r\n"); WriteLiteral("\r\n");
#line 47 "..\..\Views\Device\Export.cshtml" #line 53 "..\..\Views\Device\Export.cshtml"
#line default #line default
#line hidden #line hidden
#line 47 "..\..\Views\Device\Export.cshtml" #line 53 "..\..\Views\Device\Export.cshtml"
if (optionFields.Count > 2) if (optionFields.Count > 2)
{ {
@@ -252,7 +269,7 @@ WriteLiteral(" href=\"#\"");
WriteLiteral(">NONE</a></span>\r\n"); WriteLiteral(">NONE</a></span>\r\n");
#line 50 "..\..\Views\Device\Export.cshtml" #line 56 "..\..\Views\Device\Export.cshtml"
} }
@@ -279,13 +296,13 @@ WriteLiteral(" class=\"none\"");
WriteLiteral(">\r\n"); WriteLiteral(">\r\n");
#line 58 "..\..\Views\Device\Export.cshtml" #line 64 "..\..\Views\Device\Export.cshtml"
#line default #line default
#line hidden #line hidden
#line 58 "..\..\Views\Device\Export.cshtml" #line 64 "..\..\Views\Device\Export.cshtml"
foreach (var optionItem in optionFields.Take(itemsPerColumn)) foreach (var optionItem in optionFields.Take(itemsPerColumn))
{ {
@@ -294,40 +311,40 @@ WriteLiteral(">\r\n");
#line hidden #line hidden
WriteLiteral(" <li"); WriteLiteral(" <li");
WriteAttribute("title", Tuple.Create(" title=\"", 3553), Tuple.Create("\"", 3584) WriteAttribute("title", Tuple.Create(" title=\"", 3833), Tuple.Create("\"", 3864)
#line 60 "..\..\Views\Device\Export.cshtml" #line 66 "..\..\Views\Device\Export.cshtml"
, Tuple.Create(Tuple.Create("", 3561), Tuple.Create<System.Object, System.Int32>(optionItem.Description , Tuple.Create(Tuple.Create("", 3841), Tuple.Create<System.Object, System.Int32>(optionItem.Description
#line default #line default
#line hidden #line hidden
, 3561), false) , 3841), false)
); );
WriteLiteral(">\r\n <input"); WriteLiteral(">\r\n <input");
WriteLiteral(" type=\"checkbox\""); WriteLiteral(" type=\"checkbox\"");
WriteAttribute("id", Tuple.Create(" id=\"", 3666), Tuple.Create("\"", 3703) WriteAttribute("id", Tuple.Create(" id=\"", 3946), Tuple.Create("\"", 3983)
, Tuple.Create(Tuple.Create("", 3671), Tuple.Create("Options_", 3671), true) , Tuple.Create(Tuple.Create("", 3951), Tuple.Create("Options_", 3951), true)
#line 61 "..\..\Views\Device\Export.cshtml" #line 67 "..\..\Views\Device\Export.cshtml"
, Tuple.Create(Tuple.Create("", 3679), Tuple.Create<System.Object, System.Int32>(optionItem.PropertyName , Tuple.Create(Tuple.Create("", 3959), Tuple.Create<System.Object, System.Int32>(optionItem.PropertyName
#line default #line default
#line hidden #line hidden
, 3679), false) , 3959), false)
); );
WriteAttribute("name", Tuple.Create(" name=\"", 3704), Tuple.Create("\"", 3743) WriteAttribute("name", Tuple.Create(" name=\"", 3984), Tuple.Create("\"", 4023)
, Tuple.Create(Tuple.Create("", 3711), Tuple.Create("Options.", 3711), true) , Tuple.Create(Tuple.Create("", 3991), Tuple.Create("Options.", 3991), true)
#line 61 "..\..\Views\Device\Export.cshtml" #line 67 "..\..\Views\Device\Export.cshtml"
, Tuple.Create(Tuple.Create("", 3719), Tuple.Create<System.Object, System.Int32>(optionItem.PropertyName , Tuple.Create(Tuple.Create("", 3999), Tuple.Create<System.Object, System.Int32>(optionItem.PropertyName
#line default #line default
#line hidden #line hidden
, 3719), false) , 3999), false)
); );
WriteLiteral(" value=\"true\""); WriteLiteral(" value=\"true\"");
@@ -335,7 +352,7 @@ WriteLiteral(" value=\"true\"");
WriteLiteral(" "); WriteLiteral(" ");
#line 61 "..\..\Views\Device\Export.cshtml" #line 67 "..\..\Views\Device\Export.cshtml"
Write(((bool)optionItem.Model) ? "checked " : null); Write(((bool)optionItem.Model) ? "checked " : null);
@@ -343,21 +360,21 @@ WriteLiteral(" ");
#line hidden #line hidden
WriteLiteral("/><label"); WriteLiteral("/><label");
WriteAttribute("for", Tuple.Create(" for=\"", 3813), Tuple.Create("\"", 3851) WriteAttribute("for", Tuple.Create(" for=\"", 4093), Tuple.Create("\"", 4131)
, Tuple.Create(Tuple.Create("", 3819), Tuple.Create("Options_", 3819), true) , Tuple.Create(Tuple.Create("", 4099), Tuple.Create("Options_", 4099), true)
#line 61 "..\..\Views\Device\Export.cshtml" #line 67 "..\..\Views\Device\Export.cshtml"
, Tuple.Create(Tuple.Create("", 3827), Tuple.Create<System.Object, System.Int32>(optionItem.PropertyName , Tuple.Create(Tuple.Create("", 4107), Tuple.Create<System.Object, System.Int32>(optionItem.PropertyName
#line default #line default
#line hidden #line hidden
, 3827), false) , 4107), false)
); );
WriteLiteral(">"); WriteLiteral(">");
#line 61 "..\..\Views\Device\Export.cshtml" #line 67 "..\..\Views\Device\Export.cshtml"
Write(optionItem.DisplayName); Write(optionItem.DisplayName);
@@ -366,7 +383,7 @@ WriteLiteral(">");
WriteLiteral("</label></li>\r\n"); WriteLiteral("</label></li>\r\n");
#line 62 "..\..\Views\Device\Export.cshtml" #line 68 "..\..\Views\Device\Export.cshtml"
} }
@@ -384,13 +401,13 @@ WriteLiteral(" class=\"none\"");
WriteLiteral(">\r\n"); WriteLiteral(">\r\n");
#line 67 "..\..\Views\Device\Export.cshtml" #line 73 "..\..\Views\Device\Export.cshtml"
#line default #line default
#line hidden #line hidden
#line 67 "..\..\Views\Device\Export.cshtml" #line 73 "..\..\Views\Device\Export.cshtml"
foreach (var optionItem in optionFields.Skip(itemsPerColumn)) foreach (var optionItem in optionFields.Skip(itemsPerColumn))
{ {
@@ -399,40 +416,40 @@ WriteLiteral(">\r\n");
#line hidden #line hidden
WriteLiteral(" <li"); WriteLiteral(" <li");
WriteAttribute("title", Tuple.Create(" title=\"", 4386), Tuple.Create("\"", 4417) WriteAttribute("title", Tuple.Create(" title=\"", 4666), Tuple.Create("\"", 4697)
#line 69 "..\..\Views\Device\Export.cshtml" #line 75 "..\..\Views\Device\Export.cshtml"
, Tuple.Create(Tuple.Create("", 4394), Tuple.Create<System.Object, System.Int32>(optionItem.Description , Tuple.Create(Tuple.Create("", 4674), Tuple.Create<System.Object, System.Int32>(optionItem.Description
#line default #line default
#line hidden #line hidden
, 4394), false) , 4674), false)
); );
WriteLiteral(">\r\n <input"); WriteLiteral(">\r\n <input");
WriteLiteral(" type=\"checkbox\""); WriteLiteral(" type=\"checkbox\"");
WriteAttribute("id", Tuple.Create(" id=\"", 4499), Tuple.Create("\"", 4536) WriteAttribute("id", Tuple.Create(" id=\"", 4779), Tuple.Create("\"", 4816)
, Tuple.Create(Tuple.Create("", 4504), Tuple.Create("Options_", 4504), true) , Tuple.Create(Tuple.Create("", 4784), Tuple.Create("Options_", 4784), true)
#line 70 "..\..\Views\Device\Export.cshtml" #line 76 "..\..\Views\Device\Export.cshtml"
, Tuple.Create(Tuple.Create("", 4512), Tuple.Create<System.Object, System.Int32>(optionItem.PropertyName , Tuple.Create(Tuple.Create("", 4792), Tuple.Create<System.Object, System.Int32>(optionItem.PropertyName
#line default #line default
#line hidden #line hidden
, 4512), false) , 4792), false)
); );
WriteAttribute("name", Tuple.Create(" name=\"", 4537), Tuple.Create("\"", 4576) WriteAttribute("name", Tuple.Create(" name=\"", 4817), Tuple.Create("\"", 4856)
, Tuple.Create(Tuple.Create("", 4544), Tuple.Create("Options.", 4544), true) , Tuple.Create(Tuple.Create("", 4824), Tuple.Create("Options.", 4824), true)
#line 70 "..\..\Views\Device\Export.cshtml" #line 76 "..\..\Views\Device\Export.cshtml"
, Tuple.Create(Tuple.Create("", 4552), Tuple.Create<System.Object, System.Int32>(optionItem.PropertyName , Tuple.Create(Tuple.Create("", 4832), Tuple.Create<System.Object, System.Int32>(optionItem.PropertyName
#line default #line default
#line hidden #line hidden
, 4552), false) , 4832), false)
); );
WriteLiteral(" value=\"true\""); WriteLiteral(" value=\"true\"");
@@ -440,7 +457,7 @@ WriteLiteral(" value=\"true\"");
WriteLiteral(" "); WriteLiteral(" ");
#line 70 "..\..\Views\Device\Export.cshtml" #line 76 "..\..\Views\Device\Export.cshtml"
Write(((bool)optionItem.Model) ? "checked " : null); Write(((bool)optionItem.Model) ? "checked " : null);
@@ -448,21 +465,21 @@ WriteLiteral(" ");
#line hidden #line hidden
WriteLiteral("/><label"); WriteLiteral("/><label");
WriteAttribute("for", Tuple.Create(" for=\"", 4646), Tuple.Create("\"", 4684) WriteAttribute("for", Tuple.Create(" for=\"", 4926), Tuple.Create("\"", 4964)
, Tuple.Create(Tuple.Create("", 4652), Tuple.Create("Options_", 4652), true) , Tuple.Create(Tuple.Create("", 4932), Tuple.Create("Options_", 4932), true)
#line 70 "..\..\Views\Device\Export.cshtml" #line 76 "..\..\Views\Device\Export.cshtml"
, Tuple.Create(Tuple.Create("", 4660), Tuple.Create<System.Object, System.Int32>(optionItem.PropertyName , Tuple.Create(Tuple.Create("", 4940), Tuple.Create<System.Object, System.Int32>(optionItem.PropertyName
#line default #line default
#line hidden #line hidden
, 4660), false) , 4940), false)
); );
WriteLiteral(">"); WriteLiteral(">");
#line 70 "..\..\Views\Device\Export.cshtml" #line 76 "..\..\Views\Device\Export.cshtml"
Write(optionItem.DisplayName); Write(optionItem.DisplayName);
@@ -471,7 +488,7 @@ WriteLiteral(">");
WriteLiteral("</label></li>\r\n"); WriteLiteral("</label></li>\r\n");
#line 71 "..\..\Views\Device\Export.cshtml" #line 77 "..\..\Views\Device\Export.cshtml"
} }
@@ -487,7 +504,7 @@ WriteLiteral(@" </ul>
"); ");
#line 79 "..\..\Views\Device\Export.cshtml" #line 85 "..\..\Views\Device\Export.cshtml"
} }
@@ -543,7 +560,7 @@ WriteLiteral(" <script>\r\n $(function () {\r\n
"pt>\r\n"); "pt>\r\n");
#line 165 "..\..\Views\Device\Export.cshtml" #line 171 "..\..\Views\Device\Export.cshtml"
} }
@@ -552,7 +569,7 @@ WriteLiteral(" <script>\r\n $(function () {\r\n
WriteLiteral("</div>\r\n"); WriteLiteral("</div>\r\n");
#line 167 "..\..\Views\Device\Export.cshtml" #line 173 "..\..\Views\Device\Export.cshtml"
if (Model.ExportSessionId != null) if (Model.ExportSessionId != null)
{ {
@@ -570,7 +587,7 @@ WriteLiteral(" title=\"Export Devices\"");
WriteLiteral(">\r\n <h4>"); WriteLiteral(">\r\n <h4>");
#line 170 "..\..\Views\Device\Export.cshtml" #line 176 "..\..\Views\Device\Export.cshtml"
Write(Model.ExportSessionResult.RecordCount); Write(Model.ExportSessionResult.RecordCount);
@@ -579,7 +596,7 @@ WriteLiteral(">\r\n <h4>");
WriteLiteral(" record"); WriteLiteral(" record");
#line 170 "..\..\Views\Device\Export.cshtml" #line 176 "..\..\Views\Device\Export.cshtml"
Write(Model.ExportSessionResult.RecordCount != 1 ? "s" : null); Write(Model.ExportSessionResult.RecordCount != 1 ? "s" : null);
@@ -587,14 +604,14 @@ WriteLiteral(" record");
#line hidden #line hidden
WriteLiteral(" were successfully exported.</h4>\r\n <a"); WriteLiteral(" were successfully exported.</h4>\r\n <a");
WriteAttribute("href", Tuple.Create(" href=\"", 9027), Tuple.Create("\"", 9099) WriteAttribute("href", Tuple.Create(" href=\"", 9307), Tuple.Create("\"", 9379)
#line 171 "..\..\Views\Device\Export.cshtml" #line 177 "..\..\Views\Device\Export.cshtml"
, Tuple.Create(Tuple.Create("", 9034), Tuple.Create<System.Object, System.Int32>(Url.Action(MVC.API.Device.ExportRetrieve(Model.ExportSessionId)) , Tuple.Create(Tuple.Create("", 9314), Tuple.Create<System.Object, System.Int32>(Url.Action(MVC.API.Device.ExportRetrieve(Model.ExportSessionId))
#line default #line default
#line hidden #line hidden
, 9034), false) , 9314), false)
); );
WriteLiteral(" class=\"button\""); WriteLiteral(" class=\"button\"");
@@ -620,7 +637,7 @@ WriteLiteral(@" <script>
"); ");
#line 185 "..\..\Views\Device\Export.cshtml" #line 191 "..\..\Views\Device\Export.cshtml"
} }