BillLineStore.cs 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. using System.Linq;
  2. using Comal.Classes;
  3. using InABox.Core;
  4. using System;
  5. namespace Comal.Stores
  6. {
  7. internal class BillLineStore : BaseStore<BillLine>
  8. {
  9. protected override void AfterSave(BillLine entity)
  10. {
  11. base.BeforeSave(entity);
  12. if (entity.OrderItem.HasOriginalValue(x => x.ID))
  13. {
  14. Filter<PurchaseOrderItem> filter = (entity.OrderItem.ID != Guid.Empty)
  15. ? new Filter<PurchaseOrderItem>(x => x.ID).IsEqualTo(entity.OrderItem.ID)
  16. : new Filter<PurchaseOrderItem>(x => x.ID).IsEqualTo(entity.OrderItem.GetOriginalValue(x => x.ID));
  17. var items = Provider.Query(
  18. filter,
  19. Columns.Required<PurchaseOrderItem>().Add(x => x.ID).Add(x=>x.BillLine.ID)
  20. ).Rows.Select(x=>x.ToObject<PurchaseOrderItem>()).ToArray();
  21. foreach (var item in items)
  22. item.BillLine.ID = entity.OrderItem.ID != Guid.Empty ? entity.ID : Guid.Empty;
  23. Provider.Save(items);
  24. }
  25. // Actually, we don't want to do this, because we will lose the ability to do a delta between
  26. // Order values and Bill values (to identify price creep)
  27. // A more useful idea would be to update linked product/stock costings when receiving a bill,
  28. // although we need to be careful about how we manage side effects for average costs etc..
  29. // var pitems = Provider.Query(
  30. // new Filter<PurchaseOrderItem>(x => x.ID).IsEqualTo(entity.OrderItem.ID),
  31. // new Columns<PurchaseOrderItem>(
  32. // x => x.ID,
  33. // x => x.ExTax,
  34. // x => x.TaxCode.ID,
  35. // x => x.TaxRate,
  36. // x => x.IncTax,
  37. // x => x.Balance,
  38. // x => x.ReceivedDate
  39. // )
  40. // ).Rows.Select(x => x.ToObject<PurchaseOrderItem>()).ToArray();
  41. // foreach (var pitem in pitems)
  42. // {
  43. // pitem.ExTax = entity.ExTax;
  44. // pitem.TaxCode.ID = entity.TaxCode.ID;
  45. // pitem.TaxRate = entity.TaxRate;
  46. // pitem.IncTax = entity.IncTax;
  47. // pitem.Balance = pitem.ReceivedDate.IsEmpty() ? pitem.IncTax : 0.00F;
  48. // }
  49. //
  50. // FindSubStore<PurchaseOrderItem>().Save(pitems.Where(x => x.IsChanged()), "Updated by Bill Modification");
  51. }
  52. }
  53. }