using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using InABox.Clients; using InABox.Core; namespace Comal.Classes { public enum PaperSize { A0, A1, A2, A3, A4, A5, Custom, NotSet } public class JobDocumentSet : Entity, IRemotable, IPersistent, IOneToMany, IJobDocumentSet, ILicense { [EntityRelationship(DeleteAction.Cascade)] [NullEditor] public JobLink Job { get; set; } [EntityRelationship(DeleteAction.Cascade)] [NullEditor] public JobDocumentSetFolderLink Folder { get; set; } [NullEditor] [EntityRelationship(DeleteAction.Cascade)] public JobDocumentSetLink Parent { get; set; } [CodeEditor(Visible = Visible.Default, Editable = Editable.Enabled)] [EditorSequence(1)] public string Code { get; set; } [TextBoxEditor] [EditorSequence(2)] public string Description { get; set; } [EditorSequence(3)] public JobDocumentSetDisciplineLink Discipline { get; set; } [EditorSequence(4)] public JobDocumentSetTypeLink Type { get; set; } [DateTimeEditor] [EditorSequence(5)] public DateTime Date { get; set; } [Caption("Assigned To")] [EditorSequence(6)] public EmployeeLink Employee { get; set; } [EnumLookupEditor(typeof(PaperSize))] [EditorSequence("Advanced", 1)] public PaperSize Size { get; set; } = PaperSize.NotSet; [CodeEditor(Editable = Editable.Enabled)] [EditorSequence("Advanced", 2)] public string Scale { get; set; } = ""; [EditorSequence("Advanced", 3)] public JobDocumentSetCategoryLink Category { get; set; } private class JobITPLookup : LookupDefinitionGenerator { public override Filter DefineFilter(JobDocumentSet[] items) { Guid id = items.FirstOrDefault()?.Job.ID ?? Guid.Empty; return new Filter(x => x.Job.ID).IsEqualTo(id); } public override Columns DefineFilterColumns() => new Columns(x => x.Job.ID); } [LookupDefinition(typeof(JobITPLookup))] [EditorSequence("Advanced", 4)] public JobITPLink Area { get; set; } [EditorSequence("Advanced", 5)] public DateTime Retired { get; set; } [ChildEntity(typeof(JobDocumentSetCurrentMileStone))] public LightJobDocumentSetMileStoneLink CurrentMileStone { get; set; } } public class JobDocumentSetCurrentMileStone : IChildEntityDefinition { public Filter? Filter { get; set; } = null; public SortOrder? Sort { get; set; } = new SortOrder(x => x.Type.Sequence, SortDirection.Descending).ThenBy(x => x.Created, SortDirection.Descending); public Expression> Parent => x => x.DocumentSet.ID; } }