This commit is contained in:
Илья Федотов 2024-06-01 05:00:05 +04:00
parent 277588130b
commit 0cbba88298
11 changed files with 88 additions and 54 deletions

View File

@ -71,7 +71,7 @@ namespace ElectronicsShopBusinessLogic.BusinessLogic
{ {
throw new ArgumentNullException("Сумма оплаты должна быть больше 0", nameof(model.SumPayment)); 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}"); $".PayOption{model.PayOption}");
} }

View File

@ -12,8 +12,6 @@ namespace ElectronicsShopContracts.BindingModels
{ {
public int ID { get; set; } public int ID { get; set; }
public int ProductID { get; set; }
public int OrderID { get; set; } public int OrderID { get; set; }
public double SumPayment { get; set; } public double SumPayment { get; set; }

View File

@ -12,8 +12,8 @@ using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
namespace ElectronicsShopDataBaseImplement.Migrations namespace ElectronicsShopDataBaseImplement.Migrations
{ {
[DbContext(typeof(Database))] [DbContext(typeof(Database))]
[Migration("20240531153626_Init")] [Migration("20240601002930_InitMigration")]
partial class Init partial class InitMigration
{ {
/// <inheritdoc /> /// <inheritdoc />
protected override void BuildTargetModel(ModelBuilder modelBuilder) protected override void BuildTargetModel(ModelBuilder modelBuilder)
@ -200,9 +200,6 @@ namespace ElectronicsShopDataBaseImplement.Migrations
b.Property<int?>("PaymentID") b.Property<int?>("PaymentID")
.HasColumnType("int"); .HasColumnType("int");
b.Property<int>("ProductID")
.HasColumnType("int");
b.Property<double>("SumPayment") b.Property<double>("SumPayment")
.HasColumnType("float"); .HasColumnType("float");

View File

@ -6,7 +6,7 @@ using Microsoft.EntityFrameworkCore.Migrations;
namespace ElectronicsShopDataBaseImplement.Migrations namespace ElectronicsShopDataBaseImplement.Migrations
{ {
/// <inheritdoc /> /// <inheritdoc />
public partial class Init : Migration public partial class InitMigration : Migration
{ {
/// <inheritdoc /> /// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder) protected override void Up(MigrationBuilder migrationBuilder)
@ -111,7 +111,6 @@ namespace ElectronicsShopDataBaseImplement.Migrations
{ {
ID = table.Column<int>(type: "int", nullable: false) ID = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"), .Annotation("SqlServer:Identity", "1, 1"),
ProductID = table.Column<int>(type: "int", nullable: false),
OrderID = table.Column<int>(type: "int", nullable: false), OrderID = table.Column<int>(type: "int", nullable: false),
SumPayment = table.Column<double>(type: "float", nullable: false), SumPayment = table.Column<double>(type: "float", nullable: false),
PayOption = table.Column<int>(type: "int", nullable: false), PayOption = table.Column<int>(type: "int", nullable: false),

View File

@ -197,9 +197,6 @@ namespace ElectronicsShopDataBaseImplement.Migrations
b.Property<int?>("PaymentID") b.Property<int?>("PaymentID")
.HasColumnType("int"); .HasColumnType("int");
b.Property<int>("ProductID")
.HasColumnType("int");
b.Property<double>("SumPayment") b.Property<double>("SumPayment")
.HasColumnType("float"); .HasColumnType("float");

View File

@ -17,9 +17,6 @@ namespace ElectronicsShopDataBaseImplement.Models
{ {
public int ID { get; set; } public int ID { get; set; }
[ForeignKey("ProductID")]
public int ProductID { get; set; }
[ForeignKey("OrderID")] [ForeignKey("OrderID")]
public int OrderID { get; set; } public int OrderID { get; set; }
@ -38,7 +35,6 @@ namespace ElectronicsShopDataBaseImplement.Models
return new Paymeant() return new Paymeant()
{ {
ID = model.ID, ID = model.ID,
ProductID = model.ProductID,
OrderID = model.OrderID, OrderID = model.OrderID,
SumPayment = model.SumPayment, SumPayment = model.SumPayment,
PayOption = model.PayOption, PayOption = model.PayOption,
@ -50,7 +46,6 @@ namespace ElectronicsShopDataBaseImplement.Models
{ {
return; return;
} }
ProductID = model.ProductID;
OrderID = model.OrderID; OrderID = model.OrderID;
SumPayment = model.SumPayment; SumPayment = model.SumPayment;
PayOption = model.PayOption; PayOption = model.PayOption;
@ -59,7 +54,6 @@ namespace ElectronicsShopDataBaseImplement.Models
public PaymeantViewModel GetViewModel => new() public PaymeantViewModel GetViewModel => new()
{ {
ID = ID, ID = ID,
ProductID = ProductID,
OrderID = OrderID, OrderID = OrderID,
SumPayment = SumPayment, SumPayment = SumPayment,
PayOption = PayOption, PayOption = PayOption,

View File

@ -10,7 +10,6 @@ namespace ElectronicsShopDataModels.Models
{ {
public interface IPaymentModel: IID public interface IPaymentModel: IID
{ {
int ProductID { get; }
int OrderID { get; } int OrderID { get; }
double SumPayment { get; } double SumPayment { get; }
PaymeantOption PayOption { get; } PaymeantOption PayOption { get; }

View File

@ -13,10 +13,12 @@ namespace ElectronicsShopRestAPI.Controllers {
private readonly ILogger _logger; private readonly ILogger _logger;
private readonly IClientLogic _logic; private readonly IClientLogic _logic;
private readonly IPaymeantLogic _payLogic;
public ClientController(ILogger<ClientController> logger, IClientLogic logic) { public ClientController(ILogger<ClientController> logger, IClientLogic logic, IPaymeantLogic payLogic) {
_logger = logger; _logger = logger;
_logic = logic; _logic = logic;
_payLogic = payLogic;
} }
[HttpGet] [HttpGet]
@ -54,5 +56,15 @@ namespace ElectronicsShopRestAPI.Controllers {
throw; throw;
} }
} }
[HttpPost]
public void CreatePaymeant (PaymeantBindingModel model) {
try {
_payLogic.CreatePay(model);
}
catch (Exception ex) {
_logger.LogError(ex, "Ошибка создания оплаты");
}
}
} }
} }

View File

@ -15,12 +15,14 @@ builder.Services.AddTransient<IEmployeeStorage, EmployeeStorage>();
builder.Services.AddTransient<IProductStorage, ProductStorage>(); builder.Services.AddTransient<IProductStorage, ProductStorage>();
builder.Services.AddTransient<IOrderStorage, OrderStorage>(); builder.Services.AddTransient<IOrderStorage, OrderStorage>();
builder.Services.AddTransient<ICostItemStorage, CostItemStorage>(); builder.Services.AddTransient<ICostItemStorage, CostItemStorage>();
builder.Services.AddTransient<IPaymeantStorage, PaymeantStorage>();
builder.Services.AddTransient<IClientLogic, ClientLogic>(); builder.Services.AddTransient<IClientLogic, ClientLogic>();
builder.Services.AddTransient<IEmployeeLogic, EmployeeLogic>(); builder.Services.AddTransient<IEmployeeLogic, EmployeeLogic>();
builder.Services.AddTransient<IProductLogic, ProductLogic>(); builder.Services.AddTransient<IProductLogic, ProductLogic>();
builder.Services.AddTransient<IOrderLogic, OrderLogic>(); builder.Services.AddTransient<IOrderLogic, OrderLogic>();
builder.Services.AddTransient<ICostItemLogic, CostItemLogic>(); builder.Services.AddTransient<ICostItemLogic, CostItemLogic>();
builder.Services.AddTransient<IPaymeantLogic, PaymeantLogic>();
builder.Services.AddControllers(); builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle

View File

@ -2,6 +2,7 @@ using ElectronicsShopContracts.BindingModels;
using ElectronicsShopContracts.BusinessLogicContracts; using ElectronicsShopContracts.BusinessLogicContracts;
using ElectronicsShopContracts.SearchModels; using ElectronicsShopContracts.SearchModels;
using ElectronicsShopContracts.ViewModels; using ElectronicsShopContracts.ViewModels;
using ElectronicsShopDataModels.Enums;
using ElectronicsShopDataModels.Models; using ElectronicsShopDataModels.Models;
using ElectronicsShopUserApp.Models; using ElectronicsShopUserApp.Models;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
@ -150,7 +151,7 @@ namespace ElectronicsShopUserApp.Controllers {
} }
[HttpPost] [HttpPost]
public void EditOrder(int sum, int id) { public void EditOrder(double sum, int id) {
if (sum <= 0) { if (sum <= 0) {
APIClient.PostRequest($"api/main/deleteorders", new OrderBindingModel { ID = id }); APIClient.PostRequest($"api/main/deleteorders", new OrderBindingModel { ID = id });
} }
@ -181,7 +182,7 @@ namespace ElectronicsShopUserApp.Controllers {
} }
[HttpPost] [HttpPost]
public void OrderView(int sum, int id) { public void OrderView(double sum, int id) {
if (sum <= 0) { if (sum <= 0) {
APIClient.PostRequest($"api/main/deleteorders", new OrderBindingModel { ID = id}); APIClient.PostRequest($"api/main/deleteorders", new OrderBindingModel { ID = id});
} }
@ -211,12 +212,6 @@ namespace ElectronicsShopUserApp.Controllers {
Response.Redirect("OrderView"); Response.Redirect("OrderView");
} }
[HttpPost]
public double Calc(int count, int product)
{
var _product = APIClient.GetRequset<ProductViewModel>($"api/main/getproduct?_productid={product}");
return count * (_product?.Price ?? 1);
}
[HttpGet] [HttpGet]
public IActionResult Report() public IActionResult Report()
{ {
@ -233,6 +228,8 @@ namespace ElectronicsShopUserApp.Controllers {
//ViewBag.Reports = APIClient.GetRequset<List<ProductViewModel>>($"api/main/getproducts"); Ïèñåì òàê æå ïîêà íåìà //ViewBag.Reports = APIClient.GetRequset<List<ProductViewModel>>($"api/main/getproducts"); Ïèñåì òàê æå ïîêà íåìà
return View(); return View();
} }
[HttpGet]
public IActionResult Payment(int id) public IActionResult Payment(int id)
{ {
if (APIClient.Client == null) if (APIClient.Client == null)
@ -242,7 +239,7 @@ namespace ElectronicsShopUserApp.Controllers {
if (id == 0) if (id == 0)
{ {
return Redirect("Orders"); return Redirect("~/Home/Index");
} }
var products = APIClient.GetRequset<List<List<string>>>($"api/main/getorderproducts?_orderid={id}"); var products = APIClient.GetRequset<List<List<string>>>($"api/main/getorderproducts?_orderid={id}");
@ -257,5 +254,37 @@ namespace ElectronicsShopUserApp.Controllers {
return View(tuple); 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 = sum,
PayOption = PayOptionCalc(sum, paysum)
});
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.Íåîïëà÷åíî;
}
}
} }
} }

View File

@ -16,17 +16,23 @@
<div class="col-4"></div> <div class="col-4"></div>
<div class="col-8"> <div class="col-8">
<input id="id" type="hidden" name="id" readonly value="@Model.Item1" /> <input id="id" type="hidden" name="id" readonly value="@Model.Item1" />
<div class="row">
<div class="col-4">Сумма платежа:</div>
<div class="col-8">
<input type="text" name="paysum" id="paysum" />
<input type="submit" value="Оплатить!" class="btn btn-primary" />
</div>
</div>
</div> </div>
</div> </div>
<div class=" text-center"> <div class=" text-center">
<div class="row">
<div class="col-4">Сумма платежа:</div>
<div class="col-8">
<input type="text" name="paysum" id="paysum" />
</div>
</div>
<div class="row">
<div class="col-4">Сумма к оплате:</div>
<div class="col-8">
<input type="text" name="sum" id="sum" readonly />
</divЫ>
<input type="submit" value="Оплатить!" class="btn btn-primary" />
</div>
<table class="table"> <table class="table">
<thead> <thead>
<tr> <tr>
@ -70,28 +76,29 @@
<div class="row"> <div class="row">
<div class="col-4"></div> <div class="col-4"></div>
<div class="col-8"> <div class="col-8">
<input type="submit" value="Заказ готов, вернуться!" class="btn btn-primary" /> <a class="btn btn-primary btn-sm" asp-action="Index">Отменить - вернуться на главную страницу</a>
</div> </div>
</div> </div>
</div> </div>
<script src="~/lib/jquery/dist/jquery.min.js"></script>
</form> </form>
<script> <script>
$('#paysum').on('change', function () { $('#btn').on('click', function () {
check(); calc();
}); });
function check() {
var paysum = $('#paysum').val(); let sum = 0;
if (count && product) { const elementRows = document.querySelectorAll('.element');
$.ajax({ calc();
method: "POST",
url: "/Home/Calc", function calc() {
data: { paysum: paysum }, elementRows.forEach(row => {
success: function (result) { const count = parseInt(row.querySelector('.count').innerHTML, 10);
$("#sum").val(result); const countsum = parseInt(row.querySelector('.countsum').innerHTML, 10);
} const rowTotal = count * countsum;
}); sum += rowTotal;
}; });
$('#sum').val(sum);
} }
</script> </script>