session 1 БЭХЭХЭ

This commit is contained in:
1billy17 2025-03-04 21:42:21 +03:00
parent 55a685a735
commit e17dc4eddd
20 changed files with 203 additions and 8 deletions

View File

@ -11,13 +11,16 @@
<TextBlock Text="Время проката в минутах:"/>
<TextBox x:Name="PeriodTextBox"/>
<TextBlock Text="Выберите клиента:"/>
<ComboBox x:Name="OrderClientComboBox"/>
<TextBlock Text="Выберите услуги:"/>
<ListBox x:Name="OrderServicesListBox" SelectionMode="Multiple"/>
<ListBox x:Name="OrderServicesListBox" SelectionMode="Multiple" Height="150"/>
<Button Content="Сформировать заказ" Click="CreateOrderButton_OnClick"/>
<StackPanel>
<Button Content="Сформировать заказ" Click="CreateOrderButton_OnClick"/>
<Button Content="Заказы" Click="OrdersWindowButton_OnClick"/>
</StackPanel>
</StackPanel>
</Window>

View File

@ -154,4 +154,10 @@ public partial class FormOrderWindow : Window
document.Save(filePath);
Console.WriteLine($"PDF сохранен: {filePath}");
}
private void OrdersWindowButton_OnClick(object? sender, RoutedEventArgs e)
{
OrdersWindow ordersWindow = new OrdersWindow();
ordersWindow.ShowDialog(this);
}
}

49
demo5/OrdersWindow.axaml Normal file
View File

@ -0,0 +1,49 @@
<Window xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
x:Class="demo5.OrdersWindow"
x:CompileBindings="False"
Title="HistoryOrdersWindow">
<Border Background="Bisque">
<DockPanel Background="Bisque">
<StackPanel DockPanel.Dock="Top" Orientation="Horizontal" Background="Gray" Height="30">
<ComboBox VerticalAlignment="Center" Width="100" x:Name="FilterComboboxUsers" SelectionChanged="FilterComboboxUsers_OnSelectionChanged"/>
<ComboBox VerticalAlignment="Center" Width="100" x:Name="FilterComboboxServices" SelectionChanged="FilterComboboxServices_OnSelectionChanged"/>
</StackPanel>
<ScrollViewer DockPanel.Dock="Top" VerticalScrollBarVisibility="Auto">
<ListBox x:Name="ListBoxHistory">
<ListBox.ItemTemplate>
<DataTemplate>
<Border BorderBrush="Gray" BorderThickness="1" Padding="5">
<Grid>
<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
<TextBlock Text="{Binding CodeOrder}" TextWrapping="Wrap" TextAlignment="Center" />
<TextBlock Text="{Binding CodeClient}" TextWrapping="Wrap" TextAlignment="Center"/>
<TextBlock Text="{Binding Date}" TextWrapping="Wrap" TextAlignment="Center"/>
<TextBlock Text="{Binding Status}" TextWrapping="Wrap" TextAlignment="Center"/>
<ItemsControl ItemsSource="{Binding ServicesNames}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding}" TextAlignment="Center"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</StackPanel>
</Grid>
<Border.ContextMenu>
<ContextMenu>
<MenuItem Header="Сформировать" Click="FormOrder_OnClick"/>
</ContextMenu>
</Border.ContextMenu>
</Border>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</ScrollViewer>
</DockPanel>
</Border>
</Window>

134
demo5/OrdersWindow.axaml.cs Normal file
View File

@ -0,0 +1,134 @@
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.IO;
using System.Linq;
using Avalonia;
using Avalonia.Controls;
using Avalonia.Interactivity;
using Avalonia.Markup.Xaml;
using demo5.Models;
using PdfSharpCore.Drawing;
using PdfSharpCore.Pdf;
namespace demo5;
public partial class OrdersWindow : Window
{
ObservableCollection<Order> Orders = new();
List<Service> dataSourceServices;
List<OrderPresenter> dataSourceOrders;
public OrdersWindow()
{
InitializeComponent();
using var context = new Demo5Context();
dataSourceOrders = context.Orders.Select(order => new OrderPresenter
{
Id = order.Id,
CodeOrder = order.CodeOrder,
Date = order.Date,
Time = order.Time,
CodeClient = order.CodeClient,
Status = order.Status,
Period = order.Period,
Services = order.OrdersServices.Select(os => os.Service).ToList(),
UserFio = context.Clients.FirstOrDefault(u => u.Id == order.CodeClient).Fio,
ServicesNames = new ObservableCollection<string>(
order.OrdersServices.Select(os => os.Service.Name).ToList()
)
}).ToList();
dataSourceServices = context.Services.Select(order => new Service()).ToList();
ListBoxHistory.ItemsSource = Orders;
FilterComboboxUsers.ItemsSource = context.Clients.Select(client => client.Fio).ToList();
FilterComboboxServices.ItemsSource = context.Services.Select(service => service.Name).ToList();
DisplayServices();
}
public class OrderPresenter() : Order
{
public List<Service> Services { get; set; } = new();
public String UserFio;
public ObservableCollection<string> ServicesNames { get; set; } = new();
}
public void DisplayServices()
{
var temp = dataSourceOrders;
Orders.Clear();
if (FilterComboboxUsers.SelectedItem is string selectedUser)
{
temp = temp.Where(u => u.UserFio == selectedUser).ToList();
}
if (FilterComboboxServices.SelectedItem is string selectedServiceName)
{
temp = temp.Where(o => o.Services.Any(s => s.Name == selectedServiceName)).ToList();
}
foreach (var item in temp)
{
Orders.Add(item);
}
}
private void FilterComboboxUsers_OnSelectionChanged(object? sender, SelectionChangedEventArgs e)
{
DisplayServices();
}
private void FilterComboboxServices_OnSelectionChanged(object? sender, SelectionChangedEventArgs e)
{
DisplayServices();
}
private void FormOrder_OnClick(object? sender, RoutedEventArgs e)
{
if (ListBoxHistory.SelectedItem is OrderPresenter selectedOrder)
{
var resultSum = 0;
var serviceNames = "";
using var document = new PdfDocument();
var page = document.AddPage();
var gfx = XGraphics.FromPdfPage(page);
var font = new XFont("Arial", 14, XFontStyle.Regular);
foreach (var service in selectedOrder.Services)
{
resultSum += service.Price;
serviceNames += service.Name + " ";
}
var lines = new List<string>
{
$"Дата заказа: {selectedOrder.Date}",
$"ID пользователя: {selectedOrder.CodeClient}",
$"Код заказа: {selectedOrder.CodeOrder}",
$"ФИО пользователя: {selectedOrder.UserFio}",
$"Время заказа: {selectedOrder.Time}",
$"Услуги: {serviceNames}",
$"Итоговая сумма: {resultSum}"
};
double x = 50, y = 50;
double lineHeight = 20;
foreach (var line in lines)
{
gfx.DrawString(line, font, XBrushes.Black, new XPoint(x, y));
y += lineHeight;
}
string filePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), $"Order_{selectedOrder.Id}.pdf");
document.Save(filePath);
Console.WriteLine($"PDF сохранен: {filePath}");
}
}
}

Binary file not shown.

Binary file not shown.

View File

@ -1 +1 @@
93564d7a355513ce17cceef7285f1bf6959e7179c7ddbf1cdc1dfedf53dd240c
8fcd9272f6074b94482d587f28ea2f08a467c551daf15e3e7b13cdad335e7d33

View File

@ -13,7 +13,7 @@ using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("demo5")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+48d3d6134087a826b42053bbd898787bf97406e3")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+55a685a735b4f753ad1488bece58878a705226b4")]
[assembly: System.Reflection.AssemblyProductAttribute("demo5")]
[assembly: System.Reflection.AssemblyTitleAttribute("demo5")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]

View File

@ -1 +1 @@
624c9ee094ad8117fe475f6857cdac298825ad77cd8458b95d7a220842734076
53f1e2c11d77af3ebd2f1e3b74513ae6600c7dcd5e4b1ac5ec7db17074af1ffb

View File

@ -40,6 +40,9 @@ build_metadata.AdditionalFiles.SourceItemGroup = AvaloniaXaml
[/Users/feitanportor/dev/C\#/demo5/demo5/MegaSellerWindow.axaml]
build_metadata.AdditionalFiles.SourceItemGroup = AvaloniaXaml
[/Users/feitanportor/dev/C\#/demo5/demo5/OrdersWindow.axaml]
build_metadata.AdditionalFiles.SourceItemGroup = AvaloniaXaml
[/Users/feitanportor/dev/C\#/demo5/demo5/SellerWindow.axaml]
build_metadata.AdditionalFiles.SourceItemGroup = AvaloniaXaml

View File

@ -1 +1 @@
7b1684c65de78606aa7ea64895ae3a2ad483be67b2e9ce6ed03a5de7e6dfa344
a511ea1a3ed65b095c1d748fc193b27899ade7424b6b93ff1de641a1727cfdfd

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1 +1 @@
17407744351431374
17407744605768101