using System; using System.Linq; using InABox.Core; namespace Comal.Classes { public class ManagedProblem : Problem { [EditorSequence(2)] [Caption("Assigned To", IncludePath = false)] public EmployeeLookupLink AssignedTo { get; set; } } public interface IManagedProblemSummary { Guid ID { get; set; } string Type { get; set; } string Code { get; set; } string Description { get; set; } ManagedProblem Problem { get; set; } } public class ManagedProblemSummaryUnionGenerator : AutoEntityUnionGenerator { private AutoEntityUnionTable AddTable() where T : IProblems { return AddTable(new Filter(x => x.Problem.Notes).IsNotEqualTo(null).And(x => x.Problem.Resolved) .IsEqualTo(DateTime.MinValue)) .AddConstant(x => x.Type, typeof(T).Name.Split('.').Last()); } protected override void Configure() { AddTable() .AliasField(x=>x.Code, x=>x.Number) .AliasField(x=>x.Description, x=>x.SupplierLink.Name); AddTable(); AddTable(); AddTable() .AliasField(x=>x.Description, x=>x.Name); AddTable(); AddTable(); AddTable() .AliasField(x => x.Code, "%s / %s", x => x.BillOfMaterials.Job.JobNumber, x => x.BillOfMaterials.Number) .AliasField(x => x.Description, "%s / %s", x => x.Product.Code, x => x.Product.Name); AddTable() .AliasField(x=>x.Code, "%s / %s", x=>x.Requisition.Job.JobNumber, x=>x.Requisition.Number) .AliasField(x=>x.Description, "%s / %s", x=>x.Product.Code, x=>x.Product.Name); AddTable() .AliasField(x=>x.Code, x=>x.Serial) .AliasField(x=>x.Description, x=>x.Title); AddTable() .AliasField(x=>x.Code, x=>x.Tag.Name) .AliasField(x=>x.Description, x=>x.Note); } public override bool Distinct => false; public override Column[] IDColumns => new Column[] { new Column(x => x.ID) }; } [UserTracking(typeof(Job))] [AutoEntity(typeof(ManagedProblemSummaryUnionGenerator))] public class Problems : Entity, IRemotable, IPersistent, IManagedProblemSummary, ILicense { public string Type { get; set; } public string Code { get; set; } public string Description { get; set; } public ManagedProblem Problem { get; set; } } }