session 1 БЭХЭХЭ
This commit is contained in:
parent
55a685a735
commit
e17dc4eddd
@ -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>
|
||||
|
@ -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
49
demo5/OrdersWindow.axaml
Normal 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
134
demo5/OrdersWindow.axaml.cs
Normal 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.
@ -1 +1 @@
|
||||
93564d7a355513ce17cceef7285f1bf6959e7179c7ddbf1cdc1dfedf53dd240c
|
||||
8fcd9272f6074b94482d587f28ea2f08a467c551daf15e3e7b13cdad335e7d33
|
||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -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")]
|
||||
|
@ -1 +1 @@
|
||||
624c9ee094ad8117fe475f6857cdac298825ad77cd8458b95d7a220842734076
|
||||
53f1e2c11d77af3ebd2f1e3b74513ae6600c7dcd5e4b1ac5ec7db17074af1ffb
|
||||
|
@ -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
|
||||
|
||||
|
@ -1 +1 @@
|
||||
7b1684c65de78606aa7ea64895ae3a2ad483be67b2e9ce6ed03a5de7e6dfa344
|
||||
a511ea1a3ed65b095c1d748fc193b27899ade7424b6b93ff1de641a1727cfdfd
|
||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -1 +1 @@
|
||||
17407744351431374
|
||||
17407744605768101
|
Loading…
Reference in New Issue
Block a user