FormLabelPrint.cs 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. using qdr.app.studiou.orders2printpack.Extensions;
  2. using qdr.app.studiou.orders2printpack.Labels;
  3. using qdr.app.studiou.orders2printpack.Properties;
  4. using System.Data;
  5. using System.IO.Abstractions;
  6. namespace qdr.app.studiou.orders2printpack
  7. {
  8. public partial class FormLabelPrint : Form
  9. {
  10. private string? _csvPath;
  11. private string? _xlsPath;
  12. private DataTable? _data;
  13. public FormLabelPrint()
  14. {
  15. InitializeComponent();
  16. }
  17. #region *** Form Handlers ***
  18. private void butOpenCsv_Click(object sender, EventArgs e)
  19. {
  20. BlockErrorHandled(() =>
  21. {
  22. if (dlgOpenCsv.ShowDialog(this) == DialogResult.OK)
  23. {
  24. _csvPath = dlgOpenCsv.FileName;
  25. tbCsvPath.Text = _csvPath;
  26. _data = CsvUtils.CsvToDataTable(new FileSystem(), _csvPath, AppSettings.Default.CSVDelimiter );
  27. RefreshParameters();
  28. }
  29. });
  30. }
  31. private void butOpenXls_Click(object sender, EventArgs e)
  32. {
  33. BlockErrorHandled(() =>
  34. {
  35. if (dlgSaveXls.ShowDialog(this) == DialogResult.OK)
  36. {
  37. _xlsPath = dlgSaveXls.FileName;
  38. tbXslxPath.Text = _csvPath;
  39. }
  40. });
  41. }
  42. private void butGenerate_Click(object sender, EventArgs e)
  43. {
  44. BlockErrorHandled(() =>
  45. {
  46. if (string.IsNullOrEmpty(_csvPath)) throw new Exception($"Vstupní CSV soubor musí být vybrán.");
  47. if (string.IsNullOrEmpty(_xlsPath)) throw new Exception($"Výstupní XSLX soubor musí být vybrán.");
  48. if (!File.Exists(_csvPath)) throw new Exception($"Vstupní CSV soubor '{_csvPath}' neexistuje, vyberte existující soubor.");
  49. if (_data == null) throw new Exception($"Vstupní CSV soubor '{_csvPath}' musí být otevřen.");
  50. _data = ProcessData(_data);
  51. var generator = new ExcelLabelGenerator(AppSettings.Default.LabelTemplate.Replace("{cr}","\n"));
  52. if (generator.GenerateLabels(_data, _xlsPath, int.Parse(AppSettings.Default.LabelPerRow), int.Parse(AppSettings.Default.LabelPerCol), double.Parse(AppSettings.Default.LabelWidth), double.Parse(AppSettings.Default.LabelHeight)))
  53. MessageBox.Show(this, $"Výstupní soubor '{_xlsPath}' byl vygenerován.", "Export", MessageBoxButtons.OK, MessageBoxIcon.Information);
  54. RefreshParameters();
  55. });
  56. }
  57. private DataTable ProcessData(DataTable data)
  58. {
  59. //LabelAggegationDataExpression
  60. var expressionParts = AppSettings.Default.LabelAggegationDataExpression.Split('=');
  61. var expressionColumnName = expressionParts[0];
  62. var expressionValue = expressionParts[1];
  63. data.Columns.Add(expressionColumnName, typeof(string));
  64. var result = data.Clone();
  65. result.Rows.Clear();
  66. foreach (DataRow row in data.Rows)
  67. {
  68. var rowNew = result.Select($"order_no = '{row["order_no"]}' AND prod_cat = '{row["prod_cat"]}'");
  69. if (rowNew.Length == 0)
  70. {
  71. var newRow = result.NewRow();
  72. newRow.ItemArray = row.ItemArray.ToArray();
  73. newRow[expressionColumnName] = expressionValue.Replace("{prod_var_type}", row["prod_var_type"].ToString())
  74. .Replace("{qty}",row["qty"].ToString()).Replace("{cr}","\n");
  75. result.Rows.Add(newRow);
  76. }
  77. else
  78. {
  79. rowNew[0][expressionColumnName] = rowNew[0][expressionColumnName] + expressionValue.Replace("{prod_var_type}", row["prod_var_type"].ToString())
  80. .Replace("{qty}", row["qty"].ToString()).Replace("{cr}", "\n");
  81. }
  82. }
  83. return result;
  84. }
  85. private void butConfig_Click(object sender, EventArgs e)
  86. {
  87. var dlg = new dlgLabelSettings();
  88. if (dlg.ShowDialog(this) == DialogResult.OK)
  89. {
  90. // Save settings
  91. RefreshParameters();
  92. }
  93. }
  94. private void butClose_Click(object sender, EventArgs e)
  95. {
  96. Close();
  97. }
  98. #endregion
  99. #region *** Private Methods ***
  100. private void RefreshParameters()
  101. {
  102. lParCount.Text = $"Štítků/záznamů: {_data?.Rows.Count}";
  103. lParCol.Text = $"Štítků ve sloupci: {AppSettings.Default.LabelPerCol}";
  104. lParRow.Text = $"Štítků řádků na stránku: {AppSettings.Default.LabelPerRow}";
  105. }
  106. private void BlockErrorHandled(Action block)
  107. {
  108. try
  109. {
  110. block();
  111. }
  112. catch (Exception ex)
  113. {
  114. // Log("Error: " + ex.Message);
  115. MessageBox.Show(this, ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
  116. }
  117. }
  118. #endregion
  119. #region *** Nested classes ***
  120. #endregion
  121. }
  122. }