From 2bd7a1507e3a9a45044de68a1372af5831c6b873 Mon Sep 17 00:00:00 2001 From: ultrageese Date: Wed, 1 Apr 2026 11:20:15 +1000 Subject: [PATCH] =?UTF-8?q?=D0=91=D0=BE=D0=BB=D1=8C=20=D0=BC=D0=BE=D1=8F?= =?UTF-8?q?=20=D0=B4=D1=8B=D1=80=D0=BA=D0=B0=20=D0=B7=D0=B0=D0=B4=D0=BD?= =?UTF-8?q?=D0=B8=D1=86=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AutoService/Models/IProceedRepository.cs | 13 +++++ AutoService/Models/Order.cs | 17 ++++++ AutoService/Models/ProceedRepository.cs | 68 +++++++++++++++++++++++ AutoService/Models/Work.cs | 1 + AutoService/Models/WorkRepository.cs | 3 +- AutoService/Program.cs | 1 + AutoService/ViewModels/MainWindowVM.cs | 7 ++- AutoService/ViewModels/ReceiptWindowVM.cs | 23 +++++++- AutoService/ViewModels/WorksWindowVM.cs | 11 +++- 9 files changed, 139 insertions(+), 5 deletions(-) create mode 100644 AutoService/Models/IProceedRepository.cs create mode 100644 AutoService/Models/Order.cs create mode 100644 AutoService/Models/ProceedRepository.cs diff --git a/AutoService/Models/IProceedRepository.cs b/AutoService/Models/IProceedRepository.cs new file mode 100644 index 0000000..bd61bbe --- /dev/null +++ b/AutoService/Models/IProceedRepository.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AutoService.Models +{ + public interface IProceedRepository + { + public void SaveOrder(IEnumerable works, Order order); + } +} diff --git a/AutoService/Models/Order.cs b/AutoService/Models/Order.cs new file mode 100644 index 0000000..309f76f --- /dev/null +++ b/AutoService/Models/Order.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AutoService.Models +{ + public class Order + { + public string ClientName { get; set; } + public string AutoModel { get; set; } + public int ServiceId { get; set; } + public int TotalPrice { get; set; } + public int DiscountPercent { get; set; } + } +} diff --git a/AutoService/Models/ProceedRepository.cs b/AutoService/Models/ProceedRepository.cs new file mode 100644 index 0000000..ab115c7 --- /dev/null +++ b/AutoService/Models/ProceedRepository.cs @@ -0,0 +1,68 @@ +using Microsoft.Extensions.Options; +using MySqlConnector; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace AutoService.Models +{ + public class ProceedRepository : BaseRepository, IProceedRepository + { + public ProceedRepository(IOptions databaseSettings) : base(databaseSettings) + { + } + + public void SaveOrder(IEnumerable works, Order order) + { + try + { + OpenConnection(); + string sql1 = "INSERT INTO orders (id, client_name, car_model, service_id, total_amount, discount_percent, order_date) VALUES(0, @ClientName, @AutoModel, @ServiceId, @TotalAmount, @DiscountPercent, '@Date);"; + string sql2 = "SELECT LAST_INSERT_ID() as id;"; + string sql3 = "INSERT INTO auto_service_db.order_items (id, order_id, work_id, work_price) VALUES(0, @OrderId, @WorkId, @WorkPrice);"; + using var transaction = connection.BeginTransaction(); + int newId; + try + { + using (var mc = new MySqlCommand(sql1, connection, transaction)) + { + mc.Parameters.AddWithValue("@ClientName", order.ClientName); + mc.Parameters.AddWithValue("@AutoModel", order.AutoModel); + mc.Parameters.AddWithValue("@ServiceId", order.ServiceId); + mc.Parameters.AddWithValue("@TotalAmount", order.TotalPrice); + mc.Parameters.AddWithValue("@DiscountPercent", order.DiscountPercent); + mc.Parameters.AddWithValue("@Date", DateTime.Now); + mc.ExecuteNonQuery(); + } + using (var mc = new MySqlCommand(sql2, connection, transaction)) + using (var reader = mc.ExecuteReader()) + { + newId = reader.GetInt32("id"); + } + foreach (var work in works) + { + using (var mc = new MySqlCommand(sql3, connection, transaction)) + { + mc.Parameters.AddWithValue("@OrderId", newId); + mc.Parameters.AddWithValue("@WorkId", work.Id); + mc.Parameters.AddWithValue("@WorkPrice", work.Price); + mc.ExecuteNonQuery(); + } + } + transaction.Commit(); + + } + catch (Exception ex) + { + Console.WriteLine(ex); + } + CloseConnection(); + }catch(Exception e) + { + Console.WriteLine(e); + } + } + } +} diff --git a/AutoService/Models/Work.cs b/AutoService/Models/Work.cs index 2fdff5f..c0242ee 100644 --- a/AutoService/Models/Work.cs +++ b/AutoService/Models/Work.cs @@ -8,6 +8,7 @@ namespace AutoService.Models { public class Work { + public int Id { get; set; } public string Title { get; set; } public int Price { get; set; } diff --git a/AutoService/Models/WorkRepository.cs b/AutoService/Models/WorkRepository.cs index 41365a2..4ba2dd7 100644 --- a/AutoService/Models/WorkRepository.cs +++ b/AutoService/Models/WorkRepository.cs @@ -16,7 +16,7 @@ namespace AutoService.Models public IEnumerable GetByServiceId(int serviceId) { - string sql = "SELECT work_name, price FROM works WHERE service_id=@SID"; + string sql = "SELECT id, work_name, price FROM works WHERE service_id=@SID"; List result = new(); try { @@ -28,6 +28,7 @@ namespace AutoService.Models { result.Add(new Work() { + Id = reader.GetInt32("id"), Title = reader.GetString("work_name"), Price = reader.GetInt32("price") diff --git a/AutoService/Program.cs b/AutoService/Program.cs index 9f2e95a..fed4754 100644 --- a/AutoService/Program.cs +++ b/AutoService/Program.cs @@ -33,6 +33,7 @@ namespace AutoService s.AddTransient(); s.AddSingleton(); s.AddSingleton(); + s.AddSingleton(); s.AddSingleton(); diff --git a/AutoService/ViewModels/MainWindowVM.cs b/AutoService/ViewModels/MainWindowVM.cs index e87b084..88a217b 100644 --- a/AutoService/ViewModels/MainWindowVM.cs +++ b/AutoService/ViewModels/MainWindowVM.cs @@ -1,4 +1,5 @@ using AutoService.Models; +using Avalonia.Controls.ApplicationLifetimes; using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Input; using Microsoft.Extensions.DependencyInjection; @@ -38,6 +39,7 @@ namespace AutoService.ViewModels _container = localContainer; ClientName = ""; AutoModel = ""; + try { services = new ObservableCollection(_serviceRepository.GetAll()); @@ -54,6 +56,7 @@ namespace AutoService.ViewModels [RelayCommand] public async Task StartWorksWindowAsync() { + var _currentWindow = (App.Current.ApplicationLifetime as IClassicDesktopStyleApplicationLifetime).MainWindow; if (ClientName.Length > 2 && AutoModel.Length > 2) { if (!_container.StringValues.ContainsKey("ClientName")) @@ -72,11 +75,13 @@ namespace AutoService.ViewModels { _container.StringValues["AutoModel"] = AutoModel; } - + _container.SelectedService = SelectedService; var vm = _serviceProvider.GetRequiredService(); var win = _serviceProvider.GetRequiredService(); win.DataContext = vm; + vm.SetWindow(win); win.Show(); + _currentWindow.Close(); } else { diff --git a/AutoService/ViewModels/ReceiptWindowVM.cs b/AutoService/ViewModels/ReceiptWindowVM.cs index b92415d..54aa043 100644 --- a/AutoService/ViewModels/ReceiptWindowVM.cs +++ b/AutoService/ViewModels/ReceiptWindowVM.cs @@ -17,6 +17,7 @@ namespace AutoService.ViewModels private readonly LocalContainer _localContainer; + private readonly IProceedRepository _proceedRepository; [ObservableProperty] private ObservableCollection works; @@ -31,10 +32,16 @@ namespace AutoService.ViewModels [ObservableProperty] private double totalPrice; - public ReceiptWindowVM(IServiceProvider serviceProvider, ObservableCollection works, LocalContainer localContainer) + private ReceiptWindow _currentWindow; + + + + + public ReceiptWindowVM(IServiceProvider serviceProvider, ObservableCollection works, LocalContainer localContainer, ProceedRepository proceedRepository) { _serviceProvider = serviceProvider; _localContainer = localContainer; + _proceedRepository = proceedRepository; Works = works; foreach (var item in Works) sumPrice += item.Price; if (sumPrice >= 10_000) discount = 0.1; @@ -47,7 +54,21 @@ namespace AutoService.ViewModels [RelayCommand] public void ProceedTransaction() { + Order order = new Order + { + ClientName = _localContainer.StringValues["ClientName"], + AutoModel = _localContainer.StringValues["AutoModel"], + DiscountPercent=(int)(discount*100), + ServiceId=_localContainer.SelectedService.Id, + TotalPrice=(int)TotalPrice + }; + _proceedRepository.SaveOrder(Works, order); } + + public void SetWindow(ReceiptWindow window) + { + _currentWindow = window; + } } } diff --git a/AutoService/ViewModels/WorksWindowVM.cs b/AutoService/ViewModels/WorksWindowVM.cs index 04dabdf..6b8084d 100644 --- a/AutoService/ViewModels/WorksWindowVM.cs +++ b/AutoService/ViewModels/WorksWindowVM.cs @@ -20,8 +20,8 @@ namespace AutoService.ViewModels [ObservableProperty] private ObservableCollection works; + private WorksWindow _currentWindow; - public WorksWindowVM(IServiceProvider serviceProvider, IWorkRepository workRepository, LocalContainer container) { _serviceProvider = serviceProvider; @@ -47,10 +47,17 @@ namespace AutoService.ViewModels { if (work.IsChecked) selectedWorks.Add(work.Work); } - var vm = ActivatorUtilities.CreateInstance(_serviceProvider, selectedWorks, _localContainer); + var procRep = _serviceProvider.GetRequiredService(); + var vm = ActivatorUtilities.CreateInstance(_serviceProvider, selectedWorks, _localContainer, procRep); var win = _serviceProvider.GetRequiredService(); win.DataContext = vm; + vm.SetWindow(win); win.Show(); + _currentWindow.Close(); + } + public void SetWindow(WorksWindow window) + { + _currentWindow = window; } }