StickerGrid.cs 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. using Comal.Classes;
  2. using FastReport;
  3. using InABox.Clients;
  4. using InABox.Core;
  5. using InABox.DynamicGrid;
  6. using InABox.Reports;
  7. using InABox.Wpf.Reports;
  8. using InABox.WPF;
  9. using PRSDesktop.Forms;
  10. using System;
  11. using System.Collections.Generic;
  12. using System.Linq;
  13. using System.Text;
  14. using System.Threading.Tasks;
  15. using System.Windows.Controls;
  16. using System.Windows.Media.Imaging;
  17. namespace PRSDesktop.Grids
  18. {
  19. public class StickerGrid : DynamicDataGrid<WebSticker>
  20. {
  21. protected override void DoReconfigure(DynamicGridOptions options)
  22. {
  23. base.DoReconfigure(options);
  24. options.AddRows = true;
  25. options.EditRows = true;
  26. options.DeleteRows = true;
  27. options.ShowHelp = true;
  28. options.MultiSelect = true;
  29. }
  30. protected override void Init()
  31. {
  32. base.Init();
  33. ActionColumns.Add(new DynamicImageColumn(PrintImage, PrintClick) { Position = DynamicActionColumnPosition.End });
  34. AddButton("Generate Stickers", null, GenerateSticker_Click);
  35. }
  36. private BitmapImage? PrintImage(CoreRow? arg)
  37. {
  38. if (arg == null)
  39. return null;
  40. return PRSDesktop.Resources.printer.AsBitmapImage();
  41. }
  42. private bool PrintClick(CoreRow? row)
  43. {
  44. if (row == null)
  45. return false;
  46. var dataModel = new AutoDataModel<WebSticker>(new Filter<WebSticker>(x => x.ID).IsEqualTo((Guid)row["ID"]));
  47. ReportUtils.PrintMenu<WebSticker>(null, "Sticker Grid", dataModel, Security.IsAllowed<CanDesignReports>(), true);
  48. return false;
  49. }
  50. public override DynamicGridColumns GenerateColumns()
  51. {
  52. var columns = base.GenerateColumns();
  53. columns.Add<WebSticker>(x => x.Equipment.Code, 0, "Equipment", "", Alignment.MiddleCenter);
  54. return columns;
  55. }
  56. private bool GenerateSticker_Click(Button sender, CoreRow[] selectedRows)
  57. {
  58. var window = new GenerateStickers();
  59. if(window.ShowDialog() == true)
  60. {
  61. var stickers = new Client<WebSticker>().Query(
  62. null,
  63. Columns.None<WebSticker>().Add(x => x.Code)).Rows
  64. .Select(x => (string)x["Code"]).ToHashSet();
  65. var newStickers = new List<WebSticker>();
  66. var prefix = window.CodePrefix.Text;
  67. var codeNumber = 0;
  68. for(int i = 0; i < window.NumberOfStickers.Value; i++)
  69. {
  70. var sticker = new WebSticker();
  71. string code;
  72. do
  73. {
  74. code = string.Format("{0}{1:D3}", prefix, codeNumber);
  75. codeNumber++;
  76. } while (stickers.Contains(code));
  77. sticker.Code = code;
  78. newStickers.Add(sticker);
  79. }
  80. new Client<WebSticker>().Save(newStickers, "Generated by user");
  81. return true;
  82. }
  83. return false;
  84. }
  85. }
  86. }