DINO_SCRUM/Magazyn_Client/Magazyn/MainWindow.xaml.cs
2019-01-28 23:58:03 +01:00

216 lines
6.9 KiB
C#

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<HttpResponseMessage> 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<HttpResponseMessage> 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<Fruit[]>(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<HttpResponseMessage> response = client.GetAsync(serverUrl+"get-price-of-all");
while (response.IsCompleted != true) ;
WarehousePrice price = JsonConvert.DeserializeObject<WarehousePrice>(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();
}
}
}