Files
Disco/Disco.Web/Views/Device/Import.cshtml
T
2025-07-03 19:13:52 +10:00

238 lines
9.9 KiB
Plaintext

@model Disco.Web.Models.Device.ImportModel
@using Disco.Models.Services.Devices.Importing;
@{
Authorization.Require(Claims.Device.Actions.Import);
ViewBag.Title = Html.ToBreadcrumb("Devices", MVC.Device.Index(), "Import Devices");
}
<div id="Devices_Import">
@using (Html.BeginForm(MVC.API.Device.ImportBegin(), FormMethod.Post, new { enctype = "multipart/form-data" }))
{
<div id="importDialog" class="form" style="width: 450px">
<h2>Import Devices</h2>
<table>
<tr>
<th>
@Html.LabelFor(m => m.ImportFile)
</th>
<td>
<input id="ImportFile" name="ImportFile" type="file" data-val="true" data-val-required="An Import File is required." accept=".xlsx,.csv" /><br />
@Html.ValidationMessageFor(m => m.ImportFile)
<div>
@Html.CheckBoxFor(m => m.HasHeader)
@Html.LabelFor(m => m.HasHeader)
</div>
</td>
</tr>
</table>
<p class="actions">
<input type="submit" class="button" value="Begin Import" />
</p>
</div>
<div id="Devices_Import_Loading_Dialog" class="dialog" title="Loading devices import...">
<h4><i class="fa fa-lg fa-cog fa-spin" title="Please Wait"></i>Loading device import...</h4>
</div>
<script>
$(function () {
var $Devices_Import_Loading_Dialog = null;
$('#ImportFile').closest('form').submit(function () {
if ($Devices_Import_Loading_Dialog == null) {
$Devices_Import_Loading_Dialog = $('#Devices_Import_Loading_Dialog').dialog({
width: 400,
height: 160,
resizable: false,
modal: true,
autoOpen: false
});
}
window.setTimeout(function () {
$Devices_Import_Loading_Dialog.dialog('open');
}, 200);
});
});
</script>
}
<div id="Devices_Import_Documentation">
<h3>XLSX/CSV Import Specification</h3>
<h4>Format</h4>
<ul>
<li>
The import file must be in either:
<ul>
<li><strong>CSV (comma-separated values) format</strong> (<a href="http://en.wikipedia.org/wiki/Comma-separated_values" target="_blank">CSV Reference</a>), or</li>
<li><strong>XLSX (Microsoft Excel) format</strong></li>
</ul>
</li>
<li>Be conscious of editors removing leading zeros from serial numbers (ie: Microsoft Excel).</li>
</ul>
<h4>Fields</h4>
<div class="smallMessage">The following fields/columns are available for to the import file. The Device Serial Number is the only required field, all other fields are optional. Fields can appear in any order.</div>
<table class="tableData">
<thead>
<tr>
<th style="width: 100px;">Field Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
@foreach (var field in Model.HeaderTypes)
{
<tr>
<th>@field.Item2</th>
<td>
@field.Item3
@if (field.Item1 == DeviceImportFieldTypes.DeviceSerialNumber.ToString())
{
<strong>Required</strong>
}
else if (field.Item1 == DeviceImportFieldTypes.ModelId.ToString())
{
<span>(<a href="#" id="Devices_Import_Documentation_DeviceModels_Button">Show IDs</a>)</span>
}
else if (field.Item1 == DeviceImportFieldTypes.ProfileId.ToString())
{
<span>(<a href="#" id="Devices_Import_Documentation_DeviceProfiles_Button">Show IDs</a>)</span>
}
else if (field.Item1 == DeviceImportFieldTypes.BatchId.ToString())
{
<span>(<a href="#" id="Devices_Import_Documentation_DeviceBatches_Button">Show IDs</a>)</span>
}
</td>
</tr>
}
</tbody>
</table>
<div id="Devices_Import_Documentation_DeviceModels_Dialog" class="dialog" title="Disco ICT Device Model Ids">
<table class="tableData">
<thead>
<tr>
<th>ID</th>
<th>Description</th>
<th>Manufacturer</th>
<th>Model</th>
</tr>
</thead>
<tbody>
@foreach (var dm in Model.DeviceModels)
{
<tr>
<td>@Html.ActionLink(dm.Id.ToString(), MVC.Config.DeviceModel.Index(dm.Id))</td>
<td>@dm.ToString()</td>
<td>@dm.Manufacturer</td>
<td>@dm.Model</td>
</tr>
}
</tbody>
</table>
</div>
<div id="Devices_Import_Documentation_DeviceProfiles_Dialog" class="dialog" title="Disco ICT Device Profile Ids">
<table class="tableData">
<thead>
<tr>
<th>ID</th>
<th>Name</th>
<th>Short Name</th>
<th>Description</th>
</tr>
</thead>
<tbody>
@foreach (var dp in Model.DeviceProfiles)
{
<tr>
<td>@Html.ActionLink(dp.Id.ToString(), MVC.Config.DeviceProfile.Index(dp.Id))</td>
<td>@dp.Name</td>
<td>@dp.ShortName</td>
<td>@dp.Description</td>
</tr>
}
</tbody>
</table>
</div>
<div id="Devices_Import_Documentation_DeviceBatches_Dialog" class="dialog" title="Disco ICT Device Batch Ids">
<table class="tableData">
<thead>
<tr>
<th>ID</th>
<th>Name</th>
<th>Purchase Date</th>
</tr>
</thead>
<tbody>
@foreach (var db in Model.DeviceBatches)
{
<tr>
<td>@Html.ActionLink(db.Id.ToString(), MVC.Config.DeviceBatch.Index(db.Id))</td>
<td>@db.Name</td>
<td>@CommonHelpers.FriendlyDate(db.PurchaseDate)</td>
</tr>
}
</tbody>
</table>
</div>
<script>
$(function () {
var dialogOptions = {
width: 700,
height: 600,
resizable: false,
modal: true,
autoOpen: false
},
$DeviceModelsDialog = null,
$DeviceProfilesDialog = null,
$DeviceBatchesDialog = null;
$('#Devices_Import_Documentation_DeviceModels_Button').click(function (e) {
e.preventDefault();
if (!$DeviceModelsDialog)
$DeviceModelsDialog = $('#Devices_Import_Documentation_DeviceModels_Dialog').dialog(dialogOptions);
$DeviceModelsDialog.dialog('open');
});
$('#Devices_Import_Documentation_DeviceProfiles_Button').click(function (e) {
e.preventDefault();
if (!$DeviceProfilesDialog)
$DeviceProfilesDialog = $('#Devices_Import_Documentation_DeviceProfiles_Dialog').dialog(dialogOptions);
$DeviceProfilesDialog.dialog('open');
});
$('#Devices_Import_Documentation_DeviceBatches_Button').click(function (e) {
e.preventDefault();
if (!$DeviceBatchesDialog)
$DeviceBatchesDialog = $('#Devices_Import_Documentation_DeviceBatches_Dialog').dialog(dialogOptions);
$DeviceBatchesDialog.dialog('open');
});
});
</script>
</div>
</div>
@if (Model.CompletedImportSessionContext != null)
{
<div id="Devices_Import_Completed_Dialog" class="dialog" title="Device Import Completed">
<h3><i class="fa fa-lg fa-check"></i>Successfully imported/updated @Model.CompletedImportSessionContext.AffectedRecords device@(Model.CompletedImportSessionContext.AffectedRecords != 1 ? "s" : null).</h3>
<div><code>@Model.CompletedImportSessionContext.Filename</code></div>
</div>
<script>
$(function () {
$('#Devices_Import_Completed_Dialog')
.dialog({
width: 500,
resizable: false,
modal: true,
autoOpen: true,
buttons: {
Close: function () {
$(this).dialog('destroy');
}
}
});
});
</script>
}