StickerGrid.cs 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  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(FluentList<DynamicGridOption> options)
  22. {
  23. base.DoReconfigure(options);
  24. options.AddRange(DynamicGridOption.AddRows, DynamicGridOption.EditRows, DynamicGridOption.DeleteRows, DynamicGridOption.ShowHelp, DynamicGridOption.MultiSelect);
  25. }
  26. protected override void Init()
  27. {
  28. base.Init();
  29. ActionColumns.Add(new DynamicImageColumn(PrintImage, PrintClick) { Position = DynamicActionColumnPosition.End });
  30. AddButton("Generate Stickers", null, GenerateSticker_Click);
  31. }
  32. private BitmapImage? PrintImage(CoreRow? arg)
  33. {
  34. if (arg == null)
  35. return null;
  36. return PRSDesktop.Resources.printer.AsBitmapImage();
  37. }
  38. private bool PrintClick(CoreRow? row)
  39. {
  40. if (row == null)
  41. return false;
  42. var dataModel = new AutoDataModel<WebSticker>(new Filter<WebSticker>(x => x.ID).IsEqualTo((Guid)row["ID"]));
  43. ReportUtils.PrintMenu<WebSticker>(null, "Sticker Grid", dataModel, Security.IsAllowed<CanDesignReports>(), true);
  44. return false;
  45. }
  46. public override DynamicGridColumns GenerateColumns()
  47. {
  48. var columns = base.GenerateColumns();
  49. columns.Add<WebSticker, string>(x => x.Equipment.Code, 0, "Equipment", "", Alignment.MiddleCenter);
  50. return columns;
  51. }
  52. private bool GenerateSticker_Click(Button sender, CoreRow[] selectedRows)
  53. {
  54. var window = new GenerateStickers();
  55. if(window.ShowDialog() == true)
  56. {
  57. var stickers = new Client<WebSticker>().Query(null, new Columns<WebSticker>(x => x.Code)).Rows
  58. .Select(x => (string)x["Code"]).ToHashSet();
  59. var newStickers = new List<WebSticker>();
  60. var prefix = window.CodePrefix.Text;
  61. var codeNumber = 0;
  62. for(int i = 0; i < window.NumberOfStickers.Value; i++)
  63. {
  64. var sticker = new WebSticker();
  65. string code;
  66. do
  67. {
  68. code = string.Format("{0}{1:D3}", prefix, codeNumber);
  69. codeNumber++;
  70. } while (stickers.Contains(code));
  71. sticker.Code = code;
  72. newStickers.Add(sticker);
  73. }
  74. new Client<WebSticker>().Save(newStickers, "Generated by user");
  75. return true;
  76. }
  77. return false;
  78. }
  79. }
  80. }