using System.Linq; using InABox.Core; namespace Comal.Classes { [UserTracking(typeof(Quote))] public class QuoteContractProposal : Entity, IRemotable, IPersistent, IQuoteContractProposal, IManyToMany, ILicense, ITaxable { [NullEditor] [EntityRelationship(DeleteAction.Cascade)] public QuoteContractLink Contract { get; set; } private class QuoteContractProposalLookup : LookupDefinitionGenerator { public override Filter DefineFilter(QuoteContractProposal[] items) { if (items?.Any() != true) return LookupFactory.DefineFilter(); return new Filter(x => x.Quote.ID).IsEqualTo(items.First().Contract.Quote.ID); } public override Columns DefineColumns() { return base.DefineColumns() .Add(x=>x.ProposalExTax) .Add(x=>x.ProposalTax) .Add(x=>x.ProposalIncTax); } public override Columns DefineFilterColumns() => new Columns(ColumnTypeFlags.Required); } [LookupDefinition(typeof(QuoteContractProposalLookup))] [EntityRelationship(DeleteAction.Cascade)] [EditorSequence(1)] public QuoteProposalLink Proposal { get; set; } [NullEditor] public long Sequence { get; set; } [EditorSequence(2)] public bool OverridePrice { get; set; } [CurrencyEditor(Visible = Visible.Default, Summary = Summary.Sum)] [EditorSequence(3)] public double ExTax { get; set; } [EditorSequence(4)] public TaxCodeLink TaxCode { get; set; } [NullEditor] public double TaxRate { get; set; } [CurrencyEditor(Visible = Visible.Default, Summary = Summary.Sum)] [EditorSequence(5)] public double Tax { get; set; } [CurrencyEditor(Visible = Visible.Default, Summary = Summary.Sum)] [EditorSequence(6)] public double IncTax { get; set; } static QuoteContractProposal() { LinkedProperties.Register(x => x.TaxCode, x => x.Rate, x => x.TaxRate); LinkedProperties.Register(x => x.Proposal, x => x.ProposalExTax, x => x.ExTax, CheckProposalOverride); LinkedProperties.Register(x => x.Proposal, x => x.ProposalTax, x => x.Tax, CheckProposalOverride); LinkedProperties.Register(x => x.Proposal, x => x.ProposalIncTax, x => x.IncTax, CheckProposalOverride); } private static Result CheckProposalOverride(QuoteContractProposal? proposal, double value) { if(proposal?.OverridePrice == true) { return Result.Error(""); } else { return Result.Ok(value); } } } }