StickerGrid.cs 2.9 KB

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