finskayMagazin/TovarV2/Korzina.axaml.cs
2025-06-05 11:22:50 +03:00

339 lines
11 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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;
}
}