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"> <Compile Include="Migrations\202412180604170_DBv25.Designer.cs">
<DependentUpon>202412180604170_DBv25.cs</DependentUpon> <DependentUpon>202412180604170_DBv25.cs</DependentUpon>
</Compile> </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\Configuration.cs" />
<Compile Include="Migrations\DiscoDataMigrator.cs" /> <Compile Include="Migrations\DiscoDataMigrator.cs" />
<Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="Properties\AssemblyInfo.cs" />
@@ -279,6 +283,9 @@
<EmbeddedResource Include="Migrations\202412180604170_DBv25.resx"> <EmbeddedResource Include="Migrations\202412180604170_DBv25.resx">
<DependentUpon>202412180604170_DBv25.cs</DependentUpon> <DependentUpon>202412180604170_DBv25.cs</DependentUpon>
</EmbeddedResource> </EmbeddedResource>
<EmbeddedResource Include="Migrations\202503140520548_DBv26.resx">
<DependentUpon>202503140520548_DBv26.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx"> <EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator> <Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput> <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)] [Required, StringLength(500)]
public string MimeType { get; set; } public string MimeType { get; set; }
public DateTime Timestamp { get; set; } public DateTime Timestamp { get; set; }
[Required, StringLength(500)] [StringLength(500)]
public string Comments { get; set; } public string Comments { get; set; }
[NotMapped] [NotMapped]
@@ -652,7 +652,8 @@ namespace Disco.Web.Areas.API.Controllers
} }
[DiscoAuthorize(Claims.Config.DeviceBatch.Configure)] [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); var batch = Database.DeviceBatches.Find(id);
if (batch != null) if (batch != null)
@@ -666,14 +667,14 @@ namespace Disco.Web.Areas.API.Controllers
if (string.IsNullOrEmpty(contentType) || contentType.Equals("unknown/unknown", StringComparison.OrdinalIgnoreCase)) if (string.IsNullOrEmpty(contentType) || contentType.Equals("unknown/unknown", StringComparison.OrdinalIgnoreCase))
contentType = MimeTypes.ResolveMimeType(file.FileName); contentType = MimeTypes.ResolveMimeType(file.FileName);
var attachment = new Disco.Models.Repository.DeviceBatchAttachment() var attachment = new DeviceBatchAttachment()
{ {
DeviceBatchId = batch.Id, DeviceBatchId = batch.Id,
TechUserId = CurrentUser.UserId, TechUserId = CurrentUser.UserId,
Filename = file.FileName, Filename = file.FileName,
MimeType = contentType, MimeType = contentType,
Timestamp = DateTime.Now, Timestamp = DateTime.Now,
Comments = Comments Comments = comments
}; };
Database.DeviceBatchAttachments.Add(attachment); Database.DeviceBatchAttachments.Add(attachment);
Database.SaveChanges(); Database.SaveChanges();
@@ -668,8 +668,8 @@
<tr> <tr>
<th>Attachments:</th> <th>Attachments:</th>
<td> <td>
<div id="DeviceBatch_Attachments" class="@(canConfig ? "canAddAttachments" : "cannotAddAttachments")" data-uploadurl="@(Url.Action(MVC.API.DeviceBatch.AttachmentUpload(Model.DeviceBatch.Id, null)))">
<div id="DeviceBatch_Attachments" class="@(canConfig ? "canAddAttachments" : "cannotAddAttachments")"> @Html.AntiForgeryToken()
<div class="Disco-AttachmentUpload-DropTarget"> <div class="Disco-AttachmentUpload-DropTarget">
<h2>Drop Attachments Here</h2> <h2>Drop Attachments Here</h2>
</div> </div>
@@ -694,7 +694,7 @@
{ {
<div class="Disco-AttachmentUpload-Progress"></div> <div class="Disco-AttachmentUpload-Progress"></div>
<div class="attachmentInput clearfix"> <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>
<div id="dialogRemoveAttachment" class="dialog" title="Remove this Attachment?"> <div id="dialogRemoveAttachment" class="dialog" title="Remove this Attachment?">
<p> <p>
@@ -726,20 +726,20 @@
$.connection.hub.disconnected(onHubFailed); $.connection.hub.disconnected(onHubFailed);
$.connection.hub.reconnecting(function () { $.connection.hub.reconnecting(function () {
$Attachments.find('span.action').addClass('disabled'); $Attachments.find('span.action.enabled').addClass('disabled');
}); });
$.connection.hub.reconnected(function () { $.connection.hub.reconnected(function () {
$Attachments.find('span.action').removeClass('disabled'); $Attachments.find('span.action.enabled').removeClass('disabled');
}); });
// Start Connection // Start Connection
$.connection.hub.start(function () { $.connection.hub.start(function () {
$Attachments.find('span.action').removeClass('disabled'); $Attachments.find('span.action.enabled').removeClass('disabled');
}).fail(onHubFailed); }).fail(onHubFailed);
function onHubFailed(error) { function onHubFailed(error) {
// Disable UI // Disable UI
$Attachments.find('span.action').addClass('disabled'); $Attachments.find('span.action.enabled').addClass('disabled');
// Show Dialog Message // Show Dialog Message
if ($('.disconnected-dialog').length == 0) { if ($('.disconnected-dialog').length == 0) {
@@ -876,14 +876,19 @@
@if (canConfig) @if (canConfig)
{<text> {<text>
//#region Add Attachments //#region Add Attachments
var attachmentUploader = new document.Disco.AttachmentUploader( var attachmentUploader = new document.Disco.AttachmentUploader($Attachments);
'@(Url.Action(MVC.API.DeviceBatch.AttachmentUpload(Model.DeviceBatch.Id, null)))',
$Attachments.find('.Disco-AttachmentUpload-DropTarget'),
$Attachments.find('.Disco-AttachmentUpload-Progress'));
var $attachmentInput = $Attachments.find('.attachmentInput'); 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 () { $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'); alert('Disconnected from the Disco ICT Server, please refresh this page and try again');
else else
attachmentUploader.uploadImage(); attachmentUploader.uploadImage();
@@ -2001,21 +2001,43 @@ WriteLiteral(">&lt;None Specified&gt;</span>");
#line default #line default
#line hidden #line hidden
WriteLiteral(" </td>\r\n </tr>\r\n <tr>\r\n <th>Attachments:</th>" + 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\""); 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" #line 671 "..\..\Areas\Config\Views\DeviceBatch\Show.cshtml"
, Tuple.Create(Tuple.Create("", 34495), Tuple.Create<System.Object, System.Int32>(canConfig ? "canAddAttachments" : "cannotAddAttachments" , Tuple.Create(Tuple.Create("", 34493), Tuple.Create<System.Object, System.Int32>(canConfig ? "canAddAttachments" : "cannotAddAttachments"
#line default #line default
#line hidden #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\""); WriteLiteral(" class=\"Disco-AttachmentUpload-DropTarget\"");
@@ -2044,14 +2066,14 @@ WriteLiteral(">\r\n");
#line hidden #line hidden
WriteLiteral(" <a"); 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" #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 default
#line hidden #line hidden
, 35040), false) , 35181), false)
); );
WriteLiteral(" data-attachmentid=\""); WriteLiteral(" data-attachmentid=\"");
@@ -2080,28 +2102,28 @@ WriteLiteral(">\r\n <span");
WriteLiteral(" class=\"icon\""); 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" #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 default
#line hidden #line hidden
, 35244), false) , 35385), false)
); );
WriteLiteral(">\r\n <img"); WriteLiteral(">\r\n <img");
WriteLiteral(" alt=\"Attachment Thumbnail\""); 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" #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 default
#line hidden #line hidden
, 35345), false) , 35486), false)
); );
WriteLiteral(" />\r\n </span>\r\n " + WriteLiteral(" />\r\n </span>\r\n " +
@@ -2109,14 +2131,14 @@ WriteLiteral(" />\r\n </span>\r\n
WriteLiteral(" class=\"comments\""); 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" #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 default
#line hidden #line hidden
, 35531), false) , 35672), false)
); );
WriteLiteral(">\r\n"); WriteLiteral(">\r\n");
@@ -2168,14 +2190,14 @@ WriteLiteral("<span");
WriteLiteral(" class=\"timestamp\""); 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" #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 default
#line hidden #line hidden
, 35865), false) , 36006), false)
); );
WriteLiteral(" data-livestamp=\""); WriteLiteral(" data-livestamp=\"");
@@ -2236,13 +2258,13 @@ WriteLiteral(" class=\"attachmentInput clearfix\"");
WriteLiteral(">\r\n <span"); 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(" title=\"Attach File\"");
WriteLiteral("></span><span"); WriteLiteral("></span><span");
WriteLiteral(" class=\"action photo fa fa-camera disabled\""); WriteLiteral(" class=\"action enabled photo fa fa-camera disabled\"");
WriteLiteral(" title=\"Capture Image\""); WriteLiteral(" title=\"Capture Image\"");
@@ -2305,39 +2327,39 @@ WriteLiteral(@">
WriteLiteral("\' };\r\n $.connection.hub.error(onHubFailed);\r\n " + WriteLiteral("\' };\r\n $.connection.hub.error(onHubFailed);\r\n " +
" $.connection.hub.disconnected(onHubFailed);\r\n\r\n " + " $.connection.hub.disconnected(onHubFailed);\r\n\r\n " +
" $.connection.hub.reconnecting(function () {\r\n " + " $.connection.hub.reconnecting(function () {\r\n " +
" $Attachments.find(\'span.action\').addClass(\'disabled\');\r\n " + " $Attachments.find(\'span.action.enabled\').addClass(\'disabled\');\r\n " +
" });\r\n $.connection.hub.reconnected(fun" + " });\r\n $.connection.hub.reconne" +
"ction () {\r\n $Attachments.find(\'span.action\').rem" + "cted(function () {\r\n $Attachments.find(\'span.acti" +
"oveClass(\'disabled\');\r\n });\r\n\r\n " + "on.enabled\').removeClass(\'disabled\');\r\n });\r\n\r\n " +
" // Start Connection\r\n $.connection.hub.start(fu" + " // Start Connection\r\n $.connect" +
"nction () {\r\n $Attachments.find(\'span.action\').re" + "ion.hub.start(function () {\r\n $Attachments.find(\'" +
"moveClass(\'disabled\');\r\n }).fail(onHubFailed);\r\n\r\n " + "span.action.enabled\').removeClass(\'disabled\');\r\n }).f" +
" function onHubFailed(error) {\r\n " + "ail(onHubFailed);\r\n\r\n function onHubFailed(error) {\r\n" +
" // Disable UI\r\n $Attachments.find(\'span.a" + " // Disable UI\r\n $" +
"ction\').addClass(\'disabled\');\r\n\r\n // Show Dialog " + "Attachments.find(\'span.action.enabled\').addClass(\'disabled\');\r\n\r\n " +
"Message\r\n if ($(\'.disconnected-dialog\').length ==" + " // Show Dialog Message\r\n if ($(\'" +
" 0) {\r\n $(\'<div>\')\r\n " + ".disconnected-dialog\').length == 0) {\r\n $(\'<d" +
" .addClass(\'dialog disconnected-dialog\')\r\n " + "iv>\')\r\n .addClass(\'dialog disconnected-di" +
" .html(\'<h3><span class=\"fa-stack fa-lg\"><i class=\"fa fa-wifi fa-" + "alog\')\r\n .html(\'<h3><span class=\"fa-stack" +
"stack-1x\"></i><i class=\"fa fa-ban fa-stack-2x error\"></i></span>Disconnected fro" + " fa-lg\"><i class=\"fa fa-wifi fa-stack-1x\"></i><i class=\"fa fa-ban fa-stack-2x er" +
"m the Disco ICT Server</h3><div>This page is not receiving live updates. Please " + "ror\"></i></span>Disconnected from the Disco ICT Server</h3><div>This page is not" +
"ensure you are connected to the server, then refresh this page to enable feature" + " receiving live updates. Please ensure you are connected to the server, then ref" +
"s.</div>\')\r\n .dialog({\r\n " + "resh this page to enable features.</div>\')\r\n " +
" resizable: false,\r\n " + " .dialog({\r\n resizable: false,\r\n " +
" title: \'Disconnected\',\r\n wi" + " title: \'Disconnected\',\r\n " +
"dth: 400,\r\n modal: true,\r\n " + " width: 400,\r\n " +
" buttons: {\r\n " + " modal: true,\r\n buttons: {\r\n " +
" \'Refresh Now\': function () {\r\n " + " \'Refresh Now\': function () {\r\n " +
" $(this).dialog(\'option\', \'buttons\', null);\r\n " + " $(this).dialog(\'option\', \'buttons" +
" window.location.reload(true);\r\n " + "\', null);\r\n window.location.r" +
" },\r\n " + "eload(true);\r\n },\r\n " +
" \'Close\': function () {\r\n $(" + " \'Close\': function () {\r\n " +
"this).dialog(\'destroy\');\r\n }\r\n " + " $(this).dialog(\'destroy\');\r\n " +
" }\r\n " + " }\r\n }\r\n " +
" });\r\n }\r\n }\r\n\r\n " + " });\r\n }\r\n " +
" function onAddAttachment(id, quick) {\r\n " + " }\r\n\r\n function onAddAttachmen" +
" var data = { id: id };\r\n $.ajax({" + "t(id, quick) {\r\n var data = { id: id };\r\n " +
"\r\n url: \'"); " $.ajax({\r\n url: \'");
#line 770 "..\..\Areas\Config\Views\DeviceBatch\Show.cshtml" #line 770 "..\..\Areas\Config\Views\DeviceBatch\Show.cshtml"
@@ -2507,51 +2529,47 @@ WriteLiteral("/\' + a.Id + \'?v=\' + retryCount);\r\n
#line default #line default
#line hidden #line hidden
WriteLiteral("\r\n //#region Add Attachments\r\n " + 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" #line 926 "..\..\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"
Write(Url.Action(MVC.API.DeviceBatch.AttachmentRemove())); Write(Url.Action(MVC.API.DeviceBatch.AttachmentRemove()));
@@ -2579,7 +2597,7 @@ WriteLiteral("\',\r\n dataType: \'jso
"endregion\r\n "); "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 default
#line hidden #line hidden
#line 963 "..\..\Areas\Config\Views\DeviceBatch\Show.cshtml" #line 968 "..\..\Areas\Config\Views\DeviceBatch\Show.cshtml"
if (hideAdvanced) 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(" "); 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() Write(Html.Partial(MVC.Config.Shared.Views.LinkedGroupInstance, new LinkedGroupModel()
{ {
CanConfigure = canConfig, CanConfigure = canConfig,
@@ -2676,7 +2694,7 @@ WriteLiteral("\r\n");
WriteLiteral(" "); 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() Write(Html.Partial(MVC.Config.Shared.Views.LinkedGroupInstance, new LinkedGroupModel()
{ {
CanConfigure = canConfig, CanConfigure = canConfig,
@@ -2692,13 +2710,13 @@ WriteLiteral(" ");
WriteLiteral("\r\n"); WriteLiteral("\r\n");
#line 1001 "..\..\Areas\Config\Views\DeviceBatch\Show.cshtml" #line 1006 "..\..\Areas\Config\Views\DeviceBatch\Show.cshtml"
#line default #line default
#line hidden #line hidden
#line 1001 "..\..\Areas\Config\Views\DeviceBatch\Show.cshtml" #line 1006 "..\..\Areas\Config\Views\DeviceBatch\Show.cshtml"
if (canConfig) if (canConfig)
{ {
@@ -2706,14 +2724,14 @@ WriteLiteral("\r\n");
#line default #line default
#line hidden #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)); Write(Html.Partial(MVC.Config.Shared.Views.LinkedGroupShared));
#line default #line default
#line hidden #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"); 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)); Write(Html.Partial(MVC.Config.Shared.Views._DeviceGroupDocumentBulkGenerate, Model));
@@ -2736,13 +2754,13 @@ WriteLiteral(" class=\"actionBar\"");
WriteLiteral(">\r\n"); WriteLiteral(">\r\n");
#line 1012 "..\..\Areas\Config\Views\DeviceBatch\Show.cshtml" #line 1017 "..\..\Areas\Config\Views\DeviceBatch\Show.cshtml"
#line default #line default
#line hidden #line hidden
#line 1012 "..\..\Areas\Config\Views\DeviceBatch\Show.cshtml" #line 1017 "..\..\Areas\Config\Views\DeviceBatch\Show.cshtml"
if (Model.CanDelete) if (Model.CanDelete)
{ {
@@ -2750,14 +2768,14 @@ WriteLiteral(">\r\n");
#line default #line default
#line hidden #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")); Write(Html.ActionLinkButton("Delete", MVC.API.DeviceBatch.Delete(Model.DeviceBatch.Id, true), "buttonDelete"));
#line default #line default
#line hidden #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(" "); WriteLiteral(" ");
#line 1016 "..\..\Areas\Config\Views\DeviceBatch\Show.cshtml" #line 1021 "..\..\Areas\Config\Views\DeviceBatch\Show.cshtml"
if (Model.DeviceCount > 0) if (Model.DeviceCount > 0)
{ {
if (Authorization.Has(Claims.Device.Actions.Export)) if (Authorization.Has(Claims.Device.Actions.Export))
@@ -2777,14 +2795,14 @@ WriteLiteral(" ");
#line default #line default
#line hidden #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))); Write(Html.ActionLinkButton("Export Devices", MVC.Device.Export(null, Disco.Models.Services.Devices.DeviceExportTypes.Batch, Model.DeviceBatch.Id)));
#line default #line default
#line hidden #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) if (Authorization.Has(Claims.Device.Search) && Model.DeviceCount > 0)
@@ -2794,14 +2812,14 @@ WriteLiteral(" ");
#line default #line default
#line hidden #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"))); 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 default
#line hidden #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 { .deviceBatches #DeviceBatch_Attachments {
border: 1px solid #ccc; border: 1px solid #ccc;
background-color: #fff; background-color: #fff;
position: relative;
} }
.deviceBatches #DeviceBatch_Attachments div.attachmentOutput { .deviceBatches #DeviceBatch_Attachments div.attachmentOutput {
position: relative; position: relative;
+1
View File
@@ -1197,6 +1197,7 @@ h1.Config_DocumentTemplates {
#DeviceBatch_Attachments { #DeviceBatch_Attachments {
border: 1px solid @SubtleBorderColour; border: 1px solid @SubtleBorderColour;
background-color: @white; background-color: @white;
position: relative;
div.attachmentOutput { div.attachmentOutput {
position: relative; 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