MonitoringCashierPage.xaml.cs 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344
  1. using Microsoft.Win32;
  2. using Newtonsoft.Json;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Linq;
  6. using System.Net;
  7. using System.Net.Sockets;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. using System.Windows;
  11. using System.Windows.Controls;
  12. using System.Windows.Data;
  13. using System.Windows.Documents;
  14. using System.Windows.Input;
  15. using System.Windows.Media;
  16. using System.Windows.Media.Imaging;
  17. using System.Windows.Navigation;
  18. using System.Windows.Shapes;
  19. using Excel = Microsoft.Office.Interop.Excel;
  20. using Word = Microsoft.Office.Interop.Word;
  21. namespace StoreServer
  22. {
  23. /// <summary>
  24. /// Interaction logic for MonitoringCashierPage.xaml
  25. /// </summary>
  26. public partial class MonitoringCashierPage : Page
  27. {
  28. public List<WorkShift> WorkShiftOnCashier = new List<WorkShift>();
  29. public MonitoringCashierPage()
  30. {
  31. InitializeComponent();
  32. List<StringFormatCasier> cashier = new List<StringFormatCasier>();
  33. foreach (var item in Helper.FindStore.Cashier)
  34. {
  35. WorkShiftOnCashier.Add(new WorkShift
  36. {
  37. StartDateAndTimeWork = null,
  38. EndDateAndTimeWork = null,
  39. Cashier = item,
  40. EmployeeInStore = null
  41. });
  42. cashier.Add(new StringFormatCasier { NumberCasier = "№" + item.CashierID.ToString(), Number = item.CashierID });
  43. }
  44. cashier.Insert(0, new StringFormatCasier { NumberCasier = "Все кассы", Number = 0 });
  45. CmbCasier.ItemsSource = cashier;
  46. DaPStartDate.SelectedDate = DateTime.Now;
  47. DaPEndDate.SelectedDate = DateTime.Now.AddDays(30);
  48. ListCashier.ItemsSource = WorkShiftOnCashier;
  49. StartSocketServer();
  50. StartHttpServer();
  51. ShowData();
  52. }
  53. public void ShowData()
  54. {
  55. if (DaPStartDate.SelectedDate == null || DaPEndDate.SelectedDate == null)
  56. {
  57. return;
  58. }
  59. if (CmbCasier.SelectedIndex == 0)
  60. {
  61. OrderList.ItemsSource = DB.db.Order.Where(x => x.Date >= DaPStartDate.SelectedDate
  62. && x.Date <= DaPEndDate.SelectedDate).ToList();
  63. return;
  64. }
  65. int NumberCasier = (CmbCasier.SelectedItem as StringFormatCasier).Number;
  66. OrderList.ItemsSource = DB.db.Order.Where(x => x.Date >= DaPStartDate.SelectedDate
  67. && x.Date <= DaPEndDate.SelectedDate
  68. && x.WorkShift.Cashier.CashierID == NumberCasier).ToList();
  69. }
  70. public class StringFormatCasier
  71. {
  72. public string NumberCasier { get; set; }
  73. public int Number { get; set; }
  74. }
  75. public void StartWorkCashier(int CashierID, EmployeeInStore AuthEmployee)
  76. {
  77. var CurrentWorkShift = WorkShiftOnCashier.FirstOrDefault(x => x.Cashier.CashierID == CashierID);
  78. CurrentWorkShift.EmployeeInStore = AuthEmployee;
  79. ListCashier.ItemsSource = null;
  80. ListCashier.ItemsSource = WorkShiftOnCashier;
  81. }
  82. public void StartWorkShift(int CashierID)
  83. {
  84. var CurrentWorkShift = WorkShiftOnCashier.FirstOrDefault(x => x.Cashier.CashierID == CashierID);
  85. if (CurrentWorkShift.EndDateAndTimeWork != null)
  86. {
  87. var NewWorkShift = new WorkShift()
  88. {
  89. StartDateAndTimeWork = null,
  90. EndDateAndTimeWork = null,
  91. Cashier = CurrentWorkShift.Cashier,
  92. EmployeeInStore = CurrentWorkShift.EmployeeInStore
  93. };
  94. WorkShiftOnCashier.Remove(CurrentWorkShift);
  95. WorkShiftOnCashier.Add(NewWorkShift);
  96. }
  97. CurrentWorkShift.StartDateAndTimeWork = DateTime.Now;
  98. ListCashier.ItemsSource = null;
  99. ListCashier.ItemsSource = WorkShiftOnCashier;
  100. }
  101. public void EndWorkShift(int CashierID)
  102. {
  103. var CurrentWorkShift = WorkShiftOnCashier.FirstOrDefault(x => x.Cashier.CashierID == CashierID);
  104. CurrentWorkShift.EndDateAndTimeWork = DateTime.Now;
  105. ListCashier.ItemsSource = null;
  106. ListCashier.ItemsSource = WorkShiftOnCashier;
  107. }
  108. public async void StartSocketServer()
  109. {
  110. string IDStore = Helper.FindStore.StoreID.ToString();
  111. if (IDStore.Length == 1) IDStore = IDStore.Insert(0, "0");
  112. IPEndPoint iPEndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), Convert.ToInt32("102" + IDStore));
  113. Socket Listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
  114. Listener.Bind(iPEndPoint);
  115. Listener.Listen(10);
  116. while (true)
  117. {
  118. Socket SocketClient = await Listener.AcceptAsync();
  119. StringBuilder stringBuilder = new StringBuilder();
  120. byte[] data = new byte[256];
  121. int bytes = 0;
  122. do
  123. {
  124. bytes = SocketClient.Receive(data, data.Length,0);
  125. stringBuilder = stringBuilder.Append(Encoding.UTF8.GetString(data, 0, bytes));
  126. } while (SocketClient.Available >0);
  127. string Message = stringBuilder.ToString();
  128. if (Message.Contains("Authorization - Code cashier="))
  129. {
  130. int NumberCashier = Convert.ToInt32(Message.Split(';')[0].Split('=')[1]);
  131. var FindCashier = DB.db.Cashier.FirstOrDefault(x => x.IDStore == Helper.FindStore.StoreID && x.CashierID == NumberCashier);
  132. if (FindCashier == null)
  133. {
  134. byte[] buffer = Encoding.UTF8.GetBytes("Магазин не поддерживает кассу с таким номером");
  135. SocketClient.Send(buffer);
  136. SocketClient.Shutdown(SocketShutdown.Both);
  137. SocketClient.Close();
  138. }
  139. else
  140. {
  141. string CodeEmployee = Message.Split('=')[2];
  142. var FindEmployee = DB.db.EmployeeInStore.FirstOrDefault(x => x.Employee.Code == CodeEmployee && x.IDStore == Helper.FindStore.StoreID);
  143. if (FindEmployee == null)
  144. {
  145. byte[] buffer = Encoding.UTF8.GetBytes("Сотрудник не найден");
  146. SocketClient.Send(buffer);
  147. SocketClient.Shutdown(SocketShutdown.Both);
  148. SocketClient.Close();
  149. }
  150. else
  151. {
  152. StartWorkCashier(FindCashier.CashierID, FindEmployee);
  153. List<RootDataOfProductInStore> dataOfProductInStores = new List<RootDataOfProductInStore>();
  154. foreach (var item in Helper.FindStore.ProductInStore)
  155. {
  156. dataOfProductInStores.Add(new RootDataOfProductInStore
  157. {
  158. ProductInStoreID = item.ProductInStoreID,
  159. RemainsProduct = item.RemainsProduct,
  160. NameProduct = item.Product.NameProduct,
  161. Weight = item.Product.Weight,
  162. Packaging = item.Product.Packaging,
  163. PriceOfOne = item.Product.PriceOfOne,
  164. BarCode = item.Product.BarCode
  165. });
  166. }
  167. string Json = JsonConvert.SerializeObject(dataOfProductInStores);
  168. byte[] buffer = Encoding.UTF8.GetBytes("Добро пожаловать =" + Json);
  169. SocketClient.Send(buffer);
  170. SocketClient.Shutdown(SocketShutdown.Both);
  171. SocketClient.Close();
  172. }
  173. }
  174. }
  175. if (Message.Contains("Start work shift ="))
  176. {
  177. int CashierID = Convert.ToInt32(Message.Split('=')[1]);
  178. StartWorkShift(CashierID);
  179. var CurrentWorkShift = WorkShiftOnCashier.FirstOrDefault(x => x.Cashier.CashierID == CashierID);
  180. DB.db.WorkShift.Add(CurrentWorkShift);
  181. DB.db.SaveChanges();
  182. byte[] buffer = Encoding.UTF8.GetBytes(CurrentWorkShift.WorkShiftID.ToString());
  183. SocketClient.Send(buffer);
  184. SocketClient.Shutdown(SocketShutdown.Both);
  185. SocketClient.Close();
  186. }
  187. if (Message.Contains("End work shift ="))
  188. {
  189. int CashierID = Convert.ToInt32(Message.Split('=')[1]);
  190. EndWorkShift(CashierID);
  191. var CurrentWorkShift = WorkShiftOnCashier.FirstOrDefault(x => x.Cashier.CashierID == CashierID);
  192. var FindWorkShift = DB.db.WorkShift.Find(CurrentWorkShift.WorkShiftID);
  193. FindWorkShift.EndDateAndTimeWork = CurrentWorkShift.EndDateAndTimeWork;
  194. DB.db.SaveChanges();
  195. byte[] buffer = Encoding.UTF8.GetBytes(CurrentWorkShift.WorkShiftID.ToString());
  196. SocketClient.Send(buffer);
  197. SocketClient.Shutdown(SocketShutdown.Both);
  198. SocketClient.Close();
  199. }
  200. if (Message.Contains("Data of Order ="))
  201. {
  202. string JsonDataOfOrder = Message.Split('=')[1];
  203. var PostOrder = JsonConvert.DeserializeObject<RootDataOfOrder>(JsonDataOfOrder);
  204. Order NewOrder = new Order
  205. {
  206. Date = PostOrder.Date,
  207. IDWorkShift = PostOrder.IDWorkShift,
  208. State = true,
  209. };
  210. DB.db.Order.Add(NewOrder);
  211. DB.db.SaveChanges();
  212. List<ProductInOrder> productInOrders = new List<ProductInOrder>();
  213. foreach (var item in PostOrder.ProductInOrders)
  214. {
  215. productInOrders.Add(new ProductInOrder
  216. {
  217. AmountProduct = item.AmountProduct,
  218. IDOrder = NewOrder.OrderID,
  219. IDProduct = item.ProductInStore.ProductInStoreID
  220. });
  221. }
  222. DB.db.ProductInOrder.AddRange(productInOrders);
  223. DB.db.SaveChanges();
  224. foreach (var item in productInOrders)
  225. {
  226. var ProductInStore = DB.db.ProductInStore.Find(item.IDProduct);
  227. ProductInStore.RemainsProduct = ProductInStore.RemainsProduct - item.AmountProduct;
  228. DB.db.SaveChanges();
  229. }
  230. SocketClient.Shutdown(SocketShutdown.Both);
  231. SocketClient.Close();
  232. }
  233. }
  234. }
  235. public async void StartHttpServer()
  236. {
  237. HttpListener listener = new HttpListener();
  238. listener.Prefixes.Add("http://127.0.0.2:" + Helper.FindStore.StoreID.ToString() + "/");
  239. listener.Start();
  240. while (true)
  241. {
  242. HttpListenerContext context = await listener.GetContextAsync();
  243. HttpListenerRequest request = context.Request;
  244. }
  245. }
  246. private void BtnInToPDF_Click(object sender, RoutedEventArgs e)
  247. {
  248. if ((OrderList.ItemsSource as List<Order>).Count == 0)
  249. {
  250. return;
  251. }
  252. SaveFileDialog saveFileDialog = new SaveFileDialog();
  253. saveFileDialog.FileName = "PDFreport";
  254. saveFileDialog.Filter = "PDF document |*.pdf";
  255. if (saveFileDialog.ShowDialog() == true)
  256. {
  257. ToPDFText(saveFileDialog.FileName);
  258. }
  259. }
  260. public void ToPDFTable()
  261. {
  262. Word.Application app = new Word.Application();
  263. Word.Document doc = app.Documents.Add();
  264. }
  265. public void ToPDFText(string Path)
  266. {
  267. Word.Application app = new Word.Application();
  268. Word.Document doc = app.Documents.Add();
  269. Word.Paragraph paragraph = doc.Paragraphs.Add();
  270. List<Order> Orders = OrderList.ItemsSource as List<Order>;
  271. string Data = $"Отчётный период: c {DaPStartDate.SelectedDate.Value.ToString("dd.MM.yyyy")} по {DaPEndDate.SelectedDate.Value.ToString("dd.MM.yyyy")}\n\n";
  272. foreach (var item in Orders)
  273. {
  274. Data += $"Касса №: {item.WorkShift.Cashier.CashierID}\n" +
  275. $"Кассир: {item.WorkShift.EmployeeInStore.Employee.FullName}\n" +
  276. $"Номер заказа: {item.OrderID}\n" +
  277. $"Дата: {item.Date.ToString("dd.MM.yyyy")}\n" +
  278. $"Продукт: {item.ProductInOrderString}" +
  279. $"Стоимость: {item.CostOfOrder}\n\n";
  280. }
  281. paragraph.Range.Text = Data;
  282. doc.SaveAs2(Path, Word.WdSaveFormat.wdFormatPDF);
  283. }
  284. public void ToCSV(string Path)
  285. {
  286. Excel.Application app = new Excel.Application();
  287. Excel.Workbook workbook = app.Workbooks.Add();
  288. Excel.Worksheet worksheet = workbook.Worksheets.Add();
  289. OrderList.SelectAllCells();
  290. OrderList.ClipboardCopyMode = DataGridClipboardCopyMode.IncludeHeader;
  291. ApplicationCommands.Copy.Execute(null, OrderList);
  292. worksheet.Paste();
  293. workbook.SaveAs(Path);
  294. workbook.Close();
  295. app.Quit();
  296. }
  297. private void BtnInToCSV_Click(object sender, RoutedEventArgs e)
  298. {
  299. if ((OrderList.ItemsSource as List<Order>).Count == 0)
  300. {
  301. return;
  302. }
  303. SaveFileDialog saveFileDialog = new SaveFileDialog();
  304. saveFileDialog.FileName = "CSVreport";
  305. saveFileDialog.Filter = "CSV document |*.csv";
  306. if (saveFileDialog.ShowDialog()==true)
  307. {
  308. ToCSV(saveFileDialog.FileName);
  309. }
  310. }
  311. private void CmbCasier_SelectionChanged(object sender, SelectionChangedEventArgs e)
  312. {
  313. ShowData();
  314. }
  315. private void DaPStartDate_SelectedDateChanged(object sender, SelectionChangedEventArgs e)
  316. {
  317. ShowData();
  318. }
  319. private void DaPEndDate_SelectedDateChanged(object sender, SelectionChangedEventArgs e)
  320. {
  321. ShowData();
  322. }
  323. }
  324. }