| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 | using System;using InABox.Core;namespace Comal.Classes{    [UserTracking(typeof(Invoice))]    public class InvoiceLine : Entity, IPersistent, IRemotable, ISequenceable, IOneToMany<Invoice>, ITaxable, ILicense<AccountsReceivableLicense>    {        [NullEditor]        [EntityRelationship(DeleteAction.Cascade)]        public InvoiceLink InvoiceLink { get; set; }        [MemoEditor]        [EditorSequence(1)]        public string Description { get; set; }                [EditorSequence(2)]        [DoubleEditor]        public double Quantity { get; set; }                [EditorSequence(3)]        [CurrencyEditor]        public double Amount { get; set; }                [EditorSequence(4)]        [DoubleEditor(Summary = Summary.Sum)]        public double ExTax { get; set; }        [EditorSequence(5)]        public TaxCodeLink TaxCode { get; set; }                [EditorSequence(6)]        [DoubleEditor(Editable = Editable.Hidden)]        public double TaxRate { get; set; }                [EditorSequence(7)]        [DoubleEditor(Editable = Editable.Hidden, Summary = Summary.Sum)]        public double Tax { get; set; }                [EditorSequence(8)]        [DoubleEditor(Summary = Summary.Sum)]        public double IncTax { get; set; }                [EditorSequence(9)]        public JobFinancialLink Financial { get; set; }                [EditorSequence(10)]        public CostCentreLink CostCentre { get; set; }                [NullEditor]        public long Sequence { get; set; }                protected override void Init()        {            base.Init();            Quantity = 1.0F;            InvoiceLink = new InvoiceLink();            TaxCode = new TaxCodeLink(() => this);            Financial = new JobFinancialLink();            CostCentre = new CostCentreLink();        }        static InvoiceLine()        {            LinkedProperties.Register<InvoiceLine, TaxCodeLink, double>(x => x.TaxCode, x => x.Rate, x => x.TaxRate);        }        private enum Suppress        {            This        }                protected override void DoPropertyChanged(string name, object before, object after)        {            base.DoPropertyChanged(name, before, after);                        if (EventSuppressor.IsSet(Suppress.This))                return;                        using (new EventSuppressor(Suppress.This))            {                if (String.Equals(name, nameof(Quantity)))                    ExTax = (double)after * Amount;                else if (String.Equals(name, nameof(Amount)))                    ExTax = (double)after * Quantity;                else if (String.Equals(name, nameof(ExTax)))                    Amount = (double)after / (Quantity == 0.0F ? 1.0F : Quantity);                            }        }    } }
 |