Боль моя дырка задница
parent
dce673898d
commit
2bd7a1507e
|
|
@ -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<Work> works, Order order);
|
||||
}
|
||||
}
|
||||
|
|
@ -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; }
|
||||
}
|
||||
}
|
||||
|
|
@ -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> databaseSettings) : base(databaseSettings)
|
||||
{
|
||||
}
|
||||
|
||||
public void SaveOrder(IEnumerable<Work> 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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; }
|
||||
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@ namespace AutoService.Models
|
|||
|
||||
public IEnumerable<Work> 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<Work> 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")
|
||||
|
||||
|
|
|
|||
|
|
@ -33,6 +33,7 @@ namespace AutoService
|
|||
s.AddTransient<ReceiptWindow>();
|
||||
s.AddSingleton<IWorkRepository,WorkRepository>();
|
||||
s.AddSingleton<IServiceRepository, ServiceRepository>();
|
||||
s.AddSingleton<IProceedRepository, ProceedRepository>();
|
||||
s.AddSingleton<LocalContainer>();
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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<Service>(_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<WorksWindowVM>();
|
||||
var win = _serviceProvider.GetRequiredService<WorksWindow>();
|
||||
win.DataContext = vm;
|
||||
vm.SetWindow(win);
|
||||
win.Show();
|
||||
_currentWindow.Close();
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@ namespace AutoService.ViewModels
|
|||
|
||||
private readonly LocalContainer _localContainer;
|
||||
|
||||
private readonly IProceedRepository _proceedRepository;
|
||||
|
||||
[ObservableProperty]
|
||||
private ObservableCollection<Work> works;
|
||||
|
|
@ -31,10 +32,16 @@ namespace AutoService.ViewModels
|
|||
|
||||
[ObservableProperty]
|
||||
private double totalPrice;
|
||||
public ReceiptWindowVM(IServiceProvider serviceProvider, ObservableCollection<Work> works, LocalContainer localContainer)
|
||||
private ReceiptWindow _currentWindow;
|
||||
|
||||
|
||||
|
||||
|
||||
public ReceiptWindowVM(IServiceProvider serviceProvider, ObservableCollection<Work> 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,8 +20,8 @@ namespace AutoService.ViewModels
|
|||
|
||||
[ObservableProperty]
|
||||
private ObservableCollection<WorkIsChecked> 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<ReceiptWindowVM>(_serviceProvider, selectedWorks, _localContainer);
|
||||
var procRep = _serviceProvider.GetRequiredService<IProceedRepository>();
|
||||
var vm = ActivatorUtilities.CreateInstance<ReceiptWindowVM>(_serviceProvider, selectedWorks, _localContainer, procRep);
|
||||
var win = _serviceProvider.GetRequiredService<ReceiptWindow>();
|
||||
win.DataContext = vm;
|
||||
vm.SetWindow(win);
|
||||
win.Show();
|
||||
_currentWindow.Close();
|
||||
}
|
||||
public void SetWindow(WorksWindow window)
|
||||
{
|
||||
_currentWindow = window;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue