From f82b47dd46f042e9a6902fcfd5536227be25eceb Mon Sep 17 00:00:00 2001 From: Gary Sharp Date: Sun, 29 Nov 2020 16:45:10 +1100 Subject: [PATCH] Feature: Display detailed device hardware audit information The device Details tab now displays processor, memory, disk and network adapter information collected at the previous enrolment --- .../Extensions/MeasurementUnitExtensions.cs | 90 ++ Disco.Web/ClientSource/Style/Device.css | 53 +- Disco.Web/ClientSource/Style/Device.less | 35 +- Disco.Web/ClientSource/Style/Device.min.css | 2 +- .../Views/Device/DeviceParts/_Details.cshtml | 267 ++++- .../Device/DeviceParts/_Details.generated.cs | 1027 +++++++++++++++-- 6 files changed, 1331 insertions(+), 143 deletions(-) create mode 100644 Disco.Services/Extensions/MeasurementUnitExtensions.cs diff --git a/Disco.Services/Extensions/MeasurementUnitExtensions.cs b/Disco.Services/Extensions/MeasurementUnitExtensions.cs new file mode 100644 index 00000000..df41a16c --- /dev/null +++ b/Disco.Services/Extensions/MeasurementUnitExtensions.cs @@ -0,0 +1,90 @@ +using Disco.Models.ClientServices.EnrolmentInformation; + +namespace Disco.Services +{ + public static class MeasurementUnitExtensions + { + + private const ulong kilobyte = 1024ul; + private const ulong megabyte = kilobyte * 1024ul; + private const ulong gigabyte = megabyte * 1024ul; + private const ulong terabyte = gigabyte * 1024ul; + + private const ulong maxbit = 9223372036854775807ul; + private const ulong kilobit = 1000ul; + private const ulong megabit = kilobit * 1000ul; + private const ulong gigabit = megabit * 1000ul; + + private const uint gigahertz = 1000u; + + public static string ByteSizeToFriendly(ulong bytes) + { + if (bytes >= terabyte) + { + return $"{(double)bytes / terabyte:N2} TB"; + } + if (bytes >= gigabyte) + { + return $"{(double)bytes / gigabyte:N2} GB"; + } + if (bytes >= megabyte) + { + return $"{(double)bytes / megabyte:N2} MB"; + } + if (bytes >= kilobyte) + { + return $"{(double)bytes / kilobyte:N2} KB"; + } + return $"{bytes:N0} B"; + } + + public static string SpeedPacketBitsToFriendly(ulong speed) + { + if (speed == maxbit || speed == 0) + return "Unknown"; + if (speed >= gigabit) + { + if (speed % gigabit == 0) + return $"{(double)speed / gigabit:N0} Gbps"; + else + return $"{(double)speed / gigabit:N2} Gbps"; + } + if (speed >= megabit) + { + if (speed % megabit == 0) + return $"{(double)speed / megabit:N0} Mbps"; + else + return $"{(double)speed / megabit:N2} Mbps"; + } + if (speed >= kilobit) + { + if (speed % kilobit == 0) + return $"{(double)speed / kilobit:N0} Kbps"; + else + return $"{(double)speed / kilobit:N2} Kbps"; + } + return $"{speed:N0} Bps"; + } + + public static string SpeedMegahertzToFriendly(uint speed) + { + if (speed >= gigahertz) + { + if (speed % gigahertz == 0) + return $"{(double)speed / gigahertz:N0} GHz"; + else + return $"{(double)speed / gigahertz:N2} GHz"; + } + return $"{speed:N0} MHz"; + } + + public static string SizeFriendly(this DiskDrive diskDrive) => ByteSizeToFriendly(diskDrive.Size); + public static string SizeFriendly(this DiskDrivePartition partition) => ByteSizeToFriendly(partition.Size); + public static string SizeFriendly(this DiskLogical disk) => ByteSizeToFriendly(disk.Size); + public static string FreeSpaceFriendly(this DiskLogical disk) => ByteSizeToFriendly(disk.FreeSpace); + public static string SpeedFriendly(this NetworkAdapter networkAdapter) => SpeedPacketBitsToFriendly(networkAdapter.Speed); + public static string CapacityFriendly(this PhysicalMemory physicalMemory) => ByteSizeToFriendly(physicalMemory.Capacity); + public static string MaxClockSpeedFriendly(this Processor processor) => SpeedMegahertzToFriendly(processor.MaxClockSpeed); + + } +} diff --git a/Disco.Web/ClientSource/Style/Device.css b/Disco.Web/ClientSource/Style/Device.css index 552bd4ae..520dc725 100644 --- a/Disco.Web/ClientSource/Style/Device.css +++ b/Disco.Web/ClientSource/Style/Device.css @@ -7,7 +7,7 @@ background-color: #fff; } .tableData > tbody > tr:nth-child(odd) > td { - background-color: #fbfbfb; + background-color: hsl(0, 0%, 98.5%); } .tableData > thead > tr > th, .tableData > tbody > tr > th { @@ -15,7 +15,7 @@ border: solid 1px #f4f4f4; } .tableData > tbody > tr:hover > td { - background-color: #f9f9f9; + background-color: hsl(0, 0%, 97.5%); } .tableData > tfoot > tr > th, .tableData > tfoot > tr > td { @@ -201,7 +201,7 @@ } #Device_Show_Policies_Profile_Actions_Update_Dialog ul li:nth-child(odd), #Device_Show_Policies_Batch_Actions_Update_Dialog ul li:nth-child(odd) { - background-color: #fbfbfb; + background-color: hsl(0, 0%, 98.5%); } #Device_Show_Policies_Profile_Actions_Update_Dialog ul li.selected, #Device_Show_Policies_Batch_Actions_Update_Dialog ul li.selected { @@ -235,7 +235,7 @@ background-color: #fff; } #DeviceDetailTab-DetailsContainer > table > tbody > tr:nth-child(odd) > td { - background-color: #fbfbfb; + background-color: hsl(0, 0%, 98.5%); } #DeviceDetailTab-DetailsContainer > table > thead > tr > th, #DeviceDetailTab-DetailsContainer > table > tbody > tr > th { @@ -243,7 +243,7 @@ border: solid 1px #f4f4f4; } #DeviceDetailTab-DetailsContainer > table > tbody > tr:hover > td { - background-color: #f9f9f9; + background-color: hsl(0, 0%, 97.5%); } #DeviceDetailTab-DetailsContainer > table > tfoot > tr > th, #DeviceDetailTab-DetailsContainer > table > tfoot > tr > td { @@ -253,9 +253,38 @@ width: 150px; } #DeviceDetailTab-DetailsContainer > table > tbody > tr > th, -#DeviceDetailTab-DetailsContainer > table > tbody > tr > td { +#DeviceDetailTab-DetailsContainer > table > tbody > tr > td.pad { padding: 10px 6px; } +#DeviceDetailTab-DetailsContainer .device_detail_disk_drives .partition { + position: relative; + height: 40px; +} +#DeviceDetailTab-DetailsContainer .device_detail_disk_drives .partition > span { + position: absolute; + display: block; + height: 40px; + box-sizing: border-box; + overflow-x: hidden; + overflow-y: hidden; + text-overflow: ellipsis; + white-space: nowrap; + background-color: #f4f4f4; + padding: 2px; + line-height: 18px; + border: 1px solid #cacaca; +} +#DeviceDetailTab-DetailsContainer .device_detail_disk_drives .partition > span .details { + position: relative; +} +#DeviceDetailTab-DetailsContainer .device_detail_disk_drives .partition > span .freespace { + position: absolute; + top: 0; + height: 40px; + display: block; + background-color: #fff; + background: repeating-linear-gradient(45deg, #f4f4f4, #f4f4f4 10px, #fff 10px, #fff 20px); +} #deviceShowResources #AttachmentsContainer { padding: 0; } @@ -319,7 +348,7 @@ border: 1px solid #ccc; } #deviceShowResources #Attachments div.attachmentOutput > a:hover span.remove { - opacity: .5; + opacity: 0.5; } #deviceShowResources #Attachments div.attachmentOutput > a span.remove { font-size: 1.4em; @@ -345,7 +374,7 @@ cursor: pointer; float: right; border: 1px solid #fff; - padding: .5em; + padding: 0.5em; } #deviceShowResources #Attachments div.attachmentInput span.action:hover { color: #335A87; @@ -366,14 +395,14 @@ display: none; } #Devices_Export #Devices_Export_Fields #Devices_Export_Fields_Defaults { - font-size: .75em; + font-size: 0.75em; } #Devices_Export #Devices_Export_Fields th { font-size: 1.05em; } #Devices_Export #Devices_Export_Fields th span { margin-top: 4px; - font-size: .8em; + font-size: 0.8em; } #Devices_Export_Download_Dialog { padding-top: 20px; @@ -489,7 +518,7 @@ background-color: #e7f9d5; } #Devices_Import_Review #Devices_Import_Review_Navigation ul li.actionUnchanged { - background-color: #fbfbfb; + background-color: hsl(0, 0%, 98.5%); } #Devices_Import_Review #Devices_Import_Review_TableContainer { margin: 18px 0; @@ -518,7 +547,7 @@ content: "\f068"; } #Devices_Import_Review #Devices_Import_Review_TableContainer table > tbody tr.actionUnchanged td { - background-color: #fbfbfb; + background-color: hsl(0, 0%, 98.5%); } #Devices_Import_Review #Devices_Import_Review_TableContainer table > tbody tr.actionUnchanged td:nth-child(n+3) { color: #ccc; diff --git a/Disco.Web/ClientSource/Style/Device.less b/Disco.Web/ClientSource/Style/Device.less index ec78887e..7f6c8ed9 100644 --- a/Disco.Web/ClientSource/Style/Device.less +++ b/Disco.Web/ClientSource/Style/Device.less @@ -215,11 +215,44 @@ width: 150px; } - & > th, & > td { + & > th, & > td.pad { padding: 10px 6px; } } } + + .device_detail_disk_drives .partition { + position: relative; + height: 40px; + + & > span { + position: absolute; + display: block; + height: 40px; + box-sizing: border-box; + overflow-x: hidden; + overflow-y: hidden; + text-overflow: ellipsis; + white-space: nowrap; + background-color: #f4f4f4; + padding: 2px; + line-height: 18px; + border: 1px solid #cacaca; + + .details { + position: relative; + } + + .freespace { + position: absolute; + top: 0; + height: 40px; + display: block; + background-color: #fff; + background: repeating-linear-gradient(45deg, #f4f4f4, #f4f4f4 10px, #fff 10px, #fff 20px); + } + } + } } diff --git a/Disco.Web/ClientSource/Style/Device.min.css b/Disco.Web/ClientSource/Style/Device.min.css index bce49c38..8fd681ab 100644 --- a/Disco.Web/ClientSource/Style/Device.min.css +++ b/Disco.Web/ClientSource/Style/Device.min.css @@ -1 +1 @@ -.tableData{border:solid 1px #f4f4f4;border-collapse:collapse;}.tableData>tbody>tr>td{border:solid 1px #f4f4f4;background-color:#fff;}.tableData>tbody>tr:nth-child(odd)>td{background-color:#fbfbfb;}.tableData>thead>tr>th,.tableData>tbody>tr>th{background-color:#f4f4f4;border:solid 1px #f4f4f4;}.tableData>tbody>tr:hover>td{background-color:#f9f9f9;}.tableData>tfoot>tr>th,.tableData>tfoot>tr>td{background-color:#f4f4f4;}.tableDataDark{border:solid 1px #d8d8d8;border-collapse:collapse;}.tableDataDark td{border:solid 1px #d8d8d8;background-color:#fff;}.tableDataDark th{background-color:#eee;border:solid 1px #d8d8d8;}.tableDataContainer{background-color:#fff;}.tableDataVertical{border:solid 1px #f4f4f4;border-collapse:collapse;}.tableDataVertical>tbody>tr:nth-child(odd){background-color:#f4f4f4;margin:0;padding:0;}.tableDataVertical>tbody>tr>th.name{width:170px;text-align:right;}.tableDataVertical table.sub>tbody>tr:not(:first-child)>th,.tableDataVertical table.sub>tbody>tr:not(:first-child)>td{border-top:1px dashed #aaa;}.tableDataVertical table.sub>tbody>tr>th{font-weight:normal;text-align:right;}.tableDataVertical table.sub>tbody>tr>th.name{text-align:right;}.icon16{display:inline-block;height:16px;width:16px;margin-left:2px;cursor:pointer;}.subtleUntilHover{-moz-opacity:.3;opacity:.3;}.subtleUntilHover:hover{-moz-opacity:1;opacity:1;}#layout_PageHeading #Device_Show_Status{margin-left:20px;display:inline-block;height:50px;font-family:"Segoe UI",Arial,Verdana,Tahoma,sans-serif;font-weight:lighter;font-stretch:condensed;font-size:.7em;text-transform:uppercase;}#layout_PageHeading #Device_Show_Status span.icon{margin-right:6px;}#Device_Show #Device_Show_Subjects{table-layout:fixed;}#Device_Show #Device_Show_Subjects>tbody>tr>td{padding-top:0;height:100%;}#Device_Show #Device_Show_Subjects>tbody>tr>td>div{position:relative;}#Device_Show #Device_Show_Subjects>tbody>tr>td>div div.status{margin-top:2px;padding-top:2px;border-top:1px dashed #ddd;}#Device_Show #Device_Show_Subjects>tbody>tr>td>div input.discreet{margin-left:-2px;}#Device_Show #Device_Show_Subjects>tbody>tr>td:not(:last-child){border-right:1px dashed #aaa;}#Device_Show #Device_Show_Subjects #Device_Show_Details table.verticalHeadings>tbody>tr>td:first-child{width:104px;font-weight:600;}#Device_Show #Device_Show_Subjects #Device_Show_Details #Device_Show_Details_Asset_Name{font-weight:600;}#Device_Show #Device_Show_Subjects #Device_Show_Details #Device_Show_Details_Asset_Enrolled_Trusted{display:inline-block;height:16px;padding-left:16px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACWUlEQVQ4y6XRXWiSURgHcJsXa4WNNuuyiy6CoAupixERoXXhmljuxaJiFrVA1i72cVFCOSMt8rNt2YfGO5g5Z1NstWW+c4ZBq4QpqMkEbZDSCObAMprjdf90sIjxsgUdODd/zvmd5zwPCwDrf/aGB7q6utgmk8ngdruzVqt10eVyTWu1Wuk/AXK5vMpoNPpjsRgGbU8/9fbdH/J4PAuRSARKpfLKhoBYLG595nTCaDSZVjPp6TPbHQ5H0mAwfBeJRHXrAp0dna9JcqCguX2H/Xd+S625aLFYQBDE8XWBd+8/TI6Njc+vzcfGX4nLX4FOp5OuC0wGAlS53NzaPPAm2Gi32+H3+5tYJEl+pigKoVAIPp+PnpqaosPhMF1uHB2Px2mv14vya6VgMKhhHGN3d/dSMplENptFIpHA3NwcCoUCSqUSKqvScZVKBbPZHGQEFApFMZ1OI5PJIBqNrkD5fB40Ta8AlcrUajVsNpufEbh+42YxHEkh+/UbUqlZpGd/lAH8WTMzMzDd64d7NMAMDOobi/OpHqh6rqK9jcCvBQncQzK0Xm5DPn0BJ4lz6GgVIkedYAaamxqK0dEDePl4FziczehTsZGLs7BnNwdiwRac4lejvp6La83VzABv/8FF/qG9oD/WQS/fhNptHEw8rEJiuAo7ubXACAtH9m0Fu2YHxQzweEuEVIYnaiFmvQ04f1aItksi5KaP4ZFGjDB5GG/7j4LL5YYYgZYW2c/yiJbv6h/A0EvC4RjGiOsFnK4J+KgABmyjsDufL0skki8CgYCoXOLz+TWrwG+kXMkgQ6yv+QAAAABJRU5ErkJggg==);background-repeat:no-repeat;}#Device_Show #Device_Show_Subjects #Device_Show_Details #Device_Show_User #Device_Show_User_Flags{font-size:16px;}#Device_Show #Device_Show_Subjects #Device_Show_Details #Device_Show_User #Device_Show_User_Flags>i{cursor:default;}#Device_Show #Device_Show_Subjects #Device_Show_Details #Device_Show_User #Device_Show_User_Flags>i>.details{display:none;}#Device_Show #Device_Show_Subjects #Device_Show_Details #Device_Show_GenerateDocument_Container{padding-top:4px;}#Device_Show #Device_Show_Subjects #Device_Show_Details #Device_Show_GenerateDocument_Container #Device_Show_GenerateDocument{padding:0;}#Device_Show #Device_Show_Subjects #Device_Show_Policies table.verticalHeadings>tbody>tr>td:first-child{width:120px;font-weight:600;}#Device_Show #Device_Show_Subjects #Device_Show_Aspects #Device_Show_Aspects_Model_Image{display:block;width:256px;height:256px;margin:0 auto;}#Device_Show #Device_Show_Subjects #Device_Show_Subjects_Actions>td{padding-top:4px;}#DeviceDetailTabs{margin-top:10px;border-radius:0;background-image:none;background-color:#fff;border:none;padding:0;}#DeviceDetailTabs #DeviceDetailTabItems{border-radius:0;border-top:1px solid #ddd;border-right:1px solid #ddd;border-left:1px solid #ddd;border-bottom:none;padding:2px 0 0 4px;background-image:none;background-color:#eee;display:table;}#DeviceDetailTabs #DeviceDetailTabItems>li{top:0;border-radius:0;margin:0 5px 0 0;padding:0;line-height:normal;margin-right:4px;}#DeviceDetailTabs #DeviceDetailTabItems>li>a{padding:5px 8px;}#DeviceDetailTabs div.ui-tabs-panel{border-radius:0;padding:4px;border-right:1px solid #ddd;border-bottom:1px solid #ddd;border-left:1px solid #ddd;border-top:none;background-color:#eee;}#Device_Show_Policies_Profile_Actions_Update_Dialog ul li,#Device_Show_Policies_Batch_Actions_Update_Dialog ul li{background-color:#fff;padding:2px 0 2px 4px;}#Device_Show_Policies_Profile_Actions_Update_Dialog ul li:nth-child(odd),#Device_Show_Policies_Batch_Actions_Update_Dialog ul li:nth-child(odd){background-color:#fbfbfb;}#Device_Show_Policies_Profile_Actions_Update_Dialog ul li.selected,#Device_Show_Policies_Batch_Actions_Update_Dialog ul li.selected{background-color:#cddbec;font-weight:600;}#DeviceDetailTab-JobsContainer div.jobTable{margin:-1px;border:1px solid #ddd;}#DeviceDetailTab-JobsContainer .dataTables_wrapper .dataTables_filter{margin-top:-24px;-moz-opacity:1;opacity:1;}#DeviceDetailTab-JobsContainer .dataTables_wrapper .dataTables_length{margin-top:-24px;-moz-opacity:1;opacity:1;}#DeviceDetailTab-JobsContainer .dataTables_wrapper .dataTables_showStatusClosed{right:220px;margin-top:-24px;}#DeviceDetailTab-DetailsContainer>table{border:solid 1px #f4f4f4;border-collapse:collapse;}#DeviceDetailTab-DetailsContainer>table>tbody>tr>td{border:solid 1px #f4f4f4;background-color:#fff;}#DeviceDetailTab-DetailsContainer>table>tbody>tr:nth-child(odd)>td{background-color:#fbfbfb;}#DeviceDetailTab-DetailsContainer>table>thead>tr>th,#DeviceDetailTab-DetailsContainer>table>tbody>tr>th{background-color:#f4f4f4;border:solid 1px #f4f4f4;}#DeviceDetailTab-DetailsContainer>table>tbody>tr:hover>td{background-color:#f9f9f9;}#DeviceDetailTab-DetailsContainer>table>tfoot>tr>th,#DeviceDetailTab-DetailsContainer>table>tfoot>tr>td{background-color:#f4f4f4;}#DeviceDetailTab-DetailsContainer>table>tbody>tr>th{width:150px;}#DeviceDetailTab-DetailsContainer>table>tbody>tr>th,#DeviceDetailTab-DetailsContainer>table>tbody>tr>td{padding:10px 6px;}#deviceShowResources #AttachmentsContainer{padding:0;}#deviceShowResources #Attachments{position:relative;border:1px solid #ccc;background-color:#fff;}#deviceShowResources #Attachments div.attachmentOutput{position:relative;height:115px;overflow:auto;}#deviceShowResources #Attachments div.attachmentOutput>a{display:block;float:left;height:48px;width:221px;padding:2px;margin:2px;font-size:.9em;border:1px solid #fff;color:#000;text-decoration:none;}#deviceShowResources #Attachments div.attachmentOutput>a span.comments,#deviceShowResources #Attachments div.attachmentOutput>a span.author,#deviceShowResources #Attachments div.attachmentOutput>a span.timestamp{display:block;float:left;width:168px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;height:16px;}#deviceShowResources #Attachments div.attachmentOutput>a span.author{color:#888;width:150px;}#deviceShowResources #Attachments div.attachmentOutput>a span.timestamp{color:#888;font-style:italic;}#deviceShowResources #Attachments div.attachmentOutput>a span.icon{display:block;float:left;height:48px;width:48px;margin-right:2px;}#deviceShowResources #Attachments div.attachmentOutput>a span.icon img{height:48px;width:48px;}#deviceShowResources #Attachments div.attachmentOutput>a span.icon img.loading{display:none;}#deviceShowResources #Attachments div.attachmentOutput>a:hover{background-color:#ededed;border:1px solid #ccc;}#deviceShowResources #Attachments div.attachmentOutput>a:hover span.remove{opacity:.5;}#deviceShowResources #Attachments div.attachmentOutput>a span.remove{font-size:1.4em;color:#e51400;margin-left:6px;cursor:pointer;opacity:0;}#deviceShowResources #Attachments div.attachmentOutput>a span.remove:hover{opacity:1;}#deviceShowResources #Attachments div.attachmentInput{border-top:1px solid #ccc;height:40px;background-color:#fff;padding:3px;}#deviceShowResources #Attachments div.attachmentInput span.action{color:#333;display:block;margin:0 4px 0 0;font-size:1.5em;cursor:pointer;float:right;border:1px solid #fff;padding:.5em;}#deviceShowResources #Attachments div.attachmentInput span.action:hover{color:#335a87;background-color:#ededed;border:1px solid #ccc;}#deviceShowResources #Attachments div.attachmentInput span.action.disabled{color:rgba(51,51,51,.2);cursor:default;}#deviceShowResources #Attachments div.attachmentInput span.action.disabled:hover{color:rgba(51,51,51,.2);background-color:inherit;border:1px solid #fff;}#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;}#Devices_Export_Exporting{padding-top:50px;text-align:center;}#Devices_Export_Exporting i{margin-right:10px;color:#1e6dab;}#Devices_Import #ImportFile{width:96%;margin-bottom:8px;}#Devices_Import #Devices_Import_Documentation{width:700px;margin:20px auto;}#Devices_Import #Devices_Import_Documentation>table>tbody th:first-child{width:220px;}#Devices_Import_Completed_Dialog{padding:50px 0;text-align:center;}#Devices_Import_Completed_Dialog h3{margin-bottom:16px;}#Devices_Import_Completed_Dialog i{margin-right:10px;color:#60a917;}#Devices_Import_Loading_Dialog{padding-top:50px;text-align:center;}#Devices_Import_Loading_Dialog i{margin-right:10px;color:#1e6dab;}#Devices_Import_Headers #Devices_Import_Headers_TableContainer{margin:18px 0;overflow-x:auto;border:1px solid #ccc;}#Devices_Import_Headers #Devices_Import_Headers_TableContainer table>thead{white-space:nowrap;}#Devices_Import_Headers #Devices_Import_Headers_TableContainer table>thead ul.importHeaderType>li>a>span:not(.ui-menu-icon){padding-right:16px;}#Devices_Import_Headers #Devices_Import_Headers_TableContainer table>thead ul.importHeaderType ul{z-index:1000;}#Devices_Import_Headers #Devices_Import_Headers_TableContainer table>thead td.headerIgnoreColumn{background-color:#fa6800;}#Devices_Import_Headers #Devices_Import_Headers_TableContainer table>thead td:not(.headerIgnoreColumn){background-color:#1e6dab;}#Devices_Import_Headers #Devices_Import_Headers_TableContainer table>tbody td.headerDeviceSerialNumber{border-top-color:#d1e6f7;border-bottom-color:#d1e6f7;background-color:#e2f0fa;}#Devices_Import_Headers #Devices_Import_Headers_TableContainer table>tbody td.headerIgnoreColumn{max-width:150px;white-space:nowrap;overflow:hidden;-ms-text-overflow:ellipsis;-o-text-overflow:ellipsis;text-overflow:ellipsis;color:#ccc;}#Devices_Import_Parsing_Dialog{padding-top:50px;text-align:center;}#Devices_Import_Parsing_Dialog i{margin-right:10px;color:#1e6dab;}#Devices_Import_Review #Devices_Import_Review_Navigation{margin-top:15px;text-align:right;}#Devices_Import_Review #Devices_Import_Review_Navigation ul{display:inline-block;padding:0;border:1px solid #bbb;}#Devices_Import_Review #Devices_Import_Review_Navigation ul li{display:inline-block;padding:3px 10px;margin:0;}#Devices_Import_Review #Devices_Import_Review_Navigation ul li.actionDetached{background-color:#ffd0cc;}#Devices_Import_Review #Devices_Import_Review_Navigation ul li.actionModified{background-color:#e2f0fa;}#Devices_Import_Review #Devices_Import_Review_Navigation ul li.actionAdded{background-color:#e7f9d5;}#Devices_Import_Review #Devices_Import_Review_Navigation ul li.actionUnchanged{background-color:#fbfbfb;}#Devices_Import_Review #Devices_Import_Review_TableContainer{margin:18px 0;overflow-x:auto;border:1px solid #ccc;}#Devices_Import_Review #Devices_Import_Review_TableContainer table>thead{white-space:nowrap;}#Devices_Import_Review #Devices_Import_Review_TableContainer table>thead tr:nth-child(2) th{padding-top:0;font-weight:normal;font-size:.9em;}#Devices_Import_Review #Devices_Import_Review_TableContainer table>tbody td.action{text-align:center;}#Devices_Import_Review #Devices_Import_Review_TableContainer table>tbody tr.actionDetached td.action i:before{color:#e51400;content:"";}#Devices_Import_Review #Devices_Import_Review_TableContainer table>tbody tr.actionDetached td{background-color:#ffe7e5;}#Devices_Import_Review #Devices_Import_Review_TableContainer table>tbody tr.actionUnchanged td.action i:before{content:"";}#Devices_Import_Review #Devices_Import_Review_TableContainer table>tbody tr.actionUnchanged td{background-color:#fbfbfb;}#Devices_Import_Review #Devices_Import_Review_TableContainer table>tbody tr.actionUnchanged td:nth-child(n+3){color:#ccc;}#Devices_Import_Review #Devices_Import_Review_TableContainer table>tbody tr.actionModified td.action i:before{color:#1e6dab;content:"";}#Devices_Import_Review #Devices_Import_Review_TableContainer table>tbody tr.actionModified td{background-color:#f4f9fd;}#Devices_Import_Review #Devices_Import_Review_TableContainer table>tbody tr.actionAdded td.action i:before{color:#60a917;content:"";}#Devices_Import_Review #Devices_Import_Review_TableContainer table>tbody tr.actionAdded td{background-color:#e7f9d5;}#Devices_Import_Review #Devices_Import_Review_TableContainer table>tbody tr:not(.actionUnchanged) td.actionUnchanged:nth-child(n+3):not(.headerDeviceSerialNumber){color:#ccc;}#Devices_Import_Review #Devices_Import_Review_TableContainer table>tbody td.actionError{color:#e51400;background-color:#fff1ef;}#Devices_Import_Review #Devices_Import_Review_TableContainer table>tbody td.actionError span.errorMessage{display:none;}#Devices_Import_Review #Devices_Import_Review_TableContainer table>tbody td.actionModified{background-color:#e2f0fa !important;}#Devices_Import_Review #Devices_Import_Review_TableContainer table>tbody td.headerDeviceSerialNumber,#Devices_Import_Review #Devices_Import_Review_TableContainer table>tbody td.headerDeviceDecommissionedDate,#Devices_Import_Review #Devices_Import_Review_TableContainer table>tbody td.headerDeviceDecommissionedReason,#Devices_Import_Review #Devices_Import_Review_TableContainer table>tbody td.headerModelId,#Devices_Import_Review #Devices_Import_Review_TableContainer table>tbody td.headerBatchId,#Devices_Import_Review #Devices_Import_Review_TableContainer table>tbody td.headerProfileId,#Devices_Import_Review #Devices_Import_Review_TableContainer table>tbody td.headerAssignedUserId{white-space:nowrap;}#Devices_Import_Review #Devices_Import_Review_TableContainer table>tbody span.smallMessage{color:inherit;} \ No newline at end of file +.tableData{border:solid 1px #f4f4f4;border-collapse:collapse;}.tableData>tbody>tr>td{border:solid 1px #f4f4f4;background-color:#fff;}.tableData>tbody>tr:nth-child(odd)>td{background-color:hsl(0,0%,98.5%);}.tableData>thead>tr>th,.tableData>tbody>tr>th{background-color:#f4f4f4;border:solid 1px #f4f4f4;}.tableData>tbody>tr:hover>td{background-color:hsl(0,0%,97.5%);}.tableData>tfoot>tr>th,.tableData>tfoot>tr>td{background-color:#f4f4f4;}.tableDataDark{border:solid 1px #d8d8d8;border-collapse:collapse;}.tableDataDark td{border:solid 1px #d8d8d8;background-color:#fff;}.tableDataDark th{background-color:#eee;border:solid 1px #d8d8d8;}.tableDataContainer{background-color:#fff;}.tableDataVertical{border:solid 1px #f4f4f4;border-collapse:collapse;}.tableDataVertical>tbody>tr:nth-child(odd){background-color:#f4f4f4;margin:0;padding:0;}.tableDataVertical>tbody>tr>th.name{width:170px;text-align:right;}.tableDataVertical table.sub>tbody>tr:not(:first-child)>th,.tableDataVertical table.sub>tbody>tr:not(:first-child)>td{border-top:1px dashed #aaa;}.tableDataVertical table.sub>tbody>tr>th{font-weight:normal;text-align:right;}.tableDataVertical table.sub>tbody>tr>th.name{text-align:right;}.icon16{display:inline-block;height:16px;width:16px;margin-left:2px;cursor:pointer;}.subtleUntilHover{-moz-opacity:.3;opacity:.3;}.subtleUntilHover:hover{-moz-opacity:1;opacity:1;}#layout_PageHeading #Device_Show_Status{margin-left:20px;display:inline-block;height:50px;font-family:"Segoe UI",Arial,Verdana,Tahoma,sans-serif;font-weight:lighter;font-stretch:condensed;font-size:.7em;text-transform:uppercase;}#layout_PageHeading #Device_Show_Status span.icon{margin-right:6px;}#Device_Show #Device_Show_Subjects{table-layout:fixed;}#Device_Show #Device_Show_Subjects>tbody>tr>td{padding-top:0;height:100%;}#Device_Show #Device_Show_Subjects>tbody>tr>td>div{position:relative;}#Device_Show #Device_Show_Subjects>tbody>tr>td>div div.status{margin-top:2px;padding-top:2px;border-top:1px dashed #ddd;}#Device_Show #Device_Show_Subjects>tbody>tr>td>div input.discreet{margin-left:-2px;}#Device_Show #Device_Show_Subjects>tbody>tr>td:not(:last-child){border-right:1px dashed #aaa;}#Device_Show #Device_Show_Subjects #Device_Show_Details table.verticalHeadings>tbody>tr>td:first-child{width:104px;font-weight:600;}#Device_Show #Device_Show_Subjects #Device_Show_Details #Device_Show_Details_Asset_Name{font-weight:600;}#Device_Show #Device_Show_Subjects #Device_Show_Details #Device_Show_Details_Asset_Enrolled_Trusted{display:inline-block;height:16px;padding-left:16px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACWUlEQVQ4y6XRXWiSURgHcJsXa4WNNuuyiy6CoAupixERoXXhmljuxaJiFrVA1i72cVFCOSMt8rNt2YfGO5g5Z1NstWW+c4ZBq4QpqMkEbZDSCObAMprjdf90sIjxsgUdODd/zvmd5zwPCwDrf/aGB7q6utgmk8ngdruzVqt10eVyTWu1Wuk/AXK5vMpoNPpjsRgGbU8/9fbdH/J4PAuRSARKpfLKhoBYLG595nTCaDSZVjPp6TPbHQ5H0mAwfBeJRHXrAp0dna9JcqCguX2H/Xd+S625aLFYQBDE8XWBd+8/TI6Njc+vzcfGX4nLX4FOp5OuC0wGAlS53NzaPPAm2Gi32+H3+5tYJEl+pigKoVAIPp+PnpqaosPhMF1uHB2Px2mv14vya6VgMKhhHGN3d/dSMplENptFIpHA3NwcCoUCSqUSKqvScZVKBbPZHGQEFApFMZ1OI5PJIBqNrkD5fB40Ta8AlcrUajVsNpufEbh+42YxHEkh+/UbUqlZpGd/lAH8WTMzMzDd64d7NMAMDOobi/OpHqh6rqK9jcCvBQncQzK0Xm5DPn0BJ4lz6GgVIkedYAaamxqK0dEDePl4FziczehTsZGLs7BnNwdiwRac4lejvp6La83VzABv/8FF/qG9oD/WQS/fhNptHEw8rEJiuAo7ubXACAtH9m0Fu2YHxQzweEuEVIYnaiFmvQ04f1aItksi5KaP4ZFGjDB5GG/7j4LL5YYYgZYW2c/yiJbv6h/A0EvC4RjGiOsFnK4J+KgABmyjsDufL0skki8CgYCoXOLz+TWrwG+kXMkgQ6yv+QAAAABJRU5ErkJggg==);background-repeat:no-repeat;}#Device_Show #Device_Show_Subjects #Device_Show_Details #Device_Show_User #Device_Show_User_Flags{font-size:16px;}#Device_Show #Device_Show_Subjects #Device_Show_Details #Device_Show_User #Device_Show_User_Flags>i{cursor:default;}#Device_Show #Device_Show_Subjects #Device_Show_Details #Device_Show_User #Device_Show_User_Flags>i>.details{display:none;}#Device_Show #Device_Show_Subjects #Device_Show_Details #Device_Show_GenerateDocument_Container{padding-top:4px;}#Device_Show #Device_Show_Subjects #Device_Show_Details #Device_Show_GenerateDocument_Container #Device_Show_GenerateDocument{padding:0;}#Device_Show #Device_Show_Subjects #Device_Show_Policies table.verticalHeadings>tbody>tr>td:first-child{width:120px;font-weight:600;}#Device_Show #Device_Show_Subjects #Device_Show_Aspects #Device_Show_Aspects_Model_Image{display:block;width:256px;height:256px;margin:0 auto;}#Device_Show #Device_Show_Subjects #Device_Show_Subjects_Actions>td{padding-top:4px;}#DeviceDetailTabs{margin-top:10px;border-radius:0;background-image:none;background-color:#fff;border:none;padding:0;}#DeviceDetailTabs #DeviceDetailTabItems{border-radius:0;border-top:1px solid #ddd;border-right:1px solid #ddd;border-left:1px solid #ddd;border-bottom:none;padding:2px 0 0 4px;background-image:none;background-color:#eee;display:table;}#DeviceDetailTabs #DeviceDetailTabItems>li{top:0;border-radius:0;margin:0 5px 0 0;padding:0;line-height:normal;margin-right:4px;}#DeviceDetailTabs #DeviceDetailTabItems>li>a{padding:5px 8px;}#DeviceDetailTabs div.ui-tabs-panel{border-radius:0;padding:4px;border-right:1px solid #ddd;border-bottom:1px solid #ddd;border-left:1px solid #ddd;border-top:none;background-color:#eee;}#Device_Show_Policies_Profile_Actions_Update_Dialog ul li,#Device_Show_Policies_Batch_Actions_Update_Dialog ul li{background-color:#fff;padding:2px 0 2px 4px;}#Device_Show_Policies_Profile_Actions_Update_Dialog ul li:nth-child(odd),#Device_Show_Policies_Batch_Actions_Update_Dialog ul li:nth-child(odd){background-color:hsl(0,0%,98.5%);}#Device_Show_Policies_Profile_Actions_Update_Dialog ul li.selected,#Device_Show_Policies_Batch_Actions_Update_Dialog ul li.selected{background-color:#cddbec;font-weight:600;}#DeviceDetailTab-JobsContainer div.jobTable{margin:-1px;border:1px solid #ddd;}#DeviceDetailTab-JobsContainer .dataTables_wrapper .dataTables_filter{margin-top:-24px;-moz-opacity:1;opacity:1;}#DeviceDetailTab-JobsContainer .dataTables_wrapper .dataTables_length{margin-top:-24px;-moz-opacity:1;opacity:1;}#DeviceDetailTab-JobsContainer .dataTables_wrapper .dataTables_showStatusClosed{right:220px;margin-top:-24px;}#DeviceDetailTab-DetailsContainer>table{border:solid 1px #f4f4f4;border-collapse:collapse;}#DeviceDetailTab-DetailsContainer>table>tbody>tr>td{border:solid 1px #f4f4f4;background-color:#fff;}#DeviceDetailTab-DetailsContainer>table>tbody>tr:nth-child(odd)>td{background-color:hsl(0,0%,98.5%);}#DeviceDetailTab-DetailsContainer>table>thead>tr>th,#DeviceDetailTab-DetailsContainer>table>tbody>tr>th{background-color:#f4f4f4;border:solid 1px #f4f4f4;}#DeviceDetailTab-DetailsContainer>table>tbody>tr:hover>td{background-color:hsl(0,0%,97.5%);}#DeviceDetailTab-DetailsContainer>table>tfoot>tr>th,#DeviceDetailTab-DetailsContainer>table>tfoot>tr>td{background-color:#f4f4f4;}#DeviceDetailTab-DetailsContainer>table>tbody>tr>th{width:150px;}#DeviceDetailTab-DetailsContainer>table>tbody>tr>th,#DeviceDetailTab-DetailsContainer>table>tbody>tr>td.pad{padding:10px 6px;}#DeviceDetailTab-DetailsContainer .device_detail_disk_drives .partition{position:relative;height:40px;}#DeviceDetailTab-DetailsContainer .device_detail_disk_drives .partition>span{position:absolute;display:block;height:40px;box-sizing:border-box;overflow-x:hidden;overflow-y:hidden;text-overflow:ellipsis;white-space:nowrap;background-color:#f4f4f4;padding:2px;line-height:18px;border:1px solid #cacaca;}#DeviceDetailTab-DetailsContainer .device_detail_disk_drives .partition>span .details{position:relative;}#DeviceDetailTab-DetailsContainer .device_detail_disk_drives .partition>span .freespace{position:absolute;top:0;height:40px;display:block;background-color:#fff;background:repeating-linear-gradient(45deg,#f4f4f4,#f4f4f4 10px,#fff 10px,#fff 20px);}#deviceShowResources #AttachmentsContainer{padding:0;}#deviceShowResources #Attachments{position:relative;border:1px solid #ccc;background-color:#fff;}#deviceShowResources #Attachments div.attachmentOutput{position:relative;height:115px;overflow:auto;}#deviceShowResources #Attachments div.attachmentOutput>a{display:block;float:left;height:48px;width:221px;padding:2px;margin:2px;font-size:.9em;border:1px solid #fff;color:#000;text-decoration:none;}#deviceShowResources #Attachments div.attachmentOutput>a span.comments,#deviceShowResources #Attachments div.attachmentOutput>a span.author,#deviceShowResources #Attachments div.attachmentOutput>a span.timestamp{display:block;float:left;width:168px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;height:16px;}#deviceShowResources #Attachments div.attachmentOutput>a span.author{color:#888;width:150px;}#deviceShowResources #Attachments div.attachmentOutput>a span.timestamp{color:#888;font-style:italic;}#deviceShowResources #Attachments div.attachmentOutput>a span.icon{display:block;float:left;height:48px;width:48px;margin-right:2px;}#deviceShowResources #Attachments div.attachmentOutput>a span.icon img{height:48px;width:48px;}#deviceShowResources #Attachments div.attachmentOutput>a span.icon img.loading{display:none;}#deviceShowResources #Attachments div.attachmentOutput>a:hover{background-color:#ededed;border:1px solid #ccc;}#deviceShowResources #Attachments div.attachmentOutput>a:hover span.remove{opacity:.5;}#deviceShowResources #Attachments div.attachmentOutput>a span.remove{font-size:1.4em;color:#e51400;margin-left:6px;cursor:pointer;opacity:0;}#deviceShowResources #Attachments div.attachmentOutput>a span.remove:hover{opacity:1;}#deviceShowResources #Attachments div.attachmentInput{border-top:1px solid #ccc;height:40px;background-color:#fff;padding:3px;}#deviceShowResources #Attachments div.attachmentInput span.action{color:#333;display:block;margin:0 4px 0 0;font-size:1.5em;cursor:pointer;float:right;border:1px solid #fff;padding:.5em;}#deviceShowResources #Attachments div.attachmentInput span.action:hover{color:#335a87;background-color:#ededed;border:1px solid #ccc;}#deviceShowResources #Attachments div.attachmentInput span.action.disabled{color:rgba(51,51,51,.2);cursor:default;}#deviceShowResources #Attachments div.attachmentInput span.action.disabled:hover{color:rgba(51,51,51,.2);background-color:inherit;border:1px solid #fff;}#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;}#Devices_Export_Exporting{padding-top:50px;text-align:center;}#Devices_Export_Exporting i{margin-right:10px;color:#1e6dab;}#Devices_Import #ImportFile{width:96%;margin-bottom:8px;}#Devices_Import #Devices_Import_Documentation{width:700px;margin:20px auto;}#Devices_Import #Devices_Import_Documentation>table>tbody th:first-child{width:220px;}#Devices_Import_Completed_Dialog{padding:50px 0;text-align:center;}#Devices_Import_Completed_Dialog h3{margin-bottom:16px;}#Devices_Import_Completed_Dialog i{margin-right:10px;color:#60a917;}#Devices_Import_Loading_Dialog{padding-top:50px;text-align:center;}#Devices_Import_Loading_Dialog i{margin-right:10px;color:#1e6dab;}#Devices_Import_Headers #Devices_Import_Headers_TableContainer{margin:18px 0;overflow-x:auto;border:1px solid #ccc;}#Devices_Import_Headers #Devices_Import_Headers_TableContainer table>thead{white-space:nowrap;}#Devices_Import_Headers #Devices_Import_Headers_TableContainer table>thead ul.importHeaderType>li>a>span:not(.ui-menu-icon){padding-right:16px;}#Devices_Import_Headers #Devices_Import_Headers_TableContainer table>thead ul.importHeaderType ul{z-index:1000;}#Devices_Import_Headers #Devices_Import_Headers_TableContainer table>thead td.headerIgnoreColumn{background-color:#fa6800;}#Devices_Import_Headers #Devices_Import_Headers_TableContainer table>thead td:not(.headerIgnoreColumn){background-color:#1e6dab;}#Devices_Import_Headers #Devices_Import_Headers_TableContainer table>tbody td.headerDeviceSerialNumber{border-top-color:#d1e6f7;border-bottom-color:#d1e6f7;background-color:#e2f0fa;}#Devices_Import_Headers #Devices_Import_Headers_TableContainer table>tbody td.headerIgnoreColumn{max-width:150px;white-space:nowrap;overflow:hidden;-ms-text-overflow:ellipsis;-o-text-overflow:ellipsis;text-overflow:ellipsis;color:#ccc;}#Devices_Import_Parsing_Dialog{padding-top:50px;text-align:center;}#Devices_Import_Parsing_Dialog i{margin-right:10px;color:#1e6dab;}#Devices_Import_Review #Devices_Import_Review_Navigation{margin-top:15px;text-align:right;}#Devices_Import_Review #Devices_Import_Review_Navigation ul{display:inline-block;padding:0;border:1px solid #bbb;}#Devices_Import_Review #Devices_Import_Review_Navigation ul li{display:inline-block;padding:3px 10px;margin:0;}#Devices_Import_Review #Devices_Import_Review_Navigation ul li.actionDetached{background-color:#ffd0cc;}#Devices_Import_Review #Devices_Import_Review_Navigation ul li.actionModified{background-color:#e2f0fa;}#Devices_Import_Review #Devices_Import_Review_Navigation ul li.actionAdded{background-color:#e7f9d5;}#Devices_Import_Review #Devices_Import_Review_Navigation ul li.actionUnchanged{background-color:hsl(0,0%,98.5%);}#Devices_Import_Review #Devices_Import_Review_TableContainer{margin:18px 0;overflow-x:auto;border:1px solid #ccc;}#Devices_Import_Review #Devices_Import_Review_TableContainer table>thead{white-space:nowrap;}#Devices_Import_Review #Devices_Import_Review_TableContainer table>thead tr:nth-child(2) th{padding-top:0;font-weight:normal;font-size:.9em;}#Devices_Import_Review #Devices_Import_Review_TableContainer table>tbody td.action{text-align:center;}#Devices_Import_Review #Devices_Import_Review_TableContainer table>tbody tr.actionDetached td.action i:before{color:#e51400;content:"";}#Devices_Import_Review #Devices_Import_Review_TableContainer table>tbody tr.actionDetached td{background-color:#ffe7e5;}#Devices_Import_Review #Devices_Import_Review_TableContainer table>tbody tr.actionUnchanged td.action i:before{content:"";}#Devices_Import_Review #Devices_Import_Review_TableContainer table>tbody tr.actionUnchanged td{background-color:hsl(0,0%,98.5%);}#Devices_Import_Review #Devices_Import_Review_TableContainer table>tbody tr.actionUnchanged td:nth-child(n+3){color:#ccc;}#Devices_Import_Review #Devices_Import_Review_TableContainer table>tbody tr.actionModified td.action i:before{color:#1e6dab;content:"";}#Devices_Import_Review #Devices_Import_Review_TableContainer table>tbody tr.actionModified td{background-color:#f4f9fd;}#Devices_Import_Review #Devices_Import_Review_TableContainer table>tbody tr.actionAdded td.action i:before{color:#60a917;content:"";}#Devices_Import_Review #Devices_Import_Review_TableContainer table>tbody tr.actionAdded td{background-color:#e7f9d5;}#Devices_Import_Review #Devices_Import_Review_TableContainer table>tbody tr:not(.actionUnchanged) td.actionUnchanged:nth-child(n+3):not(.headerDeviceSerialNumber){color:#ccc;}#Devices_Import_Review #Devices_Import_Review_TableContainer table>tbody td.actionError{color:#e51400;background-color:#fff1ef;}#Devices_Import_Review #Devices_Import_Review_TableContainer table>tbody td.actionError span.errorMessage{display:none;}#Devices_Import_Review #Devices_Import_Review_TableContainer table>tbody td.actionModified{background-color:#e2f0fa !important;}#Devices_Import_Review #Devices_Import_Review_TableContainer table>tbody td.headerDeviceSerialNumber,#Devices_Import_Review #Devices_Import_Review_TableContainer table>tbody td.headerDeviceDecommissionedDate,#Devices_Import_Review #Devices_Import_Review_TableContainer table>tbody td.headerDeviceDecommissionedReason,#Devices_Import_Review #Devices_Import_Review_TableContainer table>tbody td.headerModelId,#Devices_Import_Review #Devices_Import_Review_TableContainer table>tbody td.headerBatchId,#Devices_Import_Review #Devices_Import_Review_TableContainer table>tbody td.headerProfileId,#Devices_Import_Review #Devices_Import_Review_TableContainer table>tbody td.headerAssignedUserId{white-space:nowrap;}#Devices_Import_Review #Devices_Import_Review_TableContainer table>tbody span.smallMessage{color:inherit;} \ No newline at end of file diff --git a/Disco.Web/Views/Device/DeviceParts/_Details.cshtml b/Disco.Web/Views/Device/DeviceParts/_Details.cshtml index 8eb9d038..105c9c3c 100644 --- a/Disco.Web/Views/Device/DeviceParts/_Details.cshtml +++ b/Disco.Web/Views/Device/DeviceParts/_Details.cshtml @@ -8,70 +8,291 @@ { Html.BundleDeferred("~/ClientScripts/Modules/Disco-PropertyChangeHelpers"); } + + var processors = Model.Device.DeviceDetails.Processors(); + var physicalMemory = Model.Device.DeviceDetails.PhysicalMemory(); + var diskDrives = Model.Device.DeviceDetails.DiskDrives(); + var networkAdapters = Model.Device.DeviceDetails.NetworkAdapters(); + var lanMacAddress = Model.Device.DeviceDetails.LanMacAddress(); + var wlanMacAddress = Model.Device.DeviceDetails.WLanMacAddress(); }
- - - - - - - - + @if (processors != null) + { + + + + + } + @if (physicalMemory != null) + { + + + + + } + @if (networkAdapters != null) + { + + + + + } + else + { + if (lanMacAddress != null) + { + + + + + } + if (wlanMacAddress != null) + { + + + + + } + } + @if (diskDrives != null) + { + + + + + } - - - + @if (Model.Device.LastEnrolDate.HasValue) + { + + + + }
LAN MAC Address@(Model.Device.DeviceDetails.LanMacAddress() ?? "Unknown")
WLAN MAC Address@(Model.Device.DeviceDetails.WLanMacAddress() ?? "Unknown")
Processors + + + + + + + + + + + + + @foreach (var processor in processors) + { + + + + + + + + + } + +
NameDescriptionArchitectureMax Clock SpeedCoresLogical Processors
@processor.Name@processor.Description@processor.Architecture@processor.MaxClockSpeedFriendly()@processor.NumberOfCores.ToString("N0")@processor.NumberOfLogicalProcessors.ToString("N0")
+
Memory + + + + + + + + + + + + + @foreach (var memory in physicalMemory) + { + + + + + + + + + } + +
LocationManufacturerPart NumberSerial NumberCapacityClock Speed
@memory.DeviceLocator@memory.Manufacturer@memory.PartNumber@memory.SerialNumber@memory.CapacityFriendly()@memory.ConfiguredClockSpeed
+
Network Adapters + + + + + + + + + + + + @foreach (var adapter in networkAdapters) + { + + + + + + + + } + +
ConnectionManufacturerProductSpeedMAC Address
+ @(adapter.NetConnectionID ?? "N/A") @if (adapter.IsWlanAdapter) + {} + @adapter.Manufacturer@adapter.ProductName@adapter.SpeedFriendly()@adapter.MACAddress
+
LAN MAC Address@(lanMacAddress)
WLAN MAC Address@(wlanMacAddress)
Disk Drives + + + + + + + + + + + + + + @foreach (var disk in diskDrives) + { + + + + + + + + + + if (disk.Partitions != null) + { + // calculate stretched offsets + var minPartitionSize = (double)disk.Size * 0.1; + var diskSizeAdjusted = disk.Partitions.Sum(p => Math.Max(minPartitionSize, p.Size)); + var diskAdjustedOffet = (double)0; + + + + } + } + +
ManufacturerModelSerial NumberFirmwareTypeInterfaceSize
@disk.Manufacturer@disk.Model@disk.SerialNumber@disk.FirmwareRevision@disk.MediaType@disk.InterfaceType@disk.SizeFriendly()
+
+ @foreach (var partition in disk.Partitions) + { + var logicalDisk = partition.LogicalDisk; + + var offsetPercentage = Math.Round(((partition.StartingOffset + diskAdjustedOffet) / diskSizeAdjusted) * 100, 3); + var widthPercentage = Math.Round((Math.Max(minPartitionSize, partition.Size) / diskSizeAdjusted) * 100, 3); + var freeSpacePercentage = 0d; + if (partition.Size < minPartitionSize) + { + diskAdjustedOffet += minPartitionSize - partition.Size; + } + + var partitionTitle = partition.Type; + var tags = new List(); + if (partition.BootPartition) + { + tags.Add("Boot"); + } + if (partition.PrimaryParition) + { + tags.Add("Primary"); + } + if (logicalDisk != null) + { + partitionTitle = string.Format("{0} {1}", logicalDisk.DeviceID, logicalDisk.VolumeName); + tags.Add(logicalDisk.SizeFriendly()); + tags.Add(logicalDisk.FreeSpaceFriendly() + " Free"); + tags.Add(logicalDisk.FileSystem); + tags.Add(logicalDisk.DriveType); + freeSpacePercentage = Math.Round(((double)logicalDisk.FreeSpace / logicalDisk.Size) * 100, 3); + } + else + { + tags.Add(partition.SizeFriendly()); + } + var tag = string.Join(" | ", tags); + + @if (freeSpacePercentage > 0.5) + { + + } + + @partitionTitle +
+ @tag +
+
+ } +
+
+
AC Adapter@if (canConfig) + + @if (canConfig) { - @Html.TextBox("DeviceDetail_ACAdapter", Model.Device.DeviceDetails.ACAdapter()) @AjaxHelpers.AjaxSave() @AjaxHelpers.AjaxLoader() - + } else { - @(Model.Device.DeviceDetails.ACAdapter() ?? "Unknown") + @(Model.Device.DeviceDetails.ACAdapter() ?? "Unknown") }
Battery@if (canConfig) + + @if (canConfig) { - @Html.TextBox("DeviceDetail_Battery", Model.Device.DeviceDetails.Battery()) @AjaxHelpers.AjaxSave() @AjaxHelpers.AjaxLoader() - + } else { - @(Model.Device.DeviceDetails.Battery() ?? "Unknown") + @(Model.Device.DeviceDetails.Battery() ?? "Unknown") }
Keyboard@if (canConfig) + + @if (canConfig) { - @Html.TextBox("DeviceDetail_Keyboard", Model.Device.DeviceDetails.Keyboard()) @AjaxHelpers.AjaxSave() @AjaxHelpers.AjaxLoader() - + } else { - @(Model.Device.DeviceDetails.Keyboard() ?? "Unknown") + @(Model.Device.DeviceDetails.Keyboard() ?? "Unknown") }
Details collected @CommonHelpers.FriendlyDate(Model.Device.LastEnrolDate) at time of last enrolment
diff --git a/Disco.Web/Views/Device/DeviceParts/_Details.generated.cs b/Disco.Web/Views/Device/DeviceParts/_Details.generated.cs index 313414ef..cf38e803 100644 --- a/Disco.Web/Views/Device/DeviceParts/_Details.generated.cs +++ b/Disco.Web/Views/Device/DeviceParts/_Details.generated.cs @@ -2,7 +2,7 @@ //------------------------------------------------------------------------------ // // This code was generated by a tool. -// Runtime Version:4.0.30319.34014 +// Runtime Version:4.0.30319.42000 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. @@ -27,7 +27,6 @@ namespace Disco.Web.Views.Device.DeviceParts using System.Web.UI; using System.Web.WebPages; using Disco; - using Disco.BI.Extensions; using Disco.Models.Repository; using Disco.Services; using Disco.Services.Authorization; @@ -37,9 +36,9 @@ namespace Disco.Web.Views.Device.DeviceParts [System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")] [System.Web.WebPages.PageVirtualPathAttribute("~/Views/Device/DeviceParts/_Details.cshtml")] - public partial class Details : Disco.Services.Web.WebViewPage + public partial class _Details : Disco.Services.Web.WebViewPage { - public Details() + public _Details() { } public override void Execute() @@ -56,6 +55,13 @@ namespace Disco.Web.Views.Device.DeviceParts Html.BundleDeferred("~/ClientScripts/Modules/Disco-PropertyChangeHelpers"); } + var processors = Model.Device.DeviceDetails.Processors(); + var physicalMemory = Model.Device.DeviceDetails.PhysicalMemory(); + var diskDrives = Model.Device.DeviceDetails.DiskDrives(); + var networkAdapters = Model.Device.DeviceDetails.NetworkAdapters(); + var lanMacAddress = Model.Device.DeviceDetails.LanMacAddress(); + var wlanMacAddress = Model.Device.DeviceDetails.WLanMacAddress(); + #line default #line hidden @@ -73,305 +79,1114 @@ WriteLiteral(">\r\n \r\n \r\n \r\n LAN MAC Add" + -"ress\r\n "); +WriteLiteral(">\r\n \r\n"); - #line 18 "..\..\Views\Device\DeviceParts\_Details.cshtml" - Write(Model.Device.DeviceDetails.LanMacAddress() ?? "Unknown"); + #line 23 "..\..\Views\Device\DeviceParts\_Details.cshtml" + + + #line default + #line hidden + + #line 23 "..\..\Views\Device\DeviceParts\_Details.cshtml" + if (processors != null) + { #line default #line hidden -WriteLiteral("\r\n \r\n \r\n WLAN " + -"MAC Address\r\n \r\n Processors\r\n " + +" "); +WriteLiteral(">\r\n + + + Name + Description + Architecture + Max Clock Speed + Cores + Logical Processors + + + +"); - #line 22 "..\..\Views\Device\DeviceParts\_Details.cshtml" - Write(Model.Device.DeviceDetails.WLanMacAddress() ?? "Unknown"); + #line 40 "..\..\Views\Device\DeviceParts\_Details.cshtml" + + + #line default + #line hidden + + #line 40 "..\..\Views\Device\DeviceParts\_Details.cshtml" + foreach (var processor in processors) + { #line default #line hidden -WriteLiteral("\r\n \r\n \r\n AC Ad" + -"apter\r\n "); +WriteLiteral(" \r\n " + +" "); - #line 26 "..\..\Views\Device\DeviceParts\_Details.cshtml" - if (canConfig) - { + #line 43 "..\..\Views\Device\DeviceParts\_Details.cshtml" + Write(processor.Name); + + + #line default + #line hidden +WriteLiteral("\r\n "); + + + #line 44 "..\..\Views\Device\DeviceParts\_Details.cshtml" + Write(processor.Description); + + + #line default + #line hidden +WriteLiteral("\r\n "); + + + #line 45 "..\..\Views\Device\DeviceParts\_Details.cshtml" + Write(processor.Architecture); + + + #line default + #line hidden +WriteLiteral("\r\n "); + + + #line 46 "..\..\Views\Device\DeviceParts\_Details.cshtml" + Write(processor.MaxClockSpeedFriendly()); + + + #line default + #line hidden +WriteLiteral("\r\n "); + + + #line 47 "..\..\Views\Device\DeviceParts\_Details.cshtml" + Write(processor.NumberOfCores.ToString("N0")); + + + #line default + #line hidden +WriteLiteral("\r\n "); + + + #line 48 "..\..\Views\Device\DeviceParts\_Details.cshtml" + Write(processor.NumberOfLogicalProcessors.ToString("N0")); + + + #line default + #line hidden +WriteLiteral("\r\n \r\n"); + + + #line 50 "..\..\Views\Device\DeviceParts\_Details.cshtml" + } + + + #line default + #line hidden +WriteLiteral(" \r\n \r\n " + +" \r\n \r\n"); + + + #line 55 "..\..\Views\Device\DeviceParts\_Details.cshtml" + } + + + #line default + #line hidden +WriteLiteral(" "); + + + #line 56 "..\..\Views\Device\DeviceParts\_Details.cshtml" + if (physicalMemory != null) + { + + + #line default + #line hidden +WriteLiteral(" \r\n Memory\r\n \r\n " + +" + + + Location + Manufacturer + Part Number + Serial Number + Capacity + Clock Speed + + + +"); + + + #line 73 "..\..\Views\Device\DeviceParts\_Details.cshtml" + + + #line default + #line hidden + + #line 73 "..\..\Views\Device\DeviceParts\_Details.cshtml" + foreach (var memory in physicalMemory) + { + + + #line default + #line hidden +WriteLiteral(" \r\n " + +" "); + + + #line 76 "..\..\Views\Device\DeviceParts\_Details.cshtml" + Write(memory.DeviceLocator); + + + #line default + #line hidden +WriteLiteral("\r\n "); + + + #line 77 "..\..\Views\Device\DeviceParts\_Details.cshtml" + Write(memory.Manufacturer); + + + #line default + #line hidden +WriteLiteral("\r\n "); + + + #line 78 "..\..\Views\Device\DeviceParts\_Details.cshtml" + Write(memory.PartNumber); + + + #line default + #line hidden +WriteLiteral("\r\n "); + + + #line 79 "..\..\Views\Device\DeviceParts\_Details.cshtml" + Write(memory.SerialNumber); + + + #line default + #line hidden +WriteLiteral("\r\n "); + + + #line 80 "..\..\Views\Device\DeviceParts\_Details.cshtml" + Write(memory.CapacityFriendly()); + + + #line default + #line hidden +WriteLiteral("\r\n "); + + + #line 81 "..\..\Views\Device\DeviceParts\_Details.cshtml" + Write(memory.ConfiguredClockSpeed); + + + #line default + #line hidden +WriteLiteral("\r\n \r\n"); + + + #line 83 "..\..\Views\Device\DeviceParts\_Details.cshtml" + } + + + #line default + #line hidden +WriteLiteral(" \r\n \r\n " + +" \r\n \r\n"); + + + #line 88 "..\..\Views\Device\DeviceParts\_Details.cshtml" + } + + + #line default + #line hidden +WriteLiteral(" "); + + + #line 89 "..\..\Views\Device\DeviceParts\_Details.cshtml" + if (networkAdapters != null) + { + + + #line default + #line hidden +WriteLiteral(" \r\n Network Adapters\r\n \r\n + + + Connection + Manufacturer + Product + Speed + MAC Address + + + +"); + + + #line 105 "..\..\Views\Device\DeviceParts\_Details.cshtml" + + + #line default + #line hidden + + #line 105 "..\..\Views\Device\DeviceParts\_Details.cshtml" + foreach (var adapter in networkAdapters) + { + + + #line default + #line hidden +WriteLiteral(" \r\n " + +" \r\n"); + +WriteLiteral(" "); + + + #line 109 "..\..\Views\Device\DeviceParts\_Details.cshtml" + Write(adapter.NetConnectionID ?? "N/A"); + + + #line default + #line hidden +WriteLiteral(" "); + + + #line 109 "..\..\Views\Device\DeviceParts\_Details.cshtml" + if (adapter.IsWlanAdapter) + { + + #line default + #line hidden +WriteLiteral(""); + + + #line 110 "..\..\Views\Device\DeviceParts\_Details.cshtml" + } + + + #line default + #line hidden +WriteLiteral(" \r\n " + +" "); + + + #line 112 "..\..\Views\Device\DeviceParts\_Details.cshtml" + Write(adapter.Manufacturer); + + + #line default + #line hidden +WriteLiteral("\r\n "); + + + #line 113 "..\..\Views\Device\DeviceParts\_Details.cshtml" + Write(adapter.ProductName); + + + #line default + #line hidden +WriteLiteral("\r\n "); + + + #line 114 "..\..\Views\Device\DeviceParts\_Details.cshtml" + Write(adapter.SpeedFriendly()); + + + #line default + #line hidden +WriteLiteral("\r\n "); + + + #line 115 "..\..\Views\Device\DeviceParts\_Details.cshtml" + Write(adapter.MACAddress); + + + #line default + #line hidden +WriteLiteral("\r\n \r\n"); + + + #line 117 "..\..\Views\Device\DeviceParts\_Details.cshtml" + } + + + #line default + #line hidden +WriteLiteral(" \r\n \r\n " + +" \r\n \r\n"); + + + #line 122 "..\..\Views\Device\DeviceParts\_Details.cshtml" + } + else + { + if (lanMacAddress != null) + { + + + #line default + #line hidden +WriteLiteral(" \r\n LAN MAC Address\r\n "); + + + #line 129 "..\..\Views\Device\DeviceParts\_Details.cshtml" + Write(lanMacAddress); + + + #line default + #line hidden +WriteLiteral("\r\n \r\n"); + + + #line 131 "..\..\Views\Device\DeviceParts\_Details.cshtml" + } + if (wlanMacAddress != null) + { + + + #line default + #line hidden +WriteLiteral(" \r\n WLAN MAC Address\r\n "); + + + #line 136 "..\..\Views\Device\DeviceParts\_Details.cshtml" + Write(wlanMacAddress); + + + #line default + #line hidden +WriteLiteral("\r\n \r\n"); + + + #line 138 "..\..\Views\Device\DeviceParts\_Details.cshtml" + } + } + + + #line default + #line hidden +WriteLiteral(" "); + + + #line 140 "..\..\Views\Device\DeviceParts\_Details.cshtml" + if (diskDrives != null) + { + + + #line default + #line hidden +WriteLiteral(" \r\n Disk Drives\r\n \r\n " + +" + + + Manufacturer + Model + Serial Number + Firmware + Type + Interface + Size + + + +"); + + + #line 158 "..\..\Views\Device\DeviceParts\_Details.cshtml" + + + #line default + #line hidden + + #line 158 "..\..\Views\Device\DeviceParts\_Details.cshtml" + foreach (var disk in diskDrives) + { + + + #line default + #line hidden +WriteLiteral(" \r\n " + +" "); + + + #line 161 "..\..\Views\Device\DeviceParts\_Details.cshtml" + Write(disk.Manufacturer); + + + #line default + #line hidden +WriteLiteral("\r\n "); + + + #line 162 "..\..\Views\Device\DeviceParts\_Details.cshtml" + Write(disk.Model); + + + #line default + #line hidden +WriteLiteral("\r\n "); + + + #line 163 "..\..\Views\Device\DeviceParts\_Details.cshtml" + Write(disk.SerialNumber); + + + #line default + #line hidden +WriteLiteral("\r\n "); + + + #line 164 "..\..\Views\Device\DeviceParts\_Details.cshtml" + Write(disk.FirmwareRevision); + + + #line default + #line hidden +WriteLiteral("\r\n "); + + + #line 165 "..\..\Views\Device\DeviceParts\_Details.cshtml" + Write(disk.MediaType); + + + #line default + #line hidden +WriteLiteral("\r\n "); + + + #line 166 "..\..\Views\Device\DeviceParts\_Details.cshtml" + Write(disk.InterfaceType); + + + #line default + #line hidden +WriteLiteral("\r\n "); + + + #line 167 "..\..\Views\Device\DeviceParts\_Details.cshtml" + Write(disk.SizeFriendly()); + + + #line default + #line hidden +WriteLiteral("\r\n \r\n"); + + + #line 169 "..\..\Views\Device\DeviceParts\_Details.cshtml" + if (disk.Partitions != null) + { + // calculate stretched offsets + var minPartitionSize = (double)disk.Size * 0.1; + var diskSizeAdjusted = disk.Partitions.Sum(p => Math.Max(minPartitionSize, p.Size)); + var diskAdjustedOffet = (double)0; + + + #line default + #line hidden +WriteLiteral(" \r\n " + +" \r\n \r\n"); + + + #line 178 "..\..\Views\Device\DeviceParts\_Details.cshtml" + + + #line default + #line hidden + + #line 178 "..\..\Views\Device\DeviceParts\_Details.cshtml" + foreach (var partition in disk.Partitions) + { + var logicalDisk = partition.LogicalDisk; + + var offsetPercentage = Math.Round(((partition.StartingOffset + diskAdjustedOffet) / diskSizeAdjusted) * 100, 3); + var widthPercentage = Math.Round((Math.Max(minPartitionSize, partition.Size) / diskSizeAdjusted) * 100, 3); + var freeSpacePercentage = 0d; + if (partition.Size < minPartitionSize) + { + diskAdjustedOffet += minPartitionSize - partition.Size; + } + + var partitionTitle = partition.Type; + var tags = new List(); + if (partition.BootPartition) + { + tags.Add("Boot"); + } + if (partition.PrimaryParition) + { + tags.Add("Primary"); + } + if (logicalDisk != null) + { + partitionTitle = string.Format("{0} {1}", logicalDisk.DeviceID, logicalDisk.VolumeName); + tags.Add(logicalDisk.SizeFriendly()); + tags.Add(logicalDisk.FreeSpaceFriendly() + " Free"); + tags.Add(logicalDisk.FileSystem); + tags.Add(logicalDisk.DriveType); + freeSpacePercentage = Math.Round(((double)logicalDisk.FreeSpace / logicalDisk.Size) * 100, 3); + } + else + { + tags.Add(partition.SizeFriendly()); + } + var tag = string.Join(" | ", tags); + + + #line default + #line hidden +WriteLiteral(" (partitionTitle + + #line default + #line hidden +, 12233), false) +, Tuple.Create(Tuple.Create(" ", 12250), Tuple.Create(" ", 12251), true) + + #line 214 "..\..\Views\Device\DeviceParts\_Details.cshtml" + , Tuple.Create(Tuple.Create("", 12255), Tuple.Create(tag + + #line default + #line hidden +, 12255), false) +); + +WriteAttribute("style", Tuple.Create(" style=\"", 12262), Tuple.Create("\"", 12324) +, Tuple.Create(Tuple.Create("", 12270), Tuple.Create("left:", 12270), true) + + #line 214 "..\..\Views\Device\DeviceParts\_Details.cshtml" + , Tuple.Create(Tuple.Create(" ", 12275), Tuple.Create(offsetPercentage + + #line default + #line hidden +, 12276), false) +, Tuple.Create(Tuple.Create("", 12295), Tuple.Create("%;", 12295), true) +, Tuple.Create(Tuple.Create(" ", 12297), Tuple.Create("width:", 12298), true) + + #line 214 "..\..\Views\Device\DeviceParts\_Details.cshtml" + , Tuple.Create(Tuple.Create(" ", 12304), Tuple.Create(widthPercentage + + #line default + #line hidden +, 12305), false) +, Tuple.Create(Tuple.Create("", 12323), Tuple.Create("%", 12323), true) +); + +WriteLiteral(">\r\n"); + + + #line 215 "..\..\Views\Device\DeviceParts\_Details.cshtml" + + + #line default + #line hidden + + #line 215 "..\..\Views\Device\DeviceParts\_Details.cshtml" + if (freeSpacePercentage > 0.5) + { + + + #line default + #line hidden +WriteLiteral(" (100 - freeSpacePercentage + + #line default + #line hidden +, 12597), false) +, Tuple.Create(Tuple.Create("", 12625), Tuple.Create("%;", 12625), true) +, Tuple.Create(Tuple.Create(" ", 12627), Tuple.Create("width:", 12628), true) + + #line 217 "..\..\Views\Device\DeviceParts\_Details.cshtml" + , Tuple.Create(Tuple.Create(" ", 12634), Tuple.Create(freeSpacePercentage + + #line default + #line hidden +, 12635), false) +, Tuple.Create(Tuple.Create("", 12657), Tuple.Create("%", 12657), true) +); + +WriteLiteral(">\r\n"); + + + #line 218 "..\..\Views\Device\DeviceParts\_Details.cshtml" + } + + + #line default + #line hidden +WriteLiteral(" \r\n "); + + + #line 220 "..\..\Views\Device\DeviceParts\_Details.cshtml" + Write(partitionTitle); + + + #line default + #line hidden +WriteLiteral("\r\n \r\n"); + +WriteLiteral(" "); + + + #line 222 "..\..\Views\Device\DeviceParts\_Details.cshtml" + Write(tag); + + + #line default + #line hidden +WriteLiteral("\r\n \r\n " + +" \r\n"); + + + #line 225 "..\..\Views\Device\DeviceParts\_Details.cshtml" + } + + + #line default + #line hidden +WriteLiteral("
\r\n " + +" \r\n \r\n"); + + + #line 229 "..\..\Views\Device\DeviceParts\_Details.cshtml" + } + } + + + #line default + #line hidden +WriteLiteral(" \r\n \r\n " + +" \r\n \r\n"); + + + #line 235 "..\..\Views\Device\DeviceParts\_Details.cshtml" + } + + + #line default + #line hidden +WriteLiteral(" \r\n AC Adapter\r\n " + +" \r\n"); + + + #line 239 "..\..\Views\Device\DeviceParts\_Details.cshtml" #line default #line hidden - #line 28 "..\..\Views\Device\DeviceParts\_Details.cshtml" - Write(Html.TextBox("DeviceDetail_ACAdapter", Model.Device.DeviceDetails.ACAdapter())); + #line 239 "..\..\Views\Device\DeviceParts\_Details.cshtml" + if (canConfig) + { + + + #line default + #line hidden + + #line 241 "..\..\Views\Device\DeviceParts\_Details.cshtml" + Write(Html.TextBox("DeviceDetail_ACAdapter", Model.Device.DeviceDetails.ACAdapter())); #line default #line hidden - #line 28 "..\..\Views\Device\DeviceParts\_Details.cshtml" - + #line 241 "..\..\Views\Device\DeviceParts\_Details.cshtml" + #line default #line hidden - #line 28 "..\..\Views\Device\DeviceParts\_Details.cshtml" - Write(AjaxHelpers.AjaxSave()); + #line 241 "..\..\Views\Device\DeviceParts\_Details.cshtml" + Write(AjaxHelpers.AjaxSave()); #line default #line hidden - #line 28 "..\..\Views\Device\DeviceParts\_Details.cshtml" - + #line 241 "..\..\Views\Device\DeviceParts\_Details.cshtml" + #line default #line hidden - #line 28 "..\..\Views\Device\DeviceParts\_Details.cshtml" - Write(AjaxHelpers.AjaxLoader()); + #line 241 "..\..\Views\Device\DeviceParts\_Details.cshtml" + Write(AjaxHelpers.AjaxLoader()); #line default #line hidden - #line 28 "..\..\Views\Device\DeviceParts\_Details.cshtml" - + #line 241 "..\..\Views\Device\DeviceParts\_Details.cshtml" + #line default #line hidden -WriteLiteral(" \r\n"); +" \r\n"); - #line 34 "..\..\Views\Device\DeviceParts\_Details.cshtml" + #line 247 "..\..\Views\Device\DeviceParts\_Details.cshtml" } else { - + #line default #line hidden - #line 37 "..\..\Views\Device\DeviceParts\_Details.cshtml" - Write(Model.Device.DeviceDetails.ACAdapter() ?? "Unknown"); + #line 250 "..\..\Views\Device\DeviceParts\_Details.cshtml" + Write(Model.Device.DeviceDetails.ACAdapter() ?? "Unknown"); #line default #line hidden - #line 37 "..\..\Views\Device\DeviceParts\_Details.cshtml" - + #line 250 "..\..\Views\Device\DeviceParts\_Details.cshtml" + } #line default #line hidden WriteLiteral(" \r\n \r\n \r\n " + -" Battery\r\n "); +" Battery\r\n \r\n"); - #line 43 "..\..\Views\Device\DeviceParts\_Details.cshtml" - if (canConfig) - { + #line 257 "..\..\Views\Device\DeviceParts\_Details.cshtml" #line default #line hidden - #line 45 "..\..\Views\Device\DeviceParts\_Details.cshtml" - Write(Html.TextBox("DeviceDetail_Battery", Model.Device.DeviceDetails.Battery())); + #line 257 "..\..\Views\Device\DeviceParts\_Details.cshtml" + if (canConfig) + { + + + #line default + #line hidden + + #line 259 "..\..\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 259 "..\..\Views\Device\DeviceParts\_Details.cshtml" + #line default #line hidden - #line 45 "..\..\Views\Device\DeviceParts\_Details.cshtml" - Write(AjaxHelpers.AjaxSave()); + #line 259 "..\..\Views\Device\DeviceParts\_Details.cshtml" + Write(AjaxHelpers.AjaxSave()); #line default #line hidden - #line 45 "..\..\Views\Device\DeviceParts\_Details.cshtml" - + #line 259 "..\..\Views\Device\DeviceParts\_Details.cshtml" + #line default #line hidden - #line 45 "..\..\Views\Device\DeviceParts\_Details.cshtml" - Write(AjaxHelpers.AjaxLoader()); + #line 259 "..\..\Views\Device\DeviceParts\_Details.cshtml" + Write(AjaxHelpers.AjaxLoader()); #line default #line hidden - #line 45 "..\..\Views\Device\DeviceParts\_Details.cshtml" - + #line 259 "..\..\Views\Device\DeviceParts\_Details.cshtml" + #line default #line hidden -WriteLiteral(" \r\n"); - #line 51 "..\..\Views\Device\DeviceParts\_Details.cshtml" + #line 265 "..\..\Views\Device\DeviceParts\_Details.cshtml" } else { - + #line default #line hidden - #line 54 "..\..\Views\Device\DeviceParts\_Details.cshtml" - Write(Model.Device.DeviceDetails.Battery() ?? "Unknown"); + #line 268 "..\..\Views\Device\DeviceParts\_Details.cshtml" + Write(Model.Device.DeviceDetails.Battery() ?? "Unknown"); #line default #line hidden - #line 54 "..\..\Views\Device\DeviceParts\_Details.cshtml" - + #line 268 "..\..\Views\Device\DeviceParts\_Details.cshtml" + } #line default #line hidden WriteLiteral(" \r\n \r\n \r\n " + -" Keyboard\r\n "); +" Keyboard\r\n \r\n"); - #line 60 "..\..\Views\Device\DeviceParts\_Details.cshtml" - if (canConfig) - { + #line 275 "..\..\Views\Device\DeviceParts\_Details.cshtml" #line default #line hidden - #line 62 "..\..\Views\Device\DeviceParts\_Details.cshtml" - Write(Html.TextBox("DeviceDetail_Keyboard", Model.Device.DeviceDetails.Keyboard())); + #line 275 "..\..\Views\Device\DeviceParts\_Details.cshtml" + if (canConfig) + { + + + #line default + #line hidden + + #line 277 "..\..\Views\Device\DeviceParts\_Details.cshtml" + Write(Html.TextBox("DeviceDetail_Keyboard", Model.Device.DeviceDetails.Keyboard())); #line default #line hidden - #line 62 "..\..\Views\Device\DeviceParts\_Details.cshtml" - + #line 277 "..\..\Views\Device\DeviceParts\_Details.cshtml" + #line default #line hidden - #line 62 "..\..\Views\Device\DeviceParts\_Details.cshtml" - Write(AjaxHelpers.AjaxSave()); + #line 277 "..\..\Views\Device\DeviceParts\_Details.cshtml" + Write(AjaxHelpers.AjaxSave()); #line default #line hidden - #line 62 "..\..\Views\Device\DeviceParts\_Details.cshtml" - + #line 277 "..\..\Views\Device\DeviceParts\_Details.cshtml" + #line default #line hidden - #line 62 "..\..\Views\Device\DeviceParts\_Details.cshtml" - Write(AjaxHelpers.AjaxLoader()); + #line 277 "..\..\Views\Device\DeviceParts\_Details.cshtml" + Write(AjaxHelpers.AjaxLoader()); #line default #line hidden - #line 62 "..\..\Views\Device\DeviceParts\_Details.cshtml" - + #line 277 "..\..\Views\Device\DeviceParts\_Details.cshtml" + #line default #line hidden -WriteLiteral(" \r\n"); - #line 68 "..\..\Views\Device\DeviceParts\_Details.cshtml" + #line 283 "..\..\Views\Device\DeviceParts\_Details.cshtml" } else { - + #line default #line hidden - #line 71 "..\..\Views\Device\DeviceParts\_Details.cshtml" - Write(Model.Device.DeviceDetails.Keyboard() ?? "Unknown"); + #line 286 "..\..\Views\Device\DeviceParts\_Details.cshtml" + Write(Model.Device.DeviceDetails.Keyboard() ?? "Unknown"); #line default #line hidden - #line 71 "..\..\Views\Device\DeviceParts\_Details.cshtml" - + #line 286 "..\..\Views\Device\DeviceParts\_Details.cshtml" + } #line default #line hidden -WriteLiteral(" \r\n \r\n \r\n <" + -"/table>\r\n \r\n \r\n\r" + -"\n"); +WriteLiteral(" \r\n \r\n"); + + + #line 290 "..\..\Views\Device\DeviceParts\_Details.cshtml" + + + #line default + #line hidden + + #line 290 "..\..\Views\Device\DeviceParts\_Details.cshtml" + if (Model.Device.LastEnrolDate.HasValue) + { + + + #line default + #line hidden +WriteLiteral(" \r\n Details collected "); + + + #line 293 "..\..\Views\Device\DeviceParts\_Details.cshtml" + Write(CommonHelpers.FriendlyDate(Model.Device.LastEnrolDate)); + + + #line default + #line hidden +WriteLiteral(" at time of last enrolment\r\n \r\n"); + + + #line 295 "..\..\Views\Device\DeviceParts\_Details.cshtml" + } + + + #line default + #line hidden +WriteLiteral(" \r\n \r\n \r\n \r\n\r\n"); } }