diff --git a/ElectronicsShop/ElectronicsShopBusinessLogic/BusinessLogic/PaymeantLogic.cs b/ElectronicsShop/ElectronicsShopBusinessLogic/BusinessLogic/PaymeantLogic.cs index c759895..3a10116 100644 --- a/ElectronicsShop/ElectronicsShopBusinessLogic/BusinessLogic/PaymeantLogic.cs +++ b/ElectronicsShop/ElectronicsShopBusinessLogic/BusinessLogic/PaymeantLogic.cs @@ -71,7 +71,7 @@ namespace ElectronicsShopBusinessLogic.BusinessLogic { throw new ArgumentNullException("Сумма оплаты должна быть больше 0", nameof(model.SumPayment)); } - _logger.LogInformation($"Payment. ID:{model.ID}.ProductID:{model.ProductID}.Sum:{model.SumPayment}.OrderID:{model.OrderID}" + + _logger.LogInformation($"Payment. ID:{model.ID}.Sum:{model.SumPayment}.OrderID:{model.OrderID}" + $".PayOption{model.PayOption}"); } diff --git a/ElectronicsShop/ElectronicsShopBusinessLogic/BusinessLogic/ReportClientLogic.cs b/ElectronicsShop/ElectronicsShopBusinessLogic/BusinessLogic/ReportClientLogic.cs index 97ef1c7..98c2f95 100644 --- a/ElectronicsShop/ElectronicsShopBusinessLogic/BusinessLogic/ReportClientLogic.cs +++ b/ElectronicsShop/ElectronicsShopBusinessLogic/BusinessLogic/ReportClientLogic.cs @@ -29,7 +29,7 @@ namespace ElectronicsShopBusinessLogic.BusinessLogic var record = new ReportPaymeantsViewModel { PaymeantID=paymeant.ID, - ProductID=paymeant.ProductID, + //ProductID=paymeant.ProductID, OrderID=paymeant.OrderID, PayOption=paymeant.PayOption, SumPayment=paymeant.SumPayment, diff --git a/ElectronicsShop/ElectronicsShopContracts/BindingModels/PaymeantBindingModel.cs b/ElectronicsShop/ElectronicsShopContracts/BindingModels/PaymeantBindingModel.cs index c66dd30..30c11b3 100644 --- a/ElectronicsShop/ElectronicsShopContracts/BindingModels/PaymeantBindingModel.cs +++ b/ElectronicsShop/ElectronicsShopContracts/BindingModels/PaymeantBindingModel.cs @@ -12,12 +12,12 @@ namespace ElectronicsShopContracts.BindingModels { public int ID { get; set; } - public int ProductID { get; set; } - public int OrderID { get; set; } public double SumPayment { get; set; } public PaymeantOption PayOption { get; set; } = PaymeantOption.Неоплачено; + + public int ClientID { get; set; } } } diff --git a/ElectronicsShop/ElectronicsShopContracts/SearchModels/PaymeantSearchModel.cs b/ElectronicsShop/ElectronicsShopContracts/SearchModels/PaymeantSearchModel.cs index 6332616..450909c 100644 --- a/ElectronicsShop/ElectronicsShopContracts/SearchModels/PaymeantSearchModel.cs +++ b/ElectronicsShop/ElectronicsShopContracts/SearchModels/PaymeantSearchModel.cs @@ -12,5 +12,6 @@ namespace ElectronicsShopContracts.SearchModels public int? ProductID { get; set; } public int? OrderID { get; set; } public double? SumPay { get; set; } + public int? ClientID { get; set; } } } diff --git a/ElectronicsShop/ElectronicsShopContracts/ViewModels/PaymeantViewModel.cs b/ElectronicsShop/ElectronicsShopContracts/ViewModels/PaymeantViewModel.cs index 995f035..b26ba1e 100644 --- a/ElectronicsShop/ElectronicsShopContracts/ViewModels/PaymeantViewModel.cs +++ b/ElectronicsShop/ElectronicsShopContracts/ViewModels/PaymeantViewModel.cs @@ -12,8 +12,6 @@ namespace ElectronicsShopContracts.ViewModels public class PaymeantViewModel : IPaymentModel { public int ID { get; set; } - public int ProductID { get; set; } - public int OrderID { get; set; } [DisplayName("Cумма оплаты продукта")] @@ -21,5 +19,8 @@ namespace ElectronicsShopContracts.ViewModels [DisplayName("Статус оплаты")] public PaymeantOption PayOption { get; set; } = PaymeantOption.Неоплачено; - } + + [DisplayName("Клиент")] + public int ClientID { get; set; } + } } diff --git a/ElectronicsShop/ElectronicsShopDataBaseImplement/Implements/PaymeantStorage.cs b/ElectronicsShop/ElectronicsShopDataBaseImplement/Implements/PaymeantStorage.cs index f3d10a9..0445b3d 100644 --- a/ElectronicsShop/ElectronicsShopDataBaseImplement/Implements/PaymeantStorage.cs +++ b/ElectronicsShop/ElectronicsShopDataBaseImplement/Implements/PaymeantStorage.cs @@ -48,6 +48,11 @@ namespace ElectronicsShopDataBaseImplement.Implements { return new(); } using var context = new Database(); + if (model.ClientID.HasValue) { + return context.Paymeants + .Where(x => x.ClientID == model.ClientID) + .Select(x => x.GetViewModel).ToList(); + } return context.Paymeants .Where(x => x.ID == model.ID) .Select(x => x.GetViewModel).ToList(); diff --git a/ElectronicsShop/ElectronicsShopDataBaseImplement/Migrations/20240531153626_Init.Designer.cs b/ElectronicsShop/ElectronicsShopDataBaseImplement/Migrations/20240601012156_InitMigration.Designer.cs similarity index 98% rename from ElectronicsShop/ElectronicsShopDataBaseImplement/Migrations/20240531153626_Init.Designer.cs rename to ElectronicsShop/ElectronicsShopDataBaseImplement/Migrations/20240601012156_InitMigration.Designer.cs index e9218ef..31a2e6b 100644 --- a/ElectronicsShop/ElectronicsShopDataBaseImplement/Migrations/20240531153626_Init.Designer.cs +++ b/ElectronicsShop/ElectronicsShopDataBaseImplement/Migrations/20240601012156_InitMigration.Designer.cs @@ -12,8 +12,8 @@ using Microsoft.EntityFrameworkCore.Storage.ValueConversion; namespace ElectronicsShopDataBaseImplement.Migrations { [DbContext(typeof(Database))] - [Migration("20240531153626_Init")] - partial class Init + [Migration("20240601012156_InitMigration")] + partial class InitMigration { /// protected override void BuildTargetModel(ModelBuilder modelBuilder) @@ -191,6 +191,9 @@ namespace ElectronicsShopDataBaseImplement.Migrations SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("ID")); + b.Property("ClientID") + .HasColumnType("int"); + b.Property("OrderID") .HasColumnType("int"); @@ -200,9 +203,6 @@ namespace ElectronicsShopDataBaseImplement.Migrations b.Property("PaymentID") .HasColumnType("int"); - b.Property("ProductID") - .HasColumnType("int"); - b.Property("SumPayment") .HasColumnType("float"); diff --git a/ElectronicsShop/ElectronicsShopDataBaseImplement/Migrations/20240531153626_Init.cs b/ElectronicsShop/ElectronicsShopDataBaseImplement/Migrations/20240601012156_InitMigration.cs similarity index 98% rename from ElectronicsShop/ElectronicsShopDataBaseImplement/Migrations/20240531153626_Init.cs rename to ElectronicsShop/ElectronicsShopDataBaseImplement/Migrations/20240601012156_InitMigration.cs index dc157cf..780ffb3 100644 --- a/ElectronicsShop/ElectronicsShopDataBaseImplement/Migrations/20240531153626_Init.cs +++ b/ElectronicsShop/ElectronicsShopDataBaseImplement/Migrations/20240601012156_InitMigration.cs @@ -6,7 +6,7 @@ using Microsoft.EntityFrameworkCore.Migrations; namespace ElectronicsShopDataBaseImplement.Migrations { /// - public partial class Init : Migration + public partial class InitMigration : Migration { /// protected override void Up(MigrationBuilder migrationBuilder) @@ -111,8 +111,8 @@ namespace ElectronicsShopDataBaseImplement.Migrations { ID = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), - ProductID = table.Column(type: "int", nullable: false), OrderID = table.Column(type: "int", nullable: false), + ClientID = table.Column(type: "int", nullable: false), SumPayment = table.Column(type: "float", nullable: false), PayOption = table.Column(type: "int", nullable: false), PaymentID = table.Column(type: "int", nullable: true) diff --git a/ElectronicsShop/ElectronicsShopDataBaseImplement/Migrations/DatabaseModelSnapshot.cs b/ElectronicsShop/ElectronicsShopDataBaseImplement/Migrations/DatabaseModelSnapshot.cs index ed01306..0869eef 100644 --- a/ElectronicsShop/ElectronicsShopDataBaseImplement/Migrations/DatabaseModelSnapshot.cs +++ b/ElectronicsShop/ElectronicsShopDataBaseImplement/Migrations/DatabaseModelSnapshot.cs @@ -188,6 +188,9 @@ namespace ElectronicsShopDataBaseImplement.Migrations SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("ID")); + b.Property("ClientID") + .HasColumnType("int"); + b.Property("OrderID") .HasColumnType("int"); @@ -197,9 +200,6 @@ namespace ElectronicsShopDataBaseImplement.Migrations b.Property("PaymentID") .HasColumnType("int"); - b.Property("ProductID") - .HasColumnType("int"); - b.Property("SumPayment") .HasColumnType("float"); diff --git a/ElectronicsShop/ElectronicsShopDataBaseImplement/Models/Paymeant.cs b/ElectronicsShop/ElectronicsShopDataBaseImplement/Models/Paymeant.cs index ad2accc..851e53c 100644 --- a/ElectronicsShop/ElectronicsShopDataBaseImplement/Models/Paymeant.cs +++ b/ElectronicsShop/ElectronicsShopDataBaseImplement/Models/Paymeant.cs @@ -17,13 +17,13 @@ namespace ElectronicsShopDataBaseImplement.Models { public int ID { get; set; } - [ForeignKey("ProductID")] - public int ProductID { get; set; } - [ForeignKey("OrderID")] public int OrderID { get; set; } [Required] + public int ClientID { get; set; } + + [Required] public double SumPayment { get; set; } [Required] @@ -38,10 +38,10 @@ namespace ElectronicsShopDataBaseImplement.Models return new Paymeant() { ID = model.ID, - ProductID = model.ProductID, OrderID = model.OrderID, SumPayment = model.SumPayment, PayOption = model.PayOption, + ClientID = model.ClientID, }; } public void Update(PaymeantBindingModel? model) @@ -50,7 +50,6 @@ namespace ElectronicsShopDataBaseImplement.Models { return; } - ProductID = model.ProductID; OrderID = model.OrderID; SumPayment = model.SumPayment; PayOption = model.PayOption; @@ -59,11 +58,10 @@ namespace ElectronicsShopDataBaseImplement.Models public PaymeantViewModel GetViewModel => new() { ID = ID, - ProductID = ProductID, OrderID = OrderID, SumPayment = SumPayment, PayOption = PayOption, + ClientID = ClientID, }; - - } + } } diff --git a/ElectronicsShop/ElectronicsShopDataModels/Models/IPaymentModel.cs b/ElectronicsShop/ElectronicsShopDataModels/Models/IPaymentModel.cs index 269c5e4..1170593 100644 --- a/ElectronicsShop/ElectronicsShopDataModels/Models/IPaymentModel.cs +++ b/ElectronicsShop/ElectronicsShopDataModels/Models/IPaymentModel.cs @@ -10,9 +10,9 @@ namespace ElectronicsShopDataModels.Models { public interface IPaymentModel: IID { - int ProductID { get; } int OrderID { get; } double SumPayment { get; } PaymeantOption PayOption { get; } + int ClientID { get; } } } diff --git a/ElectronicsShop/ElectronicsShopRestAPI/Controllers/ClientController.cs b/ElectronicsShop/ElectronicsShopRestAPI/Controllers/ClientController.cs index 8ddf38f..8598ce9 100644 --- a/ElectronicsShop/ElectronicsShopRestAPI/Controllers/ClientController.cs +++ b/ElectronicsShop/ElectronicsShopRestAPI/Controllers/ClientController.cs @@ -13,10 +13,12 @@ namespace ElectronicsShopRestAPI.Controllers { private readonly ILogger _logger; private readonly IClientLogic _logic; + private readonly IPaymeantLogic _payLogic; - public ClientController(ILogger logger, IClientLogic logic) { + public ClientController(ILogger logger, IClientLogic logic, IPaymeantLogic payLogic) { _logger = logger; _logic = logic; + _payLogic = payLogic; } [HttpGet] @@ -54,5 +56,26 @@ namespace ElectronicsShopRestAPI.Controllers { throw; } } + + [HttpPost] + public void CreatePaymeant (PaymeantBindingModel model) { + try { + _payLogic.CreatePay(model); + } + catch (Exception ex) { + _logger.LogError(ex, "Ошибка создания оплаты"); + } + } + + [HttpPost] + public List? GetPaymeants(int _clientID) { + try { + return _payLogic.ReadList(new PaymeantSearchModel { ClientID = _clientID }); + } + catch (Exception ex) { + _logger.LogError(ex, $"Ошибка получения списка оплат клиента id = {_clientID}"); + throw; + } + } } } diff --git a/ElectronicsShop/ElectronicsShopRestAPI/Program.cs b/ElectronicsShop/ElectronicsShopRestAPI/Program.cs index 2228ccc..76cd9f5 100644 --- a/ElectronicsShop/ElectronicsShopRestAPI/Program.cs +++ b/ElectronicsShop/ElectronicsShopRestAPI/Program.cs @@ -23,6 +23,7 @@ builder.Services.AddTransient(); builder.Services.AddTransient(); builder.Services.AddTransient(); builder.Services.AddTransient(); +builder.Services.AddTransient(); builder.Services.AddTransient(); builder.Services.AddTransient(); diff --git a/ElectronicsShop/ElectronicsShopShopClientApp/Controllers/HomeController.cs b/ElectronicsShop/ElectronicsShopShopClientApp/Controllers/HomeController.cs index 9a07824..2ceec77 100644 --- a/ElectronicsShop/ElectronicsShopShopClientApp/Controllers/HomeController.cs +++ b/ElectronicsShop/ElectronicsShopShopClientApp/Controllers/HomeController.cs @@ -2,6 +2,7 @@ using ElectronicsShopContracts.BindingModels; using ElectronicsShopContracts.BusinessLogicContracts; using ElectronicsShopContracts.SearchModels; using ElectronicsShopContracts.ViewModels; +using ElectronicsShopDataModels.Enums; using ElectronicsShopDataModels.Models; using ElectronicsShopUserApp.Models; using Microsoft.AspNetCore.Mvc; @@ -28,7 +29,7 @@ namespace ElectronicsShopUserApp.Controllers { if (APIClient.Client == null) { return Redirect("~/Home/Enter"); } - return View(APIClient.GetRequset>($"api/main/getorders?_clientid={APIClient.Client.ID}")); + return View(APIClient.GetRequset>($"api/client/getpaymeants?_clientid={APIClient.Client.ID}")); } [HttpGet] @@ -150,7 +151,7 @@ namespace ElectronicsShopUserApp.Controllers { } [HttpPost] - public void EditOrder(int sum, int id) { + public void EditOrder(double sum, int id) { if (sum <= 0) { APIClient.PostRequest($"api/main/deleteorders", new OrderBindingModel { ID = id }); } @@ -181,7 +182,7 @@ namespace ElectronicsShopUserApp.Controllers { } [HttpPost] - public void OrderView(int sum, int id) { + public void OrderView(double sum, int id) { if (sum <= 0) { APIClient.PostRequest($"api/main/deleteorders", new OrderBindingModel { ID = id}); } @@ -211,12 +212,6 @@ namespace ElectronicsShopUserApp.Controllers { Response.Redirect("OrderView"); } - [HttpPost] - public double Calc(int count, int product) - { - var _product = APIClient.GetRequset($"api/main/getproduct?_productid={product}"); - return count * (_product?.Price ?? 1); - } [HttpGet] public IActionResult Report() { @@ -233,6 +228,8 @@ namespace ElectronicsShopUserApp.Controllers { //ViewBag.Reports = APIClient.GetRequset>($"api/main/getproducts"); return View(); } + + [HttpGet] public IActionResult Payment(int id) { if (APIClient.Client == null) @@ -242,7 +239,7 @@ namespace ElectronicsShopUserApp.Controllers { if (id == 0) { - return Redirect("Orders"); + return Redirect("~/Home/Index"); } var products = APIClient.GetRequset>>($"api/main/getorderproducts?_orderid={id}"); @@ -256,6 +253,39 @@ namespace ElectronicsShopUserApp.Controllers { (int, Dictionary) tuple = (id, _productList); return View(tuple); } + + [HttpPost] + public void Payment(double sum, double paysum, int id) { + if (APIClient.Client == null) { + throw new Exception(" "); + } + if (paysum <= 0) { + throw new Exception(" 0"); + } + if (paysum > sum) { + throw new Exception(" "); + } + APIClient.PostRequest("api/client/createpaymeant", new PaymeantBindingModel { + OrderID = id, + SumPayment = paysum, + PayOption = PayOptionCalc(sum, paysum), + ClientID = APIClient.Client.ID + }); + Response.Redirect("Index"); + } + + [HttpPost] + public PaymeantOption PayOptionCalc(double sum, double paysum) { + if (paysum < sum) { + return PaymeantOption._; + } + else if (paysum == sum) { + return PaymeantOption._; + } + else { + return PaymeantOption.; + } + } } } diff --git a/ElectronicsShop/ElectronicsShopShopClientApp/Views/Home/Index.cshtml b/ElectronicsShop/ElectronicsShopShopClientApp/Views/Home/Index.cshtml index 3464ddf..ff68e3e 100644 --- a/ElectronicsShop/ElectronicsShopShopClientApp/Views/Home/Index.cshtml +++ b/ElectronicsShop/ElectronicsShopShopClientApp/Views/Home/Index.cshtml @@ -1,6 +1,6 @@ @using ElectronicsShopContracts.ViewModels -@model List +@model List @{ ViewData["Title"] = "Home Page"; @@ -20,14 +20,17 @@ + @@ -38,10 +41,13 @@ @Html.DisplayFor(modelItem => item.ID) + } diff --git a/ElectronicsShop/ElectronicsShopShopClientApp/Views/Home/Payment.cshtml b/ElectronicsShop/ElectronicsShopShopClientApp/Views/Home/Payment.cshtml index 625e2c6..a978530 100644 --- a/ElectronicsShop/ElectronicsShopShopClientApp/Views/Home/Payment.cshtml +++ b/ElectronicsShop/ElectronicsShopShopClientApp/Views/Home/Payment.cshtml @@ -16,17 +16,23 @@
-
-
Сумма платежа:
-
- - -
-
-
+
+
Сумма платежа:
+
+ +
+ +
+
+
Сумма к оплате:
+
+ + + +
+ Номер + Номер заказа - Дата создания + Сумма к оплате - Сумма + Статус оплаты
- @Html.DisplayFor(modelItem => item.DateCreate) + @Html.DisplayFor(modelItem => item.OrderID) - @Html.DisplayFor(modelItem => item.Sum) + @Html.DisplayFor(modelItem => item.SumPayment) + + @Html.DisplayFor(modelItem => item.PayOption)
@@ -70,28 +76,29 @@ - + \ No newline at end of file