Receipt.cs 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq.Expressions;
  4. using InABox.Core;
  5. namespace Comal.Classes
  6. {
  7. public class ReceiptTotal : CoreAggregate<Receipt, InvoiceReceipt, double>
  8. {
  9. public override Expression<Func<InvoiceReceipt, double>> Aggregate => x => x.Amount;
  10. public override AggregateCalculation Calculation => AggregateCalculation.Sum;
  11. public override Dictionary<Expression<Func<InvoiceReceipt, object>>, Expression<Func<Receipt, object>>> Links =>
  12. new Dictionary<Expression<Func<InvoiceReceipt, object>>, Expression<Func<Receipt, object>>>()
  13. {
  14. { InvoiceReceipt => InvoiceReceipt.ReceiptLink.ID, Receipt => Receipt.ID }
  15. };
  16. }
  17. [UserTracking(typeof(Invoice))]
  18. public class Receipt : Entity, IPersistent, IRemotable, ILicense<AccountsReceivableLicense>,
  19. IPostable
  20. {
  21. [DateEditor(TodayVisible = true)]
  22. [EditorSequence(0)]
  23. public DateTime Date { get; set; } = DateTime.Today;
  24. [EditorSequence(1)]
  25. public CustomerLink CustomerLink { get; set; }
  26. [EditorSequence(2)]
  27. public ReceiptTypeLink ReceiptTypeLink { get; set; }
  28. [MemoEditor(Visible = Visible.Default)]
  29. [EditorSequence(3)]
  30. public string Notes { get; set; }
  31. [TimestampEditor(Visible = Visible.Default)]
  32. [EditorSequence(4)]
  33. public DateTime Reconciled { get; set; }
  34. [CurrencyEditor(Visible = Visible.Default, Editable = Editable.Hidden, Summary = Summary.Sum)]
  35. [Aggregate(typeof(ReceiptTotal))]
  36. public double Total { get; set; }
  37. [NullEditor]
  38. public DateTime Posted { get; set; }
  39. [NullEditor]
  40. public PostedStatus PostedStatus { get; set; }
  41. [NullEditor]
  42. public string PostedNote { get; set; }
  43. [NullEditor]
  44. public string PostedReference { get; set; }
  45. public override string ToString()
  46. {
  47. return string.Format("{0:dd MMM yy}: {1} (${2:F2})", Date, ReceiptTypeLink.Description, Total);
  48. }
  49. }
  50. }