StickerGrid.cs 2.9 KB

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