StickerGrid.cs 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  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. protected override void GenerateColumns(DynamicGridColumns columns)
  47. {
  48. base.GenerateColumns(columns);
  49. columns.Add<WebSticker, string>(x => x.Equipment.Code, 0, "Equipment", "", Alignment.MiddleCenter);
  50. }
  51. private bool GenerateSticker_Click(Button sender, CoreRow[] selectedRows)
  52. {
  53. var window = new GenerateStickers();
  54. if(window.ShowDialog() == true)
  55. {
  56. var stickers = new Client<WebSticker>().Query(null, new Columns<WebSticker>(x => x.Code)).Rows
  57. .Select(x => (string)x["Code"]).ToHashSet();
  58. var newStickers = new List<WebSticker>();
  59. var prefix = window.CodePrefix.Text;
  60. var codeNumber = 0;
  61. for(int i = 0; i < window.NumberOfStickers.Value; i++)
  62. {
  63. var sticker = new WebSticker();
  64. string code;
  65. do
  66. {
  67. code = string.Format("{0}{1:D3}", prefix, codeNumber);
  68. codeNumber++;
  69. } while (stickers.Contains(code));
  70. sticker.Code = code;
  71. newStickers.Add(sticker);
  72. }
  73. new Client<WebSticker>().Save(newStickers, "Generated by user");
  74. return true;
  75. }
  76. return false;
  77. }
  78. }
  79. }