Remove: 'Active' Device property

No longer needed.
This commit is contained in:
Gary Sharp committed 2013-02-21 18:25:46 +11:00
1 parent 20a12c1c99
commit 9e2f9a646f
10 files changed
+437 -261

No files matched your search

-2
View File
@@ -256,7 +256,6 @@ namespace Disco.BI.DeviceBI
DeviceProfile = deviceProfile,
DeviceModel = deviceModel,
AllowUnauthenticatedEnrol = false,
Active = true,
CreatedDate = DateTime.Now,
EnrolledDate = DateTime.Now
};
@@ -393,7 +392,6 @@ namespace Disco.BI.DeviceBI
DeviceProfile = deviceProfile,
DeviceModel = deviceModel,
AllowUnauthenticatedEnrol = false,
Active = true,
CreatedDate = DateTime.Now,
EnrolledDate = DateTime.Now,
LastEnrolDate = DateTime.Now
+185 -186
View File
@@ -1,186 +1,185 @@
using System.Linq;
using Disco.BI.Interop.ActiveDirectory;
using Disco.Data.Configuration;
using Disco.Data.Repository;
using Disco.Models.BI.DocumentTemplates;
using Disco.Models.Repository;
using System.Collections.Generic;
using System;
using System.IO;
using Disco.Models.Interop.ActiveDirectory;
namespace Disco.BI.Extensions
{
public static class DeviceExtensions
{
public static string ComputerNameRender(this Device device, DiscoDataContext context)
{
DeviceProfile deviceProfile = device.DeviceProfile;
Expressions.Expression computerNameTemplateExpression = null;
computerNameTemplateExpression = Expressions.ExpressionCache.GetValue(DeviceProfileExtensions.ComputerNameExpressionCacheModule, deviceProfile.Id.ToString(), () =>
{
// Removed 2012-06-14 G# - Properties moved to DeviceProfile model & DB Migrated in DBv3.
//return Expressions.Expression.TokenizeSingleDynamic(null, deviceProfile.Configuration(context).ComputerNameTemplate, 0);
return Expressions.Expression.TokenizeSingleDynamic(null, deviceProfile.ComputerNameTemplate, 0);
});
System.Collections.IDictionary evaluatorVariables = Expressions.Expression.StandardVariables(null, context, UserBI.UserCache.CurrentUser, System.DateTime.Now, null);
string rendered;
try
{
rendered = computerNameTemplateExpression.EvaluateFirst<string>(device, evaluatorVariables);
}
catch (Exception ex)
{
throw new InvalidOperationException(string.Format("An error occurred rendering the computer name: [{0}] {1}", ex.GetType().Name, ex.Message), ex.InnerException);
}
if (rendered == null || rendered.Length > 24)
{
throw new System.InvalidOperationException("The rendered computer name would be invalid or longer than 24 characters");
}
return rendered.ToString();
}
public static System.Collections.Generic.List<DocumentTemplate> AvailableDocumentTemplates(this Device d, DiscoDataContext Context, User User, System.DateTime TimeStamp)
{
List<DocumentTemplate> ats = Context.DocumentTemplates
.Where(at => at.Scope == Disco.Models.Repository.DocumentTemplate.DocumentTemplateScopes.Device).ToList();
return ats.Where(at => at.FilterExpressionMatches(d, Context, User, TimeStamp, DocumentState.DefaultState())).ToList();
}
public static bool UpdateLastNetworkLogonDate(this Device Device)
{
return ActiveDirectoryUpdateLastNetworkLogonDateJob.UpdateLastNetworkLogonDate(Device);
}
public static DeviceAttachment CreateAttachment(this Device Device, DiscoDataContext dbContext, User CreatorUser, string Filename, string MimeType, string Comments, Stream Content, DocumentTemplate DocumentTemplate = null, byte[] PdfThumbnail = null)
{
if (string.IsNullOrEmpty(MimeType) || MimeType.Equals("unknown/unknown", StringComparison.InvariantCultureIgnoreCase))
MimeType = Interop.MimeTypes.ResolveMimeType(Filename);
DeviceAttachment da = new DeviceAttachment()
{
DeviceSerialNumber = Device.SerialNumber,
TechUserId = CreatorUser.Id,
Filename = Filename,
MimeType = MimeType,
Timestamp = DateTime.Now,
Comments = Comments
};
if (DocumentTemplate != null)
da.DocumentTemplateId = DocumentTemplate.Id;
dbContext.DeviceAttachments.Add(da);
dbContext.SaveChanges();
da.SaveAttachment(dbContext, Content);
Content.Position = 0;
if (PdfThumbnail == null)
da.GenerateThumbnail(dbContext, Content);
else
da.SaveThumbnailAttachment(dbContext, PdfThumbnail);
return da;
}
public static Device AddOffline(this Device d, DiscoDataContext dbContext)
{
// Just Include:
// - Serial Number
// - Asset Number
// - Profile Id
// - Assigned User Id
// - Batch
// Batch
DeviceBatch db = default(DeviceBatch);
if (d.DeviceBatchId.HasValue)
db = dbContext.DeviceBatches.Find(d.DeviceBatchId.Value);
// Default Device Model
DeviceModel dm = default(DeviceModel);
if (db != null && db.DefaultDeviceModelId.HasValue)
dm = dbContext.DeviceModels.Find(db.DefaultDeviceModelId); // From Batch
else
dm = dbContext.DeviceModels.Find(1); // Default
Device d2 = new Device()
{
SerialNumber = d.SerialNumber.ToUpper(),
AssetNumber = d.AssetNumber,
Location = d.Location,
CreatedDate = DateTime.Now,
DeviceProfileId = d.DeviceProfileId,
DeviceProfile = dbContext.DeviceProfiles.Find(d.DeviceProfileId),
AllowUnauthenticatedEnrol = true,
Active = true,
DeviceModelId = dm.Id,
DeviceModel = dm,
DeviceBatchId = d.DeviceBatchId,
DeviceBatch = db
};
dbContext.Devices.Add(d2);
if (!string.IsNullOrEmpty(d.AssignedUserId))
{
User u = UserBI.UserCache.GetUser(d.AssignedUserId, dbContext);
d2.AssignDevice(dbContext, u);
}
return d2;
}
public static DeviceUserAssignment AssignDevice(this Device d, DiscoDataContext dbContext, User u)
{
DeviceUserAssignment newDua = default(DeviceUserAssignment);
// Mark existing assignments as Unassigned
foreach (var dua in dbContext.DeviceUserAssignments.Where(m => m.DeviceSerialNumber == d.SerialNumber && !m.UnassignedDate.HasValue))
dua.UnassignedDate = DateTime.Now;
if (u != null)
{
// Add new Assignment
newDua = new DeviceUserAssignment()
{
DeviceSerialNumber = d.SerialNumber,
AssignedUserId = u.Id,
AssignedDate = DateTime.Now
};
dbContext.DeviceUserAssignments.Add(newDua);
d.AssignedUserId = u.Id;
d.AssignedUser = u;
}
else
{
d.AssignedUserId = null;
}
// Update AD Account
if (!string.IsNullOrEmpty(d.ComputerName) && d.ComputerName.Length <= 24)
{
var adMachineAccount = Interop.ActiveDirectory.ActiveDirectory.GetMachineAccount(d.ComputerName);
if (adMachineAccount != null)
{
if (newDua == null)
adMachineAccount.SetDescription(string.Empty);
else
adMachineAccount.SetDescription(d);
}
}
return newDua;
}
public static ActiveDirectoryMachineAccount ActiveDirectoryAccount(this Device Device, params string[] AdditionalProperties)
{
if (!string.IsNullOrEmpty(Device.ComputerName))
return Interop.ActiveDirectory.ActiveDirectory.GetMachineAccount(Device.ComputerName, AdditionalProperties: AdditionalProperties);
else
return null;
}
}
}
using System.Linq;
using Disco.BI.Interop.ActiveDirectory;
using Disco.Data.Configuration;
using Disco.Data.Repository;
using Disco.Models.BI.DocumentTemplates;
using Disco.Models.Repository;
using System.Collections.Generic;
using System;
using System.IO;
using Disco.Models.Interop.ActiveDirectory;
namespace Disco.BI.Extensions
{
public static class DeviceExtensions
{
public static string ComputerNameRender(this Device device, DiscoDataContext context)
{
DeviceProfile deviceProfile = device.DeviceProfile;
Expressions.Expression computerNameTemplateExpression = null;
computerNameTemplateExpression = Expressions.ExpressionCache.GetValue(DeviceProfileExtensions.ComputerNameExpressionCacheModule, deviceProfile.Id.ToString(), () =>
{
// Removed 2012-06-14 G# - Properties moved to DeviceProfile model & DB Migrated in DBv3.
//return Expressions.Expression.TokenizeSingleDynamic(null, deviceProfile.Configuration(context).ComputerNameTemplate, 0);
return Expressions.Expression.TokenizeSingleDynamic(null, deviceProfile.ComputerNameTemplate, 0);
});
System.Collections.IDictionary evaluatorVariables = Expressions.Expression.StandardVariables(null, context, UserBI.UserCache.CurrentUser, System.DateTime.Now, null);
string rendered;
try
{
rendered = computerNameTemplateExpression.EvaluateFirst<string>(device, evaluatorVariables);
}
catch (Exception ex)
{
throw new InvalidOperationException(string.Format("An error occurred rendering the computer name: [{0}] {1}", ex.GetType().Name, ex.Message), ex.InnerException);
}
if (rendered == null || rendered.Length > 24)
{
throw new System.InvalidOperationException("The rendered computer name would be invalid or longer than 24 characters");
}
return rendered.ToString();
}
public static System.Collections.Generic.List<DocumentTemplate> AvailableDocumentTemplates(this Device d, DiscoDataContext Context, User User, System.DateTime TimeStamp)
{
List<DocumentTemplate> ats = Context.DocumentTemplates
.Where(at => at.Scope == Disco.Models.Repository.DocumentTemplate.DocumentTemplateScopes.Device).ToList();
return ats.Where(at => at.FilterExpressionMatches(d, Context, User, TimeStamp, DocumentState.DefaultState())).ToList();
}
public static bool UpdateLastNetworkLogonDate(this Device Device)
{
return ActiveDirectoryUpdateLastNetworkLogonDateJob.UpdateLastNetworkLogonDate(Device);
}
public static DeviceAttachment CreateAttachment(this Device Device, DiscoDataContext dbContext, User CreatorUser, string Filename, string MimeType, string Comments, Stream Content, DocumentTemplate DocumentTemplate = null, byte[] PdfThumbnail = null)
{
if (string.IsNullOrEmpty(MimeType) || MimeType.Equals("unknown/unknown", StringComparison.InvariantCultureIgnoreCase))
MimeType = Interop.MimeTypes.ResolveMimeType(Filename);
DeviceAttachment da = new DeviceAttachment()
{
DeviceSerialNumber = Device.SerialNumber,
TechUserId = CreatorUser.Id,
Filename = Filename,
MimeType = MimeType,
Timestamp = DateTime.Now,
Comments = Comments
};
if (DocumentTemplate != null)
da.DocumentTemplateId = DocumentTemplate.Id;
dbContext.DeviceAttachments.Add(da);
dbContext.SaveChanges();
da.SaveAttachment(dbContext, Content);
Content.Position = 0;
if (PdfThumbnail == null)
da.GenerateThumbnail(dbContext, Content);
else
da.SaveThumbnailAttachment(dbContext, PdfThumbnail);
return da;
}
public static Device AddOffline(this Device d, DiscoDataContext dbContext)
{
// Just Include:
// - Serial Number
// - Asset Number
// - Profile Id
// - Assigned User Id
// - Batch
// Batch
DeviceBatch db = default(DeviceBatch);
if (d.DeviceBatchId.HasValue)
db = dbContext.DeviceBatches.Find(d.DeviceBatchId.Value);
// Default Device Model
DeviceModel dm = default(DeviceModel);
if (db != null && db.DefaultDeviceModelId.HasValue)
dm = dbContext.DeviceModels.Find(db.DefaultDeviceModelId); // From Batch
else
dm = dbContext.DeviceModels.Find(1); // Default
Device d2 = new Device()
{
SerialNumber = d.SerialNumber.ToUpper(),
AssetNumber = d.AssetNumber,
Location = d.Location,
CreatedDate = DateTime.Now,
DeviceProfileId = d.DeviceProfileId,
DeviceProfile = dbContext.DeviceProfiles.Find(d.DeviceProfileId),
AllowUnauthenticatedEnrol = true,
DeviceModelId = dm.Id,
DeviceModel = dm,
DeviceBatchId = d.DeviceBatchId,
DeviceBatch = db
};
dbContext.Devices.Add(d2);
if (!string.IsNullOrEmpty(d.AssignedUserId))
{
User u = UserBI.UserCache.GetUser(d.AssignedUserId, dbContext);
d2.AssignDevice(dbContext, u);
}
return d2;
}
public static DeviceUserAssignment AssignDevice(this Device d, DiscoDataContext dbContext, User u)
{
DeviceUserAssignment newDua = default(DeviceUserAssignment);
// Mark existing assignments as Unassigned
foreach (var dua in dbContext.DeviceUserAssignments.Where(m => m.DeviceSerialNumber == d.SerialNumber && !m.UnassignedDate.HasValue))
dua.UnassignedDate = DateTime.Now;
if (u != null)
{
// Add new Assignment
newDua = new DeviceUserAssignment()
{
DeviceSerialNumber = d.SerialNumber,
AssignedUserId = u.Id,
AssignedDate = DateTime.Now
};
dbContext.DeviceUserAssignments.Add(newDua);
d.AssignedUserId = u.Id;
d.AssignedUser = u;
}
else
{
d.AssignedUserId = null;
}
// Update AD Account
if (!string.IsNullOrEmpty(d.ComputerName) && d.ComputerName.Length <= 24)
{
var adMachineAccount = Interop.ActiveDirectory.ActiveDirectory.GetMachineAccount(d.ComputerName);
if (adMachineAccount != null)
{
if (newDua == null)
adMachineAccount.SetDescription(string.Empty);
else
adMachineAccount.SetDescription(d);
}
}
return newDua;
}
public static ActiveDirectoryMachineAccount ActiveDirectoryAccount(this Device Device, params string[] AdditionalProperties)
{
if (!string.IsNullOrEmpty(Device.ComputerName))
return Interop.ActiveDirectory.ActiveDirectory.GetMachineAccount(Device.ComputerName, AdditionalProperties: AdditionalProperties);
else
return null;
}
}
}
+8 -1
View File
@@ -93,6 +93,10 @@
<Compile Include="Migrations\201301150107063_DBv6.Designer.cs">
<DependentUpon>201301150107063_DBv6.cs</DependentUpon>
</Compile>
<Compile Include="Migrations\201302210057463_DBv7.cs" />
<Compile Include="Migrations\201302210057463_DBv7.Designer.cs">
<DependentUpon>201302210057463_DBv7.cs</DependentUpon>
</Compile>
<Compile Include="Migrations\Configuration.cs" />
<Compile Include="Migrations\DiscoDataMigrator.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
@@ -124,6 +128,9 @@
<EmbeddedResource Include="Migrations\201301150107063_DBv6.resx">
<DependentUpon>201301150107063_DBv6.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Migrations\201302210057463_DBv7.resx">
<DependentUpon>201302210057463_DBv7.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
@@ -137,7 +144,7 @@
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<ProjectExtensions>
<VisualStudio>
<UserProperties BuildVersion_StartDate="2001/1/1" BuildVersion_DetectChanges="False" BuildVersion_UseGlobalSettings="True" BuildVersion_BuildAction="ReBuild" />
<UserProperties BuildVersion_BuildAction="ReBuild" BuildVersion_UseGlobalSettings="True" BuildVersion_DetectChanges="False" BuildVersion_StartDate="2001/1/1" />
</VisualStudio>
</ProjectExtensions>
<Import Project="$(SolutionDir)\.nuget\nuget.targets" />
+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 DBv7 : IMigrationMetadata
{
private readonly ResourceManager Resources = new ResourceManager(typeof(DBv7));
string IMigrationMetadata.Id
{
get { return "201302210057463_DBv7"; }
}
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 DBv7 : DbMigration
{
public override void Up()
{
DropColumn("dbo.Devices", "Active");
}
public override void Down()
{
AddColumn("dbo.Devices", "Active", c => c.Boolean(nullable: false));
}
}
}
@@ -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>
+2 -2
View File
@@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.2.0219.1854")]
[assembly: AssemblyFileVersion("1.2.0219.1854")]
[assembly: AssemblyVersion("1.2.0221.1820")]
[assembly: AssemblyFileVersion("1.2.0221.1820")]
+3 -1
View File
@@ -96,6 +96,8 @@
<Compile Include="Repository\User\User.cs" />
<Compile Include="Repository\User\UserAttachment.cs" />
<Compile Include="Repository\User\UserDetail.cs" />
<Compile Include="UI\BaseUIModel.cs" />
<Compile Include="UI\Job\JobShowModel.cs" />
</ItemGroup>
<ItemGroup>
<None Include="App.config" />
@@ -103,7 +105,7 @@
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<ProjectExtensions>
<VisualStudio>
<UserProperties BuildVersion_BuildAction="ReBuild" BuildVersion_UseGlobalSettings="True" BuildVersion_DetectChanges="False" BuildVersion_StartDate="2001/1/1" />
<UserProperties BuildVersion_StartDate="2001/1/1" BuildVersion_DetectChanges="False" BuildVersion_UseGlobalSettings="True" BuildVersion_BuildAction="ReBuild" />
</VisualStudio>
</ProjectExtensions>
<PropertyGroup>
+2 -2
View File
@@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.2.0219.1854")]
[assembly: AssemblyFileVersion("1.2.0219.1854")]
[assembly: AssemblyVersion("1.2.0221.1820")]
[assembly: AssemblyFileVersion("1.2.0221.1820")]
+69 -67
View File
@@ -1,67 +1,69 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace Disco.Models.Repository
{
public class Device
{
[Required(ErrorMessage="The Serial Number is Required"), Key, StringLength(60)]
public string SerialNumber { get; set; }
[StringLength(40)]
public string AssetNumber { get; set; }
[StringLength(250)]
public string Location { get; set; }
public int? DeviceModelId { get; set; }
[Range(1, int.MaxValue, ErrorMessage="A valid Device Profile is Required")]
public int DeviceProfileId { get; set; }
public int? DeviceBatchId { get; set; }
[StringLength(24)]
public string ComputerName { get; set; }
public string AssignedUserId { get; set; }
public DateTime? LastNetworkLogonDate { get; set; }
// 2012-06-21 - Removed
//[StringLength(24)]
//public string CertificateStoreReference { get; set; }
public bool AllowUnauthenticatedEnrol { get; set; }
public bool Active { get; set; }
public DateTime CreatedDate { get; set; }
public DateTime? EnrolledDate { get; set; }
public DateTime? LastEnrolDate { get; set; }
public DateTime? DecommissionedDate { get; set; }
[ForeignKey("DeviceModelId")]
public virtual DeviceModel DeviceModel { get; set; }
[ForeignKey("DeviceProfileId")]
public virtual DeviceProfile DeviceProfile { get; set; }
[ForeignKey("DeviceBatchId")]
public virtual DeviceBatch DeviceBatch { get; set; }
[ForeignKey("AssignedUserId")]
public virtual User AssignedUser { get; set; }
public virtual IList<DeviceUserAssignment> DeviceUserAssignments { get; set; }
public virtual IList<DeviceDetail> DeviceDetails { get; set; }
public virtual IList<DeviceAttachment> DeviceAttachments { get; set; }
[InverseProperty("DeviceSerialNumber")]
public virtual IList<Job> Jobs { get; set; }
public override string ToString()
{
if (DeviceModel != null)
return string.Format("{0} - {1}", this.DeviceModel, this.SerialNumber);
else
return this.SerialNumber;
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace Disco.Models.Repository
{
public class Device
{
[Required(ErrorMessage="The Serial Number is Required"), Key, StringLength(60)]
public string SerialNumber { get; set; }
[StringLength(40)]
public string AssetNumber { get; set; }
[StringLength(250)]
public string Location { get; set; }
public int? DeviceModelId { get; set; }
[Range(1, int.MaxValue, ErrorMessage="A valid Device Profile is Required")]
public int DeviceProfileId { get; set; }
public int? DeviceBatchId { get; set; }
[StringLength(24)]
public string ComputerName { get; set; }
public string AssignedUserId { get; set; }
public DateTime? LastNetworkLogonDate { get; set; }
// 2012-06-21 - Removed
//[StringLength(24)]
//public string CertificateStoreReference { get; set; }
public bool AllowUnauthenticatedEnrol { get; set; }
// Removed 2013-02-21 G#: Redundant - See DecommissionedDate
//public bool Active { get; set; }
// End Removed 2013-02-21
public DateTime CreatedDate { get; set; }
public DateTime? EnrolledDate { get; set; }
public DateTime? LastEnrolDate { get; set; }
public DateTime? DecommissionedDate { get; set; }
[ForeignKey("DeviceModelId")]
public virtual DeviceModel DeviceModel { get; set; }
[ForeignKey("DeviceProfileId")]
public virtual DeviceProfile DeviceProfile { get; set; }
[ForeignKey("DeviceBatchId")]
public virtual DeviceBatch DeviceBatch { get; set; }
[ForeignKey("AssignedUserId")]
public virtual User AssignedUser { get; set; }
public virtual IList<DeviceUserAssignment> DeviceUserAssignments { get; set; }
public virtual IList<DeviceDetail> DeviceDetails { get; set; }
public virtual IList<DeviceAttachment> DeviceAttachments { get; set; }
[InverseProperty("DeviceSerialNumber")]
public virtual IList<Job> Jobs { get; set; }
public override string ToString()
{
if (DeviceModel != null)
return string.Format("{0} - {1}", this.DeviceModel, this.SerialNumber);
else
return this.SerialNumber;
}
}
}