using System; using System.Collections.Generic; using System.Linq.Expressions; using InABox.Core; namespace Comal.Classes { public abstract class MeetingMotionVotes : CoreAggregate { public override Expression> Aggregate => x => x.ID; public override Dictionary>, Expression>> Links => new Dictionary>, Expression>>() { { MeetingMotionVote => MeetingMotionVote.Motion.ID, MeetingMotion => MeetingMotion.ID } }; public override AggregateCalculation Calculation => AggregateCalculation.Count; } public class MeetingMotionVotesFor : MeetingMotionVotes { public override Filter? Filter => new Filter(x => x.Vote).IsEqualTo(Vote.For); } public class MeetingMotionVotesAgainst : MeetingMotionVotes { public override Filter? Filter => new Filter(x => x.Vote).IsEqualTo(Vote.Against); } public class MeetingMotionVotesAbstain : MeetingMotionVotes { public override Filter? Filter => new Filter(x => x.Vote).IsEqualTo(Vote.Abstain); } public class MeetingMotion: Entity, IRemotable, IPersistent, IMeetingMotion, ILicense { [NullEditor] [EntityRelationship(DeleteAction.Cascade)] public MeetingItemLink Item { get; set; } [MemoEditor(Visible = Visible.Default, Width=0)] [EditorSequence(1)] [Caption("Motion")] public string Description { get; set; } [EditorSequence(3)] [Aggregate(typeof(MeetingMotionVotesFor))] [IntegerEditor(Visible = Visible.Default, Editable = Editable.Hidden, Width=60, Alignment = Alignment.MiddleCenter)] public int For { get; set; } [EditorSequence(3)] [Aggregate(typeof(MeetingMotionVotesAgainst))] [IntegerEditor(Visible = Visible.Default, Editable = Editable.Hidden, Width=60, Alignment = Alignment.MiddleCenter)] public int Against { get; set; } [EditorSequence(3)] [Aggregate(typeof(MeetingMotionVotesAbstain))] [IntegerEditor(Visible = Visible.Default, Editable = Editable.Hidden, Width=60, Alignment = Alignment.MiddleCenter)] public int Abstain { get; set; } [EditorSequence(2)] [EnumLookupEditor(typeof(MeetingMotionOutcome), Visible = Visible.Default, Width=100, Alignment = Alignment.MiddleCenter)] public MeetingMotionOutcome Outcome { get; set; } } }