Feature: Disco ICT Online Services - Job Publishing

When warranty jobs are submitted (via plugins) users can choose to
include attachments. These attachments are submitted to Disco ICT Online
Services. A secure link is then provided to the plugin so the
attachments can be retrieved.
This commit is contained in:
Gary Sharp
2014-07-24 20:58:48 +10:00
parent 6700d092b3
commit 7cbed23a74
24 changed files with 1088 additions and 91 deletions
+45 -8
View File
@@ -10,6 +10,9 @@ using Disco.Services.Users;
using Disco.Services.Authorization;
using Disco.Services.Plugins.Features.RepairProvider;
using PublishJobResult = Disco.Models.Services.Interop.DiscoServices.PublishJobResult;
using DiscoServicesJobs = Disco.Services.Interop.DiscoServices.Jobs;
namespace Disco.BI.Extensions
{
public static class JobActionExtensions
@@ -147,25 +150,50 @@ namespace Disco.BI.Extensions
{
if (!UserService.CurrentAuthorization.Has(Claims.Job.Actions.LogWarranty))
return false;
return !j.ClosedDate.HasValue &&
(j.DeviceSerialNumber != null) &&
j.JobTypeId == JobType.JobTypeIds.HWar &&
!j.JobMetaWarranty.ExternalLoggedDate.HasValue;
}
public static void OnLogWarranty(this Job j, DiscoDataContext Database, string FaultDescription, PluginFeatureManifest WarrantyProviderDefinition, OrganisationAddress Address, User TechUser, Dictionary<string, string> WarrantyProviderProperties)
public static void OnLogWarranty(this Job j, DiscoDataContext Database, string FaultDescription, List<JobAttachment> SendAttachments, PluginFeatureManifest WarrantyProviderDefinition, OrganisationAddress Address, User TechUser, Dictionary<string, string> WarrantyProviderProperties)
{
if (!j.CanLogWarranty())
throw new InvalidOperationException("Log Warranty was Denied");
if (string.IsNullOrWhiteSpace(FaultDescription))
FaultDescription = j.GenerateFaultDescriptionFooter(Database, WarrantyProviderDefinition);
else
FaultDescription = string.Concat(FaultDescription, Environment.NewLine, Environment.NewLine, j.GenerateFaultDescriptionFooter(Database, WarrantyProviderDefinition));
PublishJobResult publishJobResult = null;
using (WarrantyProviderFeature WarrantyProvider = WarrantyProviderDefinition.CreateInstance<WarrantyProviderFeature>())
{
string providerRef = WarrantyProvider.SubmitJob(Database, j, Address, TechUser, FaultDescription, WarrantyProviderProperties);
if (SendAttachments != null && SendAttachments.Count > 0)
{
publishJobResult = DiscoServicesJobs.Publish(
Database,
j,
TechUser,
WarrantyProvider.WarrantyProviderId,
null,
FaultDescription,
SendAttachments,
Disco.BI.Extensions.AttachmentExtensions.RepositoryFilename);
if (!publishJobResult.Success)
throw new Exception(string.Format("Disco ICT Online Services failed with the following message: ", publishJobResult.ErrorMessage));
if (string.IsNullOrWhiteSpace(FaultDescription))
FaultDescription = publishJobResult.PublishMessage;
else
FaultDescription = string.Concat(FaultDescription, Environment.NewLine, "___", Environment.NewLine, publishJobResult.PublishMessage);
}
string submitDescription;
if (string.IsNullOrWhiteSpace(FaultDescription))
submitDescription = j.GenerateFaultDescriptionFooter(Database, WarrantyProviderDefinition);
else
submitDescription = string.Concat(FaultDescription, Environment.NewLine, Environment.NewLine, j.GenerateFaultDescriptionFooter(Database, WarrantyProviderDefinition));
string providerRef = WarrantyProvider.SubmitJob(Database, j, Address, TechUser, submitDescription, WarrantyProviderProperties);
j.JobMetaWarranty.ExternalLoggedDate = DateTime.Now;
j.JobMetaWarranty.ExternalName = WarrantyProvider.WarrantyProviderId;
@@ -184,6 +212,15 @@ namespace Disco.BI.Extensions
Comments = string.Format("####Warranty Claim Submitted\r\nProvider: **{0}**\r\nAddress: **{1}**\r\nReference: **{2}**\r\n___\r\n{3}", WarrantyProvider.Manifest.Name, Address.Name, providerRef, FaultDescription)
};
Database.JobLogs.Add(jobLog);
if (publishJobResult != null)
{
try
{
DiscoServicesJobs.UpdateRecipientReference(Database, j, publishJobResult.Id, publishJobResult.Secret, j.JobMetaWarranty.ExternalReference);
}
catch (Exception) { } // Ignore Errors as this is not completely necessary
}
}
}
public static void OnLogWarranty(this Job j, DiscoDataContext Database, string FaultDescription, string ManualProviderName, string ManualProviderReference, OrganisationAddress Address, User TechUser)
@@ -458,7 +495,7 @@ namespace Disco.BI.Extensions
return false;
}
public static bool CanCloseNormally(this Job j)
{
if (j.CanCloseNever())
+14 -1
View File
@@ -59,6 +59,14 @@
<Reference Include="System.DirectoryServices" />
<Reference Include="System.Drawing" />
<Reference Include="System.Management" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Net.Http.Extensions">
<HintPath>..\packages\Microsoft.Net.Http.2.2.22\lib\net45\System.Net.Http.Extensions.dll</HintPath>
</Reference>
<Reference Include="System.Net.Http.Primitives">
<HintPath>..\packages\Microsoft.Net.Http.2.2.22\lib\net45\System.Net.Http.Primitives.dll</HintPath>
</Reference>
<Reference Include="System.Net.Http.WebRequest" />
<Reference Include="System.Reactive.Core, Version=2.2.4.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\Rx-Core.2.2.4\lib\net45\System.Reactive.Core.dll</HintPath>
@@ -205,10 +213,15 @@
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<ProjectExtensions>
<VisualStudio>
<UserProperties BuildVersion_UpdateFileVersion="True" BuildVersion_UpdateAssemblyVersion="True" BuildVersion_BuildVersioningStyle="None.DeltaBaseYear.MonthAndDayStamp.TimeStamp" BuildVersion_UseGlobalSettings="False" BuildVersion_DetectChanges="False" BuildVersion_BuildAction="Both" BuildVersion_StartDate="2014/6/1" />
<UserProperties BuildVersion_StartDate="2014/6/1" BuildVersion_BuildAction="Both" BuildVersion_DetectChanges="False" BuildVersion_UseGlobalSettings="False" BuildVersion_BuildVersioningStyle="None.DeltaBaseYear.MonthAndDayStamp.TimeStamp" BuildVersion_UpdateAssemblyVersion="True" BuildVersion_UpdateFileVersion="True" />
</VisualStudio>
</ProjectExtensions>
<Import Project="$(SolutionDir)\.nuget\nuget.targets" />
<Import Project="..\packages\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets" Condition="Exists('..\packages\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets')" />
<Target Name="EnsureBclBuildImported" BeforeTargets="BeforeBuild" Condition="'$(BclBuildImported)' == ''">
<Error Condition="!Exists('..\packages\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets')" Text="This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=317567." HelpKeyword="BCLBUILD2001" />
<Error Condition="Exists('..\packages\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets')" Text="The build restored NuGet packages. Build the project again to include these packages in the build. For more information, see http://go.microsoft.com/fwlink/?LinkID=317568." HelpKeyword="BCLBUILD2002" />
</Target>
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
+4
View File
@@ -40,6 +40,10 @@
<assemblyIdentity name="System.Web.WebPages.Razor" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Common.Logging" publicKeyToken="af08829b84f0328e" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
+3
View File
@@ -1,6 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="EntityFramework" version="5.0.0" targetFramework="net45" />
<package id="Microsoft.Bcl" version="1.1.9" targetFramework="net45" />
<package id="Microsoft.Bcl.Build" version="1.0.14" targetFramework="net45" />
<package id="Microsoft.Net.Http" version="2.2.22" targetFramework="net45" />
<package id="Rx-Core" version="2.2.4" targetFramework="net45" />
<package id="Rx-Interfaces" version="2.2.4" targetFramework="net45" />
<package id="Rx-Linq" version="2.2.4" targetFramework="net45" />
+2 -1
View File
@@ -109,6 +109,7 @@
<Compile Include="Services\Devices\Importing\IDeviceImportContext.cs" />
<Compile Include="Services\Devices\Importing\IDeviceImportField.cs" />
<Compile Include="Services\Interop\ActiveDirectory\ADManagedGroupConfiguration.cs" />
<Compile Include="Services\Interop\DiscoServices\PublishJobResult.cs" />
<Compile Include="Services\Interop\DiscoServices\UpdateRequestV2.cs" />
<Compile Include="Services\Interop\DiscoServices\UpdateResponseV2.cs" />
<Compile Include="Services\Jobs\JobLists\JobLocationReference.cs" />
@@ -181,7 +182,7 @@
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<ProjectExtensions>
<VisualStudio>
<UserProperties BuildVersion_BuildAction="Both" BuildVersion_UseGlobalSettings="False" BuildVersion_DetectChanges="False" BuildVersion_StartDate="2014/6/1" BuildVersion_BuildVersioningStyle="None.DeltaBaseYear.MonthAndDayStamp.TimeStamp" BuildVersion_UpdateAssemblyVersion="True" BuildVersion_UpdateFileVersion="True" />
<UserProperties BuildVersion_UpdateFileVersion="True" BuildVersion_UpdateAssemblyVersion="True" BuildVersion_BuildVersioningStyle="None.DeltaBaseYear.MonthAndDayStamp.TimeStamp" BuildVersion_StartDate="2014/6/1" BuildVersion_DetectChanges="False" BuildVersion_UseGlobalSettings="False" BuildVersion_BuildAction="Both" />
</VisualStudio>
</ProjectExtensions>
<PropertyGroup>
@@ -0,0 +1,15 @@

namespace Disco.Models.Services.Interop.DiscoServices
{
public class PublishJobResult
{
public bool Success { get; set; }
public int Id { get; set; }
public string Secret { get; set; }
public string DeepLink { get; set; }
public string PublishMessage { get; set; }
public string ErrorMessage { get; set; }
}
}
@@ -11,7 +11,7 @@ namespace Disco.Models.Services.Interop.DiscoServices
public bool IsBetaDeployment { get; set; }
public string OrganisationName { get; set; }
public string BroadbandDoeWanId { get; set; }
public string VicEduDeptWanId { get; set; }
public List<StatisticInt> Stat_JobCounts { get; set; }
public List<StatisticInt> Stat_OpenJobCounts { get; set; }
+15 -1
View File
@@ -79,6 +79,14 @@
</Reference>
<Reference Include="System.DirectoryServices" />
<Reference Include="System.IO.Compression" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Net.Http.Extensions">
<HintPath>..\packages\Microsoft.Net.Http.2.2.22\lib\net45\System.Net.Http.Extensions.dll</HintPath>
</Reference>
<Reference Include="System.Net.Http.Primitives">
<HintPath>..\packages\Microsoft.Net.Http.2.2.22\lib\net45\System.Net.Http.Primitives.dll</HintPath>
</Reference>
<Reference Include="System.Net.Http.WebRequest" />
<Reference Include="System.Reactive.Core, Version=2.2.4.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\Rx-Core.2.2.4\lib\net45\System.Reactive.Core.dll</HintPath>
@@ -237,6 +245,7 @@
<Compile Include="Interop\ActiveDirectory\Description.cs" />
<Compile Include="Interop\ActiveDirectory\IADObject.cs" />
<Compile Include="Interop\DiscoServices\DiscoServiceHelpers.cs" />
<Compile Include="Interop\DiscoServices\Jobs.cs" />
<Compile Include="Interop\VicEduDept\VicSmart.cs" />
<Compile Include="Interop\DiscoServices\UpdateQuery.cs" />
<Compile Include="Interop\DiscoServices\UpdateQueryTask.cs" />
@@ -368,7 +377,7 @@
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<ProjectExtensions>
<VisualStudio>
<UserProperties BuildVersion_UseGlobalSettings="False" BuildVersion_DetectChanges="False" BuildVersion_BuildAction="Both" BuildVersion_StartDate="2014/6/1" BuildVersion_BuildVersioningStyle="None.DeltaBaseYear.MonthAndDayStamp.TimeStamp" BuildVersion_UpdateAssemblyVersion="True" BuildVersion_UpdateFileVersion="True" />
<UserProperties BuildVersion_UpdateFileVersion="True" BuildVersion_UpdateAssemblyVersion="True" BuildVersion_BuildVersioningStyle="None.DeltaBaseYear.MonthAndDayStamp.TimeStamp" BuildVersion_StartDate="2014/6/1" BuildVersion_BuildAction="Both" BuildVersion_DetectChanges="False" BuildVersion_UseGlobalSettings="False" />
</VisualStudio>
</ProjectExtensions>
<PropertyGroup>
@@ -379,6 +388,11 @@
xcopy /s /y "$(SolutionDir)packages\Microsoft.SqlServer.Compact.4.0.8876.1\NativeBinaries\amd64\*.*" "$(TargetDir)amd64"</PostBuildEvent>
</PropertyGroup>
<Import Project="$(SolutionDir)\.nuget\nuget.targets" />
<Import Project="..\packages\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets" Condition="Exists('..\packages\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets')" />
<Target Name="EnsureBclBuildImported" BeforeTargets="BeforeBuild" Condition="'$(BclBuildImported)' == ''">
<Error Condition="!Exists('..\packages\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets')" Text="This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=317567." HelpKeyword="BCLBUILD2001" />
<Error Condition="Exists('..\packages\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets')" Text="The build restored NuGet packages. Build the project again to include these packages in the build. For more information, see http://go.microsoft.com/fwlink/?LinkID=317568." HelpKeyword="BCLBUILD2002" />
</Target>
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
@@ -0,0 +1,103 @@
using Disco.Data.Repository;
using Disco.Models.Repository;
using Disco.Models.Services.Interop.DiscoServices;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net.Http;
namespace Disco.Services.Interop.DiscoServices
{
public static class Jobs
{
private static string ServiceUrl(string Action)
{
return string.Concat(DiscoServiceHelpers.ServicesUrl, "API/Jobs/", Action);
}
public static PublishJobResult Publish(DiscoDataContext Database, Job Job, User TechUser, string Recipient, string RecipientReference, string Comments, List<JobAttachment> Attachments, Func<JobAttachment, DiscoDataContext, string> AttachmentFilenameRetriever)
{
var url = ServiceUrl("Publish");
using (var httpClient = new HttpClient())
{
using (var formData = new MultipartFormDataContent())
{
formData.Add(new StringContent(Database.DiscoConfiguration.DeploymentId), "DeploymentId");
formData.Add(new StringContent(Job.Id.ToString()), "JobId");
formData.Add(new StringContent(TechUser.UserId), "TechnicianId");
formData.Add(new StringContent(TechUser.DisplayName ?? TechUser.UserId), "TechnicianName");
if (!string.IsNullOrWhiteSpace(TechUser.PhoneNumber))
formData.Add(new StringContent(TechUser.PhoneNumber), "TechnicianPhone");
if (!string.IsNullOrWhiteSpace(TechUser.EmailAddress))
formData.Add(new StringContent(TechUser.EmailAddress), "TechnicianEmail");
formData.Add(new StringContent(Recipient), "Recipient");
if (!string.IsNullOrWhiteSpace(RecipientReference))
formData.Add(new StringContent(RecipientReference), "RecipientReference");
if (!string.IsNullOrWhiteSpace(Comments))
formData.Add(new StringContent(Comments), "PublishedComments");
if (Attachments != null && Attachments.Count > 0)
{
Attachments
.Select(a => new { Attachment = a, Filename = AttachmentFilenameRetriever(a, Database) })
.Where(a => System.IO.File.Exists(a.Filename))
.Select((a, i) => new { Attachment = a.Attachment, Filename = a.Filename, Index = i })
.ToList()
.ForEach(a =>
{
formData.Add(new StringContent(a.Attachment.Filename), string.Format("Attachments[{0}].Filename", a.Index));
formData.Add(new StringContent(a.Attachment.MimeType), string.Format("Attachments[{0}].MimeType", a.Index));
formData.Add(new StringContent(a.Attachment.Timestamp.ToISO8601()), string.Format("Attachments[{0}].CreatedDate", a.Index));
if (a.Attachment.DocumentTemplateId != null)
formData.Add(new StringContent(a.Attachment.DocumentTemplateId), string.Format("Attachments[{0}].DocumentTemplateId", a.Index));
if (a.Attachment.Comments != null)
formData.Add(new StringContent(a.Attachment.Comments), string.Format("Attachments[{0}].Comments", a.Index));
formData.Add(new ByteArrayContent(File.ReadAllBytes(a.Filename)), string.Format("Attachments[{0}].File", a.Index), a.Attachment.Filename);
});
}
var response = httpClient.PostAsync(url, formData).Result;
response.EnsureSuccessStatusCode();
var resultJson = response.Content.ReadAsStringAsync().Result;
var result = JsonConvert.DeserializeObject<PublishJobResult>(resultJson);
return result;
}
}
}
public static PublishJobResult UpdateRecipientReference(DiscoDataContext Database, Job Job, int PublishedJobId, string PublishedJobSecret, string RecipientReference)
{
var url = ServiceUrl("UpdateRecipientReference");
using (var httpClient = new HttpClient())
{
using (var formData = new FormUrlEncodedContent(new KeyValuePair<string, string>[] {
new KeyValuePair<string, string>("PublishedJobId", PublishedJobId.ToString()),
new KeyValuePair<string, string>("PublishedJobSecret", PublishedJobSecret),
new KeyValuePair<string, string>("RecipientReference", RecipientReference)
}))
{
var response = httpClient.PostAsync(url, formData).Result;
response.EnsureSuccessStatusCode();
var resultJson = response.Content.ReadAsStringAsync().Result;
var result = JsonConvert.DeserializeObject<PublishJobResult>(resultJson);
return result;
}
}
}
}
}
@@ -141,7 +141,7 @@ namespace Disco.Services.Interop.DiscoServices
var whoAmIResponse = VicEduDept.VicSmart.WhoAmI();
if (whoAmIResponse != null && !string.IsNullOrWhiteSpace(whoAmIResponse.Item1))
m.BroadbandDoeWanId = whoAmIResponse.Item1;
m.VicEduDeptWanId = whoAmIResponse.Item1;
m.Stat_JobCounts = Database.Jobs.GroupBy(j => j.JobTypeId).Select(g => new StatisticInt() { K = g.Key, V = g.Count() }).ToList();
m.Stat_OpenJobCounts = Database.Jobs.Where(j => j.ClosedDate == null).GroupBy(j => j.JobTypeId).Select(g => new StatisticInt() { K = g.Key, V = g.Count() }).ToList();
+3
View File
@@ -6,6 +6,9 @@
<package id="Microsoft.AspNet.Razor" version="2.0.30506.0" targetFramework="net45" />
<package id="Microsoft.AspNet.SignalR.Core" version="2.1.0" targetFramework="net45" />
<package id="Microsoft.AspNet.WebPages" version="2.0.30506.0" targetFramework="net45" />
<package id="Microsoft.Bcl" version="1.1.9" targetFramework="net45" />
<package id="Microsoft.Bcl.Build" version="1.0.14" targetFramework="net45" />
<package id="Microsoft.Net.Http" version="2.2.22" targetFramework="net45" />
<package id="Microsoft.Owin" version="2.0.1" targetFramework="net45" />
<package id="Microsoft.Owin.Security" version="2.0.1" targetFramework="net45" />
<package id="Microsoft.SqlServer.Compact" version="4.0.8876.1" targetFramework="net45" />
+4
View File
@@ -36,6 +36,10 @@
<assemblyIdentity name="System.Web.WebPages.Razor" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Common.Logging" publicKeyToken="af08829b84f0328e" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
@@ -50,6 +50,14 @@
<Reference Include="System.ComponentModel.DataAnnotations" />
<Reference Include="System.Core" />
<Reference Include="System.Data.Entity" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Net.Http.Extensions">
<HintPath>..\packages\Microsoft.Net.Http.2.2.22\lib\net45\System.Net.Http.Extensions.dll</HintPath>
</Reference>
<Reference Include="System.Net.Http.Primitives">
<HintPath>..\packages\Microsoft.Net.Http.2.2.22\lib\net45\System.Net.Http.Primitives.dll</HintPath>
</Reference>
<Reference Include="System.Net.Http.WebRequest" />
<Reference Include="System.Web" />
<Reference Include="System.Web.Helpers, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<Private>True</Private>
@@ -126,10 +134,15 @@
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<ProjectExtensions>
<VisualStudio>
<UserProperties BuildVersion_UpdateFileVersion="True" BuildVersion_UpdateAssemblyVersion="True" BuildVersion_BuildVersioningStyle="None.DeltaBaseYear.MonthAndDayStamp.TimeStamp" BuildVersion_BuildAction="Both" BuildVersion_DetectChanges="False" BuildVersion_UseGlobalSettings="False" BuildVersion_StartDate="2014/6/1" />
<UserProperties BuildVersion_StartDate="2014/6/1" BuildVersion_UseGlobalSettings="False" BuildVersion_DetectChanges="False" BuildVersion_BuildAction="Both" BuildVersion_BuildVersioningStyle="None.DeltaBaseYear.MonthAndDayStamp.TimeStamp" BuildVersion_UpdateAssemblyVersion="True" BuildVersion_UpdateFileVersion="True" />
</VisualStudio>
</ProjectExtensions>
<Import Project="$(SolutionDir)\.nuget\nuget.targets" />
<Import Project="..\packages\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets" Condition="Exists('..\packages\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets')" />
<Target Name="EnsureBclBuildImported" BeforeTargets="BeforeBuild" Condition="'$(BclBuildImported)' == ''">
<Error Condition="!Exists('..\packages\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets')" Text="This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=317567." HelpKeyword="BCLBUILD2001" />
<Error Condition="Exists('..\packages\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets')" Text="The build restored NuGet packages. Build the project again to include these packages in the build. For more information, see http://go.microsoft.com/fwlink/?LinkID=317568." HelpKeyword="BCLBUILD2002" />
</Target>
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
+3
View File
@@ -4,6 +4,9 @@
<package id="Microsoft.AspNet.Mvc" version="4.0.30506.0" targetFramework="net45" />
<package id="Microsoft.AspNet.Razor" version="2.0.30506.0" targetFramework="net45" />
<package id="Microsoft.AspNet.WebPages" version="2.0.30506.0" targetFramework="net45" />
<package id="Microsoft.Bcl" version="1.1.9" targetFramework="net45" />
<package id="Microsoft.Bcl.Build" version="1.0.14" targetFramework="net45" />
<package id="Microsoft.Net.Http" version="2.2.22" targetFramework="net45" />
<package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net45" />
<package id="Newtonsoft.Json" version="6.0.3" targetFramework="net45" />
<package id="WebActivatorEx" version="2.0.5" targetFramework="net45" />
+83
View File
@@ -294,6 +294,7 @@
}
#jobShowResources #Comments div.commentOutput > div div.comment p {
line-height: 1.2em;
padding-bottom: .2em;
}
#jobShowResources #Comments div.commentOutput > div:hover span.remove {
opacity: .5;
@@ -706,6 +707,88 @@
width: 600px;
height: 250px;
}
#publishJobAttachments {
border: 1px solid #cccccc;
background-color: #ffffff;
position: relative;
max-height: 249px;
overflow: auto;
}
#publishJobAttachments > a {
display: block;
float: left;
height: 48px;
width: 261px;
padding: 2px;
margin: 2px;
font-size: 0.95em;
border: 1px solid #ffffff;
color: #000000;
text-decoration: none;
}
#publishJobAttachments > a span.comments,
#publishJobAttachments > a span.author,
#publishJobAttachments > a span.timestamp {
display: block;
float: left;
width: 188px;
overflow: hidden;
height: 16px;
}
#publishJobAttachments > a span.author {
color: #888;
width: 150px;
}
#publishJobAttachments > a span.timestamp {
color: #888;
font-style: italic;
}
#publishJobAttachments > a span.icon {
display: block;
float: left;
height: 48px;
width: 48px;
margin-right: 2px;
}
#publishJobAttachments > a span.icon img {
height: 48px;
width: 48px;
}
#publishJobAttachments > a span.icon img.loading {
display: none;
}
#publishJobAttachments > a input.select {
display: block;
float: left;
line-height: 48px;
margin-right: 2px;
width: 20px;
}
#publishJobAttachments > a:hover {
background-color: #ededed;
border: 1px solid #cccccc;
}
#publishJobAttachments > a:hover span.remove {
opacity: .5;
}
#publishJobAttachments > a span.remove {
font-size: 1.2em;
color: #e51400;
margin-left: 2px;
cursor: pointer;
opacity: 0;
}
#publishJobAttachments > a span.remove:hover {
opacity: 1;
}
#submitDialog {
padding-top: 50px;
text-align: center;
}
#submitDialog i {
margin-right: 10px;
color: #1e6dab;
}
#repairJobForm #repairDisclosedInformation table {
font-size: 0.9em;
}
+98 -1
View File
@@ -269,9 +269,10 @@
clear: both;
display: block;
margin-left: 4px;
p {
line-height: 1.2em;
padding-bottom: .2em;
}
}
@@ -500,6 +501,7 @@
select {
min-width: 270px;
}
textarea {
min-width: 270px;
height: 100px;
@@ -735,6 +737,101 @@
}
}
#publishJobAttachments {
border: 1px solid @SubtleBorderColour;
background-color: @white;
position: relative;
max-height: 249px;
overflow: auto;
& > a {
display: block;
float: left;
height: 48px;
width: 261px;
padding: 2px;
margin: 2px;
font-size: 0.95em;
border: 1px solid @white;
color: @black;
text-decoration: none;
span.comments, span.author, span.timestamp {
display: block;
float: left;
width: 188px;
overflow: hidden;
height: 16px;
}
span.author {
color: #888;
width: 150px;
}
span.timestamp {
color: #888;
font-style: italic;
}
span.icon {
display: block;
float: left;
height: 48px;
width: 48px;
margin-right: 2px;
img {
height: 48px;
width: 48px;
&.loading {
display: none;
}
}
}
input.select {
display: block;
float: left;
line-height: 48px;
margin-right: 2px;
width: 20px;
}
&:hover {
background-color: @SubtleColour;
border: 1px solid @SubtleBorderColour;
span.remove {
opacity: .5;
}
}
span.remove {
font-size: 1.2em;
color: @StatusRemove;
margin-left: 2px;
cursor: pointer;
opacity: 0;
&:hover {
opacity: 1;
}
}
}
}
#submitDialog {
padding-top: 50px;
text-align: center;
i {
margin-right: 10px;
color: @StatusInformation;
}
}
#repairJobForm {
#repairDisclosedInformation {
table {
File diff suppressed because one or more lines are too long
+3 -2
View File
@@ -511,7 +511,8 @@ namespace Disco.Web.Controllers
JobId = m.JobId,
WarrantyProviderId = m.WarrantyProviderId,
OrganisationAddressId = m.OrganisationAddressId,
FaultDescription = m.FaultDescription
FaultDescription = m.FaultDescription,
PublishAttachments = m.PublishAttachments
};
updatedModel.UpdateModel(Database, false);
@@ -572,7 +573,7 @@ namespace Disco.Web.Controllers
case "Submit":
try
{
m.Job.OnLogWarranty(Database, m.FaultDescription, m.WarrantyProvider, m.OrganisationAddress, m.TechUser, m.ProviderProperties());
m.Job.OnLogWarranty(Database, m.FaultDescription, m.PublishAttachments, m.WarrantyProvider, m.OrganisationAddress, m.TechUser, m.ProviderProperties());
Database.SaveChanges();
return RedirectToAction(MVC.Job.Show(m.JobId));
}
+4 -2
View File
@@ -115,7 +115,9 @@ namespace Disco.Web
private static Lazy<Regex> htmlCommentDeviceRegex = new Lazy<Regex>(() => { return new Regex(@"((?<!&)!([\w\d-_.]+[\w\d]))", RegexOptions.Compiled, TimeSpan.FromSeconds(.1)); });
private static IMarkdownOptions markdownOptions = new MarkdownOptions()
{
AutoNewLines = true
AutoNewLines = true,
AutoHyperlink = true,
LinkEmails = true
};
public static MvcHtmlString ToHtmlComment(this string s)
{
@@ -180,7 +182,7 @@ namespace Disco.Web
}
return new MvcHtmlString(markdown);
}
}
public static IEnumerable<SelectListItem> ToSelectListItems(this IEnumerable<string> Items, string SelectedItem = null)
{
+17 -5
View File
@@ -18,6 +18,8 @@ namespace Disco.Web.Models.Job
public List<Disco.Models.BI.Config.OrganisationAddress> OrganisationAddresses { get; set; }
public Disco.Models.BI.Config.OrganisationAddress OrganisationAddress { get; set; }
public List<Disco.Models.Repository.JobAttachment> PublishAttachments { get; set; }
public Disco.Models.Repository.User TechUser { get; set; }
[Required]
@@ -28,6 +30,7 @@ namespace Disco.Web.Models.Job
public string WarrantyProviderId { get; set; }
[Required(ErrorMessage = "A fault description is required"), DataType(System.ComponentModel.DataAnnotations.DataType.MultilineText)]
public string FaultDescription { get; set; }
public List<int> PublishAttachmentIds { get; set; }
[Required]
public string SubmissionAction { get; set; }
@@ -81,13 +84,12 @@ namespace Disco.Web.Models.Job
} catch (Exception) {}
}
Job = (from j in Database.Jobs.Include("Device.DeviceModel").Include("JobMetaWarranty").Include("JobSubTypes")
where (j.Id == JobId)
select j).FirstOrDefault();
Job = Database.Jobs.Include("Device.DeviceModel").Include("JobMetaWarranty").Include("JobSubTypes").Include("JobAttachments")
.Where(j => j.Id == JobId)
.FirstOrDefault();
if (Job == null)
{
throw new ArgumentException("Invalid Job Number Specified", "JobId");
}
}
// Update TechUser's Details [#12]
@@ -117,6 +119,16 @@ namespace Disco.Web.Models.Job
if (!string.IsNullOrEmpty(FaultDescription))
FaultDescription = FaultDescription.Trim();
if (PublishAttachmentIds == null)
{
PublishAttachmentIds = new List<int>();
PublishAttachments = new List<Disco.Models.Repository.JobAttachment>();
}
else
{
PublishAttachments = Job.JobAttachments.Where(ja => PublishAttachmentIds.Contains(ja.Id)).ToList();
}
}
}
}
+28
View File
@@ -111,6 +111,34 @@
</tr>
</table>
</div>
if (!Model.IsManualProvider && Authorization.Has(Claims.Job.ShowAttachments) && Model.Job.JobAttachments.Count > 0)
{
<div class="form" style="width: 650px; margin-top: 15px;">
<h2>Send Attachments</h2>
<table>
<tr>
<td>
<div id="publishJobAttachments">
@foreach (var ja in Model.Job.JobAttachments)
{
<a href="@Url.Action(MVC.API.Job.AttachmentDownload(ja.Id))" data-attachmentid="@ja.Id" data-mimetype="@ja.MimeType">
<input type="checkbox" class="select" name="PublishAttachmentIds" value="@ja.Id" @(Model.PublishAttachmentIds.Contains(ja.Id) ? "checked" : null) />
<span class="icon" title="@ja.Filename">
<img alt="Attachment Thumbnail" src="@(Url.Action(MVC.API.Job.AttachmentThumbnail(ja.Id)))" /></span>
<span class="comments" title="@ja.Comments">
@{if (!string.IsNullOrEmpty(ja.DocumentTemplateId))
{ @ja.DocumentTemplate.Description}
else
{ @ja.Comments }}
</span><span class="author">@ja.TechUser.ToStringFriendly()</span><span class="timestamp" data-livestamp="@(ja.Timestamp.ToUnixEpoc())" title="@ja.Timestamp.ToFullDateTime()">@ja.Timestamp.ToFullDateTime()</span>
</a>
}
</div>
</td>
</tr>
</table>
</div>
}
if (Model.WarrantyProvider != null && Model.WarrantyProviderSubmitJobViewType != null)
{
<div id="warrantyJobProviderProperties">
+248 -7
View File
@@ -506,6 +506,247 @@ WriteLiteral("\r\n </td>\r\n </tr>\r\n </table>
#line 114 "..\..\Views\Job\LogWarranty.cshtml"
if (!Model.IsManualProvider && Authorization.Has(Claims.Job.ShowAttachments) && Model.Job.JobAttachments.Count > 0)
{
#line default
#line hidden
WriteLiteral(" <div");
WriteLiteral(" class=\"form\"");
WriteLiteral(" style=\"width: 650px; margin-top: 15px;\"");
WriteLiteral(">\r\n <h2>Send Attachments</h2>\r\n <table>\r\n <tr>\r\n " +
" <td>\r\n <div");
WriteLiteral(" id=\"publishJobAttachments\"");
WriteLiteral(">\r\n");
#line 122 "..\..\Views\Job\LogWarranty.cshtml"
#line default
#line hidden
#line 122 "..\..\Views\Job\LogWarranty.cshtml"
foreach (var ja in Model.Job.JobAttachments)
{
#line default
#line hidden
WriteLiteral(" <a");
WriteAttribute("href", Tuple.Create(" href=\"", 5195), Tuple.Create("\"", 5252)
#line 124 "..\..\Views\Job\LogWarranty.cshtml"
, Tuple.Create(Tuple.Create("", 5202), Tuple.Create<System.Object, System.Int32>(Url.Action(MVC.API.Job.AttachmentDownload(ja.Id))
#line default
#line hidden
, 5202), false)
);
WriteLiteral(" data-attachmentid=\"");
#line 124 "..\..\Views\Job\LogWarranty.cshtml"
Write(ja.Id);
#line default
#line hidden
WriteLiteral("\"");
WriteLiteral(" data-mimetype=\"");
#line 124 "..\..\Views\Job\LogWarranty.cshtml"
Write(ja.MimeType);
#line default
#line hidden
WriteLiteral("\"");
WriteLiteral(">\r\n <input");
WriteLiteral(" type=\"checkbox\"");
WriteLiteral(" class=\"select\"");
WriteLiteral(" name=\"PublishAttachmentIds\"");
WriteAttribute("value", Tuple.Create(" value=\"", 5409), Tuple.Create("\"", 5423)
#line 125 "..\..\Views\Job\LogWarranty.cshtml"
, Tuple.Create(Tuple.Create("", 5417), Tuple.Create<System.Object, System.Int32>(ja.Id
#line default
#line hidden
, 5417), false)
);
WriteLiteral(" ");
#line 125 "..\..\Views\Job\LogWarranty.cshtml"
Write(Model.PublishAttachmentIds.Contains(ja.Id) ? "checked" : null);
#line default
#line hidden
WriteLiteral(" />\r\n <span");
WriteLiteral(" class=\"icon\"");
WriteAttribute("title", Tuple.Create(" title=\"", 5544), Tuple.Create("\"", 5564)
#line 126 "..\..\Views\Job\LogWarranty.cshtml"
, Tuple.Create(Tuple.Create("", 5552), Tuple.Create<System.Object, System.Int32>(ja.Filename
#line default
#line hidden
, 5552), false)
);
WriteLiteral(">\r\n <img");
WriteLiteral(" alt=\"Attachment Thumbnail\"");
WriteAttribute("src", Tuple.Create(" src=\"", 5635), Tuple.Create("\"", 5694)
#line 127 "..\..\Views\Job\LogWarranty.cshtml"
, Tuple.Create(Tuple.Create("", 5641), Tuple.Create<System.Object, System.Int32>(Url.Action(MVC.API.Job.AttachmentThumbnail(ja.Id))
#line default
#line hidden
, 5641), false)
);
WriteLiteral(" /></span>\r\n <span");
WriteLiteral(" class=\"comments\"");
WriteAttribute("title", Tuple.Create(" title=\"", 5761), Tuple.Create("\"", 5781)
#line 128 "..\..\Views\Job\LogWarranty.cshtml"
, Tuple.Create(Tuple.Create("", 5769), Tuple.Create<System.Object, System.Int32>(ja.Comments
#line default
#line hidden
, 5769), false)
);
WriteLiteral(">\r\n");
#line 129 "..\..\Views\Job\LogWarranty.cshtml"
#line default
#line hidden
#line 129 "..\..\Views\Job\LogWarranty.cshtml"
if (!string.IsNullOrEmpty(ja.DocumentTemplateId))
{
#line default
#line hidden
#line 130 "..\..\Views\Job\LogWarranty.cshtml"
Write(ja.DocumentTemplate.Description);
#line default
#line hidden
#line 130 "..\..\Views\Job\LogWarranty.cshtml"
}
else
{
#line default
#line hidden
#line 132 "..\..\Views\Job\LogWarranty.cshtml"
Write(ja.Comments);
#line default
#line hidden
#line 132 "..\..\Views\Job\LogWarranty.cshtml"
}
#line default
#line hidden
WriteLiteral("\r\n </span><span");
WriteLiteral(" class=\"author\"");
WriteLiteral(">");
#line 133 "..\..\Views\Job\LogWarranty.cshtml"
Write(ja.TechUser.ToStringFriendly());
#line default
#line hidden
WriteLiteral("</span><span");
WriteLiteral(" class=\"timestamp\"");
WriteLiteral(" data-livestamp=\"");
#line 133 "..\..\Views\Job\LogWarranty.cshtml"
Write(ja.Timestamp.ToUnixEpoc());
#line default
#line hidden
WriteLiteral("\"");
WriteAttribute("title", Tuple.Create(" title=\"", 6217), Tuple.Create("\"", 6255)
#line 133 "..\..\Views\Job\LogWarranty.cshtml"
, Tuple.Create(Tuple.Create("", 6225), Tuple.Create<System.Object, System.Int32>(ja.Timestamp.ToFullDateTime()
#line default
#line hidden
, 6225), false)
);
WriteLiteral(">");
#line 133 "..\..\Views\Job\LogWarranty.cshtml"
Write(ja.Timestamp.ToFullDateTime());
#line default
#line hidden
WriteLiteral("</span>\r\n </a> \r\n");
#line 135 "..\..\Views\Job\LogWarranty.cshtml"
}
#line default
#line hidden
WriteLiteral(" </div>\r\n </td>\r\n </tr>\r\n </t" +
"able>\r\n </div>\r\n");
#line 141 "..\..\Views\Job\LogWarranty.cshtml"
}
if (Model.WarrantyProvider != null && Model.WarrantyProviderSubmitJobViewType != null)
{
@@ -521,7 +762,7 @@ WriteLiteral(">\r\n");
WriteLiteral(" ");
#line 117 "..\..\Views\Job\LogWarranty.cshtml"
#line 145 "..\..\Views\Job\LogWarranty.cshtml"
Write(Html.PartialCompiled(Model.WarrantyProviderSubmitJobViewType, Model.WarrantyProviderSubmitJobModel));
@@ -530,7 +771,7 @@ WriteLiteral(" ");
WriteLiteral("\r\n </div>\r\n");
#line 119 "..\..\Views\Job\LogWarranty.cshtml"
#line 147 "..\..\Views\Job\LogWarranty.cshtml"
}
@@ -543,13 +784,13 @@ WriteLiteral(" class=\"actionBar\"");
WriteLiteral(">\r\n");
#line 121 "..\..\Views\Job\LogWarranty.cshtml"
#line 149 "..\..\Views\Job\LogWarranty.cshtml"
#line default
#line hidden
#line 121 "..\..\Views\Job\LogWarranty.cshtml"
#line 149 "..\..\Views\Job\LogWarranty.cshtml"
if (Model.IsManualProvider)
{
@@ -567,7 +808,7 @@ WriteLiteral(" value=\"Save Warranty Claim\"");
WriteLiteral(" />\r\n");
#line 124 "..\..\Views\Job\LogWarranty.cshtml"
#line 152 "..\..\Views\Job\LogWarranty.cshtml"
}
else
{
@@ -586,7 +827,7 @@ WriteLiteral(" value=\"Preview Warranty Claim\"");
WriteLiteral(" />\r\n");
#line 128 "..\..\Views\Job\LogWarranty.cshtml"
#line 156 "..\..\Views\Job\LogWarranty.cshtml"
}
@@ -595,7 +836,7 @@ WriteLiteral(" />\r\n");
WriteLiteral(" </div>\r\n");
#line 130 "..\..\Views\Job\LogWarranty.cshtml"
#line 158 "..\..\Views\Job\LogWarranty.cshtml"
}
+60 -18
View File
@@ -1,7 +1,7 @@
@model Disco.Web.Models.Job.LogWarrantyModel
@{
Authorization.Require(Claims.Job.Actions.LogWarranty);
ViewBag.Title = Html.ToBreadcrumb("Jobs", MVC.Job.Index(), string.Format("Job: {0}", Model.Job.Id), MVC.Job.Show(Model.Job.Id), "Log Warranty");
}
@using (Html.BeginForm(MVC.Job.LogWarranty(), FormMethod.Post))
@@ -16,32 +16,28 @@
<div id="warrantyJobForm" class="form" style="width: 650px">
<table>
<tr>
<th>
Internal Job Id:
<th>Internal Job Id:
</th>
<td>
@Model.JobId
</td>
</tr>
<tr>
<th>
Device Serial Number:
<th>Device Serial Number:
</th>
<td>
@Model.Job.Device.SerialNumber
</td>
</tr>
<tr>
<th>
Device Model:
<th>Device Model:
</th>
<td>
@Model.Job.Device.DeviceModel.Manufacturer @Model.Job.Device.DeviceModel.Model
</td>
</tr>
<tr>
<th>
Technician:
<th>Technician:
</th>
<td>
@Model.TechUser.DisplayName
@@ -52,8 +48,7 @@
</td>
</tr>
<tr>
<th style="width: 150px">
Warranty Address:
<th style="width: 150px">Warranty Address:
</th>
<td>
<div id="organisationAddressDetails">
@@ -67,24 +62,21 @@
</td>
</tr>
<tr>
<th>
Warranty Provider:
<th>Warranty Provider:
</th>
<td>
@Model.WarrantyProvider.Name (@Model.WarrantyProvider.Id) @Model.WarrantyProvider.PluginManifest.Version.ToString(3)
</td>
</tr>
<tr>
<th>
Fault Description:
<th>Fault Description:
</th>
<td>
@Model.FaultDescription.ToMultilineString()
</td>
</tr>
<tr>
<th>
Disclosed Information
<th>Disclosed Information
</th>
<td>
<div id="warrantyDisclosedInformation">
@@ -102,9 +94,59 @@
</div>
</td>
</tr>
@if (Model.PublishAttachments.Count > 0)
{
<tr>
<th>Sending Attachments</th>
<td>
<div>
<div id="publishJobAttachments">
@foreach (var ja in Model.PublishAttachments)
{
<input type="hidden" name="PublishAttachmentIds" value="@ja.Id" />
<a href="@Url.Action(MVC.API.Job.AttachmentDownload(ja.Id))" data-attachmentid="@ja.Id" data-mimetype="@ja.MimeType">
<span class="icon" title="@ja.Filename">
<img alt="Attachment Thumbnail" src="@(Url.Action(MVC.API.Job.AttachmentThumbnail(ja.Id)))" /></span>
<span class="comments" title="@ja.Comments">
@{if (!string.IsNullOrEmpty(ja.DocumentTemplateId))
{ @ja.DocumentTemplate.Description}
else
{ @ja.Comments }}
</span><span class="author">@ja.TechUser.ToStringFriendly()</span><span class="timestamp" data-livestamp="@(ja.Timestamp.ToUnixEpoc())" title="@ja.Timestamp.ToFullDateTime()">@ja.Timestamp.ToFullDateTime()</span>
</a>
}
</div>
</div>
</td>
</tr>
}
</table>
</div>
<div id="submitDialog" class="dialog" title="Please Wait">
<h4><i class="fa fa-lg fa-cog fa-spin" title="Please Wait"></i>Submitting Warranty Job...</h4>
</div>
<script>
$(function () {
var dialog = null;
$('#submitJob').closest('form').submit(function () {
if (dialog == null) {
dialog = $('#submitDialog').dialog({
width: 400,
height: 160,
resizable: false,
modal: true,
autoOpen: false
});
}
window.setTimeout(function () {
dialog.dialog('open');
}, 100);
});
});
</script>
<div class="actionBar">
<input type="submit" class="button" value="Submit Warranty Claim" />
<input id="submitJob" type="submit" class="button" value="Submit Warranty Claim" />
</div>
}
@@ -48,7 +48,7 @@ namespace Disco.Web.Views.Job
#line 2 "..\..\Views\Job\LogWarrantyDisclose.cshtml"
Authorization.Require(Claims.Job.Actions.LogWarranty);
ViewBag.Title = Html.ToBreadcrumb("Jobs", MVC.Job.Index(), string.Format("Job: {0}", Model.Job.Id), MVC.Job.Show(Model.Job.Id), "Log Warranty");
@@ -166,39 +166,37 @@ WriteLiteral(" class=\"form\"");
WriteLiteral(" style=\"width: 650px\"");
WriteLiteral(">\r\n <table>\r\n <tr>\r\n <th>\r\n I" +
"nternal Job Id:\r\n </th>\r\n <td>\r\n");
WriteLiteral(">\r\n <table>\r\n <tr>\r\n <th>Internal Job Id:\r\n " +
" </th>\r\n <td>\r\n");
WriteLiteral(" ");
#line 23 "..\..\Views\Job\LogWarrantyDisclose.cshtml"
#line 22 "..\..\Views\Job\LogWarrantyDisclose.cshtml"
Write(Model.JobId);
#line default
#line hidden
WriteLiteral("\r\n </td>\r\n </tr>\r\n <tr>\r\n <th" +
">\r\n Device Serial Number:\r\n </th>\r\n " +
" <td>\r\n");
">Device Serial Number:\r\n </th>\r\n <td>\r\n");
WriteLiteral(" ");
#line 31 "..\..\Views\Job\LogWarrantyDisclose.cshtml"
#line 29 "..\..\Views\Job\LogWarrantyDisclose.cshtml"
Write(Model.Job.Device.SerialNumber);
#line default
#line hidden
WriteLiteral("\r\n </td>\r\n </tr>\r\n <tr>\r\n <th" +
">\r\n Device Model:\r\n </th>\r\n <td" +
">\r\n");
">Device Model:\r\n </th>\r\n <td>\r\n");
WriteLiteral(" ");
#line 39 "..\..\Views\Job\LogWarrantyDisclose.cshtml"
#line 36 "..\..\Views\Job\LogWarrantyDisclose.cshtml"
Write(Model.Job.Device.DeviceModel.Manufacturer);
@@ -207,20 +205,19 @@ WriteLiteral(" ");
WriteLiteral(" ");
#line 39 "..\..\Views\Job\LogWarrantyDisclose.cshtml"
#line 36 "..\..\Views\Job\LogWarrantyDisclose.cshtml"
Write(Model.Job.Device.DeviceModel.Model);
#line default
#line hidden
WriteLiteral("\r\n </td>\r\n </tr>\r\n <tr>\r\n <th" +
">\r\n Technician:\r\n </th>\r\n <td>\r" +
"\n");
">Technician:\r\n </th>\r\n <td>\r\n");
WriteLiteral(" ");
#line 47 "..\..\Views\Job\LogWarrantyDisclose.cshtml"
#line 43 "..\..\Views\Job\LogWarrantyDisclose.cshtml"
Write(Model.TechUser.DisplayName);
@@ -233,7 +230,7 @@ WriteLiteral(" class=\"smallMessage\"");
WriteLiteral(">\r\n Email Address: ");
#line 49 "..\..\Views\Job\LogWarrantyDisclose.cshtml"
#line 45 "..\..\Views\Job\LogWarrantyDisclose.cshtml"
Write(Model.TechUser.EmailAddress);
@@ -242,7 +239,7 @@ WriteLiteral(">\r\n Email Address: ");
WriteLiteral("<br />\r\n Phone Number: ");
#line 50 "..\..\Views\Job\LogWarrantyDisclose.cshtml"
#line 46 "..\..\Views\Job\LogWarrantyDisclose.cshtml"
Write(Model.TechUser.PhoneNumber);
@@ -253,8 +250,8 @@ WriteLiteral("\r\n </div>\r\n </td>\r\n
WriteLiteral(" style=\"width: 150px\"");
WriteLiteral(">\r\n Warranty Address:\r\n </th>\r\n " +
"<td>\r\n <div");
WriteLiteral(">Warranty Address:\r\n </th>\r\n <td>\r\n " +
" <div");
WriteLiteral(" id=\"organisationAddressDetails\"");
@@ -263,7 +260,7 @@ WriteLiteral(">\r\n");
WriteLiteral(" ");
#line 60 "..\..\Views\Job\LogWarrantyDisclose.cshtml"
#line 55 "..\..\Views\Job\LogWarrantyDisclose.cshtml"
Write(Model.OrganisationAddress.Name);
@@ -276,7 +273,7 @@ WriteLiteral(" class=\"smallMessage\"");
WriteLiteral(">\r\n <span>");
#line 62 "..\..\Views\Job\LogWarrantyDisclose.cshtml"
#line 57 "..\..\Views\Job\LogWarrantyDisclose.cshtml"
Write(Model.OrganisationAddress.Address);
@@ -285,7 +282,7 @@ WriteLiteral(">\r\n <span>");
WriteLiteral("</span><br />\r\n <span>");
#line 63 "..\..\Views\Job\LogWarrantyDisclose.cshtml"
#line 58 "..\..\Views\Job\LogWarrantyDisclose.cshtml"
Write(Model.OrganisationAddress.Suburb);
@@ -294,7 +291,7 @@ WriteLiteral("</span><br />\r\n <span>");
WriteLiteral(", ");
#line 63 "..\..\Views\Job\LogWarrantyDisclose.cshtml"
#line 58 "..\..\Views\Job\LogWarrantyDisclose.cshtml"
Write(Model.OrganisationAddress.Postcode);
@@ -303,7 +300,7 @@ WriteLiteral(", ");
WriteLiteral("</span><br />\r\n <span>");
#line 64 "..\..\Views\Job\LogWarrantyDisclose.cshtml"
#line 59 "..\..\Views\Job\LogWarrantyDisclose.cshtml"
Write(Model.OrganisationAddress.State);
@@ -312,20 +309,20 @@ WriteLiteral("</span><br />\r\n <span>");
WriteLiteral(", ");
#line 64 "..\..\Views\Job\LogWarrantyDisclose.cshtml"
#line 59 "..\..\Views\Job\LogWarrantyDisclose.cshtml"
Write(Model.OrganisationAddress.Country);
#line default
#line hidden
WriteLiteral("</span>\r\n </div>\r\n </div>\r\n " +
" </td>\r\n </tr>\r\n <tr>\r\n <th>\r\n " +
" Warranty Provider:\r\n </th>\r\n <td>\r\n");
" </td>\r\n </tr>\r\n <tr>\r\n <th>Warranty Pro" +
"vider:\r\n </th>\r\n <td>\r\n");
WriteLiteral(" ");
#line 74 "..\..\Views\Job\LogWarrantyDisclose.cshtml"
#line 68 "..\..\Views\Job\LogWarrantyDisclose.cshtml"
Write(Model.WarrantyProvider.Name);
@@ -334,7 +331,7 @@ WriteLiteral(" ");
WriteLiteral(" (");
#line 74 "..\..\Views\Job\LogWarrantyDisclose.cshtml"
#line 68 "..\..\Views\Job\LogWarrantyDisclose.cshtml"
Write(Model.WarrantyProvider.Id);
@@ -343,41 +340,40 @@ WriteLiteral(" (");
WriteLiteral(") ");
#line 74 "..\..\Views\Job\LogWarrantyDisclose.cshtml"
#line 68 "..\..\Views\Job\LogWarrantyDisclose.cshtml"
Write(Model.WarrantyProvider.PluginManifest.Version.ToString(3));
#line default
#line hidden
WriteLiteral("\r\n </td>\r\n </tr>\r\n <tr>\r\n <th" +
">\r\n Fault Description:\r\n </th>\r\n " +
" <td>\r\n");
">Fault Description:\r\n </th>\r\n <td>\r\n");
WriteLiteral(" ");
#line 82 "..\..\Views\Job\LogWarrantyDisclose.cshtml"
#line 75 "..\..\Views\Job\LogWarrantyDisclose.cshtml"
Write(Model.FaultDescription.ToMultilineString());
#line default
#line hidden
WriteLiteral("\r\n </td>\r\n </tr>\r\n <tr>\r\n <th" +
">\r\n Disclosed Information\r\n </th>\r\n " +
" <td>\r\n <div");
">Disclosed Information\r\n </th>\r\n <td>\r\n " +
" <div");
WriteLiteral(" id=\"warrantyDisclosedInformation\"");
WriteLiteral(">\r\n <table>\r\n");
#line 92 "..\..\Views\Job\LogWarrantyDisclose.cshtml"
#line 84 "..\..\Views\Job\LogWarrantyDisclose.cshtml"
#line default
#line hidden
#line 92 "..\..\Views\Job\LogWarrantyDisclose.cshtml"
#line 84 "..\..\Views\Job\LogWarrantyDisclose.cshtml"
foreach (var dp in Model.DiscloseProperties)
{
@@ -387,7 +383,7 @@ WriteLiteral(">\r\n <table>\r\n");
WriteLiteral(" <tr>\r\n <th>");
#line 95 "..\..\Views\Job\LogWarrantyDisclose.cshtml"
#line 87 "..\..\Views\Job\LogWarrantyDisclose.cshtml"
Write(dp.Key);
@@ -397,7 +393,7 @@ WriteLiteral(":\r\n </th>\r\n
" <td>");
#line 97 "..\..\Views\Job\LogWarrantyDisclose.cshtml"
#line 89 "..\..\Views\Job\LogWarrantyDisclose.cshtml"
Write(dp.Value);
@@ -407,14 +403,294 @@ WriteLiteral("\r\n </td>\r\n
"> \r\n");
#line 100 "..\..\Views\Job\LogWarrantyDisclose.cshtml"
#line 92 "..\..\Views\Job\LogWarrantyDisclose.cshtml"
}
#line default
#line hidden
WriteLiteral(" </table>\r\n </div>\r\n </t" +
"d>\r\n </tr>\r\n </table>\r\n </div>\r\n");
"d>\r\n </tr>\r\n");
#line 97 "..\..\Views\Job\LogWarrantyDisclose.cshtml"
#line default
#line hidden
#line 97 "..\..\Views\Job\LogWarrantyDisclose.cshtml"
if (Model.PublishAttachments.Count > 0)
{
#line default
#line hidden
WriteLiteral(" <tr>\r\n <th>Sending Attachments</th>\r\n " +
" <td>\r\n <div>\r\n <div" +
"");
WriteLiteral(" id=\"publishJobAttachments\"");
WriteLiteral(">\r\n");
#line 104 "..\..\Views\Job\LogWarrantyDisclose.cshtml"
#line default
#line hidden
#line 104 "..\..\Views\Job\LogWarrantyDisclose.cshtml"
foreach (var ja in Model.PublishAttachments)
{
#line default
#line hidden
WriteLiteral(" <input");
WriteLiteral(" type=\"hidden\"");
WriteLiteral(" name=\"PublishAttachmentIds\"");
WriteAttribute("value", Tuple.Create(" value=\"", 4138), Tuple.Create("\"", 4152)
#line 106 "..\..\Views\Job\LogWarrantyDisclose.cshtml"
, Tuple.Create(Tuple.Create("", 4146), Tuple.Create<System.Object, System.Int32>(ja.Id
#line default
#line hidden
, 4146), false)
);
WriteLiteral(" />\r\n");
WriteLiteral(" <a");
WriteAttribute("href", Tuple.Create(" href=\"", 4196), Tuple.Create("\"", 4253)
#line 107 "..\..\Views\Job\LogWarrantyDisclose.cshtml"
, Tuple.Create(Tuple.Create("", 4203), Tuple.Create<System.Object, System.Int32>(Url.Action(MVC.API.Job.AttachmentDownload(ja.Id))
#line default
#line hidden
, 4203), false)
);
WriteLiteral(" data-attachmentid=\"");
#line 107 "..\..\Views\Job\LogWarrantyDisclose.cshtml"
Write(ja.Id);
#line default
#line hidden
WriteLiteral("\"");
WriteLiteral(" data-mimetype=\"");
#line 107 "..\..\Views\Job\LogWarrantyDisclose.cshtml"
Write(ja.MimeType);
#line default
#line hidden
WriteLiteral("\"");
WriteLiteral(">\r\n <span");
WriteLiteral(" class=\"icon\"");
WriteAttribute("title", Tuple.Create(" title=\"", 4371), Tuple.Create("\"", 4391)
#line 108 "..\..\Views\Job\LogWarrantyDisclose.cshtml"
, Tuple.Create(Tuple.Create("", 4379), Tuple.Create<System.Object, System.Int32>(ja.Filename
#line default
#line hidden
, 4379), false)
);
WriteLiteral(">\r\n <img");
WriteLiteral(" alt=\"Attachment Thumbnail\"");
WriteAttribute("src", Tuple.Create(" src=\"", 4470), Tuple.Create("\"", 4529)
#line 109 "..\..\Views\Job\LogWarrantyDisclose.cshtml"
, Tuple.Create(Tuple.Create("", 4476), Tuple.Create<System.Object, System.Int32>(Url.Action(MVC.API.Job.AttachmentThumbnail(ja.Id))
#line default
#line hidden
, 4476), false)
);
WriteLiteral(" /></span>\r\n <span");
WriteLiteral(" class=\"comments\"");
WriteAttribute("title", Tuple.Create(" title=\"", 4604), Tuple.Create("\"", 4624)
#line 110 "..\..\Views\Job\LogWarrantyDisclose.cshtml"
, Tuple.Create(Tuple.Create("", 4612), Tuple.Create<System.Object, System.Int32>(ja.Comments
#line default
#line hidden
, 4612), false)
);
WriteLiteral(">\r\n");
#line 111 "..\..\Views\Job\LogWarrantyDisclose.cshtml"
#line default
#line hidden
#line 111 "..\..\Views\Job\LogWarrantyDisclose.cshtml"
if (!string.IsNullOrEmpty(ja.DocumentTemplateId))
{
#line default
#line hidden
#line 112 "..\..\Views\Job\LogWarrantyDisclose.cshtml"
Write(ja.DocumentTemplate.Description);
#line default
#line hidden
#line 112 "..\..\Views\Job\LogWarrantyDisclose.cshtml"
}
else
{
#line default
#line hidden
#line 114 "..\..\Views\Job\LogWarrantyDisclose.cshtml"
Write(ja.Comments);
#line default
#line hidden
#line 114 "..\..\Views\Job\LogWarrantyDisclose.cshtml"
}
#line default
#line hidden
WriteLiteral("\r\n </span><span");
WriteLiteral(" class=\"author\"");
WriteLiteral(">");
#line 115 "..\..\Views\Job\LogWarrantyDisclose.cshtml"
Write(ja.TechUser.ToStringFriendly());
#line default
#line hidden
WriteLiteral("</span><span");
WriteLiteral(" class=\"timestamp\"");
WriteLiteral(" data-livestamp=\"");
#line 115 "..\..\Views\Job\LogWarrantyDisclose.cshtml"
Write(ja.Timestamp.ToUnixEpoc());
#line default
#line hidden
WriteLiteral("\"");
WriteAttribute("title", Tuple.Create(" title=\"", 5100), Tuple.Create("\"", 5138)
#line 115 "..\..\Views\Job\LogWarrantyDisclose.cshtml"
, Tuple.Create(Tuple.Create("", 5108), Tuple.Create<System.Object, System.Int32>(ja.Timestamp.ToFullDateTime()
#line default
#line hidden
, 5108), false)
);
WriteLiteral(">");
#line 115 "..\..\Views\Job\LogWarrantyDisclose.cshtml"
Write(ja.Timestamp.ToFullDateTime());
#line default
#line hidden
WriteLiteral("</span>\r\n </a> \r\n");
#line 117 "..\..\Views\Job\LogWarrantyDisclose.cshtml"
}
#line default
#line hidden
WriteLiteral(" </div>\r\n </div>\r\n " +
" </td>\r\n </tr>\r\n");
#line 122 "..\..\Views\Job\LogWarrantyDisclose.cshtml"
}
#line default
#line hidden
WriteLiteral(" </table>\r\n </div>\r\n");
WriteLiteral(" <div");
WriteLiteral(" id=\"submitDialog\"");
WriteLiteral(" class=\"dialog\"");
WriteLiteral(" title=\"Please Wait\"");
WriteLiteral(">\r\n <h4><i");
WriteLiteral(" class=\"fa fa-lg fa-cog fa-spin\"");
WriteLiteral(" title=\"Please Wait\"");
WriteLiteral("></i>Submitting Warranty Job...</h4>\r\n </div>\r\n");
WriteLiteral(@" <script>
$(function () {
var dialog = null;
$('#submitJob').closest('form').submit(function () {
if (dialog == null) {
dialog = $('#submitDialog').dialog({
width: 400,
height: 160,
resizable: false,
modal: true,
autoOpen: false
});
}
window.setTimeout(function () {
dialog.dialog('open');
}, 100);
});
});
</script>
");
WriteLiteral(" <div");
@@ -422,6 +698,8 @@ WriteLiteral(" class=\"actionBar\"");
WriteLiteral(">\r\n <input");
WriteLiteral(" id=\"submitJob\"");
WriteLiteral(" type=\"submit\"");
WriteLiteral(" class=\"button\"");
@@ -431,7 +709,7 @@ WriteLiteral(" value=\"Submit Warranty Claim\"");
WriteLiteral(" />\r\n </div>\r\n");
#line 110 "..\..\Views\Job\LogWarrantyDisclose.cshtml"
#line 152 "..\..\Views\Job\LogWarrantyDisclose.cshtml"
}
#line default