Нема описа

ExportForm.cs 11KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using System.Windows.Forms;
  10. using System.Data.SQLite;
  11. using System.IO;
  12. using System.Globalization;
  13. namespace BulkPrinting
  14. {
  15. public partial class ExportForm : Form
  16. {
  17. public enum ExportMode {
  18. Export,
  19. Reexport
  20. }
  21. private ExportMode SelectedMode;
  22. private class BatchItem {
  23. public int Id;
  24. public string Description;
  25. public int Quantity;
  26. public decimal FaceValue;
  27. public override string ToString()
  28. {
  29. return "[" + Id.ToString() + "] " + this.Description + " (" + Quantity.ToString() + " Vouchers)";
  30. }
  31. }
  32. public ExportForm(ExportMode Mode)
  33. {
  34. SelectedMode = Mode;
  35. InitializeComponent();
  36. }
  37. private void btnCancel_Click(object sender, EventArgs e)
  38. {
  39. this.Close();
  40. }
  41. private void PopulateBatchList() {
  42. string Sql = "SELECT b.Id,b.FaceValue,b.ProductDescription,b.DeliveredQuantity,COUNT(l.Id) AS Exported,COUNT(l2.Id) AS Printed FROM Batch b LEFT JOIN Voucher v on v.BatchId = b.Id LEFT JOIN Logs l on v.Id = l.VoucherId AND l.EventType=@exportevent LEFT JOIN Logs l2 on v.Id = l2.VoucherId AND l2.EventType=@printevent WHERE ReadyForDownload=1 AND b.OrderDate BETWEEN @startdate AND @enddate";
  43. if (cmbNetwork.SelectedItem.ToString() != "All") {
  44. Sql += " AND b.NetworkName=@networkname";
  45. }
  46. Sql += " GROUP BY b.Id,b.FaceValue,b.ProductDescription,b.DeliveredQuantity";
  47. using (var Command = Globals.DB.CreateCommand(Sql))
  48. {
  49. if (cmbNetwork.SelectedItem.ToString() != "All")
  50. {
  51. Command.Parameters.AddWithValue("@networkname", cmbNetwork.SelectedItem.ToString());
  52. }
  53. CultureInfo IVC = CultureInfo.InvariantCulture;
  54. Command.Parameters.AddWithValue("@startdate", dtpStartDate.Value.Date.ToString("yyyy-MM-dd 00:00:00", IVC));
  55. Command.Parameters.AddWithValue("@enddate", dtpEndDate.Value.Date.ToString("yyyy-MM-dd 23:59:59", IVC));
  56. Command.Parameters.AddWithValue("@printevent", VendorEvent.VendorEventType.PrintVoucher);
  57. Command.Parameters.AddWithValue("@exportevent", VendorEvent.VendorEventType.ExportVoucher);
  58. lstBatchList.Items.Clear();
  59. using (SQLiteDataReader read = Command.ExecuteReader())
  60. {
  61. while (read.Read())
  62. {
  63. if (read["Printed"].ToString() == "0")
  64. {
  65. if ((SelectedMode == ExportMode.Export && read["Exported"].ToString() != "0") ||
  66. (SelectedMode == ExportMode.Reexport && read["Exported"].ToString() == "0"))
  67. {
  68. continue;
  69. }
  70. BatchItem NewBatchItem = new BatchItem();
  71. NewBatchItem.Id = int.Parse(read["Id"].ToString());
  72. NewBatchItem.Description = read["ProductDescription"].ToString();
  73. NewBatchItem.Quantity = int.Parse(read["DeliveredQuantity"].ToString());
  74. NewBatchItem.FaceValue = int.Parse(read["FaceValue"].ToString());
  75. lstBatchList.Items.Add(NewBatchItem);
  76. }
  77. }
  78. }
  79. }
  80. }
  81. private void ExportForm_Load(object sender, EventArgs e)
  82. {
  83. if (SelectedMode == ExportMode.Export)
  84. {
  85. this.Text = "Export Vouchers";
  86. lblBatchType.Text = "New Batches";
  87. }
  88. else if (SelectedMode == ExportMode.Reexport)
  89. {
  90. this.Text = "Re-export Vouchers";
  91. lblBatchType.Text = "Previously Exported Batches";
  92. }
  93. string Sql = "SELECT DISTINCT NetworkName FROM Batch";
  94. using (var Command = Globals.DB.CreateCommand(Sql))
  95. {
  96. cmbNetwork.Items.Clear();
  97. cmbNetwork.Items.Add("All");
  98. using (SQLiteDataReader read = Command.ExecuteReader())
  99. {
  100. while (read.Read())
  101. {
  102. cmbNetwork.Items.Add(read["NetworkName"]);
  103. }
  104. }
  105. }
  106. cmbNetwork.SelectedItem="All";
  107. dtpStartDate.Value = DateTime.Now.AddMonths(-3);
  108. dtpEndDate.Value = DateTime.Now;
  109. PopulateBatchList();
  110. }
  111. private void btnAddBatch_Click(object sender, EventArgs e)
  112. {
  113. if (this.lstBatchList.SelectedIndex == -1)
  114. {
  115. return;
  116. }
  117. lstSelectedBatches.Items.Add(lstBatchList.SelectedItem);
  118. lstBatchList.Items.Remove(lstBatchList.SelectedItem);
  119. }
  120. private void btnRemoveBatch_Click(object sender, EventArgs e)
  121. {
  122. if (this.lstSelectedBatches.SelectedIndex == -1)
  123. {
  124. return;
  125. }
  126. lstBatchList.Items.Add(lstSelectedBatches.SelectedItem);
  127. lstSelectedBatches.Items.Remove(lstSelectedBatches.SelectedItem);
  128. }
  129. private void btnExport_Click(object sender, EventArgs e)
  130. {
  131. if (lstSelectedBatches.Items.Count == 0)
  132. {
  133. MessageBox.Show("Please select at least one batch from the left list to add to the export list on the right.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
  134. return;
  135. }
  136. using (var PathDialog = new FolderBrowserDialog())
  137. {
  138. DialogResult Result = PathDialog.ShowDialog();
  139. if (Result == DialogResult.OK && !string.IsNullOrWhiteSpace(PathDialog.SelectedPath))
  140. {
  141. //using (var logger = new Utility.BulkLogger())
  142. //{
  143. List<EventLog> LogEvents = new List<EventLog>();
  144. string Sql = "SELECT v.Id,v.ExpiryDate,v.Serial,v.EncryptedPIN,b.FaceValue,v.BatchId,v.SequenceNumber,b.ProductDescription,COUNT(l.Id) AS Exports FROM Voucher v LEFT JOIN Logs l ON v.Id = l.VoucherId AND l.EventType=@eventtype LEFT JOIN Batch b ON v.BatchId=b.Id WHERE BatchId=@batchid GROUP BY v.Id,v.ExpiryDate,v.Serial,v.EncryptedPIN,b.FaceValue,v.BatchId,v.SequenceNumber,b.ProductDescription";
  145. using (var Command = Globals.DB.CreateCommand(Sql))
  146. {
  147. foreach (BatchItem ExportBatch in lstSelectedBatches.Items)
  148. {
  149. /* -Id
  150. -Expiry
  151. -Serial
  152. -PIN
  153. -Face Value
  154. -BatchID
  155. -SQN
  156. -Description
  157. */
  158. if (Command.Parameters.Count == 0)
  159. {
  160. Command.Parameters.AddWithValue("@batchid", ExportBatch.Id);
  161. Command.Parameters.AddWithValue("@eventtype", VendorEvent.VendorEventType.ExportVoucher);
  162. }
  163. else
  164. {
  165. Command.Parameters[0].Value = ExportBatch.Id;
  166. Command.Parameters[1].Value = VendorEvent.VendorEventType.ExportVoucher;
  167. }
  168. // Command.Prepare(); // < -- internal
  169. using (StreamWriter sw = File.CreateText(Path.Combine(PathDialog.SelectedPath, "RG_" + ExportBatch.Id.ToString() + "_" + ExportBatch.Description + "_" + ExportBatch.FaceValue.ToString() + ".txt")))
  170. {
  171. sw.WriteLine("ID|Expiry|Serial|PIN|Value|BatchId|SQN|Description");
  172. using (SQLiteDataReader read = Command.ExecuteReader())
  173. {
  174. while (read.Read())
  175. {
  176. string DecryptedPIN = Utility.TripleDESDecrypt(read["EncryptedPIN"].ToString(), Globals.SessionVoucherKey).ToString();
  177. string ExportRow = string.Format("{0}|{1}|{2}|{3}|{4}|{5}|{6}|{7}",
  178. read["Id"].ToString(),
  179. DateTime.Parse(read["ExpiryDate"].ToString()).ToString("dd/MM/yyyy"),
  180. read["Serial"].ToString(),
  181. DecryptedPIN,
  182. read["FaceValue"].ToString(),
  183. read["BatchId"].ToString(),
  184. read["SequenceNumber"].ToString(),
  185. read["ProductDescription"].ToString());
  186. sw.WriteLine(ExportRow);
  187. var ExportEvent = new EventLog();
  188. ExportEvent.EventType = VendorEvent.VendorEventType.ExportVoucher;
  189. ExportEvent.VoucherId = int.Parse(read["Id"].ToString());
  190. ExportEvent.Retry = (read["Exports"].ToString() != "0");
  191. LogEvents.Add(ExportEvent);
  192. }
  193. }
  194. }
  195. }
  196. }
  197. Utility.LogBulkEvents(Globals.DB, LogEvents);
  198. }
  199. MessageBox.Show("Vouchers Exported");
  200. this.Close();
  201. }
  202. }
  203. private void cmbNetwork_SelectedIndexChanged(object sender, EventArgs e)
  204. {
  205. PopulateBatchList();
  206. }
  207. private void dtpStartDate_CloseUp(object sender, EventArgs e)
  208. {
  209. PopulateBatchList();
  210. }
  211. private void dtpEndDate_ValueChanged(object sender, EventArgs e)
  212. {
  213. PopulateBatchList();
  214. }
  215. }
  216. }