finskayMagazin/TovarV2/Korzina.axaml.cs

339 lines
11 KiB
C#
Raw Normal View History

2025-06-05 08:22:50 +00:00
using Avalonia;
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
using System;
using System.Collections.Generic;
using System.Linq;
using Avalonia.Interactivity;
namespace TovarV2;
public partial class Korzina : Window
{
public int b = 0;
public int quantityCount = 0;
public string codeUs;
public ListBox quantitylistBox = new ListBox();
public List<Product> products = new List<Product>();
public List <ProductSelect> currentProdSel = new List<ProductSelect>();
public TextBlock GetPodschetstoimosti
{
get => podschetstoimosti;
set => podschetstoimosti = value;
}
public static bool IsOpen { get; private set; }
public Korzina()
{
InitializeComponent();
A();
this.Opened += (_, _) => IsOpen = true;
this.Closed += (_, _) => IsOpen = false;
int i = 0;
if (ListPr.productSelects.Count >= 2)
{
backBtn.IsVisible = false;
nextBtn.IsVisible = true;
for (i = 0; i < 2; i++)
{
currentProdSel.Add(ListPr.productSelects[i]);
}
}
else
{
currentProdSel = ListPr.productSelects;
}
if (currentProdSel.Count != 0)
{
int allPages = (int)Math.Ceiling((decimal)(ListPr.productSelects.Count / 2));
if (ListPr.productSelects.Count % 2 == 1)
{
allPages += 1;
}
if (allPages == 1)
{
nextBtn.IsVisible = false;
backBtn.IsVisible = false;
}
int currPage = (int)Math.Ceiling((decimal)ListPr.productSelects.IndexOf(currentProdSel[0]) / 2) + 1;
pageNum.Text = currPage.ToString() + "/" + allPages;
}
else
{
backBtn.IsVisible = false;
nextBtn.IsVisible = false;
}
if (currentProdSel.Count == 1)
{
if (currentProdSel[0].nameProdKorz == ListPr.productSelects[ListPr.productSelects.Count - 1].nameProdKorz)
{
nextBtn.IsVisible = false;
}
}
else if (currentProdSel.Count == 2)
{
if ((currentProdSel[1].nameProdKorz == ListPr.productSelects[ListPr.productSelects.Count - 1].nameProdKorz) || (currentProdSel[0].nameProdKorz == ListPr.productSelects[ListPr.productSelects.Count - 1].nameProdKorz))
{
nextBtn.IsVisible = false;
}
}
ProdListInKorz.ItemsSource = currentProdSel.ToList();
}
public void A()
{
ProdListInKorz.ItemsSource = ListPr.productSelects.Select(x => new
{
x.Id,
x.nameProdKorz,
x.priceProdKorz,
x.quantityProdKorz,
x.bitmapProdkorz,
x.quantitySelect,
}).ToList();
}
public void PagesConfig()
{
int i = 0;
if (ListPr.productSelects.Count >= 2)
{
backBtn.IsVisible = false;
nextBtn.IsVisible = true;
for (i = 0; i < 2; i++)
{
currentProdSel.Add(ListPr.productSelects[i]);
}
}
else
{
currentProdSel = ListPr.productSelects;
}
if (currentProdSel.Count != 0)
{
int allPages = (int)Math.Ceiling((decimal)(ListPr.productSelects.Count / 2));
if (ListPr.productSelects.Count % 2 == 1)
{
allPages += 1;
}
if (allPages == 1)
{
nextBtn.IsVisible = false;
backBtn.IsVisible = false;
}
int currPage = (int)Math.Ceiling((decimal)ListPr.productSelects.IndexOf(currentProdSel[0]) / 2) + 1;
pageNum.Text = currPage.ToString() + "/" + allPages;
}
else
{
backBtn.IsVisible = false;
nextBtn.IsVisible = false;
}
if ((currentProdSel.Count == 1 && ListPr.productSelects.IndexOf(currentProdSel[0]) == ListPr.productSelects.Count - 1) ||
(currentProdSel.Count == 2 && ListPr.productSelects.IndexOf(currentProdSel[1]) == ListPr.productSelects.Count - 1))
{
nextBtn.IsVisible = false;
}
ProdListInKorz.ItemsSource = currentProdSel.ToList();
}
public void PrevPage_OnClick(object? sender, RoutedEventArgs e)
{
int i = ListPr.productSelects.IndexOf(currentProdSel[0]);
currentProdSel.Clear();
if (i >= 2)
{
if (i - 1 == 1)
{
backBtn.IsVisible = false;
}
else
{
backBtn.IsVisible = true;
}
nextBtn.IsVisible = true;
for (int j = i - 2; j <= i - 1; j++)
{
currentProdSel.Add(ListPr.productSelects[j]);
}
}
else
{
backBtn.IsVisible = false;
nextBtn.IsVisible = true;
}
int allPages = (int)Math.Ceiling((decimal)(ListPr.productSelects.Count / 2));
if (ListPr.productSelects.Count % 2 == 1)
{
allPages += 1;
}
if (allPages == 1)
{
nextBtn.IsVisible = false;
backBtn.IsVisible = false;
}
int currPage = (int)Math.Ceiling((decimal)ListPr.productSelects.IndexOf(currentProdSel[0]) / 2) + 1;
if ((currentProdSel.Count == 1 && ListPr.productSelects.IndexOf(currentProdSel[0]) == ListPr.productSelects.Count - 1) ||
(currentProdSel.Count == 2 && ListPr.productSelects.IndexOf(currentProdSel[1]) == ListPr.productSelects.Count - 1))
{
nextBtn.IsVisible = false;
}
pageNum.Text = currPage.ToString() + "/" + allPages;
ProdListInKorz.ItemsSource = currentProdSel.ToList();
}
public void NextPage_OnClick(object? sender, RoutedEventArgs e)
{
int i = ListPr.productSelects.IndexOf(currentProdSel[currentProdSel.Count - 1]);
currentProdSel.Clear();
if (ListPr.productSelects.Count - 1 - i >= 2)
{
backBtn.IsVisible = true;
nextBtn.IsVisible = true;
for (int j = i + 1; j < i + 3; j++)
{
currentProdSel.Add(ListPr.productSelects[j]);
}
}
else if (ListPr.productSelects.Count - 1 - i == 1)
{
currentProdSel.Add(ListPr.productSelects[ListPr.productSelects.Count - 1]);
nextBtn.IsVisible = false;
backBtn.IsVisible = true;
}
else
{
currentProdSel.Clear();
nextBtn.IsVisible = false;
backBtn.IsVisible = true;
}
int allPages = (int)Math.Ceiling((decimal)(ListPr.productSelects.Count / 2));
if (ListPr.productSelects.Count % 2 == 1)
{
allPages += 1;
}
if (allPages == 1)
{
nextBtn.IsVisible = false;
backBtn.IsVisible = false;
}
int currPage = (int)Math.Ceiling((decimal)ListPr.productSelects.IndexOf(currentProdSel[0]) / 2) + 1;
if ((currentProdSel.Count == 1 && ListPr.productSelects.IndexOf(currentProdSel[0]) == ListPr.productSelects.Count-1) ||
(currentProdSel.Count == 2 && ListPr.productSelects.IndexOf(currentProdSel[1]) == ListPr.productSelects.Count-1))
{
nextBtn.IsVisible = false;
}
pageNum.Text = currPage.ToString() + "/" + allPages;
ProdListInKorz.ItemsSource = currentProdSel.ToList();
}
public void DelBtn_Click(object? sender, Avalonia.Interactivity.RoutedEventArgs e)
{
int ind = (int)((sender as Button)!).Tag!;
ListPr.productSelects.RemoveAt(ind);
if (ListPr.productSelects.Count > 0)
{
b = 0;
foreach (ProductSelect prSel in ListPr.productSelects)
{
prSel.Id = b;
b++;
}
}
currentProdSel.Clear();
this.PagesConfig();
}
public void ReturnProdEdit_Click(object? sender, Avalonia.Interactivity.RoutedEventArgs e)
{
ProductEdit productEdit = new ProductEdit();
productEdit.Show();
this.Close();
}
public void PodschetOrderBtn_Click(object? sender, Avalonia.Interactivity.RoutedEventArgs e)
{
bool checkDataCorrect = true;
int allprice = 0;
int quantity;
foreach (ProductSelect productSelect in ListPr.productSelects)
{
allprice += productSelect.priceProdKorz * productSelect.quantitySelect;
}
podschetstoimosti.Text = "Общая стоимость составляет: " + allprice.ToString() + " руб.";
}
public void Exit_Click(object? sender, Avalonia.Interactivity.RoutedEventArgs e)
{
ListPr.SelectedListProd.Clear();
ListPr.productSelects.Clear();
MainWindow mainwindow = new MainWindow();
mainwindow.Show();
this.Close();
}
public void UvelBtn_OnClick(object? sender, RoutedEventArgs e)
{
int ind = (int)((sender as Button)!).Tag!;
ListPr.productSelects[ind].quantitySelect++;
ListPr.productSelects[ind].quantitySelect = CheckQuantity(ListPr.productSelects[ind].quantitySelect,
ListPr.productSelects[ind].quantityProdKorz);
ProdListInKorz.ItemsSource = currentProdSel.ToList();
}
public void UmenBtn_OnClick(object? sender, RoutedEventArgs e)
{
int ind = (int)((sender as Button)!).Tag!;
ListPr.productSelects[ind].quantitySelect--;
ListPr.productSelects[ind].quantitySelect = CheckQuantity(ListPr.productSelects[ind].quantitySelect,
ListPr.productSelects[ind].quantityProdKorz);
ProdListInKorz.ItemsSource = currentProdSel.ToList();
}
public int CheckQuantity(int quantitySel, int quantityMagaz)
{
bool check = true;
if (quantitySel < 1)
{
quantitySel = 1;
}
else if (quantitySel > quantityMagaz)
{
quantitySel = quantityMagaz;
podschetstoimosti.Text = "Ошибка. Введенное количество товара больше имеющегося в магазине";
}
else
{
podschetstoimosti.Text = "";
}
return quantitySel;
}
}