DINO_SCRUM/Magazyn_Client/Magazyn/MainWindow.xaml.cs
2019-01-23 23:10:44 +01:00

184 lines
6.0 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;
namespace Magazyn
{
public partial class MainWindow : Window
{
public int size = 4;
public int page = 0;
bool firstPage;
bool lastPage;
HttpClient client;
Size windowSize;
public MainWindow()
{
InitializeComponent();
client = new HttpClient();
this.Loaded += MainWindowLoaded;
}
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("https://sysmag.herokuapp.com/api/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()
{
pageBlock.Text = page.ToString();
Task<HttpResponseMessage> response = client.GetAsync("https://sysmag.herokuapp.com/api/get-all?page=" + page.ToString() + "&size=" + size.ToString());
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;
size = 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("https://sysmag.herokuapp.com/api/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) >= 40 )
{
//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();
}
}
}
}