|
@@ -5,68 +5,6 @@ using InABox.Core;
|
|
|
|
|
|
namespace Comal.Classes
|
|
|
{
|
|
|
- // public class InvoiceChargeableHours : CoreAggregate<Invoice, Assignment, TimeSpan>
|
|
|
- // {
|
|
|
- // public override Expression<Func<Assignment, TimeSpan>> Aggregate => x => x.ChargeableHours;
|
|
|
- //
|
|
|
- // public override AggregateCalculation Calculation => AggregateCalculation.Sum;
|
|
|
- //
|
|
|
- // public override Dictionary<Expression<Func<Assignment, object>>, Expression<Func<Invoice, object>>> Links =>
|
|
|
- // new Dictionary<Expression<Func<Assignment, object>>, Expression<Func<Invoice, object>>>()
|
|
|
- // {
|
|
|
- // { Assignment => Assignment.Invoice.ID, Invoice => Invoice.ID }
|
|
|
- // };
|
|
|
- //
|
|
|
- // public override Filter<Assignment>? Filter => new Filter<Assignment>(x => x.Chargeable).IsEqualTo(true);
|
|
|
- // }
|
|
|
-
|
|
|
- public class InvoiceTax : CoreAggregate<Invoice, InvoiceLine, double>
|
|
|
- {
|
|
|
- public override Expression<Func<InvoiceLine, double>> Aggregate => x => x.Tax;
|
|
|
-
|
|
|
- public override AggregateCalculation Calculation => AggregateCalculation.Sum;
|
|
|
-
|
|
|
- public override Dictionary<Expression<Func<InvoiceLine, object>>, Expression<Func<Invoice, object>>> Links =>
|
|
|
- new Dictionary<Expression<Func<InvoiceLine, object>>, Expression<Func<Invoice, object>>>()
|
|
|
- {
|
|
|
- { InvoiceLine => InvoiceLine.InvoiceLink.ID, Invoice => Invoice.ID }
|
|
|
- };
|
|
|
- }
|
|
|
-
|
|
|
- public class InvoiceIncTax : CoreAggregate<Invoice, InvoiceLine, double>
|
|
|
- {
|
|
|
- public override Expression<Func<InvoiceLine, double>> Aggregate => x => x.IncTax;
|
|
|
-
|
|
|
- public override AggregateCalculation Calculation => AggregateCalculation.Sum;
|
|
|
-
|
|
|
- public override Dictionary<Expression<Func<InvoiceLine, object>>, Expression<Func<Invoice, object>>> Links =>
|
|
|
- new Dictionary<Expression<Func<InvoiceLine, object>>, Expression<Func<Invoice, object>>>()
|
|
|
- {
|
|
|
- { InvoiceLine => InvoiceLine.InvoiceLink.ID, Invoice => Invoice.ID }
|
|
|
- };
|
|
|
- }
|
|
|
-
|
|
|
- public class InvoiceAmountPaid : CoreAggregate<Invoice, InvoiceReceipt, double>
|
|
|
- {
|
|
|
- public override Expression<Func<InvoiceReceipt, double>> Aggregate => x => x.Amount;
|
|
|
-
|
|
|
- public override AggregateCalculation Calculation => AggregateCalculation.Sum;
|
|
|
-
|
|
|
- public override Dictionary<Expression<Func<InvoiceReceipt, object>>, Expression<Func<Invoice, object>>> Links =>
|
|
|
- new Dictionary<Expression<Func<InvoiceReceipt, object>>, Expression<Func<Invoice, object>>>()
|
|
|
- {
|
|
|
- { InvoiceReceipt => InvoiceReceipt.InvoiceLink.ID, Invoice => Invoice.ID }
|
|
|
- };
|
|
|
- }
|
|
|
-
|
|
|
- public class InvoiceBalance : IFormula<Invoice, double>
|
|
|
- {
|
|
|
- public Expression<Func<Invoice, double>> Value => x => x.IncTax;
|
|
|
- public Expression<Func<Invoice, double>>[] Modifiers => new Expression<Func<Invoice, double>>[] { x => x.AmountPaid };
|
|
|
- public FormulaOperator Operator => FormulaOperator.Subtract;
|
|
|
- public FormulaType Type => FormulaType.Virtual;
|
|
|
- }
|
|
|
-
|
|
|
public enum InvoiceType
|
|
|
{
|
|
|
Standard,
|
|
@@ -119,27 +57,50 @@ namespace Comal.Classes
|
|
|
[ComplexFormula(typeof(ExTaxFormula))]
|
|
|
public double ExTax { get; set; }
|
|
|
|
|
|
+ private class TaxFormula : ComplexFormulaGenerator<Invoice, double>
|
|
|
+ {
|
|
|
+ public override IComplexFormulaNode<Invoice, double> GetFormula() =>
|
|
|
+ Aggregate<InvoiceLine>(AggregateCalculation.Sum, x => x.Property(x => x.Tax))
|
|
|
+ .WithLink(x => x.InvoiceLink.ID, x => x.ID);
|
|
|
+ }
|
|
|
[EditorSequence(9)]
|
|
|
[CurrencyEditor(Editable = Editable.Hidden, Summary = Summary.Sum)]
|
|
|
- [Aggregate(typeof(InvoiceTax))]
|
|
|
+ [ComplexFormula(typeof(TaxFormula))]
|
|
|
public double Tax { get; set; }
|
|
|
|
|
|
+ private class IncTaxFormula : ComplexFormulaGenerator<Invoice, double>
|
|
|
+ {
|
|
|
+ public override IComplexFormulaNode<Invoice, double> GetFormula() =>
|
|
|
+ Aggregate<InvoiceLine>(AggregateCalculation.Sum, x => x.Property(x => x.IncTax))
|
|
|
+ .WithLink(x => x.InvoiceLink.ID, x => x.ID);
|
|
|
+ }
|
|
|
[EditorSequence(10)]
|
|
|
[CurrencyEditor(Visible = Visible.Default, Editable = Editable.Hidden, Summary = Summary.Sum)]
|
|
|
- [Aggregate(typeof(InvoiceIncTax))]
|
|
|
+ [ComplexFormula(typeof(IncTaxFormula))]
|
|
|
public double IncTax { get; set; }
|
|
|
|
|
|
+ private class AmountPaidFormula : ComplexFormulaGenerator<Invoice, double>
|
|
|
+ {
|
|
|
+ public override IComplexFormulaNode<Invoice, double> GetFormula() =>
|
|
|
+ Aggregate<InvoiceReceipt>(AggregateCalculation.Sum, x => x.Property(x => x.Amount))
|
|
|
+ .WithLink(x => x.InvoiceLink.ID, x => x.ID);
|
|
|
+ }
|
|
|
[EditorSequence(11)]
|
|
|
[CurrencyEditor(Editable = Editable.Hidden)]
|
|
|
- [Aggregate(typeof(InvoiceAmountPaid))]
|
|
|
+ [ComplexFormula(typeof(AmountPaidFormula))]
|
|
|
public double AmountPaid { get; set; }
|
|
|
|
|
|
+ private class BalanceFormula : ComplexFormulaGenerator<Invoice, double>
|
|
|
+ {
|
|
|
+ public override IComplexFormulaNode<Invoice, double> GetFormula() =>
|
|
|
+ Formula(FormulaOperator.Subtract, Property(x => x.IncTax), Property(x => x.AmountPaid));
|
|
|
+ }
|
|
|
/// <summary>
|
|
|
/// Balance = <see cref="IncTax"/> - <see cref="AmountPaid"/>.
|
|
|
/// </summary>
|
|
|
[EditorSequence(12)]
|
|
|
[CurrencyEditor(Editable = Editable.Hidden, Summary = Summary.Sum)]
|
|
|
- [Formula(typeof(InvoiceBalance))]
|
|
|
+ [ComplexFormula(typeof(BalanceFormula))]
|
|
|
public double Balance { get; set; }
|
|
|
|
|
|
[NullEditor]
|