| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 | using System;using System.Linq.Expressions;using InABox.Core;namespace Comal.Classes{    /// <summary>    ///     An EquipmentAssignment represents an anticipated booking for an equipment item, much like a diary entry    ///     <exclude />    /// </summary>    [UserTracking("Assignments")]    [Caption("Assignments")]    public class EquipmentAssignment : Entity, IPersistent, IRemotable, INumericAutoIncrement<EquipmentAssignment>, IOneToMany<Equipment>, IOneToMany<Job>,        ILicense<SchedulingControlLicense>, IOneToMany<Invoice>, IJobScopedItem    {        [IntegerEditor(Editable = Editable.Hidden)]        [EditorSequence(1)]        public int Number { get; set; }        [DateEditor]        [EditorSequence(2)]        public DateTime Date { get; set; }        [EntityRelationship(DeleteAction.Cascade)]        [EditorSequence(3)]        public EquipmentLink Equipment { get; set; }                [MemoEditor]        [EditorSequence(6)]        public string Description { get; set; }                [EditorSequence(9)]        public JobLink JobLink { get; set; }                [EditorSequence(10)]        public JobScopeLink JobScope { get; set; }                [EditorSequence(11)]        [CoreTimeEditor]        public TimeBlock Booked { get; set; }        [EditorSequence(12)]        [CoreTimeEditor]        public TimeBlock Actual { get; set; }                [TimestampEditor]        [RequiredColumn]        [EditorSequence(13)]        public DateTime Completed { get; set; }                [EditorSequence("Processing",1)]        public ActualCharge Charge { get; set; }                [TimestampEditor]        [EditorSequence("Processing",2)]        public DateTime Processed { get; set; }                [NullEditor]        [EntityRelationship(DeleteAction.SetNull)]        public InvoiceLink Invoice { get; set; }                        public Expression<Func<EquipmentAssignment, int>> AutoIncrementField()        {            return x => x.Number;        }        public Filter<EquipmentAssignment> AutoIncrementFilter()        {            return null;        }                public static TimeSpan EffectiveTime(TimeSpan actual, TimeSpan booked) => actual.Ticks != 0L ? actual : booked;         public TimeSpan EffectiveStartTime()        {            return EffectiveTime(Actual.Start, Booked.Start);        }        public DateTime EffectiveStart()        {            return Date.Add(EffectiveStartTime());        }        public TimeSpan EffectiveFinishTime()        {            // If we have an actual finish, always use that            // otherwise use EffectiveStart() + booked.duration            return EffectiveTime(                    Actual.Finish,                    EffectiveTime(Actual.Start, Booked.Start)                        .Add(Booked.Duration)                );        }        public DateTime EffectiveFinish()        {            return Date.Add(                EffectiveFinishTime()            );        }                static EquipmentAssignment()        {            //LinkedProperties.Register<EquipmentAssignment, ActivityCharge, bool>(ass => ass.Equi.Charge, chg => chg.Chargeable, ass => ass.Charge.Chargeable);            Classes.JobScope.LinkScopeProperties<EquipmentAssignment>();        }            }}
 |