using System; using System.Collections.Generic; using System.Linq.Expressions; using InABox.Core; namespace Comal.Classes { [UserTracking("Equipment")] public class Equipment : Entity, IPersistent, IRemotable, ISchedulable, ILicense, IEquipment, IExportable, IImportable, IOneToMany { [UniqueCodeEditor(Visible = Visible.Default, Editable = Editable.Enabled)] [EditorSequence(1)] public string Code { get; set; } [TextBoxEditor] [EditorSequence(2)] public string Description { get; set; } [MemoEditor] [EditorSequence(3)] public string Notes { get; set; } [EditorSequence(4)] public string Type { get; set; } [EditorSequence(5)] public EquipmentGroupLink GroupLink { get; set; } [EditorSequence(6)] public ImageDocumentLink SpecificationSheet { get; set; } [DateEditor] [EditorSequence(7)] public DateTime Purchased { get; set; } [CurrencyEditor] [EditorSequence(8)] public double PurchasePrice { get; set; } [DateEditor] [EditorSequence(9)] public DateTime Disposed { get; set; } [CurrencyEditor] [EditorSequence(10)] public double DisposalPrice { get; set; } [EditorSequence(11)] public string SerialNumber { get; set; } [Obsolete("Replaced with ManufacturedDate")] [NullEditor] public int YearOfManufacture { get; set; } [DateEditor] [EditorSequence(12)] public DateTime ManufacturedDate { get; set; } [EditorSequence(13)] public CustomerLink Customer { get; set; } [EditorSequence(14)] public bool Private { get; set; } [EditorSequence(15)] public EquipmentFuelTypeLink FuelType { get; set; } [EntityRelationship(DeleteAction.SetNull)] [EditorSequence("Counters", 1)] public GPSTrackerLink TrackerLink { get; set; } [EditorSequence("Counters", 2)] public double Hours { get; set; } [EditorSequence("Counters", 3)] public double Distance { get; set; } [EditorSequence("Counters", 4)] public double Counter1 { get; set; } [EditorSequence("Counters", 5)] public double Counter2 { get; set; } [EditorSequence("Counters", 6)] public double Counter3 { get; set; } [EditorSequence("Counters", 7)] public double Counter4 { get; set; } [EditorSequence("Counters", 8)] public double Counter5 { get; set; } [EditorSequence("Counters", 9)] public DigitalKeyLink DigitalKey { get; set; } [ComplexFormula(typeof(NextScheduleFormula))] [DateTimeEditor(Editable = Editable.Hidden)] public DateTime NextSchedule { get; set; } [IntegerEditor(Editable = Editable.Hidden)] public int ActiveSchedules { get; set; } private class DocumentCountFormula : ComplexFormulaGenerator { public override IComplexFormulaNode GetFormula() => Count( x => x.Property(x => x.ID)) .WithLink(x => x.EntityLink.ID, x => x.ID); } [ComplexFormula(typeof(DocumentCountFormula))] [IntegerEditor(Editable = Editable.Hidden)] public int Documents { get; set; } private class KanbanCountFormula : ComplexFormulaGenerator { public override IComplexFormulaNode GetFormula() => Count(x => x.Property(x => x.ID)) .WithLink(x => x.Equipment.ID, x => x.ID); } [ComplexFormula(typeof(KanbanCountFormula))] [IntegerEditor(Editable = Editable.Hidden)] public int Kanbans { get; set; } public override string ToString() { return string.Format("{0}: {1}", Code, Description); } static Equipment() { LinkedProperties.Register(x => x.TrackerLink, x => x.Hours, x => x.Hours); LinkedProperties.Register(x => x.TrackerLink, x => x.Distance, x => x.Distance); LinkedProperties.Register(x => x.TrackerLink, x => x.Counter1, x => x.Counter1); LinkedProperties.Register(x => x.TrackerLink, x => x.Counter2, x => x.Counter2); LinkedProperties.Register(x => x.TrackerLink, x => x.Counter3, x => x.Counter3); LinkedProperties.Register(x => x.TrackerLink, x => x.Counter4, x => x.Counter4); LinkedProperties.Register(x => x.TrackerLink, x => x.Counter5, x => x.Counter5); DefaultColumns.Add(x => x.Code); DefaultColumns.Add(x => x.Description); DefaultColumns.Add(x => x.Type, width: 120, alignment: Alignment.MiddleCenter); DefaultColumns.Add(x => x.GroupLink.Code, caption: "Group"); DefaultColumns.Add(x => x.SerialNumber); DefaultColumns.Add(x => x.TrackerLink.DeviceID, caption: "GPS Tracker"); DefaultColumns.Add(x => x.TrackerLink.Location.Address, caption: "Address"); DefaultColumns.Add(x => x.TrackerLink.Location.Latitude, caption: "Latitude"); DefaultColumns.Add(x => x.TrackerLink.Location.Longitude, caption: "Longitude"); } } }