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>();
- }
-
- }
- }
|