using System; using System.Collections.Generic; using System.Linq.Expressions; using InABox.Core; namespace Comal.Classes { [UserTracking(typeof(Qualification))] public class JobQualificationCount : CoreAggregate { public override Expression> Aggregate => x => x.ID; public override Dictionary>, Expression>> Links => new Dictionary>, Expression>>() { { JobEmployeeQualification => JobEmployeeQualification.Required.ID, JobQualification => JobQualification.ID } }; public override AggregateCalculation Calculation => AggregateCalculation.Count; public override Filter Filter { get { var start = new Filter(x => x.Available.Employee.StartDate).IsEqualTo(DateTime.MinValue) .Or(x => x.Available.Employee.StartDate).IsLessThanOrEqualTo(DateTime.Today); var finish = new Filter(x => x.Available.Employee.FinishDate).IsEqualTo(DateTime.MinValue) .Or(x => x.Available.Employee.FinishDate).IsGreaterThanOrEqualTo(DateTime.Today); var expiry = new Filter(x => x.Available.Expiry).IsGreaterThanOrEqualTo(DateTime.Today); var result = expiry.And(start).And(finish); return result; } } } [UserTracking(typeof(Qualification))] public class JobQualification : Entity, IRemotable, IPersistent, IManyToMany, ILicense { [EntityRelationship(DeleteAction.Cascade)] public JobLink Job { get; set; } [EntityRelationship(DeleteAction.Cascade)] public QualificationLink Qualification { get; set; } [CheckBoxEditor] public bool Required { get; set; } [IntegerEditor(Visible = Visible.Default, Editable = Editable.Disabled)] [Aggregate(typeof(JobQualificationCount))] public int Count { get; set; } } }