| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 | 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; } = 1.0F;        [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 JobScopeLink Scope { get; set; }                [EditorSequence(10)]        public CostCentreLink CostCentre { get; set; }                [NullEditor]        public long Sequence { get; set; }        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);                            }        }    } }
 |