From aa1e2bf2e41dbc7129030851e5030f1beab24a68 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=98=D0=BB=D1=8C=D1=8F=20=D0=A4=D0=B5=D0=B4=D0=BE=D1=82?= =?UTF-8?q?=D0=BE=D0=B2?= Date: Fri, 26 Jul 2024 12:41:39 +0400 Subject: [PATCH] Pay&Report fix --- .../BusinessLogic/PaymeantLogic.cs | 5 +- .../BusinessLogic/ReportClientLogic.cs | 22 +- .../BindingModels/OrderBindingModel.cs | 2 + .../BindingModels/PaymeantBindingModel.cs | 2 - .../ViewModels/OrderViewModel.cs | 1 + .../ViewModels/PaymeantViewModel.cs | 3 - .../Implements/OrderStorage.cs | 5 +- .../20240605160339_InitMigration.Designer.cs | 324 ------------------ .../20240724032333_Migration02.Designer.cs | 310 ----------------- .../Migrations/20240724032333_Migration02.cs | 48 --- .../20240724033824_Migration03.Designer.cs | 271 --------------- .../Migrations/20240724033824_Migration03.cs | 48 --- .../Migrations/20240724085609_05.cs | 48 --- .../20240724093852_Migration06.Designer.cs | 284 --------------- .../Migrations/20240724093852_Migration06.cs | 69 ---- .../20240724094839_Migration07.Designer.cs | 285 --------------- .../Migrations/20240724094839_Migration07.cs | 69 ---- ... 20240726071024_InitMigration.Designer.cs} | 7 +- ...ion.cs => 20240726071024_InitMigration.cs} | 32 +- .../Migrations/DatabaseModelSnapshot.cs | 3 + .../Models/Order.cs | 14 +- .../Models/Paymeant.cs | 5 - .../Enums/OrderStatus.cs | 13 + .../Models/IOrderModel.cs | 1 + .../Models/IPaymentModel.cs | 3 - .../Controllers/ClientController.cs | 21 +- .../Controllers/MainController.cs | 3 +- ElectronicsShop/ElectronicsShopRestAPI/Report | Bin 30774 -> 35057 bytes .../Controllers/HomeController.cs | 1 + 29 files changed, 76 insertions(+), 1823 deletions(-) delete mode 100644 ElectronicsShop/ElectronicsShopDataBaseImplement/Migrations/20240605160339_InitMigration.Designer.cs delete mode 100644 ElectronicsShop/ElectronicsShopDataBaseImplement/Migrations/20240724032333_Migration02.Designer.cs delete mode 100644 ElectronicsShop/ElectronicsShopDataBaseImplement/Migrations/20240724032333_Migration02.cs delete mode 100644 ElectronicsShop/ElectronicsShopDataBaseImplement/Migrations/20240724033824_Migration03.Designer.cs delete mode 100644 ElectronicsShop/ElectronicsShopDataBaseImplement/Migrations/20240724033824_Migration03.cs delete mode 100644 ElectronicsShop/ElectronicsShopDataBaseImplement/Migrations/20240724085609_05.cs delete mode 100644 ElectronicsShop/ElectronicsShopDataBaseImplement/Migrations/20240724093852_Migration06.Designer.cs delete mode 100644 ElectronicsShop/ElectronicsShopDataBaseImplement/Migrations/20240724093852_Migration06.cs delete mode 100644 ElectronicsShop/ElectronicsShopDataBaseImplement/Migrations/20240724094839_Migration07.Designer.cs delete mode 100644 ElectronicsShop/ElectronicsShopDataBaseImplement/Migrations/20240724094839_Migration07.cs rename ElectronicsShop/ElectronicsShopDataBaseImplement/Migrations/{20240724085609_05.Designer.cs => 20240726071024_InitMigration.Designer.cs} (98%) rename ElectronicsShop/ElectronicsShopDataBaseImplement/Migrations/{20240605160339_InitMigration.cs => 20240726071024_InitMigration.cs} (86%) create mode 100644 ElectronicsShop/ElectronicsShopDataModels/Enums/OrderStatus.cs diff --git a/ElectronicsShop/ElectronicsShopBusinessLogic/BusinessLogic/PaymeantLogic.cs b/ElectronicsShop/ElectronicsShopBusinessLogic/BusinessLogic/PaymeantLogic.cs index 84d4976..26200df 100644 --- a/ElectronicsShop/ElectronicsShopBusinessLogic/BusinessLogic/PaymeantLogic.cs +++ b/ElectronicsShop/ElectronicsShopBusinessLogic/BusinessLogic/PaymeantLogic.cs @@ -71,11 +71,8 @@ namespace ElectronicsShopBusinessLogic.BusinessLogic { throw new ArgumentNullException("Сумма оплаты должна быть больше 0", nameof(model.SumPayment)); } - if (model.PayProductList.Count == 0) { - throw new ArgumentNullException("нельзя оплатить пустой заказ", nameof(model.PayProductList)); - } _logger.LogInformation($"Payment. ID:{model.ID}.Sum:{model.SumPayment}.OrderID:{model.OrderID}" + - $".PayOption{model.PayOption}.Products:{model.PayProductList}"); + $".PayOption{model.PayOption}"); } public bool SetFullPayment(PaymeantBindingModel model) { diff --git a/ElectronicsShop/ElectronicsShopBusinessLogic/BusinessLogic/ReportClientLogic.cs b/ElectronicsShop/ElectronicsShopBusinessLogic/BusinessLogic/ReportClientLogic.cs index 4ce86d5..2d8ffa4 100644 --- a/ElectronicsShop/ElectronicsShopBusinessLogic/BusinessLogic/ReportClientLogic.cs +++ b/ElectronicsShop/ElectronicsShopBusinessLogic/BusinessLogic/ReportClientLogic.cs @@ -43,8 +43,12 @@ namespace ElectronicsShopBusinessLogic.BusinessLogic List? products = new(); + foreach (var paymeant in paymeants) { - foreach (var product in paymeant.PayProductList) { + var order = _orderStorage.GetElement(new OrderSearchModel { ID = paymeant.OrderID }) + ?? throw new Exception("Ошибка полуения данных"); + + foreach (var product in order.ProductList) { products.Add(new ReportProductsViewModel { ID = product.Value.Item1.ID, ProductName = product.Value.Item1.ProductName, @@ -76,9 +80,8 @@ namespace ElectronicsShopBusinessLogic.BusinessLogic // Получение списка товаров с указанием, в какие оплаты товар входит public List GetPaymeantProducts(int _clientID) { - var products = _productstorage.GetFullList(); var paymeants = _paymeantstorage.GetFillteredList(new PaymeantSearchModel { ClientID = _clientID }); - + var list = new List(); foreach (var paymeant in paymeants) { @@ -88,11 +91,16 @@ namespace ElectronicsShopBusinessLogic.BusinessLogic TotalCount = 0 }; - foreach (var product in paymeant.PayProductList) { - record.Products.Add(new(product.Value.Item1.ProductName, product.Value.Item2)); - record.TotalCount += product.Value.Item2; - } + foreach (var payment in paymeants) { + var order = _orderStorage.GetElement(new OrderSearchModel { ID = paymeant.OrderID }) + ?? throw new Exception("Ошибка полуения данных"); + foreach (var product in order.ProductList) { + record.Products.Add(new(product.Value.Item1.ProductName, product.Value.Item2)); + record.TotalCount += product.Value.Item2; + } + } + list.Add(record); } diff --git a/ElectronicsShop/ElectronicsShopContracts/BindingModels/OrderBindingModel.cs b/ElectronicsShop/ElectronicsShopContracts/BindingModels/OrderBindingModel.cs index ef908a3..c169b3b 100644 --- a/ElectronicsShop/ElectronicsShopContracts/BindingModels/OrderBindingModel.cs +++ b/ElectronicsShop/ElectronicsShopContracts/BindingModels/OrderBindingModel.cs @@ -19,5 +19,7 @@ namespace ElectronicsShopContracts.BindingModels public double Sum { get; set; } public Dictionary ProductList { get; set; } = new(); + + public OrderStatus Status { get; set; } = OrderStatus.Неоплачено; } } diff --git a/ElectronicsShop/ElectronicsShopContracts/BindingModels/PaymeantBindingModel.cs b/ElectronicsShop/ElectronicsShopContracts/BindingModels/PaymeantBindingModel.cs index e02d423..175bc8b 100644 --- a/ElectronicsShop/ElectronicsShopContracts/BindingModels/PaymeantBindingModel.cs +++ b/ElectronicsShop/ElectronicsShopContracts/BindingModels/PaymeantBindingModel.cs @@ -21,7 +21,5 @@ namespace ElectronicsShopContracts.BindingModels public int ClientID { get; set; } public DateTime DatePaymeant { get; set; } = DateTime.Now; - - public Dictionary PayProductList { get; set; } = new(); } } diff --git a/ElectronicsShop/ElectronicsShopContracts/ViewModels/OrderViewModel.cs b/ElectronicsShop/ElectronicsShopContracts/ViewModels/OrderViewModel.cs index 5792c64..4483629 100644 --- a/ElectronicsShop/ElectronicsShopContracts/ViewModels/OrderViewModel.cs +++ b/ElectronicsShop/ElectronicsShopContracts/ViewModels/OrderViewModel.cs @@ -23,5 +23,6 @@ namespace ElectronicsShopContracts.ViewModels [DisplayName("Список товаров")] public Dictionary ProductList { get; set; } = new(); + public OrderStatus Status { get; set; } = OrderStatus.Неоплачено; } } diff --git a/ElectronicsShop/ElectronicsShopContracts/ViewModels/PaymeantViewModel.cs b/ElectronicsShop/ElectronicsShopContracts/ViewModels/PaymeantViewModel.cs index c93e9d7..37c348e 100644 --- a/ElectronicsShop/ElectronicsShopContracts/ViewModels/PaymeantViewModel.cs +++ b/ElectronicsShop/ElectronicsShopContracts/ViewModels/PaymeantViewModel.cs @@ -24,8 +24,5 @@ namespace ElectronicsShopContracts.ViewModels public int ClientID { get; set; } public DateTime DatePaymeant { get; set; } - - [DisplayName("Список оплаченных товаров")] - public Dictionary PayProductList { get; set; } = new(); } } diff --git a/ElectronicsShop/ElectronicsShopDataBaseImplement/Implements/OrderStorage.cs b/ElectronicsShop/ElectronicsShopDataBaseImplement/Implements/OrderStorage.cs index 0a513b2..46a4b68 100644 --- a/ElectronicsShop/ElectronicsShopDataBaseImplement/Implements/OrderStorage.cs +++ b/ElectronicsShop/ElectronicsShopDataBaseImplement/Implements/OrderStorage.cs @@ -3,6 +3,7 @@ using ElectronicsShopContracts.SearchModels; using ElectronicsShopContracts.StorageContracts; using ElectronicsShopContracts.ViewModels; using ElectronicsShopDataBaseImplement.Models; +using ElectronicsShopDataModels.Enums; using Microsoft.EntityFrameworkCore; using System.Xml.Linq; @@ -96,14 +97,14 @@ namespace ElectronicsShopDataBaseImplement.Implements else if (model.ClientID.HasValue) { return context.Orders .Include (x => x.Products) - .Where(x => x.ClientID == model.ClientID) + .Where(x => x.ClientID == model.ClientID && x.Status == OrderStatus.Неоплачено) .Select(x => x.GetViewModel) .ToList(); } return context.Orders .Include(x => x.Products) .ThenInclude(x => x._product) - .Where(x => x.DateCreate >= model.DateFrom && x.DateCreate <= model.DateTo) + .Where(x => x.DateCreate >= model.DateFrom && x.DateCreate <= model.DateTo && x.Status == OrderStatus.Неоплачено) .Select(x => x.GetViewModel) .ToList(); } diff --git a/ElectronicsShop/ElectronicsShopDataBaseImplement/Migrations/20240605160339_InitMigration.Designer.cs b/ElectronicsShop/ElectronicsShopDataBaseImplement/Migrations/20240605160339_InitMigration.Designer.cs deleted file mode 100644 index 2cb6c65..0000000 --- a/ElectronicsShop/ElectronicsShopDataBaseImplement/Migrations/20240605160339_InitMigration.Designer.cs +++ /dev/null @@ -1,324 +0,0 @@ -// -using System; -using ElectronicsShopDataBaseImplement; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace ElectronicsShopDataBaseImplement.Migrations -{ - [DbContext(typeof(Database))] - [Migration("20240605160339_InitMigration")] - partial class InitMigration - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "8.0.4") - .HasAnnotation("Relational:MaxIdentifierLength", 128); - - SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - - modelBuilder.Entity("ElectronicsShopDataBaseImplement.Models.Client", b => - { - b.Property("ID") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("ID")); - - b.Property("ClientFIO") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("Email") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("Password") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.HasKey("ID"); - - b.ToTable("Clients"); - }); - - modelBuilder.Entity("ElectronicsShopDataBaseImplement.Models.CostItem", b => - { - b.Property("ID") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("ID")); - - b.Property("CostNum") - .HasColumnType("int"); - - b.Property("EmployeeID") - .HasColumnType("int"); - - b.Property("Name") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("Price") - .HasColumnType("float"); - - b.HasKey("ID"); - - b.HasIndex("EmployeeID"); - - b.ToTable("CostItems"); - }); - - modelBuilder.Entity("ElectronicsShopDataBaseImplement.Models.Employee", b => - { - b.Property("ID") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("ID")); - - b.Property("EmployeeFIO") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("Login") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("Password") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.HasKey("ID"); - - b.ToTable("Employees"); - }); - - modelBuilder.Entity("ElectronicsShopDataBaseImplement.Models.MessageInfo", b => - { - b.Property("MessageID") - .HasColumnType("nvarchar(450)"); - - b.Property("Body") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("ClientID") - .HasColumnType("int"); - - b.Property("DateDelivery") - .HasColumnType("datetime2"); - - b.Property("SenderName") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("Subject") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.HasKey("MessageID"); - - b.HasIndex("ClientID"); - - b.ToTable("Messages"); - }); - - modelBuilder.Entity("ElectronicsShopDataBaseImplement.Models.Order", b => - { - b.Property("ID") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("ID")); - - b.Property("ClientID") - .HasColumnType("int"); - - b.Property("DateCreate") - .HasColumnType("datetime2"); - - b.Property("Sum") - .HasColumnType("float"); - - b.HasKey("ID"); - - b.HasIndex("ClientID"); - - b.ToTable("Orders"); - }); - - modelBuilder.Entity("ElectronicsShopDataBaseImplement.Models.OrderProduct", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("Count") - .HasColumnType("int"); - - b.Property("OrderID") - .HasColumnType("int"); - - b.Property("ProductID") - .HasColumnType("int"); - - b.HasKey("Id"); - - b.HasIndex("OrderID"); - - b.HasIndex("ProductID"); - - b.ToTable("OrderProducts"); - }); - - modelBuilder.Entity("ElectronicsShopDataBaseImplement.Models.Paymeant", b => - { - b.Property("ID") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("ID")); - - b.Property("ClientID") - .HasColumnType("int"); - - b.Property("DatePaymeant") - .HasColumnType("datetime2"); - - b.Property("OrderID") - .HasColumnType("int"); - - b.Property("PayOption") - .HasColumnType("int"); - - b.Property("PaymentID") - .HasColumnType("int"); - - b.Property("SumPayment") - .HasColumnType("float"); - - b.HasKey("ID"); - - b.HasIndex("PaymentID"); - - b.ToTable("Paymeants"); - }); - - modelBuilder.Entity("ElectronicsShopDataBaseImplement.Models.Product", b => - { - b.Property("ID") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("ID")); - - b.Property("CostItemID") - .HasColumnType("int"); - - b.Property("Price") - .HasColumnType("float"); - - b.Property("ProductName") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.HasKey("ID"); - - b.HasIndex("CostItemID"); - - b.ToTable("Products"); - }); - - modelBuilder.Entity("ElectronicsShopDataBaseImplement.Models.CostItem", b => - { - b.HasOne("ElectronicsShopDataBaseImplement.Models.Employee", "Employee") - .WithMany() - .HasForeignKey("EmployeeID") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Employee"); - }); - - modelBuilder.Entity("ElectronicsShopDataBaseImplement.Models.MessageInfo", b => - { - b.HasOne("ElectronicsShopDataBaseImplement.Models.Client", "Client") - .WithMany() - .HasForeignKey("ClientID"); - - b.Navigation("Client"); - }); - - modelBuilder.Entity("ElectronicsShopDataBaseImplement.Models.Order", b => - { - b.HasOne("ElectronicsShopDataBaseImplement.Models.Client", null) - .WithMany("Orders") - .HasForeignKey("ClientID") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("ElectronicsShopDataBaseImplement.Models.OrderProduct", b => - { - b.HasOne("ElectronicsShopDataBaseImplement.Models.Order", "_order") - .WithMany("Products") - .HasForeignKey("OrderID") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("ElectronicsShopDataBaseImplement.Models.Product", "_product") - .WithMany() - .HasForeignKey("ProductID") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("_order"); - - b.Navigation("_product"); - }); - - modelBuilder.Entity("ElectronicsShopDataBaseImplement.Models.Paymeant", b => - { - b.HasOne("ElectronicsShopDataBaseImplement.Models.Order", null) - .WithMany("Payments") - .HasForeignKey("PaymentID"); - }); - - modelBuilder.Entity("ElectronicsShopDataBaseImplement.Models.Product", b => - { - b.HasOne("ElectronicsShopDataBaseImplement.Models.CostItem", "CostItem") - .WithMany() - .HasForeignKey("CostItemID") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("CostItem"); - }); - - modelBuilder.Entity("ElectronicsShopDataBaseImplement.Models.Client", b => - { - b.Navigation("Orders"); - }); - - modelBuilder.Entity("ElectronicsShopDataBaseImplement.Models.Order", b => - { - b.Navigation("Payments"); - - b.Navigation("Products"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/ElectronicsShop/ElectronicsShopDataBaseImplement/Migrations/20240724032333_Migration02.Designer.cs b/ElectronicsShop/ElectronicsShopDataBaseImplement/Migrations/20240724032333_Migration02.Designer.cs deleted file mode 100644 index b702db8..0000000 --- a/ElectronicsShop/ElectronicsShopDataBaseImplement/Migrations/20240724032333_Migration02.Designer.cs +++ /dev/null @@ -1,310 +0,0 @@ -// -using System; -using ElectronicsShopDataBaseImplement; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace ElectronicsShopDataBaseImplement.Migrations -{ - [DbContext(typeof(Database))] - [Migration("20240724032333_Migration02")] - partial class Migration02 - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "8.0.4") - .HasAnnotation("Relational:MaxIdentifierLength", 128); - - SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - - modelBuilder.Entity("ElectronicsShopDataBaseImplement.Models.Client", b => - { - b.Property("ID") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("ID")); - - b.Property("ClientFIO") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("Email") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("Password") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.HasKey("ID"); - - b.ToTable("Clients"); - }); - - modelBuilder.Entity("ElectronicsShopDataBaseImplement.Models.CostItem", b => - { - b.Property("ID") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("ID")); - - b.Property("CostNum") - .HasColumnType("int"); - - b.Property("EmployeeID") - .HasColumnType("int"); - - b.Property("Name") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("Price") - .HasColumnType("float"); - - b.HasKey("ID"); - - b.HasIndex("EmployeeID"); - - b.ToTable("CostItems"); - }); - - modelBuilder.Entity("ElectronicsShopDataBaseImplement.Models.Employee", b => - { - b.Property("ID") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("ID")); - - b.Property("EmployeeFIO") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("Login") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("Password") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.HasKey("ID"); - - b.ToTable("Employees"); - }); - - modelBuilder.Entity("ElectronicsShopDataBaseImplement.Models.MessageInfo", b => - { - b.Property("MessageID") - .HasColumnType("nvarchar(450)"); - - b.Property("Body") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("ClientID") - .HasColumnType("int"); - - b.Property("DateDelivery") - .HasColumnType("datetime2"); - - b.Property("SenderName") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("Subject") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.HasKey("MessageID"); - - b.HasIndex("ClientID"); - - b.ToTable("Messages"); - }); - - modelBuilder.Entity("ElectronicsShopDataBaseImplement.Models.Order", b => - { - b.Property("ID") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("ID")); - - b.Property("ClientID") - .HasColumnType("int"); - - b.Property("DateCreate") - .HasColumnType("datetime2"); - - b.Property("Sum") - .HasColumnType("float"); - - b.HasKey("ID"); - - b.HasIndex("ClientID"); - - b.ToTable("Orders"); - }); - - modelBuilder.Entity("ElectronicsShopDataBaseImplement.Models.OrderProduct", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("Count") - .HasColumnType("int"); - - b.Property("OrderID") - .HasColumnType("int"); - - b.Property("ProductID") - .HasColumnType("int"); - - b.HasKey("Id"); - - b.HasIndex("OrderID"); - - b.HasIndex("ProductID"); - - b.ToTable("OrderProducts"); - }); - - modelBuilder.Entity("ElectronicsShopDataBaseImplement.Models.Paymeant", b => - { - b.Property("ID") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("ID")); - - b.Property("ClientID") - .HasColumnType("int"); - - b.Property("DatePaymeant") - .HasColumnType("datetime2"); - - b.Property("OrderID") - .HasColumnType("int"); - - b.Property("PayOption") - .HasColumnType("int"); - - b.Property("SumPayment") - .HasColumnType("float"); - - b.HasKey("ID"); - - b.ToTable("Paymeants"); - }); - - modelBuilder.Entity("ElectronicsShopDataBaseImplement.Models.Product", b => - { - b.Property("ID") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("ID")); - - b.Property("CostItemID") - .HasColumnType("int"); - - b.Property("Price") - .HasColumnType("float"); - - b.Property("ProductName") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.HasKey("ID"); - - b.HasIndex("CostItemID"); - - b.ToTable("Products"); - }); - - modelBuilder.Entity("ElectronicsShopDataBaseImplement.Models.CostItem", b => - { - b.HasOne("ElectronicsShopDataBaseImplement.Models.Employee", "Employee") - .WithMany() - .HasForeignKey("EmployeeID") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Employee"); - }); - - modelBuilder.Entity("ElectronicsShopDataBaseImplement.Models.MessageInfo", b => - { - b.HasOne("ElectronicsShopDataBaseImplement.Models.Client", "Client") - .WithMany() - .HasForeignKey("ClientID"); - - b.Navigation("Client"); - }); - - modelBuilder.Entity("ElectronicsShopDataBaseImplement.Models.Order", b => - { - b.HasOne("ElectronicsShopDataBaseImplement.Models.Client", null) - .WithMany("Orders") - .HasForeignKey("ClientID") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("ElectronicsShopDataBaseImplement.Models.OrderProduct", b => - { - b.HasOne("ElectronicsShopDataBaseImplement.Models.Order", "_order") - .WithMany("Products") - .HasForeignKey("OrderID") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("ElectronicsShopDataBaseImplement.Models.Product", "_product") - .WithMany() - .HasForeignKey("ProductID") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("_order"); - - b.Navigation("_product"); - }); - - modelBuilder.Entity("ElectronicsShopDataBaseImplement.Models.Product", b => - { - b.HasOne("ElectronicsShopDataBaseImplement.Models.CostItem", "CostItem") - .WithMany() - .HasForeignKey("CostItemID") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("CostItem"); - }); - - modelBuilder.Entity("ElectronicsShopDataBaseImplement.Models.Client", b => - { - b.Navigation("Orders"); - }); - - modelBuilder.Entity("ElectronicsShopDataBaseImplement.Models.Order", b => - { - b.Navigation("Products"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/ElectronicsShop/ElectronicsShopDataBaseImplement/Migrations/20240724032333_Migration02.cs b/ElectronicsShop/ElectronicsShopDataBaseImplement/Migrations/20240724032333_Migration02.cs deleted file mode 100644 index d332ab6..0000000 --- a/ElectronicsShop/ElectronicsShopDataBaseImplement/Migrations/20240724032333_Migration02.cs +++ /dev/null @@ -1,48 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace ElectronicsShopDataBaseImplement.Migrations -{ - /// - public partial class Migration02 : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropForeignKey( - name: "FK_Paymeants_Orders_PaymentID", - table: "Paymeants"); - - migrationBuilder.DropIndex( - name: "IX_Paymeants_PaymentID", - table: "Paymeants"); - - migrationBuilder.DropColumn( - name: "PaymentID", - table: "Paymeants"); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.AddColumn( - name: "PaymentID", - table: "Paymeants", - type: "int", - nullable: true); - - migrationBuilder.CreateIndex( - name: "IX_Paymeants_PaymentID", - table: "Paymeants", - column: "PaymentID"); - - migrationBuilder.AddForeignKey( - name: "FK_Paymeants_Orders_PaymentID", - table: "Paymeants", - column: "PaymentID", - principalTable: "Orders", - principalColumn: "ID"); - } - } -} diff --git a/ElectronicsShop/ElectronicsShopDataBaseImplement/Migrations/20240724033824_Migration03.Designer.cs b/ElectronicsShop/ElectronicsShopDataBaseImplement/Migrations/20240724033824_Migration03.Designer.cs deleted file mode 100644 index 361dcc0..0000000 --- a/ElectronicsShop/ElectronicsShopDataBaseImplement/Migrations/20240724033824_Migration03.Designer.cs +++ /dev/null @@ -1,271 +0,0 @@ -// -using System; -using ElectronicsShopDataBaseImplement; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace ElectronicsShopDataBaseImplement.Migrations -{ - [DbContext(typeof(Database))] - [Migration("20240724033824_Migration03")] - partial class Migration03 - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "8.0.4") - .HasAnnotation("Relational:MaxIdentifierLength", 128); - - SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - - modelBuilder.Entity("ElectronicsShopDataBaseImplement.Models.Client", b => - { - b.Property("ID") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("ID")); - - b.Property("ClientFIO") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("Email") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("Password") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.HasKey("ID"); - - b.ToTable("Clients"); - }); - - modelBuilder.Entity("ElectronicsShopDataBaseImplement.Models.CostItem", b => - { - b.Property("ID") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("ID")); - - b.Property("CostNum") - .HasColumnType("int"); - - b.Property("EmployeeID") - .HasColumnType("int"); - - b.Property("Name") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("Price") - .HasColumnType("float"); - - b.HasKey("ID"); - - b.HasIndex("EmployeeID"); - - b.ToTable("CostItems"); - }); - - modelBuilder.Entity("ElectronicsShopDataBaseImplement.Models.Employee", b => - { - b.Property("ID") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("ID")); - - b.Property("EmployeeFIO") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("Login") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("Password") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.HasKey("ID"); - - b.ToTable("Employees"); - }); - - modelBuilder.Entity("ElectronicsShopDataBaseImplement.Models.Order", b => - { - b.Property("ID") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("ID")); - - b.Property("ClientID") - .HasColumnType("int"); - - b.Property("DateCreate") - .HasColumnType("datetime2"); - - b.Property("Sum") - .HasColumnType("float"); - - b.HasKey("ID"); - - b.HasIndex("ClientID"); - - b.ToTable("Orders"); - }); - - modelBuilder.Entity("ElectronicsShopDataBaseImplement.Models.OrderProduct", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("Count") - .HasColumnType("int"); - - b.Property("OrderID") - .HasColumnType("int"); - - b.Property("ProductID") - .HasColumnType("int"); - - b.HasKey("Id"); - - b.HasIndex("OrderID"); - - b.HasIndex("ProductID"); - - b.ToTable("OrderProducts"); - }); - - modelBuilder.Entity("ElectronicsShopDataBaseImplement.Models.Paymeant", b => - { - b.Property("ID") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("ID")); - - b.Property("ClientID") - .HasColumnType("int"); - - b.Property("DatePaymeant") - .HasColumnType("datetime2"); - - b.Property("OrderID") - .HasColumnType("int"); - - b.Property("PayOption") - .HasColumnType("int"); - - b.Property("SumPayment") - .HasColumnType("float"); - - b.HasKey("ID"); - - b.ToTable("Paymeants"); - }); - - modelBuilder.Entity("ElectronicsShopDataBaseImplement.Models.Product", b => - { - b.Property("ID") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("ID")); - - b.Property("CostItemID") - .HasColumnType("int"); - - b.Property("Price") - .HasColumnType("float"); - - b.Property("ProductName") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.HasKey("ID"); - - b.HasIndex("CostItemID"); - - b.ToTable("Products"); - }); - - modelBuilder.Entity("ElectronicsShopDataBaseImplement.Models.CostItem", b => - { - b.HasOne("ElectronicsShopDataBaseImplement.Models.Employee", "Employee") - .WithMany() - .HasForeignKey("EmployeeID") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Employee"); - }); - - modelBuilder.Entity("ElectronicsShopDataBaseImplement.Models.Order", b => - { - b.HasOne("ElectronicsShopDataBaseImplement.Models.Client", null) - .WithMany("Orders") - .HasForeignKey("ClientID") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("ElectronicsShopDataBaseImplement.Models.OrderProduct", b => - { - b.HasOne("ElectronicsShopDataBaseImplement.Models.Order", "_order") - .WithMany("Products") - .HasForeignKey("OrderID") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("ElectronicsShopDataBaseImplement.Models.Product", "_product") - .WithMany() - .HasForeignKey("ProductID") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("_order"); - - b.Navigation("_product"); - }); - - modelBuilder.Entity("ElectronicsShopDataBaseImplement.Models.Product", b => - { - b.HasOne("ElectronicsShopDataBaseImplement.Models.CostItem", "CostItem") - .WithMany() - .HasForeignKey("CostItemID") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("CostItem"); - }); - - modelBuilder.Entity("ElectronicsShopDataBaseImplement.Models.Client", b => - { - b.Navigation("Orders"); - }); - - modelBuilder.Entity("ElectronicsShopDataBaseImplement.Models.Order", b => - { - b.Navigation("Products"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/ElectronicsShop/ElectronicsShopDataBaseImplement/Migrations/20240724033824_Migration03.cs b/ElectronicsShop/ElectronicsShopDataBaseImplement/Migrations/20240724033824_Migration03.cs deleted file mode 100644 index 08a73a8..0000000 --- a/ElectronicsShop/ElectronicsShopDataBaseImplement/Migrations/20240724033824_Migration03.cs +++ /dev/null @@ -1,48 +0,0 @@ -using System; -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace ElectronicsShopDataBaseImplement.Migrations -{ - /// - public partial class Migration03 : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "Messages"); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "Messages", - columns: table => new - { - MessageID = table.Column(type: "nvarchar(450)", nullable: false), - ClientID = table.Column(type: "int", nullable: true), - Body = table.Column(type: "nvarchar(max)", nullable: false), - DateDelivery = table.Column(type: "datetime2", nullable: false), - SenderName = table.Column(type: "nvarchar(max)", nullable: false), - Subject = table.Column(type: "nvarchar(max)", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_Messages", x => x.MessageID); - table.ForeignKey( - name: "FK_Messages_Clients_ClientID", - column: x => x.ClientID, - principalTable: "Clients", - principalColumn: "ID"); - }); - - migrationBuilder.CreateIndex( - name: "IX_Messages_ClientID", - table: "Messages", - column: "ClientID"); - } - } -} diff --git a/ElectronicsShop/ElectronicsShopDataBaseImplement/Migrations/20240724085609_05.cs b/ElectronicsShop/ElectronicsShopDataBaseImplement/Migrations/20240724085609_05.cs deleted file mode 100644 index 2efbda7..0000000 --- a/ElectronicsShop/ElectronicsShopDataBaseImplement/Migrations/20240724085609_05.cs +++ /dev/null @@ -1,48 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace ElectronicsShopDataBaseImplement.Migrations -{ - /// - public partial class _05 : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.AddColumn( - name: "PaymentID", - table: "Paymeants", - type: "int", - nullable: true); - - migrationBuilder.CreateIndex( - name: "IX_Paymeants_PaymentID", - table: "Paymeants", - column: "PaymentID"); - - migrationBuilder.AddForeignKey( - name: "FK_Paymeants_Orders_PaymentID", - table: "Paymeants", - column: "PaymentID", - principalTable: "Orders", - principalColumn: "ID"); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropForeignKey( - name: "FK_Paymeants_Orders_PaymentID", - table: "Paymeants"); - - migrationBuilder.DropIndex( - name: "IX_Paymeants_PaymentID", - table: "Paymeants"); - - migrationBuilder.DropColumn( - name: "PaymentID", - table: "Paymeants"); - } - } -} diff --git a/ElectronicsShop/ElectronicsShopDataBaseImplement/Migrations/20240724093852_Migration06.Designer.cs b/ElectronicsShop/ElectronicsShopDataBaseImplement/Migrations/20240724093852_Migration06.Designer.cs deleted file mode 100644 index 8c9e8bb..0000000 --- a/ElectronicsShop/ElectronicsShopDataBaseImplement/Migrations/20240724093852_Migration06.Designer.cs +++ /dev/null @@ -1,284 +0,0 @@ -// -using System; -using ElectronicsShopDataBaseImplement; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace ElectronicsShopDataBaseImplement.Migrations -{ - [DbContext(typeof(Database))] - [Migration("20240724093852_Migration06")] - partial class Migration06 - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "8.0.4") - .HasAnnotation("Relational:MaxIdentifierLength", 128); - - SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - - modelBuilder.Entity("ElectronicsShopDataBaseImplement.Models.Client", b => - { - b.Property("ID") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("ID")); - - b.Property("ClientFIO") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("Email") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("Password") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.HasKey("ID"); - - b.ToTable("Clients"); - }); - - modelBuilder.Entity("ElectronicsShopDataBaseImplement.Models.CostItem", b => - { - b.Property("ID") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("ID")); - - b.Property("CostNum") - .HasColumnType("int"); - - b.Property("EmployeeID") - .HasColumnType("int"); - - b.Property("Name") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("Price") - .HasColumnType("float"); - - b.HasKey("ID"); - - b.HasIndex("EmployeeID"); - - b.ToTable("CostItems"); - }); - - modelBuilder.Entity("ElectronicsShopDataBaseImplement.Models.Employee", b => - { - b.Property("ID") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("ID")); - - b.Property("EmployeeFIO") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("Login") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("Password") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.HasKey("ID"); - - b.ToTable("Employees"); - }); - - modelBuilder.Entity("ElectronicsShopDataBaseImplement.Models.Order", b => - { - b.Property("ID") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("ID")); - - b.Property("ClientID") - .HasColumnType("int"); - - b.Property("DateCreate") - .HasColumnType("datetime2"); - - b.Property("Sum") - .HasColumnType("float"); - - b.HasKey("ID"); - - b.HasIndex("ClientID"); - - b.ToTable("Orders"); - }); - - modelBuilder.Entity("ElectronicsShopDataBaseImplement.Models.OrderProduct", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("Count") - .HasColumnType("int"); - - b.Property("OrderID") - .HasColumnType("int"); - - b.Property("ProductID") - .HasColumnType("int"); - - b.HasKey("Id"); - - b.HasIndex("OrderID"); - - b.HasIndex("ProductID"); - - b.ToTable("OrderProducts"); - }); - - modelBuilder.Entity("ElectronicsShopDataBaseImplement.Models.Paymeant", b => - { - b.Property("ID") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("ID")); - - b.Property("ClientID") - .HasColumnType("int"); - - b.Property("DatePaymeant") - .HasColumnType("datetime2"); - - b.Property("OrderID") - .HasColumnType("int"); - - b.Property("PayOption") - .HasColumnType("int"); - - b.Property("SumPayment") - .HasColumnType("float"); - - b.HasKey("ID"); - - b.HasIndex("OrderID"); - - b.ToTable("Paymeants"); - }); - - modelBuilder.Entity("ElectronicsShopDataBaseImplement.Models.Product", b => - { - b.Property("ID") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("ID")); - - b.Property("CostItemID") - .HasColumnType("int"); - - b.Property("Price") - .HasColumnType("float"); - - b.Property("ProductName") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.HasKey("ID"); - - b.HasIndex("CostItemID"); - - b.ToTable("Products"); - }); - - modelBuilder.Entity("ElectronicsShopDataBaseImplement.Models.CostItem", b => - { - b.HasOne("ElectronicsShopDataBaseImplement.Models.Employee", "Employee") - .WithMany() - .HasForeignKey("EmployeeID") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Employee"); - }); - - modelBuilder.Entity("ElectronicsShopDataBaseImplement.Models.Order", b => - { - b.HasOne("ElectronicsShopDataBaseImplement.Models.Client", null) - .WithMany("Orders") - .HasForeignKey("ClientID") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("ElectronicsShopDataBaseImplement.Models.OrderProduct", b => - { - b.HasOne("ElectronicsShopDataBaseImplement.Models.Order", "_order") - .WithMany("Products") - .HasForeignKey("OrderID") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("ElectronicsShopDataBaseImplement.Models.Product", "_product") - .WithMany() - .HasForeignKey("ProductID") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("_order"); - - b.Navigation("_product"); - }); - - modelBuilder.Entity("ElectronicsShopDataBaseImplement.Models.Paymeant", b => - { - b.HasOne("ElectronicsShopDataBaseImplement.Models.Order", null) - .WithMany("Payments") - .HasForeignKey("OrderID") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("ElectronicsShopDataBaseImplement.Models.Product", b => - { - b.HasOne("ElectronicsShopDataBaseImplement.Models.CostItem", "CostItem") - .WithMany() - .HasForeignKey("CostItemID") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("CostItem"); - }); - - modelBuilder.Entity("ElectronicsShopDataBaseImplement.Models.Client", b => - { - b.Navigation("Orders"); - }); - - modelBuilder.Entity("ElectronicsShopDataBaseImplement.Models.Order", b => - { - b.Navigation("Payments"); - - b.Navigation("Products"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/ElectronicsShop/ElectronicsShopDataBaseImplement/Migrations/20240724093852_Migration06.cs b/ElectronicsShop/ElectronicsShopDataBaseImplement/Migrations/20240724093852_Migration06.cs deleted file mode 100644 index cb963d1..0000000 --- a/ElectronicsShop/ElectronicsShopDataBaseImplement/Migrations/20240724093852_Migration06.cs +++ /dev/null @@ -1,69 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace ElectronicsShopDataBaseImplement.Migrations -{ - /// - public partial class Migration06 : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropForeignKey( - name: "FK_Paymeants_Orders_PaymentID", - table: "Paymeants"); - - migrationBuilder.DropIndex( - name: "IX_Paymeants_PaymentID", - table: "Paymeants"); - - migrationBuilder.DropColumn( - name: "PaymentID", - table: "Paymeants"); - - migrationBuilder.CreateIndex( - name: "IX_Paymeants_OrderID", - table: "Paymeants", - column: "OrderID"); - - migrationBuilder.AddForeignKey( - name: "FK_Paymeants_Orders_OrderID", - table: "Paymeants", - column: "OrderID", - principalTable: "Orders", - principalColumn: "ID", - onDelete: ReferentialAction.Cascade); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropForeignKey( - name: "FK_Paymeants_Orders_OrderID", - table: "Paymeants"); - - migrationBuilder.DropIndex( - name: "IX_Paymeants_OrderID", - table: "Paymeants"); - - migrationBuilder.AddColumn( - name: "PaymentID", - table: "Paymeants", - type: "int", - nullable: true); - - migrationBuilder.CreateIndex( - name: "IX_Paymeants_PaymentID", - table: "Paymeants", - column: "PaymentID"); - - migrationBuilder.AddForeignKey( - name: "FK_Paymeants_Orders_PaymentID", - table: "Paymeants", - column: "PaymentID", - principalTable: "Orders", - principalColumn: "ID"); - } - } -} diff --git a/ElectronicsShop/ElectronicsShopDataBaseImplement/Migrations/20240724094839_Migration07.Designer.cs b/ElectronicsShop/ElectronicsShopDataBaseImplement/Migrations/20240724094839_Migration07.Designer.cs deleted file mode 100644 index a212a0d..0000000 --- a/ElectronicsShop/ElectronicsShopDataBaseImplement/Migrations/20240724094839_Migration07.Designer.cs +++ /dev/null @@ -1,285 +0,0 @@ -// -using System; -using ElectronicsShopDataBaseImplement; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; - -#nullable disable - -namespace ElectronicsShopDataBaseImplement.Migrations -{ - [DbContext(typeof(Database))] - [Migration("20240724094839_Migration07")] - partial class Migration07 - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "8.0.4") - .HasAnnotation("Relational:MaxIdentifierLength", 128); - - SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - - modelBuilder.Entity("ElectronicsShopDataBaseImplement.Models.Client", b => - { - b.Property("ID") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("ID")); - - b.Property("ClientFIO") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("Email") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("Password") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.HasKey("ID"); - - b.ToTable("Clients"); - }); - - modelBuilder.Entity("ElectronicsShopDataBaseImplement.Models.CostItem", b => - { - b.Property("ID") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("ID")); - - b.Property("CostNum") - .HasColumnType("int"); - - b.Property("EmployeeID") - .HasColumnType("int"); - - b.Property("Name") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("Price") - .HasColumnType("float"); - - b.HasKey("ID"); - - b.HasIndex("EmployeeID"); - - b.ToTable("CostItems"); - }); - - modelBuilder.Entity("ElectronicsShopDataBaseImplement.Models.Employee", b => - { - b.Property("ID") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("ID")); - - b.Property("EmployeeFIO") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("Login") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("Password") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.HasKey("ID"); - - b.ToTable("Employees"); - }); - - modelBuilder.Entity("ElectronicsShopDataBaseImplement.Models.Order", b => - { - b.Property("ID") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("ID")); - - b.Property("ClientID") - .HasColumnType("int"); - - b.Property("DateCreate") - .HasColumnType("datetime2"); - - b.Property("Sum") - .HasColumnType("float"); - - b.HasKey("ID"); - - b.HasIndex("ClientID"); - - b.ToTable("Orders"); - }); - - modelBuilder.Entity("ElectronicsShopDataBaseImplement.Models.OrderProduct", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("Count") - .HasColumnType("int"); - - b.Property("OrderID") - .HasColumnType("int"); - - b.Property("ProductID") - .HasColumnType("int"); - - b.HasKey("Id"); - - b.HasIndex("OrderID"); - - b.HasIndex("ProductID"); - - b.ToTable("OrderProducts"); - }); - - modelBuilder.Entity("ElectronicsShopDataBaseImplement.Models.Paymeant", b => - { - b.Property("ID") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("ID")); - - b.Property("ClientID") - .HasColumnType("int"); - - b.Property("DatePaymeant") - .HasColumnType("datetime2"); - - b.Property("OrderID") - .HasColumnType("int"); - - b.Property("PayOption") - .HasColumnType("int"); - - b.Property("PaymentID") - .HasColumnType("int"); - - b.Property("SumPayment") - .HasColumnType("float"); - - b.HasKey("ID"); - - b.HasIndex("PaymentID"); - - b.ToTable("Paymeants"); - }); - - modelBuilder.Entity("ElectronicsShopDataBaseImplement.Models.Product", b => - { - b.Property("ID") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("ID")); - - b.Property("CostItemID") - .HasColumnType("int"); - - b.Property("Price") - .HasColumnType("float"); - - b.Property("ProductName") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.HasKey("ID"); - - b.HasIndex("CostItemID"); - - b.ToTable("Products"); - }); - - modelBuilder.Entity("ElectronicsShopDataBaseImplement.Models.CostItem", b => - { - b.HasOne("ElectronicsShopDataBaseImplement.Models.Employee", "Employee") - .WithMany() - .HasForeignKey("EmployeeID") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Employee"); - }); - - modelBuilder.Entity("ElectronicsShopDataBaseImplement.Models.Order", b => - { - b.HasOne("ElectronicsShopDataBaseImplement.Models.Client", null) - .WithMany("Orders") - .HasForeignKey("ClientID") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - }); - - modelBuilder.Entity("ElectronicsShopDataBaseImplement.Models.OrderProduct", b => - { - b.HasOne("ElectronicsShopDataBaseImplement.Models.Order", "_order") - .WithMany("Products") - .HasForeignKey("OrderID") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.HasOne("ElectronicsShopDataBaseImplement.Models.Product", "_product") - .WithMany() - .HasForeignKey("ProductID") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("_order"); - - b.Navigation("_product"); - }); - - modelBuilder.Entity("ElectronicsShopDataBaseImplement.Models.Paymeant", b => - { - b.HasOne("ElectronicsShopDataBaseImplement.Models.Order", null) - .WithMany("Payments") - .HasForeignKey("PaymentID"); - }); - - modelBuilder.Entity("ElectronicsShopDataBaseImplement.Models.Product", b => - { - b.HasOne("ElectronicsShopDataBaseImplement.Models.CostItem", "CostItem") - .WithMany() - .HasForeignKey("CostItemID") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("CostItem"); - }); - - modelBuilder.Entity("ElectronicsShopDataBaseImplement.Models.Client", b => - { - b.Navigation("Orders"); - }); - - modelBuilder.Entity("ElectronicsShopDataBaseImplement.Models.Order", b => - { - b.Navigation("Payments"); - - b.Navigation("Products"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/ElectronicsShop/ElectronicsShopDataBaseImplement/Migrations/20240724094839_Migration07.cs b/ElectronicsShop/ElectronicsShopDataBaseImplement/Migrations/20240724094839_Migration07.cs deleted file mode 100644 index 8121079..0000000 --- a/ElectronicsShop/ElectronicsShopDataBaseImplement/Migrations/20240724094839_Migration07.cs +++ /dev/null @@ -1,69 +0,0 @@ -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace ElectronicsShopDataBaseImplement.Migrations -{ - /// - public partial class Migration07 : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropForeignKey( - name: "FK_Paymeants_Orders_OrderID", - table: "Paymeants"); - - migrationBuilder.DropIndex( - name: "IX_Paymeants_OrderID", - table: "Paymeants"); - - migrationBuilder.AddColumn( - name: "PaymentID", - table: "Paymeants", - type: "int", - nullable: true); - - migrationBuilder.CreateIndex( - name: "IX_Paymeants_PaymentID", - table: "Paymeants", - column: "PaymentID"); - - migrationBuilder.AddForeignKey( - name: "FK_Paymeants_Orders_PaymentID", - table: "Paymeants", - column: "PaymentID", - principalTable: "Orders", - principalColumn: "ID"); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropForeignKey( - name: "FK_Paymeants_Orders_PaymentID", - table: "Paymeants"); - - migrationBuilder.DropIndex( - name: "IX_Paymeants_PaymentID", - table: "Paymeants"); - - migrationBuilder.DropColumn( - name: "PaymentID", - table: "Paymeants"); - - migrationBuilder.CreateIndex( - name: "IX_Paymeants_OrderID", - table: "Paymeants", - column: "OrderID"); - - migrationBuilder.AddForeignKey( - name: "FK_Paymeants_Orders_OrderID", - table: "Paymeants", - column: "OrderID", - principalTable: "Orders", - principalColumn: "ID", - onDelete: ReferentialAction.Cascade); - } - } -} diff --git a/ElectronicsShop/ElectronicsShopDataBaseImplement/Migrations/20240724085609_05.Designer.cs b/ElectronicsShop/ElectronicsShopDataBaseImplement/Migrations/20240726071024_InitMigration.Designer.cs similarity index 98% rename from ElectronicsShop/ElectronicsShopDataBaseImplement/Migrations/20240724085609_05.Designer.cs rename to ElectronicsShop/ElectronicsShopDataBaseImplement/Migrations/20240726071024_InitMigration.Designer.cs index ad2389d..f84c1f1 100644 --- a/ElectronicsShop/ElectronicsShopDataBaseImplement/Migrations/20240724085609_05.Designer.cs +++ b/ElectronicsShop/ElectronicsShopDataBaseImplement/Migrations/20240726071024_InitMigration.Designer.cs @@ -12,8 +12,8 @@ using Microsoft.EntityFrameworkCore.Storage.ValueConversion; namespace ElectronicsShopDataBaseImplement.Migrations { [DbContext(typeof(Database))] - [Migration("20240724085609_05")] - partial class _05 + [Migration("20240726071024_InitMigration")] + partial class InitMigration { /// protected override void BuildTargetModel(ModelBuilder modelBuilder) @@ -117,6 +117,9 @@ namespace ElectronicsShopDataBaseImplement.Migrations b.Property("DateCreate") .HasColumnType("datetime2"); + b.Property("Status") + .HasColumnType("int"); + b.Property("Sum") .HasColumnType("float"); diff --git a/ElectronicsShop/ElectronicsShopDataBaseImplement/Migrations/20240605160339_InitMigration.cs b/ElectronicsShop/ElectronicsShopDataBaseImplement/Migrations/20240726071024_InitMigration.cs similarity index 86% rename from ElectronicsShop/ElectronicsShopDataBaseImplement/Migrations/20240605160339_InitMigration.cs rename to ElectronicsShop/ElectronicsShopDataBaseImplement/Migrations/20240726071024_InitMigration.cs index a9330d9..af81095 100644 --- a/ElectronicsShop/ElectronicsShopDataBaseImplement/Migrations/20240605160339_InitMigration.cs +++ b/ElectronicsShop/ElectronicsShopDataBaseImplement/Migrations/20240726071024_InitMigration.cs @@ -41,27 +41,6 @@ namespace ElectronicsShopDataBaseImplement.Migrations table.PrimaryKey("PK_Employees", x => x.ID); }); - migrationBuilder.CreateTable( - name: "Messages", - columns: table => new - { - MessageID = table.Column(type: "nvarchar(450)", nullable: false), - ClientID = table.Column(type: "int", nullable: true), - SenderName = table.Column(type: "nvarchar(max)", nullable: false), - DateDelivery = table.Column(type: "datetime2", nullable: false), - Subject = table.Column(type: "nvarchar(max)", nullable: false), - Body = table.Column(type: "nvarchar(max)", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_Messages", x => x.MessageID); - table.ForeignKey( - name: "FK_Messages_Clients_ClientID", - column: x => x.ClientID, - principalTable: "Clients", - principalColumn: "ID"); - }); - migrationBuilder.CreateTable( name: "Orders", columns: table => new @@ -70,7 +49,8 @@ namespace ElectronicsShopDataBaseImplement.Migrations .Annotation("SqlServer:Identity", "1, 1"), Sum = table.Column(type: "float", nullable: false), ClientID = table.Column(type: "int", nullable: false), - DateCreate = table.Column(type: "datetime2", nullable: false) + DateCreate = table.Column(type: "datetime2", nullable: false), + Status = table.Column(type: "int", nullable: false) }, constraints: table => { @@ -181,11 +161,6 @@ namespace ElectronicsShopDataBaseImplement.Migrations table: "CostItems", column: "EmployeeID"); - migrationBuilder.CreateIndex( - name: "IX_Messages_ClientID", - table: "Messages", - column: "ClientID"); - migrationBuilder.CreateIndex( name: "IX_OrderProducts_OrderID", table: "OrderProducts", @@ -215,9 +190,6 @@ namespace ElectronicsShopDataBaseImplement.Migrations /// protected override void Down(MigrationBuilder migrationBuilder) { - migrationBuilder.DropTable( - name: "Messages"); - migrationBuilder.DropTable( name: "OrderProducts"); diff --git a/ElectronicsShop/ElectronicsShopDataBaseImplement/Migrations/DatabaseModelSnapshot.cs b/ElectronicsShop/ElectronicsShopDataBaseImplement/Migrations/DatabaseModelSnapshot.cs index 21e0b9b..cc8d2a1 100644 --- a/ElectronicsShop/ElectronicsShopDataBaseImplement/Migrations/DatabaseModelSnapshot.cs +++ b/ElectronicsShop/ElectronicsShopDataBaseImplement/Migrations/DatabaseModelSnapshot.cs @@ -114,6 +114,9 @@ namespace ElectronicsShopDataBaseImplement.Migrations b.Property("DateCreate") .HasColumnType("datetime2"); + b.Property("Status") + .HasColumnType("int"); + b.Property("Sum") .HasColumnType("float"); diff --git a/ElectronicsShop/ElectronicsShopDataBaseImplement/Models/Order.cs b/ElectronicsShop/ElectronicsShopDataBaseImplement/Models/Order.cs index 0f2e155..776ef93 100644 --- a/ElectronicsShop/ElectronicsShopDataBaseImplement/Models/Order.cs +++ b/ElectronicsShop/ElectronicsShopDataBaseImplement/Models/Order.cs @@ -26,8 +26,11 @@ namespace ElectronicsShopDataBaseImplement.Models [Required] public DateTime DateCreate { get; set; } = DateTime.Now; - - public Dictionary? _productList = null; + + [Required] + public OrderStatus Status { get; set; } = OrderStatus.Неоплачено; + + public Dictionary? _productList = null; [NotMapped] public Dictionary ProductList @@ -62,7 +65,8 @@ namespace ElectronicsShopDataBaseImplement.Models { _product = context.Products.First(y => y.ID == x.Key), Count = x.Value.Item2 - }).ToList() + }).ToList(), + Status = model.Status, }; } @@ -73,13 +77,15 @@ namespace ElectronicsShopDataBaseImplement.Models Sum = Sum, DateCreate = DateCreate, ProductList = ProductList, + Status = Status, }; - public void Update(OrderBindingModel model) { + public void Update(OrderBindingModel model) { if (model == null) { return; } Sum = model.Sum; + Status = model.Status; } public void UpdateProducts(Database context,OrderBindingModel model) { diff --git a/ElectronicsShop/ElectronicsShopDataBaseImplement/Models/Paymeant.cs b/ElectronicsShop/ElectronicsShopDataBaseImplement/Models/Paymeant.cs index 04f53fc..9ab11f3 100644 --- a/ElectronicsShop/ElectronicsShopDataBaseImplement/Models/Paymeant.cs +++ b/ElectronicsShop/ElectronicsShopDataBaseImplement/Models/Paymeant.cs @@ -31,9 +31,6 @@ namespace ElectronicsShopDataBaseImplement.Models public DateTime DatePaymeant { get; set; } - [NotMapped] - public Dictionary PayProductList { get; set; } = new(); - public static Paymeant? Create(PaymeantBindingModel? model) { if (model == null) @@ -48,7 +45,6 @@ namespace ElectronicsShopDataBaseImplement.Models PayOption = model.PayOption, ClientID = model.ClientID, DatePaymeant = model.DatePaymeant, - PayProductList = model.PayProductList }; } public void Update(PaymeantBindingModel? model) @@ -68,7 +64,6 @@ namespace ElectronicsShopDataBaseImplement.Models PayOption = PayOption, ClientID = ClientID, DatePaymeant = DatePaymeant, - PayProductList = PayProductList }; } } diff --git a/ElectronicsShop/ElectronicsShopDataModels/Enums/OrderStatus.cs b/ElectronicsShop/ElectronicsShopDataModels/Enums/OrderStatus.cs new file mode 100644 index 0000000..3afe729 --- /dev/null +++ b/ElectronicsShop/ElectronicsShopDataModels/Enums/OrderStatus.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace ElectronicsShopDataModels.Enums { + public enum OrderStatus { + Оплачено = 0, + + Неоплачено = -1 + } +} diff --git a/ElectronicsShop/ElectronicsShopDataModels/Models/IOrderModel.cs b/ElectronicsShop/ElectronicsShopDataModels/Models/IOrderModel.cs index 3ef9849..eb3fcf6 100644 --- a/ElectronicsShop/ElectronicsShopDataModels/Models/IOrderModel.cs +++ b/ElectronicsShop/ElectronicsShopDataModels/Models/IOrderModel.cs @@ -12,6 +12,7 @@ namespace ElectronicsShopDataModels.Models int ClientID { get; } DateTime DateCreate { get; } double Sum { get; } + OrderStatus Status { get; } //список товаров в заказе Dictionary ProductList { get; } diff --git a/ElectronicsShop/ElectronicsShopDataModels/Models/IPaymentModel.cs b/ElectronicsShop/ElectronicsShopDataModels/Models/IPaymentModel.cs index e1e1e56..cec625e 100644 --- a/ElectronicsShop/ElectronicsShopDataModels/Models/IPaymentModel.cs +++ b/ElectronicsShop/ElectronicsShopDataModels/Models/IPaymentModel.cs @@ -15,8 +15,5 @@ namespace ElectronicsShopDataModels.Models PaymeantOption PayOption { get; } DateTime DatePaymeant { get; } int ClientID { get; } - - // Список оплаченнх товаров - Dictionary PayProductList { get; } } } diff --git a/ElectronicsShop/ElectronicsShopRestAPI/Controllers/ClientController.cs b/ElectronicsShop/ElectronicsShopRestAPI/Controllers/ClientController.cs index abe56ab..1aa237b 100644 --- a/ElectronicsShop/ElectronicsShopRestAPI/Controllers/ClientController.cs +++ b/ElectronicsShop/ElectronicsShopRestAPI/Controllers/ClientController.cs @@ -1,4 +1,5 @@ -using DocumentFormat.OpenXml.Drawing.Diagrams; +using DocumentFormat.OpenXml.Drawing.Charts; +using DocumentFormat.OpenXml.Drawing.Diagrams; using DocumentFormat.OpenXml.Packaging; using ElectronicsShopBusinessLogic.BusinessLogic; using ElectronicsShopBusinessLogic.MailWorker; @@ -7,6 +8,7 @@ using ElectronicsShopContracts.BusinessLogicContracts; using ElectronicsShopContracts.SearchModels; using ElectronicsShopContracts.ViewModels; using ElectronicsShopDataBaseImplement.Models; +using ElectronicsShopDataModels.Enums; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore.Migrations; using Microsoft.Identity.Client; @@ -101,7 +103,6 @@ namespace ElectronicsShopRestAPI.Controllers { PayOption = payemeant.PayOption, ClientID = payemeant.ClientID, DatePaymeant = payemeant.DatePaymeant, - PayProductList = payemeant.PayProductList, }, model.PayOption); } else { @@ -111,12 +112,24 @@ namespace ElectronicsShopRestAPI.Controllers { throw new Exception("Ошибка получения данных"); } - model.PayProductList = products; _payLogic.CreatePay(model); } if (model.PayOption == 0) { - _orderLogic.Delete(new OrderBindingModel { ID = model.OrderID }); + var order = _orderLogic.ReadElement(new OrderSearchModel { ID = model.OrderID }); + + if (order == null) { + throw new Exception("Ошибка получения данных"); + } + + _orderLogic.Update(new OrderBindingModel { + ID = model.OrderID, + ClientID = order.ClientID, + DateCreate = order.DateCreate, + Sum = order.Sum - model.SumPayment, + ProductList = order.ProductList, + Status = OrderStatus.Оплачено + }); } else { var order = _orderLogic.ReadElement(new OrderSearchModel { ID = model.OrderID }); diff --git a/ElectronicsShop/ElectronicsShopRestAPI/Controllers/MainController.cs b/ElectronicsShop/ElectronicsShopRestAPI/Controllers/MainController.cs index d06fa21..37e2491 100644 --- a/ElectronicsShop/ElectronicsShopRestAPI/Controllers/MainController.cs +++ b/ElectronicsShop/ElectronicsShopRestAPI/Controllers/MainController.cs @@ -177,7 +177,8 @@ namespace ElectronicsShopRestAPI.Controllers { ClientID = view.ClientID, DateCreate = view.DateCreate, ProductList = _productlist ?? new Dictionary(), - Sum = Calc(_productlist ?? new Dictionary()) + Sum = Calc(_productlist ?? new Dictionary()), + Status = view.Status, }; var operationResult = _order.Update(model); if (!operationResult) { diff --git a/ElectronicsShop/ElectronicsShopRestAPI/Report b/ElectronicsShop/ElectronicsShopRestAPI/Report index 9d1c40034b82773008fa19f5acc0ea19c4d3459a..e1f79e3361ff76aa70a2f876435f47e569d1bb16 100644 GIT binary patch delta 32074 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 delta 27808 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ÀJC1rvpt;Je{JK>HD$SEBmadpC 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 h