ProductPriceComponent.cs 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. using System;
  2. using System.Linq.Expressions;
  3. using InABox.Core;
  4. namespace Comal.Classes
  5. {
  6. public class ProductPriceComponentNettCostFormula : IFormula<ProductPriceComponent, double>
  7. {
  8. public Expression<Func<ProductPriceComponent, double>> Value => x => x.Quantity;
  9. public Expression<Func<ProductPriceComponent, double>>[] Modifiers =>
  10. new Expression<Func<ProductPriceComponent, double>>[] { x => x.Component.NettCost };
  11. public FormulaOperator Operator => FormulaOperator.Multiply;
  12. public FormulaType Type => FormulaType.Virtual;
  13. }
  14. [UserTracking(typeof(Product))]
  15. public class ProductPriceComponent : Entity, IPersistent, IRemotable, ILicense<ProductManagementLicense>
  16. {
  17. [EditorSequence(1)]
  18. public ProductLink Product { get; set; }
  19. [EditorSequence(2)]
  20. public ProductLink Component { get; set; }
  21. [DoubleEditor(4)]
  22. [EditorSequence(3)]
  23. public double Quantity { get; set; }
  24. [DoubleEditor(Editable = Editable.Disabled, Summary = Summary.Sum)]
  25. [Formula(typeof(ProductPriceComponentNettCostFormula))]
  26. [EditorSequence(4)]
  27. public double NettCost { get; set; }
  28. protected override void Init()
  29. {
  30. base.Init();
  31. Product = new ProductLink(() => this);
  32. Component = new ProductLink(() => this);
  33. }
  34. protected override void DoPropertyChanged(string name, object before, object after)
  35. {
  36. base.DoPropertyChanged(name, before, after);
  37. if (name.Equals("Quantity")) NettCost = (double)after * Component.NettCost;
  38. }
  39. }
  40. }