InvoiceStockMovementGrid.cs 3.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Linq.Expressions;
  5. using System.Threading;
  6. using System.Windows;
  7. using System.Windows.Controls;
  8. using System.Windows.Media.Imaging;
  9. using Comal.Classes;
  10. using EnumsNET;
  11. using InABox.Clients;
  12. using InABox.Configuration;
  13. using InABox.Core;
  14. using InABox.DynamicGrid;
  15. using InABox.Wpf;
  16. using InABox.WPF;
  17. namespace PRSDesktop;
  18. public class InvoiceStockMovementGrid : InvoiceableGrid<StockMovement>, ISpecificGrid
  19. {
  20. private InvoicePanelSettings _invoiceSettings;
  21. public InvoicePanelSettings InvoiceSettings
  22. {
  23. get => _invoiceSettings;
  24. set
  25. {
  26. _invoiceSettings = value;
  27. Refresh(false, true);
  28. }
  29. }
  30. protected override Expression<Func<StockMovement, JobLink>> JobColumn => x => x.Job;
  31. public InvoiceStockMovementGrid()
  32. {
  33. _invoiceSettings = new GlobalConfiguration<InvoicePanelSettings>().Load();
  34. ColumnsTag = "InvoiceParts";
  35. HiddenColumns.Add(x => x.Transaction);
  36. }
  37. public override DynamicGridColumns GenerateColumns()
  38. {
  39. return StockMovementGrid.StandardColumns();
  40. }
  41. protected override void DoReconfigure(DynamicGridOptions options)
  42. {
  43. base.DoReconfigure(options);
  44. options.Clear();
  45. options.EditRows = true;
  46. options.RecordCount = true;
  47. options.SelectColumns = true;
  48. options.MultiSelect = true;
  49. options.FilterRows = true;
  50. options.PageSize = 1000;
  51. }
  52. protected override void Reload(
  53. Filters<StockMovement> criteria, Columns<StockMovement> columns, ref SortOrder<StockMovement>? sort,
  54. CancellationToken token, Action<CoreTable?, Exception?> action)
  55. {
  56. if (Invoice is not null && Invoice.ID != Guid.Empty)
  57. {
  58. var job = Invoice.JobLink.ID;
  59. switch (InvoiceSettings.InvoicingStrategy)
  60. {
  61. case InvoicingStrategy.InvoiceOnIssue:
  62. criteria.Add(Filter<StockMovement>.Where(x => x.Type).IsEqualTo(StockMovementType.Issue));
  63. break;
  64. case InvoicingStrategy.InvoiceOnPurchase:
  65. var filterReceives = Filter<StockMovement>.Where(x => x.Type).IsEqualTo(StockMovementType.Receive);
  66. var filterTransferOuts = Filter<StockMovement>
  67. .Where(x => x.Type).IsEqualTo(StockMovementType.TransferOut)
  68. .And(x => x.TransferID).InQuery(
  69. Filter<StockMovement>.Where(x => x.Job.ID).IsNotEqualTo(job)
  70. .And(x => x.Type).IsEqualTo(StockMovementType.TransferIn),
  71. x => x.TransferID);
  72. var filterTransferIns = Filter<StockMovement>
  73. .Where(x => x.Type).IsEqualTo(StockMovementType.TransferIn)
  74. .And(x => x.TransferID).InQuery(
  75. Filter<StockMovement>.Where(x => x.Job.ID).IsNotEqualTo(job)
  76. .And(x => x.Type).IsEqualTo(StockMovementType.TransferOut),
  77. x => x.TransferID);
  78. criteria.Add(filterReceives.Or(filterTransferOuts).Or(filterTransferIns));
  79. break;
  80. }
  81. }
  82. base.Reload(criteria, columns, ref sort, token, action);
  83. }
  84. }