using Magazyn.DataModels; using Magazyn.Views; using System; using System.Collections.Generic; using System.Linq; using System.Net.Http; 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 Newtonsoft.Json; using Newtonsoft.Json.Linq; using System.Net; using Magazyn.Windows; using Magazyn.Tools; using System.Net.NetworkInformation; using System.Configuration; namespace Magazyn { public partial class MainWindow : Window { public int size = 4; public int page = 0; bool firstPage; bool lastPage; bool netConn; HttpClient client; Size windowSize; string serverUrl; public MainWindow() { InitializeComponent(); serverUrl = ConfigurationManager.AppSettings.Get("serverUrl"); client = new HttpClient(); this.Loaded += MainWindowLoaded; netConn = checkInternetConnection(); if (netConn) netStatus.Text = "Połączony"; else netStatus.Text = "Rozłączony"; } private void MainWindowLoaded(object sender, EventArgs e) { RefreshListOfFruits(); windowSize = new Size(this.Width, this.Height); this.SizeChanged += Window_SizeChanged; } private void FruitViewSaveChangingAmountOfFruits(int amountChanged, Fruit fruit) { string json = "{\"id\": " + fruit.Id.ToString() + ", \"change\": " + amountChanged.ToString() + " }"; Task response = client.PostAsync(serverUrl+"product/change-quantity", new StringContent(json, Encoding.UTF8, "application/json")); while (response.IsCompleted != true) ; if (response.Result.StatusCode == HttpStatusCode.BadRequest) { JObject data = JObject.Parse(response.Result.Content.ReadAsStringAsync().Result.ToString()); ErrorWindow window; if (data["message"].ToString().Contains("Too low")) { window = new ErrorWindow("Wystąpił błąd niedomiaru. Próbujesz usunąć więcej owoców niż masz w magazynie."); } else if (data["message"].ToString().Contains("Over max")) { window = new ErrorWindow("Wystąpił błąd nadmiaru. Próbujesz dodać więcej owoców niż pomieści magazyn."); } else { window = new ErrorWindow("Nieznany błąd."); } window.Owner = this; window.ShowDialog(); } RefreshListOfFruits(); } private void RefreshListOfFruits() { if (netConn) { pageBlock.Text = (page+1).ToString(); Task response = client.GetAsync(serverUrl+"get-all?page=" + page.ToString() + "&size=" + size.ToString() + "&search=" + ((string.IsNullOrEmpty(searchBox.Text) || string.IsNullOrWhiteSpace(searchBox.Text)) ? "none" : searchBox.Text) ); while (response.IsCompleted != true) ; if (response.Result.StatusCode != HttpStatusCode.OK) { ErrorWindow window = new ErrorWindow("Nastąpił błąd połączenia z serwerem."); window.Owner = this; window.ShowDialog(); page = 0; return; } string responseString = response.Result.Content.ReadAsStringAsync().Result; JObject replay = JObject.Parse(responseString); firstPage = bool.Parse(replay["first"].ToString()); lastPage = bool.Parse(replay["last"].ToString()); Fruit[] fruits = JsonConvert.DeserializeObject(replay["content"].ToString()); UpdateListOfFruits(fruits); } } private void UpdateListOfFruits(Fruit[] list) { fruitList.Items.Clear(); foreach (Fruit item in list) { FruitView fruitView = new FruitView(item); fruitView.SaveChangingAmountOfFruits += FruitViewSaveChangingAmountOfFruits; fruitList.Items.Add(fruitView); } } private WarehousePrice GetWarehousePrice() { Task response = client.GetAsync(serverUrl+"get-price-of-all"); while (response.IsCompleted != true) ; WarehousePrice price = JsonConvert.DeserializeObject(response.Result.Content.ReadAsStringAsync().Result.ToString()); return price; } private void Value_Click(object sender, RoutedEventArgs e) { ValueWindow window = new ValueWindow(GetWarehousePrice().Price); window.Owner = this; window.ShowDialog(); } private void prevButton_Click(object sender, RoutedEventArgs e) { if (firstPage != true) page--; RefreshListOfFruits(); } private void nextButton_Click(object sender, RoutedEventArgs e) { if (lastPage != true) page++; RefreshListOfFruits(); } private void Window_SizeChanged(object sender, SizeChangedEventArgs e) { Size size = e.NewSize; if( Math.Abs(windowSize.Height - size.Height) >= 64 ) { //size -> number of elementy by page this.size = (int)((size.Height - 124) / 80); page = 0; windowSize = size; RefreshListOfFruits(); } } private void fruitListMouseDoubleClick(object sender, MouseButtonEventArgs e) { if (fruitList.SelectedItem != null) { InfoWindow window = new InfoWindow((fruitList.SelectedItem as FruitView).fruit); window.Owner = this; window.ShowDialog(); } } private Boolean checkInternetConnection() { try { return new Ping().Send("www.google.com").Status == IPStatus.Success; } catch { return false; } } private void TextBox_TextChanged(object sender, TextChangedEventArgs e) { page = 0; RefreshListOfFruits(); } } }