bug fix #171 device batch attachments not working

This commit is contained in:
Gary Sharp committed 2025-03-14 16:40:55 +11:00
1 parent fd3eb80648
commit bccbb20b84
11 files changed
+337 -136

No files matched your search

+7
View File
@@ -189,6 +189,10 @@
<Compile Include="Migrations\202412180604170_DBv25.Designer.cs">
<DependentUpon>202412180604170_DBv25.cs</DependentUpon>
</Compile>
<Compile Include="Migrations\202503140520548_DBv26.cs" />
<Compile Include="Migrations\202503140520548_DBv26.Designer.cs">
<DependentUpon>202503140520548_DBv26.cs</DependentUpon>
</Compile>
<Compile Include="Migrations\Configuration.cs" />
<Compile Include="Migrations\DiscoDataMigrator.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
@@ -279,6 +283,9 @@
<EmbeddedResource Include="Migrations\202412180604170_DBv25.resx">
<DependentUpon>202412180604170_DBv25.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Migrations\202503140520548_DBv26.resx">
<DependentUpon>202503140520548_DBv26.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
+27
View File
@@ -0,0 +1,27 @@
// <auto-generated />
namespace Disco.Data.Migrations
{
using System.Data.Entity.Migrations;
using System.Data.Entity.Migrations.Infrastructure;
using System.Resources;
public sealed partial class DBv26 : IMigrationMetadata
{
private readonly ResourceManager Resources = new ResourceManager(typeof(DBv26));
string IMigrationMetadata.Id
{
get { return "202503140520548_DBv26"; }
}
string IMigrationMetadata.Source
{
get { return null; }
}
string IMigrationMetadata.Target
{
get { return Resources.GetString("Target"); }
}
}
}
@@ -0,0 +1,18 @@
namespace Disco.Data.Migrations
{
using System;
using System.Data.Entity.Migrations;
public partial class DBv26 : DbMigration
{
public override void Up()
{
AlterColumn("dbo.DeviceBatchAttachments", "Comments", c => c.String(maxLength: 500));
}
public override void Down()
{
AlterColumn("dbo.DeviceBatchAttachments", "Comments", c => c.String(nullable: false, maxLength: 500));
}
}
}
@@ -0,0 +1,123 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="Target" xml:space="preserve">
<value>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 truncated
</data>
</root>
@@ -16,7 +16,7 @@ namespace Disco.Models.Repository
[Required, StringLength(500)]
public string MimeType { get; set; }
public DateTime Timestamp { get; set; }
[Required, StringLength(500)]
[StringLength(500)]
public string Comments { get; set; }
[NotMapped]
@@ -652,7 +652,8 @@ namespace Disco.Web.Areas.API.Controllers
}
[DiscoAuthorize(Claims.Config.DeviceBatch.Configure)]
public virtual ActionResult AttachmentUpload(int id, string Comments)
[HttpPost, ValidateAntiForgeryToken]
public virtual ActionResult AttachmentUpload(int id, string comments)
{
var batch = Database.DeviceBatches.Find(id);
if (batch != null)
@@ -666,14 +667,14 @@ namespace Disco.Web.Areas.API.Controllers
if (string.IsNullOrEmpty(contentType) || contentType.Equals("unknown/unknown", StringComparison.OrdinalIgnoreCase))
contentType = MimeTypes.ResolveMimeType(file.FileName);
var attachment = new Disco.Models.Repository.DeviceBatchAttachment()
var attachment = new DeviceBatchAttachment()
{
DeviceBatchId = batch.Id,
TechUserId = CurrentUser.UserId,
Filename = file.FileName,
MimeType = contentType,
Timestamp = DateTime.Now,
Comments = Comments
Comments = comments
};
Database.DeviceBatchAttachments.Add(attachment);
Database.SaveChanges();
@@ -668,8 +668,8 @@
<tr>
<th>Attachments:</th>
<td>
<div id="DeviceBatch_Attachments" class="@(canConfig ? "canAddAttachments" : "cannotAddAttachments")">
<div id="DeviceBatch_Attachments" class="@(canConfig ? "canAddAttachments" : "cannotAddAttachments")" data-uploadurl="@(Url.Action(MVC.API.DeviceBatch.AttachmentUpload(Model.DeviceBatch.Id, null)))">
@Html.AntiForgeryToken()
<div class="Disco-AttachmentUpload-DropTarget">
<h2>Drop Attachments Here</h2>
</div>
@@ -694,7 +694,7 @@
{
<div class="Disco-AttachmentUpload-Progress"></div>
<div class="attachmentInput clearfix">
<span class="action upload fa fa-upload disabled" title="Attach File"></span><span class="action photo fa fa-camera disabled" title="Capture Image"></span>
<span class="action enabled upload fa fa-upload disabled" title="Attach File"></span><span class="action enabled photo fa fa-camera disabled" title="Capture Image"></span>
</div>
<div id="dialogRemoveAttachment" class="dialog" title="Remove this Attachment?">
<p>
@@ -726,20 +726,20 @@
$.connection.hub.disconnected(onHubFailed);
$.connection.hub.reconnecting(function () {
$Attachments.find('span.action').addClass('disabled');
$Attachments.find('span.action.enabled').addClass('disabled');
});
$.connection.hub.reconnected(function () {
$Attachments.find('span.action').removeClass('disabled');
$Attachments.find('span.action.enabled').removeClass('disabled');
});
// Start Connection
$.connection.hub.start(function () {
$Attachments.find('span.action').removeClass('disabled');
$Attachments.find('span.action.enabled').removeClass('disabled');
}).fail(onHubFailed);
function onHubFailed(error) {
// Disable UI
$Attachments.find('span.action').addClass('disabled');
$Attachments.find('span.action.enabled').addClass('disabled');
// Show Dialog Message
if ($('.disconnected-dialog').length == 0) {
@@ -876,14 +876,19 @@
@if (canConfig)
{<text>
//#region Add Attachments
var attachmentUploader = new document.Disco.AttachmentUploader(
'@(Url.Action(MVC.API.DeviceBatch.AttachmentUpload(Model.DeviceBatch.Id, null)))',
$Attachments.find('.Disco-AttachmentUpload-DropTarget'),
$Attachments.find('.Disco-AttachmentUpload-Progress'));
var attachmentUploader = new document.Disco.AttachmentUploader($Attachments);
var $attachmentInput = $Attachments.find('.attachmentInput');
if (window.location.protocol != 'https:') {
$attachmentInput.find('.photo')
.removeClass('enabled')
.addClass('disabled')
.attr('title', 'Capture Image: this functionality is only available over a HTTPS connection');
}
$attachmentInput.find('.photo').click(function () {
if ($(this).hasClass('disabled'))
if (!$(this).hasClass('enabled'))
alert('This functionality is only available over a HTTPS connection');
else if ($(this).hasClass('disabled'))
alert('Disconnected from the Disco ICT Server, please refresh this page and try again');
else
attachmentUploader.uploadImage();
@@ -2001,21 +2001,43 @@ WriteLiteral(">&lt;None Specified&gt;</span>");
#line default
#line hidden
WriteLiteral(" </td>\r\n </tr>\r\n <tr>\r\n <th>Attachments:</th>" +
"\r\n <td>\r\n\r\n <div");
"\r\n <td>\r\n <div");
WriteLiteral(" id=\"DeviceBatch_Attachments\"");
WriteAttribute("class", Tuple.Create(" class=\"", 34487), Tuple.Create("\"", 34554)
WriteAttribute("class", Tuple.Create(" class=\"", 34485), Tuple.Create("\"", 34552)
#line 672 "..\..\Areas\Config\Views\DeviceBatch\Show.cshtml"
, Tuple.Create(Tuple.Create("", 34495), Tuple.Create<System.Object, System.Int32>(canConfig ? "canAddAttachments" : "cannotAddAttachments"
#line 671 "..\..\Areas\Config\Views\DeviceBatch\Show.cshtml"
, Tuple.Create(Tuple.Create("", 34493), Tuple.Create<System.Object, System.Int32>(canConfig ? "canAddAttachments" : "cannotAddAttachments"
#line default
#line hidden
, 34495), false)
, 34493), false)
);
WriteLiteral(">\r\n <div");
WriteLiteral(" data-uploadurl=\"");
#line 671 "..\..\Areas\Config\Views\DeviceBatch\Show.cshtml"
Write(Url.Action(MVC.API.DeviceBatch.AttachmentUpload(Model.DeviceBatch.Id, null)));
#line default
#line hidden
WriteLiteral("\"");
WriteLiteral(">\r\n");
WriteLiteral(" ");
#line 672 "..\..\Areas\Config\Views\DeviceBatch\Show.cshtml"
Write(Html.AntiForgeryToken());
#line default
#line hidden
WriteLiteral("\r\n <div");
WriteLiteral(" class=\"Disco-AttachmentUpload-DropTarget\"");
@@ -2044,14 +2066,14 @@ WriteLiteral(">\r\n");
#line hidden
WriteLiteral(" <a");
WriteAttribute("href", Tuple.Create(" href=\"", 35033), Tuple.Create("\"", 35106)
WriteAttribute("href", Tuple.Create(" href=\"", 35174), Tuple.Create("\"", 35247)
#line 681 "..\..\Areas\Config\Views\DeviceBatch\Show.cshtml"
, Tuple.Create(Tuple.Create("", 35040), Tuple.Create<System.Object, System.Int32>(Url.Action(MVC.API.DeviceBatch.AttachmentDownload(attachment.Id))
, Tuple.Create(Tuple.Create("", 35181), Tuple.Create<System.Object, System.Int32>(Url.Action(MVC.API.DeviceBatch.AttachmentDownload(attachment.Id))
#line default
#line hidden
, 35040), false)
, 35181), false)
);
WriteLiteral(" data-attachmentid=\"");
@@ -2080,28 +2102,28 @@ WriteLiteral(">\r\n <span");
WriteLiteral(" class=\"icon\"");
WriteAttribute("title", Tuple.Create(" title=\"", 35236), Tuple.Create("\"", 35264)
WriteAttribute("title", Tuple.Create(" title=\"", 35377), Tuple.Create("\"", 35405)
#line 682 "..\..\Areas\Config\Views\DeviceBatch\Show.cshtml"
, Tuple.Create(Tuple.Create("", 35244), Tuple.Create<System.Object, System.Int32>(attachment.Filename
, Tuple.Create(Tuple.Create("", 35385), Tuple.Create<System.Object, System.Int32>(attachment.Filename
#line default
#line hidden
, 35244), false)
, 35385), false)
);
WriteLiteral(">\r\n <img");
WriteLiteral(" alt=\"Attachment Thumbnail\"");
WriteAttribute("src", Tuple.Create(" src=\"", 35339), Tuple.Create("\"", 35414)
WriteAttribute("src", Tuple.Create(" src=\"", 35480), Tuple.Create("\"", 35555)
#line 683 "..\..\Areas\Config\Views\DeviceBatch\Show.cshtml"
, Tuple.Create(Tuple.Create("", 35345), Tuple.Create<System.Object, System.Int32>(Url.Action(MVC.API.DeviceBatch.AttachmentThumbnail(attachment.Id))
, Tuple.Create(Tuple.Create("", 35486), Tuple.Create<System.Object, System.Int32>(Url.Action(MVC.API.DeviceBatch.AttachmentThumbnail(attachment.Id))
#line default
#line hidden
, 35345), false)
, 35486), false)
);
WriteLiteral(" />\r\n </span>\r\n " +
@@ -2109,14 +2131,14 @@ WriteLiteral(" />\r\n </span>\r\n
WriteLiteral(" class=\"comments\"");
WriteAttribute("title", Tuple.Create(" title=\"", 35523), Tuple.Create("\"", 35551)
WriteAttribute("title", Tuple.Create(" title=\"", 35664), Tuple.Create("\"", 35692)
#line 685 "..\..\Areas\Config\Views\DeviceBatch\Show.cshtml"
, Tuple.Create(Tuple.Create("", 35531), Tuple.Create<System.Object, System.Int32>(attachment.Comments
, Tuple.Create(Tuple.Create("", 35672), Tuple.Create<System.Object, System.Int32>(attachment.Comments
#line default
#line hidden
, 35531), false)
, 35672), false)
);
WriteLiteral(">\r\n");
@@ -2168,14 +2190,14 @@ WriteLiteral("<span");
WriteLiteral(" class=\"timestamp\"");
WriteAttribute("title", Tuple.Create(" title=\"", 35857), Tuple.Create("\"", 35903)
WriteAttribute("title", Tuple.Create(" title=\"", 35998), Tuple.Create("\"", 36044)
#line 688 "..\..\Areas\Config\Views\DeviceBatch\Show.cshtml"
, Tuple.Create(Tuple.Create("", 35865), Tuple.Create<System.Object, System.Int32>(attachment.Timestamp.ToFullDateTime()
, Tuple.Create(Tuple.Create("", 36006), Tuple.Create<System.Object, System.Int32>(attachment.Timestamp.ToFullDateTime()
#line default
#line hidden
, 35865), false)
, 36006), false)
);
WriteLiteral(" data-livestamp=\"");
@@ -2236,13 +2258,13 @@ WriteLiteral(" class=\"attachmentInput clearfix\"");
WriteLiteral(">\r\n <span");
WriteLiteral(" class=\"action upload fa fa-upload disabled\"");
WriteLiteral(" class=\"action enabled upload fa fa-upload disabled\"");
WriteLiteral(" title=\"Attach File\"");
WriteLiteral("></span><span");
WriteLiteral(" class=\"action photo fa fa-camera disabled\"");
WriteLiteral(" class=\"action enabled photo fa fa-camera disabled\"");
WriteLiteral(" title=\"Capture Image\"");
@@ -2305,39 +2327,39 @@ WriteLiteral(@">
WriteLiteral("\' };\r\n $.connection.hub.error(onHubFailed);\r\n " +
" $.connection.hub.disconnected(onHubFailed);\r\n\r\n " +
" $.connection.hub.reconnecting(function () {\r\n " +
" $Attachments.find(\'span.action\').addClass(\'disabled\');\r\n " +
" });\r\n $.connection.hub.reconnected(fun" +
"ction () {\r\n $Attachments.find(\'span.action\').rem" +
"oveClass(\'disabled\');\r\n });\r\n\r\n " +
" // Start Connection\r\n $.connection.hub.start(fu" +
"nction () {\r\n $Attachments.find(\'span.action\').re" +
"moveClass(\'disabled\');\r\n }).fail(onHubFailed);\r\n\r\n " +
" function onHubFailed(error) {\r\n " +
" // Disable UI\r\n $Attachments.find(\'span.a" +
"ction\').addClass(\'disabled\');\r\n\r\n // Show Dialog " +
"Message\r\n if ($(\'.disconnected-dialog\').length ==" +
" 0) {\r\n $(\'<div>\')\r\n " +
" .addClass(\'dialog disconnected-dialog\')\r\n " +
" .html(\'<h3><span class=\"fa-stack fa-lg\"><i class=\"fa fa-wifi fa-" +
"stack-1x\"></i><i class=\"fa fa-ban fa-stack-2x error\"></i></span>Disconnected fro" +
"m the Disco ICT Server</h3><div>This page is not receiving live updates. Please " +
"ensure you are connected to the server, then refresh this page to enable feature" +
"s.</div>\')\r\n .dialog({\r\n " +
" resizable: false,\r\n " +
" title: \'Disconnected\',\r\n wi" +
"dth: 400,\r\n modal: true,\r\n " +
" buttons: {\r\n " +
" \'Refresh Now\': function () {\r\n " +
" $(this).dialog(\'option\', \'buttons\', null);\r\n " +
" window.location.reload(true);\r\n " +
" },\r\n " +
" \'Close\': function () {\r\n $(" +
"this).dialog(\'destroy\');\r\n }\r\n " +
" }\r\n " +
" });\r\n }\r\n }\r\n\r\n " +
" function onAddAttachment(id, quick) {\r\n " +
" var data = { id: id };\r\n $.ajax({" +
"\r\n url: \'");
" $Attachments.find(\'span.action.enabled\').addClass(\'disabled\');\r\n " +
" });\r\n $.connection.hub.reconne" +
"cted(function () {\r\n $Attachments.find(\'span.acti" +
"on.enabled\').removeClass(\'disabled\');\r\n });\r\n\r\n " +
" // Start Connection\r\n $.connect" +
"ion.hub.start(function () {\r\n $Attachments.find(\'" +
"span.action.enabled\').removeClass(\'disabled\');\r\n }).f" +
"ail(onHubFailed);\r\n\r\n function onHubFailed(error) {\r\n" +
" // Disable UI\r\n $" +
"Attachments.find(\'span.action.enabled\').addClass(\'disabled\');\r\n\r\n " +
" // Show Dialog Message\r\n if ($(\'" +
".disconnected-dialog\').length == 0) {\r\n $(\'<d" +
"iv>\')\r\n .addClass(\'dialog disconnected-di" +
"alog\')\r\n .html(\'<h3><span class=\"fa-stack" +
" fa-lg\"><i class=\"fa fa-wifi fa-stack-1x\"></i><i class=\"fa fa-ban fa-stack-2x er" +
"ror\"></i></span>Disconnected from the Disco ICT Server</h3><div>This page is not" +
" receiving live updates. Please ensure you are connected to the server, then ref" +
"resh this page to enable features.</div>\')\r\n " +
" .dialog({\r\n resizable: false,\r\n " +
" title: \'Disconnected\',\r\n " +
" width: 400,\r\n " +
" modal: true,\r\n buttons: {\r\n " +
" \'Refresh Now\': function () {\r\n " +
" $(this).dialog(\'option\', \'buttons" +
"\', null);\r\n window.location.r" +
"eload(true);\r\n },\r\n " +
" \'Close\': function () {\r\n " +
" $(this).dialog(\'destroy\');\r\n " +
" }\r\n }\r\n " +
" });\r\n }\r\n " +
" }\r\n\r\n function onAddAttachmen" +
"t(id, quick) {\r\n var data = { id: id };\r\n " +
" $.ajax({\r\n url: \'");
#line 770 "..\..\Areas\Config\Views\DeviceBatch\Show.cshtml"
@@ -2507,51 +2529,47 @@ WriteLiteral("/\' + a.Id + \'?v=\' + retryCount);\r\n
#line default
#line hidden
WriteLiteral("\r\n //#region Add Attachments\r\n " +
" var attachmentUploader = new document.Disco.AttachmentUploader(\r\n " +
" \'");
" var attachmentUploader = new document.Disco.AttachmentUploader($Attachments)" +
";\r\n\r\n var $attachmentInput = $Attachments.find(\'.atta" +
"chmentInput\');\r\n if (window.location.protocol != \'htt" +
"ps:\') {\r\n $attachmentInput.find(\'.photo\')\r\n " +
" .removeClass(\'enabled\')\r\n " +
" .addClass(\'disabled\')\r\n .attr(\'tit" +
"le\', \'Capture Image: this functionality is only available over a HTTPS connectio" +
"n\');\r\n }\r\n $attachmentInpu" +
"t.find(\'.photo\').click(function () {\r\n if (!$(thi" +
"s).hasClass(\'enabled\'))\r\n alert(\'This functio" +
"nality is only available over a HTTPS connection\');\r\n " +
" else if ($(this).hasClass(\'disabled\'))\r\n " +
" alert(\'Disconnected from the Disco ICT Server, please refresh this page and try" +
" again\');\r\n else\r\n " +
" attachmentUploader.uploadImage();\r\n });\r\n " +
" $attachmentInput.find(\'.upload\').click(function () {\r\n " +
" if ($(this).hasClass(\'disabled\'))\r\n " +
" alert(\'Disconnected from the Disco ICT Server, please refresh " +
"this page and try again\');\r\n else\r\n " +
" attachmentUploader.uploadFiles();\r\n " +
" });\r\n //#endregion\r\n " +
"//#region Remove Attachments\r\n $attachmentOutput.find" +
"(\'span.remove\').click(removeAttachment);\r\n\r\n function" +
" removeAttachment() {\r\n $this = $(this).closest(\'" +
"a\');\r\n\r\n var data = { id: $this.attr(\'data-attach" +
"mentid\') };\r\n\r\n if (!$dialogRemoveAttachment) {\r\n" +
" $dialogRemoveAttachment = $(\'#dialogRemoveAt" +
"tachment\').dialog({\r\n resizable: false,\r\n" +
" height: 140,\r\n " +
" modal: true,\r\n autoOpen: fa" +
"lse\r\n });\r\n }\r" +
"\n\r\n $dialogRemoveAttachment.dialog(\"enable\");\r\n " +
" $dialogRemoveAttachment.dialog(\'option\', \'buttons\'" +
", {\r\n \"Remove\": function () {\r\n " +
" $dialogRemoveAttachment.dialog(\"disable\");\r\n " +
" $dialogRemoveAttachment.dialog(\"option\", \"buttons\"" +
", null);\r\n $.ajax({\r\n " +
" url: \'");
#line 880 "..\..\Areas\Config\Views\DeviceBatch\Show.cshtml"
Write(Url.Action(MVC.API.DeviceBatch.AttachmentUpload(Model.DeviceBatch.Id, null)));
#line default
#line hidden
WriteLiteral("\',\r\n $Attachments.find(\'.Disco-AttachmentUpload-DropTa" +
"rget\'),\r\n $Attachments.find(\'.Disco-AttachmentUpload-" +
"Progress\'));\r\n\r\n var $attachmentInput = $Attachments." +
"find(\'.attachmentInput\');\r\n $attachmentInput.find(\'.p" +
"hoto\').click(function () {\r\n if ($(this).hasClass" +
"(\'disabled\'))\r\n alert(\'Disconnected from the " +
"Disco ICT Server, please refresh this page and try again\');\r\n " +
" else\r\n attachmentUploader.upload" +
"Image();\r\n });\r\n $attachme" +
"ntInput.find(\'.upload\').click(function () {\r\n if " +
"($(this).hasClass(\'disabled\'))\r\n alert(\'Disco" +
"nnected from the Disco ICT Server, please refresh this page and try again\');\r\n " +
" else\r\n attachme" +
"ntUploader.uploadFiles();\r\n });\r\n " +
" //#endregion\r\n //#region Remove Attachments\r\n" +
" $attachmentOutput.find(\'span.remove\').click(removeAt" +
"tachment);\r\n\r\n function removeAttachment() {\r\n " +
" $this = $(this).closest(\'a\');\r\n\r\n " +
" var data = { id: $this.attr(\'data-attachmentid\') };\r\n\r\n " +
" if (!$dialogRemoveAttachment) {\r\n " +
" $dialogRemoveAttachment = $(\'#dialogRemoveAttachment\').dialog({\r\n " +
" resizable: false,\r\n " +
" height: 140,\r\n modal: true,\r\n " +
" autoOpen: false\r\n " +
" });\r\n }\r\n\r\n " +
" $dialogRemoveAttachment.dialog(\"enable\");\r\n " +
"$dialogRemoveAttachment.dialog(\'option\', \'buttons\', {\r\n " +
" \"Remove\": function () {\r\n $dia" +
"logRemoveAttachment.dialog(\"disable\");\r\n " +
"$dialogRemoveAttachment.dialog(\"option\", \"buttons\", null);\r\n " +
" $.ajax({\r\n url: \'" +
"");
#line 921 "..\..\Areas\Config\Views\DeviceBatch\Show.cshtml"
#line 926 "..\..\Areas\Config\Views\DeviceBatch\Show.cshtml"
Write(Url.Action(MVC.API.DeviceBatch.AttachmentRemove()));
@@ -2579,7 +2597,7 @@ WriteLiteral("\',\r\n dataType: \'jso
"endregion\r\n ");
#line 948 "..\..\Areas\Config\Views\DeviceBatch\Show.cshtml"
#line 953 "..\..\Areas\Config\Views\DeviceBatch\Show.cshtml"
}
@@ -2602,13 +2620,13 @@ WriteLiteral(@"
");
#line 963 "..\..\Areas\Config\Views\DeviceBatch\Show.cshtml"
#line 968 "..\..\Areas\Config\Views\DeviceBatch\Show.cshtml"
#line default
#line hidden
#line 963 "..\..\Areas\Config\Views\DeviceBatch\Show.cshtml"
#line 968 "..\..\Areas\Config\Views\DeviceBatch\Show.cshtml"
if (hideAdvanced)
{
@@ -2642,7 +2660,7 @@ WriteLiteral(@">Show Advanced Options</button>
");
#line 979 "..\..\Areas\Config\Views\DeviceBatch\Show.cshtml"
#line 984 "..\..\Areas\Config\Views\DeviceBatch\Show.cshtml"
}
@@ -2658,7 +2676,7 @@ WriteLiteral(">\r\n <th>Linked Groups:\r\n </th>\r\n
WriteLiteral(" ");
#line 985 "..\..\Areas\Config\Views\DeviceBatch\Show.cshtml"
#line 990 "..\..\Areas\Config\Views\DeviceBatch\Show.cshtml"
Write(Html.Partial(MVC.Config.Shared.Views.LinkedGroupInstance, new LinkedGroupModel()
{
CanConfigure = canConfig,
@@ -2676,7 +2694,7 @@ WriteLiteral("\r\n");
WriteLiteral(" ");
#line 993 "..\..\Areas\Config\Views\DeviceBatch\Show.cshtml"
#line 998 "..\..\Areas\Config\Views\DeviceBatch\Show.cshtml"
Write(Html.Partial(MVC.Config.Shared.Views.LinkedGroupInstance, new LinkedGroupModel()
{
CanConfigure = canConfig,
@@ -2692,13 +2710,13 @@ WriteLiteral(" ");
WriteLiteral("\r\n");
#line 1001 "..\..\Areas\Config\Views\DeviceBatch\Show.cshtml"
#line 1006 "..\..\Areas\Config\Views\DeviceBatch\Show.cshtml"
#line default
#line hidden
#line 1001 "..\..\Areas\Config\Views\DeviceBatch\Show.cshtml"
#line 1006 "..\..\Areas\Config\Views\DeviceBatch\Show.cshtml"
if (canConfig)
{
@@ -2706,14 +2724,14 @@ WriteLiteral("\r\n");
#line default
#line hidden
#line 1003 "..\..\Areas\Config\Views\DeviceBatch\Show.cshtml"
#line 1008 "..\..\Areas\Config\Views\DeviceBatch\Show.cshtml"
Write(Html.Partial(MVC.Config.Shared.Views.LinkedGroupShared));
#line default
#line hidden
#line 1003 "..\..\Areas\Config\Views\DeviceBatch\Show.cshtml"
#line 1008 "..\..\Areas\Config\Views\DeviceBatch\Show.cshtml"
}
@@ -2723,7 +2741,7 @@ WriteLiteral("\r\n");
WriteLiteral(" </div>\r\n </td>\r\n </tr>\r\n </table>\r\n</div>\r\n");
#line 1010 "..\..\Areas\Config\Views\DeviceBatch\Show.cshtml"
#line 1015 "..\..\Areas\Config\Views\DeviceBatch\Show.cshtml"
Write(Html.Partial(MVC.Config.Shared.Views._DeviceGroupDocumentBulkGenerate, Model));
@@ -2736,13 +2754,13 @@ WriteLiteral(" class=\"actionBar\"");
WriteLiteral(">\r\n");
#line 1012 "..\..\Areas\Config\Views\DeviceBatch\Show.cshtml"
#line 1017 "..\..\Areas\Config\Views\DeviceBatch\Show.cshtml"
#line default
#line hidden
#line 1012 "..\..\Areas\Config\Views\DeviceBatch\Show.cshtml"
#line 1017 "..\..\Areas\Config\Views\DeviceBatch\Show.cshtml"
if (Model.CanDelete)
{
@@ -2750,14 +2768,14 @@ WriteLiteral(">\r\n");
#line default
#line hidden
#line 1014 "..\..\Areas\Config\Views\DeviceBatch\Show.cshtml"
#line 1019 "..\..\Areas\Config\Views\DeviceBatch\Show.cshtml"
Write(Html.ActionLinkButton("Delete", MVC.API.DeviceBatch.Delete(Model.DeviceBatch.Id, true), "buttonDelete"));
#line default
#line hidden
#line 1014 "..\..\Areas\Config\Views\DeviceBatch\Show.cshtml"
#line 1019 "..\..\Areas\Config\Views\DeviceBatch\Show.cshtml"
}
@@ -2767,7 +2785,7 @@ WriteLiteral(">\r\n");
WriteLiteral(" ");
#line 1016 "..\..\Areas\Config\Views\DeviceBatch\Show.cshtml"
#line 1021 "..\..\Areas\Config\Views\DeviceBatch\Show.cshtml"
if (Model.DeviceCount > 0)
{
if (Authorization.Has(Claims.Device.Actions.Export))
@@ -2777,14 +2795,14 @@ WriteLiteral(" ");
#line default
#line hidden
#line 1020 "..\..\Areas\Config\Views\DeviceBatch\Show.cshtml"
#line 1025 "..\..\Areas\Config\Views\DeviceBatch\Show.cshtml"
Write(Html.ActionLinkButton("Export Devices", MVC.Device.Export(null, Disco.Models.Services.Devices.DeviceExportTypes.Batch, Model.DeviceBatch.Id)));
#line default
#line hidden
#line 1020 "..\..\Areas\Config\Views\DeviceBatch\Show.cshtml"
#line 1025 "..\..\Areas\Config\Views\DeviceBatch\Show.cshtml"
}
if (Authorization.Has(Claims.Device.Search) && Model.DeviceCount > 0)
@@ -2794,14 +2812,14 @@ WriteLiteral(" ");
#line default
#line hidden
#line 1024 "..\..\Areas\Config\Views\DeviceBatch\Show.cshtml"
#line 1029 "..\..\Areas\Config\Views\DeviceBatch\Show.cshtml"
Write(Html.ActionLinkButton(string.Format("View {0} Device{1}", Model.DeviceCount, (Model.DeviceCount != 1 ? "s" : null)), MVC.Search.Query(Model.DeviceBatch.Id.ToString(), "DeviceBatch")));
#line default
#line hidden
#line 1024 "..\..\Areas\Config\Views\DeviceBatch\Show.cshtml"
#line 1029 "..\..\Areas\Config\Views\DeviceBatch\Show.cshtml"
}
}
+1
View File
@@ -1018,6 +1018,7 @@ h1.Config_DocumentTemplates {
.deviceBatches #DeviceBatch_Attachments {
border: 1px solid #ccc;
background-color: #fff;
position: relative;
}
.deviceBatches #DeviceBatch_Attachments div.attachmentOutput {
position: relative;
+1
View File
@@ -1197,6 +1197,7 @@ h1.Config_DocumentTemplates {
#DeviceBatch_Attachments {
border: 1px solid @SubtleBorderColour;
background-color: @white;
position: relative;
div.attachmentOutput {
position: relative;
+1 -1
View File
@@ -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: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;}#updateAvailableContainer{float:right;border:1px dashed #ddd;background-color:#fff;font-size:.6em;line-height:1em;padding:10px 10px 4px 70px;text-align:right;height:50px;}#updateAvailableContainer i{position:absolute;display:block;height:64px;width:64px;vertical-align:middle;margin-left:-70px;font-size:50px;color:#e51400;}#updateAvailableContainer button{font-size:12px;margin-top:8px;}.Config_HideAdvanced .Config_HideAdvanced_Item{display:none;}.Config_LinkedGroup_Instance{margin:4px 0 8px 4px;padding:4px 0 4px 6px;border-left:4px solid #ccc;background-color:#fff;}.Config_LinkedGroup_Instance div.code{margin-left:2px;}#Config_LinkedGroup_Dialog h3{margin-bottom:6px;}#Config_LinkedGroup_Dialog table.input{margin-top:12px;}#Config_LinkedGroup_Dialog table.input th{text-align:right;}#expressionEditor #expressionEditorExceptionContainer{display:none;border:1px dashed #ff9696;background-color:#ffd8d8;margin:10px 0;padding:10px;}#expressionEditor #expressionEditorContainer{border:1px solid #1e6dab;background-color:#f4f4f4;height:100px;}.expressionTree span.dynatree-node span.dynatree-icon{background-image:url(data:image/png;base64,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);background-position-y:0;}.expressionTree span.dynatree-node.object span.dynatree-icon{background-position-x:0;}.expressionTree span.dynatree-node.parameter span.dynatree-icon{background-position-x:-16px;}.expressionTree span.dynatree-node.function span.dynatree-icon{background-position-x:-32px;}.expressionTree span.dynatreeLine truncated
.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;}#updateAvailableContainer{float:right;border:1px dashed #ddd;background-color:#fff;font-size:.6em;line-height:1em;padding:10px 10px 4px 70px;text-align:right;height:50px;}#updateAvailableContainer i{position:absolute;display:block;height:64px;width:64px;vertical-align:middle;margin-left:-70px;font-size:50px;color:#e51400;}#updateAvailableContainer button{font-size:12px;margin-top:8px;}.Config_HideAdvanced .Config_HideAdvanced_Item{display:none;}.Config_LinkedGroup_Instance{margin:4px 0 8px 4px;padding:4px 0 4px 6px;border-left:4px solid #ccc;background-color:#fff;}.Config_LinkedGroup_Instance div.code{margin-left:2px;}#Config_LinkedGroup_Dialog h3{margin-bottom:6px;}#Config_LinkedGroup_Dialog table.input{margin-top:12px;}#Config_LinkedGroup_Dialog table.input th{text-align:right;}#expressionEditor #expressionEditorExceptionContainer{display:none;border:1px dashed #ff9696;background-color:#ffd8d8;margin:10px 0;padding:10px;}#expressionEditor #expressionEditorContainer{border:1px solid #1e6dab;background-color:#f4f4f4;height:100px;}.expressionTree span.dynatree-node span.dynatree-icon{background-image:url(data:image/png;base64,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);background-position-y:0;}.expressionTree span.dynatree-node.object span.dynatree-icon{background-position-x:0;}.expressionTree span.dynatree-node.parameter span.dynatree-icon{background-position-x:-16px;}.expressionTree span.dynatree-node.function span.dynatree-icon{background-position-x:-32px;}.expressionTree span.dynatreeLine truncated