SupplierBillLineGrid.cs 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Windows.Controls;
  5. using System.Windows.Media.Imaging;
  6. using Comal.Classes;
  7. using InABox.Clients;
  8. using InABox.Core;
  9. using InABox.DynamicGrid;
  10. using InABox.Wpf;
  11. using InABox.WPF;
  12. namespace PRSDesktop
  13. {
  14. public class SupplierBillLineGrid : DynamicOneToManyGrid<Bill, BillLine>
  15. {
  16. private static readonly BitmapImage pencil = InABox.Wpf.Resources.pencil.AsBitmapImage();
  17. public SupplierBillLineGrid()
  18. {
  19. Options
  20. .BeginUpdate()
  21. .Clear()
  22. .Add(DynamicGridOption.AddRows)
  23. .Add(DynamicGridOption.DeleteRows)
  24. .Add(DynamicGridOption.SelectColumns)
  25. .Add(DynamicGridOption.DirectEdit)
  26. .EndUpdate();
  27. AddButton("Import", PRSDesktop.Resources.purchase.AsBitmapImage(), ImportPOLines);
  28. HiddenColumns.Add(x => x.TaxCode.ID);
  29. HiddenColumns.Add(x => x.TaxCode.Code);
  30. HiddenColumns.Add(x => x.TaxCode.Description);
  31. HiddenColumns.Add(x => x.TaxCode.Rate);
  32. HiddenColumns.Add(x => x.TaxRate);
  33. HiddenColumns.Add(x => x.ExTax);
  34. HiddenColumns.Add(x => x.Tax);
  35. HiddenColumns.Add(x => x.IncTax);
  36. HiddenColumns.Add(x => x.Description);
  37. ActionColumns.Add(new DynamicImageColumn(pencil, BillLineEdit_Click));
  38. }
  39. public override void Load(object item, Func<Type, CoreTable>? PageDataHandler)
  40. {
  41. Refresh(true, false);
  42. base.Load(item, type =>
  43. {
  44. var data = PageDataHandler?.Invoke(type);
  45. if(data is null && type == typeof(BillLine))
  46. {
  47. data = new Client<BillLine>().Query(
  48. new Filter<BillLine>(x => x.BillLink.ID).IsEqualTo(Item.ID),
  49. DynamicGridUtils.LoadEditorColumns(DataColumns()),
  50. LookupFactory.DefineSort<BillLine>());
  51. }
  52. return data;
  53. });
  54. }
  55. private bool BillLineEdit_Click(CoreRow? row)
  56. {
  57. if(row is null)
  58. {
  59. return false;
  60. }
  61. var item = LoadItem(row);
  62. if (EditItems(new BillLine[] { item }))
  63. {
  64. SaveItem(item);
  65. return true;
  66. }
  67. return false;
  68. }
  69. public override void ConfigureColumns(DynamicGridColumns columns)
  70. {
  71. base.ConfigureColumns(columns);
  72. var orderItemColumn = columns.Find(x => x.ColumnName == $"{nameof(BillLine.OrderItem)}.{nameof(BillLine.OrderItem.ID)}");
  73. if (orderItemColumn != null)
  74. {
  75. orderItemColumn.Editor.Editable = Editable.DisabledOnDirectEdit;
  76. }
  77. }
  78. private bool ImportPOLines(Button arg1, CoreRow[] arg2)
  79. {
  80. MultiSelectDialog<PurchaseOrderItem> dlg = new MultiSelectDialog<PurchaseOrderItem>(
  81. new Filter<PurchaseOrderItem>(x => x.PurchaseOrderLink.SupplierLink.ID).IsEqualTo(Item.SupplierLink.ID)
  82. .And(x => x.PurchaseOrderLink.ClosedDate).IsEqualTo(DateTime.MinValue),
  83. new Columns<PurchaseOrderItem>
  84. (
  85. x => x.ID,
  86. x => x.Description,
  87. x => x.Product.Code,
  88. x => x.ReceivedDate,
  89. x => x.Consignment.Number,
  90. x => x.PurchaseOrderLink.PONumber
  91. ));
  92. if (dlg.ShowDialog() == true)
  93. {
  94. var items = new Client<PurchaseOrderItem>().Query(
  95. new Filter<PurchaseOrderItem>(x => x.ID).InList(dlg.IDs()),
  96. new Columns<PurchaseOrderItem>(x => x.ID)
  97. .Add(x => x.Description)
  98. .Add(x => x.TaxCode.ID)
  99. .Add(x => x.TaxCode.Code)
  100. .Add(x => x.TaxCode.Description)
  101. .Add(x => x.TaxCode.Rate)
  102. .Add(x => x.TaxRate)
  103. .Add(x => x.ExTax)
  104. .Add(x => x.Tax)
  105. .Add(x => x.IncTax)
  106. .Add(x => x.Created)
  107. .Add(x => x.PurchaseOrderLink.ID)
  108. .Add(x => x.PurchaseOrderLink.PONumber)
  109. .Add(x => x.Product.ID)
  110. .Add(x => x.Product.Code)
  111. .Add(x => x.Product.Name)
  112. );
  113. foreach (var row in items.Rows)
  114. {
  115. var line = CreateItem();
  116. line.OrderItem.ID = row.Get<PurchaseOrderItem, Guid>(x => x.ID);
  117. line.OrderItem.PurchaseOrderLink.ID = row.Get<PurchaseOrderItem, Guid>(x => x.PurchaseOrderLink.ID);
  118. line.OrderItem.PurchaseOrderLink.PONumber = row.Get<PurchaseOrderItem, String>(x => x.PurchaseOrderLink.PONumber);
  119. var description = new List<string>();
  120. if (row.Get<PurchaseOrderItem, Guid>(x => x.Product.ID) != Guid.Empty)
  121. description.Add(string.Format("{0} : {1}", row.Get<PurchaseOrderItem, string>(x => x.Product.Code),
  122. row.Get<PurchaseOrderItem, string>(x => x.Product.Name)));
  123. var Description = row.Get<PurchaseOrderItem, string>(x => x.Description);
  124. if (!string.IsNullOrEmpty(Description))
  125. description.Add(Description);
  126. line.Description = string.Join("\n", description);
  127. line.ExTax = row.Get<PurchaseOrderItem, double>(x => x.ExTax);
  128. line.TaxCode.ID = row.Get<PurchaseOrderItem, Guid>(x => x.TaxCode.ID);
  129. line.TaxCode.Code = row.Get<PurchaseOrderItem, string>(x => x.TaxCode.Code);
  130. line.TaxCode.Description = row.Get<PurchaseOrderItem, string>(x => x.TaxCode.Description);
  131. line.TaxCode.Rate = row.Get<PurchaseOrderItem, double>(x => x.TaxCode.Rate);
  132. //line.TaxRate = row.Get<PurchaseOrderItem, double>(x => x.TaxRate);
  133. //line.Tax = row.Get<PurchaseOrderItem, double>(x => x.Tax);
  134. //line.IncTax = row.Get<PurchaseOrderItem, double>(x => x.IncTax);
  135. line.OrderItem.Product.ID = row.Get<PurchaseOrderItem, Guid>(x => x.Product.ID);
  136. line.OrderItem.Product.Code = row.Get<PurchaseOrderItem, string>(x => x.Product.Code);
  137. line.OrderItem.Product.Name = row.Get<PurchaseOrderItem, string>(x => x.Product.Name);
  138. Items.Add(line);
  139. }
  140. return true;
  141. }
  142. return false;
  143. }
  144. }
  145. }