using Microsoft.Win32;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Excel = Microsoft.Office.Interop.Excel;
using Word = Microsoft.Office.Interop.Word;
namespace StoreServer
{
///
/// Interaction logic for MonitoringCashierPage.xaml
///
public partial class MonitoringCashierPage : Page
{
public List WorkShiftOnCashier = new List();
public MonitoringCashierPage()
{
InitializeComponent();
List cashier = new List();
foreach (var item in Helper.FindStore.Cashier)
{
WorkShiftOnCashier.Add(new WorkShift
{
StartDateAndTimeWork = null,
EndDateAndTimeWork = null,
Cashier = item,
EmployeeInStore = null
});
cashier.Add(new StringFormatCasier { NumberCasier = "№" + item.CashierID.ToString(), Number = item.CashierID });
}
cashier.Insert(0, new StringFormatCasier { NumberCasier = "Все кассы", Number = 0 });
CmbCasier.ItemsSource = cashier;
DaPStartDate.SelectedDate = DateTime.Now;
DaPEndDate.SelectedDate = DateTime.Now.AddDays(30);
ListCashier.ItemsSource = WorkShiftOnCashier;
StartSocketServer();
StartHttpServer();
ShowData();
}
public void ShowData()
{
if (DaPStartDate.SelectedDate == null || DaPEndDate.SelectedDate == null)
{
return;
}
if (CmbCasier.SelectedIndex == 0)
{
OrderList.ItemsSource = DB.db.Order.Where(x => x.Date >= DaPStartDate.SelectedDate
&& x.Date <= DaPEndDate.SelectedDate).ToList();
return;
}
int NumberCasier = (CmbCasier.SelectedItem as StringFormatCasier).Number;
OrderList.ItemsSource = DB.db.Order.Where(x => x.Date >= DaPStartDate.SelectedDate
&& x.Date <= DaPEndDate.SelectedDate
&& x.WorkShift.Cashier.CashierID == NumberCasier).ToList();
}
public class StringFormatCasier
{
public string NumberCasier { get; set; }
public int Number { get; set; }
}
public void StartWorkCashier(int CashierID, EmployeeInStore AuthEmployee)
{
var CurrentWorkShift = WorkShiftOnCashier.FirstOrDefault(x => x.Cashier.CashierID == CashierID);
CurrentWorkShift.EmployeeInStore = AuthEmployee;
ListCashier.ItemsSource = null;
ListCashier.ItemsSource = WorkShiftOnCashier;
}
public void StartWorkShift(int CashierID)
{
var CurrentWorkShift = WorkShiftOnCashier.FirstOrDefault(x => x.Cashier.CashierID == CashierID);
if (CurrentWorkShift.EndDateAndTimeWork != null)
{
var NewWorkShift = new WorkShift()
{
StartDateAndTimeWork = null,
EndDateAndTimeWork = null,
Cashier = CurrentWorkShift.Cashier,
EmployeeInStore = CurrentWorkShift.EmployeeInStore
};
WorkShiftOnCashier.Remove(CurrentWorkShift);
WorkShiftOnCashier.Add(NewWorkShift);
}
CurrentWorkShift.StartDateAndTimeWork = DateTime.Now;
ListCashier.ItemsSource = null;
ListCashier.ItemsSource = WorkShiftOnCashier;
}
public void EndWorkShift(int CashierID)
{
var CurrentWorkShift = WorkShiftOnCashier.FirstOrDefault(x => x.Cashier.CashierID == CashierID);
CurrentWorkShift.EndDateAndTimeWork = DateTime.Now;
ListCashier.ItemsSource = null;
ListCashier.ItemsSource = WorkShiftOnCashier;
}
public async void StartSocketServer()
{
string IDStore = Helper.FindStore.StoreID.ToString();
if (IDStore.Length == 1) IDStore = IDStore.Insert(0, "0");
IPEndPoint iPEndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), Convert.ToInt32("102" + IDStore));
Socket Listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
Listener.Bind(iPEndPoint);
Listener.Listen(10);
while (true)
{
Socket SocketClient = await Listener.AcceptAsync();
StringBuilder stringBuilder = new StringBuilder();
byte[] data = new byte[256];
int bytes = 0;
do
{
bytes = SocketClient.Receive(data, data.Length,0);
stringBuilder = stringBuilder.Append(Encoding.UTF8.GetString(data, 0, bytes));
} while (SocketClient.Available >0);
string Message = stringBuilder.ToString();
if (Message.Contains("Authorization - Code cashier="))
{
int NumberCashier = Convert.ToInt32(Message.Split(';')[0].Split('=')[1]);
var FindCashier = DB.db.Cashier.FirstOrDefault(x => x.IDStore == Helper.FindStore.StoreID && x.CashierID == NumberCashier);
if (FindCashier == null)
{
byte[] buffer = Encoding.UTF8.GetBytes("Магазин не поддерживает кассу с таким номером");
SocketClient.Send(buffer);
SocketClient.Shutdown(SocketShutdown.Both);
SocketClient.Close();
}
else
{
string CodeEmployee = Message.Split('=')[2];
var FindEmployee = DB.db.EmployeeInStore.FirstOrDefault(x => x.Employee.Code == CodeEmployee && x.IDStore == Helper.FindStore.StoreID);
if (FindEmployee == null)
{
byte[] buffer = Encoding.UTF8.GetBytes("Сотрудник не найден");
SocketClient.Send(buffer);
SocketClient.Shutdown(SocketShutdown.Both);
SocketClient.Close();
}
else
{
StartWorkCashier(FindCashier.CashierID, FindEmployee);
List dataOfProductInStores = new List();
foreach (var item in Helper.FindStore.ProductInStore)
{
dataOfProductInStores.Add(new RootDataOfProductInStore
{
ProductInStoreID = item.ProductInStoreID,
RemainsProduct = item.RemainsProduct,
NameProduct = item.Product.NameProduct,
Weight = item.Product.Weight,
Packaging = item.Product.Packaging,
PriceOfOne = item.Product.PriceOfOne,
BarCode = item.Product.BarCode
});
}
string Json = JsonConvert.SerializeObject(dataOfProductInStores);
byte[] buffer = Encoding.UTF8.GetBytes("Добро пожаловать =" + Json);
SocketClient.Send(buffer);
SocketClient.Shutdown(SocketShutdown.Both);
SocketClient.Close();
}
}
}
if (Message.Contains("Start work shift ="))
{
int CashierID = Convert.ToInt32(Message.Split('=')[1]);
StartWorkShift(CashierID);
var CurrentWorkShift = WorkShiftOnCashier.FirstOrDefault(x => x.Cashier.CashierID == CashierID);
DB.db.WorkShift.Add(CurrentWorkShift);
DB.db.SaveChanges();
byte[] buffer = Encoding.UTF8.GetBytes(CurrentWorkShift.WorkShiftID.ToString());
SocketClient.Send(buffer);
SocketClient.Shutdown(SocketShutdown.Both);
SocketClient.Close();
}
if (Message.Contains("End work shift ="))
{
int CashierID = Convert.ToInt32(Message.Split('=')[1]);
EndWorkShift(CashierID);
var CurrentWorkShift = WorkShiftOnCashier.FirstOrDefault(x => x.Cashier.CashierID == CashierID);
var FindWorkShift = DB.db.WorkShift.Find(CurrentWorkShift.WorkShiftID);
FindWorkShift.EndDateAndTimeWork = CurrentWorkShift.EndDateAndTimeWork;
DB.db.SaveChanges();
byte[] buffer = Encoding.UTF8.GetBytes(CurrentWorkShift.WorkShiftID.ToString());
SocketClient.Send(buffer);
SocketClient.Shutdown(SocketShutdown.Both);
SocketClient.Close();
}
if (Message.Contains("Data of Order ="))
{
string JsonDataOfOrder = Message.Split('=')[1];
var PostOrder = JsonConvert.DeserializeObject(JsonDataOfOrder);
Order NewOrder = new Order
{
Date = PostOrder.Date,
IDWorkShift = PostOrder.IDWorkShift,
State = true,
};
DB.db.Order.Add(NewOrder);
DB.db.SaveChanges();
List productInOrders = new List();
foreach (var item in PostOrder.ProductInOrders)
{
productInOrders.Add(new ProductInOrder
{
AmountProduct = item.AmountProduct,
IDOrder = NewOrder.OrderID,
IDProduct = item.ProductInStore.ProductInStoreID
});
}
DB.db.ProductInOrder.AddRange(productInOrders);
DB.db.SaveChanges();
foreach (var item in productInOrders)
{
var ProductInStore = DB.db.ProductInStore.Find(item.IDProduct);
ProductInStore.RemainsProduct = ProductInStore.RemainsProduct - item.AmountProduct;
DB.db.SaveChanges();
}
SocketClient.Shutdown(SocketShutdown.Both);
SocketClient.Close();
}
}
}
public async void StartHttpServer()
{
HttpListener listener = new HttpListener();
listener.Prefixes.Add("http://127.0.0.2:" + Helper.FindStore.StoreID.ToString() + "/");
listener.Start();
while (true)
{
HttpListenerContext context = await listener.GetContextAsync();
HttpListenerRequest request = context.Request;
}
}
private void BtnInToPDF_Click(object sender, RoutedEventArgs e)
{
if ((OrderList.ItemsSource as List).Count == 0)
{
return;
}
SaveFileDialog saveFileDialog = new SaveFileDialog();
saveFileDialog.FileName = "PDFreport";
saveFileDialog.Filter = "PDF document |*.pdf";
if (saveFileDialog.ShowDialog() == true)
{
ToPDFText(saveFileDialog.FileName);
}
}
public void ToPDFTable()
{
Word.Application app = new Word.Application();
Word.Document doc = app.Documents.Add();
}
public void ToPDFText(string Path)
{
Word.Application app = new Word.Application();
Word.Document doc = app.Documents.Add();
Word.Paragraph paragraph = doc.Paragraphs.Add();
List Orders = OrderList.ItemsSource as List;
string Data = $"Отчётный период: c {DaPStartDate.SelectedDate.Value.ToString("dd.MM.yyyy")} по {DaPEndDate.SelectedDate.Value.ToString("dd.MM.yyyy")}\n\n";
foreach (var item in Orders)
{
Data += $"Касса №: {item.WorkShift.Cashier.CashierID}\n" +
$"Кассир: {item.WorkShift.EmployeeInStore.Employee.FullName}\n" +
$"Номер заказа: {item.OrderID}\n" +
$"Дата: {item.Date.ToString("dd.MM.yyyy")}\n" +
$"Продукт: {item.ProductInOrderString}" +
$"Стоимость: {item.CostOfOrder}\n\n";
}
paragraph.Range.Text = Data;
doc.SaveAs2(Path, Word.WdSaveFormat.wdFormatPDF);
}
public void ToCSV(string Path)
{
Excel.Application app = new Excel.Application();
Excel.Workbook workbook = app.Workbooks.Add();
Excel.Worksheet worksheet = workbook.Worksheets.Add();
OrderList.SelectAllCells();
OrderList.ClipboardCopyMode = DataGridClipboardCopyMode.IncludeHeader;
ApplicationCommands.Copy.Execute(null, OrderList);
worksheet.Paste();
workbook.SaveAs(Path);
workbook.Close();
app.Quit();
}
private void BtnInToCSV_Click(object sender, RoutedEventArgs e)
{
if ((OrderList.ItemsSource as List).Count == 0)
{
return;
}
SaveFileDialog saveFileDialog = new SaveFileDialog();
saveFileDialog.FileName = "CSVreport";
saveFileDialog.Filter = "CSV document |*.csv";
if (saveFileDialog.ShowDialog()==true)
{
ToCSV(saveFileDialog.FileName);
}
}
private void CmbCasier_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
ShowData();
}
private void DaPStartDate_SelectedDateChanged(object sender, SelectionChangedEventArgs e)
{
ShowData();
}
private void DaPEndDate_SelectedDateChanged(object sender, SelectionChangedEventArgs e)
{
ShowData();
}
}
}