using System; using System.Collections.Generic; using System.Linq.Expressions; using InABox.Core; namespace Comal.Classes { public class QuoteProposalExTax : CoreAggregate { public override Expression> Aggregate => x => x.ExTax; public override AggregateCalculation Calculation => AggregateCalculation.Sum; public override Dictionary>, Expression>> Links => new Dictionary>, Expression>>() { { QuoteProposalCostSheet => QuoteProposalCostSheet.Proposal.ID, QuoteProposal => QuoteProposal.ID } }; } public class QuoteProposalTax : CoreAggregate { public override Expression> Aggregate => x => x.Tax; public override AggregateCalculation Calculation => AggregateCalculation.Sum; public override Dictionary>, Expression>> Links => new Dictionary>, Expression>>() { { QuoteProposalCostSheet => QuoteProposalCostSheet.Proposal.ID, QuoteProposal => QuoteProposal.ID } }; } public class QuoteProposalIncTax : CoreAggregate { public override Expression> Aggregate => x => x.IncTax; public override AggregateCalculation Calculation => AggregateCalculation.Sum; public override Dictionary>, Expression>> Links => new Dictionary>, Expression>>() { { QuoteProposalCostSheet => QuoteProposalCostSheet.Proposal.ID, QuoteProposal => QuoteProposal.ID } }; } public class QuoteProposalExTaxCondition : ICondition { public Expression> Left => x => x.ExTax; public Condition Condition => Condition.Equals; public Expression> Right => x => 0.00F; public Expression> True => x => x.CostSheetsExTax; public Expression> False => x => x.ExTax; public ConditionType Type => ConditionType.Virtual; } public class QuoteProposalTaxCondition : ICondition { public Expression> Left => x => x.ExTax; public Condition Condition => Condition.Equals; public Expression> Right => x => 0.00F; public Expression> True => x => x.CostSheetsTax; public Expression> False => x => x.Tax; public ConditionType Type => ConditionType.Virtual; } public class QuoteProposalIncTaxCondition : ICondition { public Expression> Left => x => x.ExTax; public Condition Condition => Condition.Equals; public Expression> Right => x => 0.00F; public Expression> True => x => x.CostSheetsIncTax; public Expression> False => x => x.IncTax; public ConditionType Type => ConditionType.Virtual; } [UserTracking(typeof(Quote))] public class QuoteProposal : Entity, IRemotable, IPersistent, IQuoteProposal, ITaxable, IOneToMany, ILicense { [RichTextEditor(Visible = Visible.Hidden)] [EditorSequence("Preamble", 1)] public string Preamble { get; set; } [RichTextEditor(Visible = Visible.Hidden)] [EditorSequence("Summary", 1)] public string Summary { get; set; } [NullEditor] [Aggregate(typeof(QuoteProposalExTax))] public double CostSheetsExTax { get; set; } [NullEditor] [Aggregate(typeof(QuoteProposalTax))] public double CostSheetsTax { get; set; } [NullEditor] [Aggregate(typeof(QuoteProposalIncTax))] public double CostSheetsIncTax { get; set; } [EditorSequence(4)] public TaxCodeLink TaxCode { get; set; } [NullEditor] [EntityRelationship(DeleteAction.Cascade)] public QuoteLink Quote { get; set; } [DateEditor(Visible = Visible.Default)] [EditorSequence(1)] public DateTime Date { get; set; } [TextBoxEditor(Visible = Visible.Default)] [EditorSequence(2)] public string Description { get; set; } [CurrencyEditor(Visible = Visible.Default, Editable = Editable.Hidden)] [Condition(typeof(QuoteProposalExTaxCondition))] public double ProposalExTax { get; set; } [CurrencyEditor(Visible = Visible.Optional, Editable = Editable.Hidden)] [Condition(typeof(QuoteProposalTaxCondition))] public double ProposalTax { get; set; } [CurrencyEditor(Visible = Visible.Optional, Editable = Editable.Hidden)] [Condition(typeof(QuoteProposalIncTaxCondition))] public double ProposalIncTax { get; set; } [CheckBoxEditor] [EditorSequence(7)] public bool Default { get; set; } [NullEditor] public long Sequence { get; set; } [DoubleEditor(Visible = Visible.Optional)] [EditorSequence(3)] public double ExTax { get; set; } [NullEditor] public double TaxRate { get; set; } [DoubleEditor(Visible = Visible.Optional, Editable = Editable.Disabled)] [EditorSequence(5)] public double Tax { get; set; } [DoubleEditor(Visible = Visible.Optional)] [EditorSequence(6)] public double IncTax { get; set; } static QuoteProposal() { LinkedProperties.Register(x => x.TaxCode, x => x.Rate, x => x.TaxRate); } } }