SupplierDiscountStore.cs 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. using Comal.Classes;
  2. using InABox.Core;
  3. namespace Comal.Stores;
  4. public class SupplierDiscountStore : BaseStore<SupplierDiscount>
  5. {
  6. protected override void BeforeSave(SupplierDiscount entity)
  7. {
  8. base.BeforeSave(entity);
  9. // Don't do anything for new entities
  10. if (entity.ID == Guid.Empty)
  11. return;
  12. // if the job has changed, zero out all discounts for the old job.id
  13. if (entity.Job.HasOriginalValue(x => x.ID))
  14. UpdateSupplierProducts(entity.Group.ID, entity.Job.GetOriginalValue(x => x.ID), entity.Group.Type, 0F);
  15. }
  16. protected override void AfterSave(SupplierDiscount entity)
  17. {
  18. base.AfterSave(entity);
  19. if (entity.Job.HasOriginalValue(x => x.ID) || entity.HasOriginalValue(x => x.Value))
  20. UpdateSupplierProducts(entity.Group.ID, entity.Job.ID, entity.Group.Type, entity.Value);
  21. }
  22. protected override void BeforeDelete(SupplierDiscount entity)
  23. {
  24. base.BeforeDelete(entity);
  25. var discounts = Provider.Query(
  26. new Filter<SupplierDiscount>(x=>x.ID).IsEqualTo(entity.ID),
  27. Columns.None<SupplierDiscount>()
  28. .Add(x=>x.Group.ID)
  29. .Add(x=>x.Job.ID)
  30. .Add(x=>x.Group.Type)
  31. ).ToArray<SupplierDiscount>();
  32. foreach (var discount in discounts)
  33. UpdateSupplierProducts(discount.Group.ID,discount.Job.ID, discount.Group.Type, 0F);
  34. }
  35. private void UpdateSupplierProducts(Guid groupid, Guid jobid, SupplierDiscountGroupType type, double value)
  36. {
  37. var products = Provider.Query(
  38. new Filter<SupplierProduct>(x => x.DiscountGroup.ID).IsEqualTo(groupid)
  39. .And(x=>x.Job.ID).IsEqualTo(jobid),
  40. Columns.Required<SupplierProduct>()
  41. .Add(x=>x.TradePrice)
  42. .Add(x=>x.Discount)
  43. .Add(x=>x.CostPrice)
  44. ).ToArray<SupplierProduct>();
  45. foreach (var product in products)
  46. {
  47. if (type == SupplierDiscountGroupType.Discount)
  48. product.Discount = value;
  49. else
  50. {
  51. product.TradePrice = value;
  52. product.Discount = 0.0;
  53. }
  54. }
  55. Provider.Save(products);
  56. }
  57. }