Беда...
This commit is contained in:
parent
5f4887ec8c
commit
979625ebae
@ -30,6 +30,15 @@ namespace ElectronicsShopBusinessLogic.BusinessLogic
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool Update(OrderBindingModel model) {
|
||||||
|
CheckModel(model);
|
||||||
|
if (_storage.Update(model) == null) {
|
||||||
|
_logger.LogWarning("Update operation failed");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
public List<OrderViewModel>? ReadList(OrderSearchModel? model)
|
public List<OrderViewModel>? ReadList(OrderSearchModel? model)
|
||||||
{
|
{
|
||||||
_logger.LogInformation($"ReadList:ID:{model?.ID}");
|
_logger.LogInformation($"ReadList:ID:{model?.ID}");
|
||||||
@ -68,29 +77,5 @@ namespace ElectronicsShopBusinessLogic.BusinessLogic
|
|||||||
_logger.LogInformation($"ReadElement find. ID:{element.ID}");
|
_logger.LogInformation($"ReadElement find. ID:{element.ID}");
|
||||||
return element;
|
return element;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool AddProduct(IProductModel product, int count, int orderID) {
|
|
||||||
var _order = ReadElement(new OrderSearchModel { ID = orderID });
|
|
||||||
try {
|
|
||||||
if (_order.ProductList.ContainsKey(product.ID)) {
|
|
||||||
_order.ProductList[product.ID] = (product, count);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
_order.ProductList.Add(product.ID, (product, count));
|
|
||||||
_storage.Update(new OrderBindingModel {
|
|
||||||
ClientID = _order.ClientID,
|
|
||||||
ProductList = _order.ProductList,
|
|
||||||
Sum = 5000,
|
|
||||||
DateCreate = DateTime.Now,
|
|
||||||
ID = _order.ID,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch {
|
|
||||||
_logger.LogWarning("AddProduct. operation is failed");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -17,6 +17,6 @@ namespace ElectronicsShopContracts.BusinessLogicContracts
|
|||||||
OrderViewModel? ReadElement(OrderSearchModel model);
|
OrderViewModel? ReadElement(OrderSearchModel model);
|
||||||
|
|
||||||
bool CreateOrder(OrderBindingModel model);
|
bool CreateOrder(OrderBindingModel model);
|
||||||
bool AddProduct(IProductModel product, int count, int orderID);
|
bool Update(OrderBindingModel model);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -27,13 +27,13 @@ namespace ElectronicsShopDataBaseImplement.Implements
|
|||||||
using var context = new Database();
|
using var context = new Database();
|
||||||
using var transcation = context.Database.BeginTransaction();
|
using var transcation = context.Database.BeginTransaction();
|
||||||
try {
|
try {
|
||||||
var product = context.Orders.FirstOrDefault(rec => rec.ID == model.ID);
|
var order = context.Orders.FirstOrDefault(rec => rec.ID == model.ID);
|
||||||
if (product == null) {
|
if (order == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
product.UpdateProducts(context, model);
|
order.UpdateProducts(context, model);
|
||||||
transcation.Commit();
|
transcation.Commit();
|
||||||
return product.GetViewModel;
|
return order.GetViewModel;
|
||||||
}
|
}
|
||||||
catch {
|
catch {
|
||||||
transcation.Rollback();
|
transcation.Rollback();
|
||||||
@ -61,7 +61,8 @@ namespace ElectronicsShopDataBaseImplement.Implements
|
|||||||
.Include(x => x.Payments)
|
.Include(x => x.Payments)
|
||||||
.Include(x => x.Products)
|
.Include(x => x.Products)
|
||||||
.ThenInclude(x => x._product)
|
.ThenInclude(x => x._product)
|
||||||
.FirstOrDefault(x => (model.ClientID.HasValue && x.ClientID == model.ClientID))?.GetViewModel;
|
.OrderBy(x => x.ID)
|
||||||
|
.LastOrDefault(x => (model.ClientID.HasValue && x.ClientID == model.ClientID))?.GetViewModel;
|
||||||
}
|
}
|
||||||
if (model.ID.HasValue)
|
if (model.ID.HasValue)
|
||||||
{
|
{
|
||||||
@ -77,7 +78,7 @@ namespace ElectronicsShopDataBaseImplement.Implements
|
|||||||
public List<OrderViewModel> GetFilteredList(OrderSearchModel model)
|
public List<OrderViewModel> GetFilteredList(OrderSearchModel model)
|
||||||
{
|
{
|
||||||
using var context = new Database();
|
using var context = new Database();
|
||||||
if (!model.ID.HasValue && (model.DateFrom == null || model.DateTo == null))
|
if (!model.ID.HasValue && model.DateFrom.HasValue && model.DateTo.HasValue)
|
||||||
{
|
{
|
||||||
return new();
|
return new();
|
||||||
}
|
}
|
||||||
@ -99,7 +100,7 @@ namespace ElectronicsShopDataBaseImplement.Implements
|
|||||||
public List<OrderViewModel> GetFullList()
|
public List<OrderViewModel> GetFullList()
|
||||||
{
|
{
|
||||||
using var context = new Database();
|
using var context = new Database();
|
||||||
return context.Orders
|
return context.Orders
|
||||||
.Include(x => x.Products)
|
.Include(x => x.Products)
|
||||||
.ThenInclude(x => x._product).ToList()
|
.ThenInclude(x => x._product).ToList()
|
||||||
.Select(x => x.GetViewModel).ToList();
|
.Select(x => x.GetViewModel).ToList();
|
||||||
|
@ -1,283 +0,0 @@
|
|||||||
// <auto-generated />
|
|
||||||
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("20240529092847_Init")]
|
|
||||||
partial class Init
|
|
||||||
{
|
|
||||||
/// <inheritdoc />
|
|
||||||
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<int>("ID")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("ID"));
|
|
||||||
|
|
||||||
b.Property<string>("ClientFIO")
|
|
||||||
.IsRequired()
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("Email")
|
|
||||||
.IsRequired()
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("Password")
|
|
||||||
.IsRequired()
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.HasKey("ID");
|
|
||||||
|
|
||||||
b.ToTable("Clients");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("ElectronicsShopDataBaseImplement.Models.CostItem", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("ID")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("ID"));
|
|
||||||
|
|
||||||
b.Property<int>("CostNum")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<int>("EmployeeID")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<string>("Name")
|
|
||||||
.IsRequired()
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<double>("Price")
|
|
||||||
.HasColumnType("float");
|
|
||||||
|
|
||||||
b.HasKey("ID");
|
|
||||||
|
|
||||||
b.HasIndex("EmployeeID");
|
|
||||||
|
|
||||||
b.ToTable("CostItems");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("ElectronicsShopDataBaseImplement.Models.Employee", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("ID")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("ID"));
|
|
||||||
|
|
||||||
b.Property<string>("EmployeeFIO")
|
|
||||||
.IsRequired()
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("Login")
|
|
||||||
.IsRequired()
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.Property<string>("Password")
|
|
||||||
.IsRequired()
|
|
||||||
.HasColumnType("nvarchar(max)");
|
|
||||||
|
|
||||||
b.HasKey("ID");
|
|
||||||
|
|
||||||
b.ToTable("Employees");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("ElectronicsShopDataBaseImplement.Models.Order", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("ID")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("ID"));
|
|
||||||
|
|
||||||
b.Property<int>("ClientID")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<DateTime>("DateCreate")
|
|
||||||
.HasColumnType("datetime2");
|
|
||||||
|
|
||||||
b.Property<double>("Sum")
|
|
||||||
.HasColumnType("float");
|
|
||||||
|
|
||||||
b.HasKey("ID");
|
|
||||||
|
|
||||||
b.HasIndex("ClientID");
|
|
||||||
|
|
||||||
b.ToTable("Orders");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("ElectronicsShopDataBaseImplement.Models.OrderProduct", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("Id")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
|
|
||||||
|
|
||||||
b.Property<int>("Count")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<int>("OrderID")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<int>("ProductID")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<int?>("_productID")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.HasKey("Id");
|
|
||||||
|
|
||||||
b.HasIndex("ProductID");
|
|
||||||
|
|
||||||
b.HasIndex("_productID");
|
|
||||||
|
|
||||||
b.ToTable("OrderProducts");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("ElectronicsShopDataBaseImplement.Models.Paymeant", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("ID")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("ID"));
|
|
||||||
|
|
||||||
b.Property<int>("OrderID")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<int>("PayOption")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<int?>("PaymentID")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<int>("ProductID")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<double>("SumPayment")
|
|
||||||
.HasColumnType("float");
|
|
||||||
|
|
||||||
b.HasKey("ID");
|
|
||||||
|
|
||||||
b.HasIndex("PaymentID");
|
|
||||||
|
|
||||||
b.ToTable("Paymeants");
|
|
||||||
});
|
|
||||||
|
|
||||||
modelBuilder.Entity("ElectronicsShopDataBaseImplement.Models.Product", b =>
|
|
||||||
{
|
|
||||||
b.Property<int>("ID")
|
|
||||||
.ValueGeneratedOnAdd()
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("ID"));
|
|
||||||
|
|
||||||
b.Property<int>("CostItemID")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.Property<double>("Price")
|
|
||||||
.HasColumnType("float");
|
|
||||||
|
|
||||||
b.Property<string>("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("ProductID")
|
|
||||||
.OnDelete(DeleteBehavior.Cascade)
|
|
||||||
.IsRequired();
|
|
||||||
|
|
||||||
b.HasOne("ElectronicsShopDataBaseImplement.Models.Product", "_product")
|
|
||||||
.WithMany()
|
|
||||||
.HasForeignKey("_productID");
|
|
||||||
|
|
||||||
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
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,48 +0,0 @@
|
|||||||
using System;
|
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
|
||||||
|
|
||||||
#nullable disable
|
|
||||||
|
|
||||||
namespace ElectronicsShopDataBaseImplement.Migrations
|
|
||||||
{
|
|
||||||
/// <inheritdoc />
|
|
||||||
public partial class AddMessages : Migration
|
|
||||||
{
|
|
||||||
/// <inheritdoc />
|
|
||||||
protected override void Up(MigrationBuilder migrationBuilder)
|
|
||||||
{
|
|
||||||
migrationBuilder.CreateTable(
|
|
||||||
name: "Messages",
|
|
||||||
columns: table => new
|
|
||||||
{
|
|
||||||
MessageID = table.Column<string>(type: "nvarchar(450)", nullable: false),
|
|
||||||
ClientID = table.Column<int>(type: "int", nullable: true),
|
|
||||||
SenderName = table.Column<string>(type: "nvarchar(max)", nullable: false),
|
|
||||||
DateDelivery = table.Column<DateTime>(type: "datetime2", nullable: false),
|
|
||||||
Subject = table.Column<string>(type: "nvarchar(max)", nullable: false),
|
|
||||||
Body = table.Column<string>(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");
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <inheritdoc />
|
|
||||||
protected override void Down(MigrationBuilder migrationBuilder)
|
|
||||||
{
|
|
||||||
migrationBuilder.DropTable(
|
|
||||||
name: "Messages");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -12,8 +12,8 @@ using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
|||||||
namespace ElectronicsShopDataBaseImplement.Migrations
|
namespace ElectronicsShopDataBaseImplement.Migrations
|
||||||
{
|
{
|
||||||
[DbContext(typeof(Database))]
|
[DbContext(typeof(Database))]
|
||||||
[Migration("20240530150159_AddMessages")]
|
[Migration("20240531061328_InitMigration")]
|
||||||
partial class AddMessages
|
partial class InitMigration
|
||||||
{
|
{
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
protected override void BuildTargetModel(ModelBuilder modelBuilder)
|
protected override void BuildTargetModel(ModelBuilder modelBuilder)
|
||||||
@ -174,14 +174,11 @@ namespace ElectronicsShopDataBaseImplement.Migrations
|
|||||||
b.Property<int>("ProductID")
|
b.Property<int>("ProductID")
|
||||||
.HasColumnType("int");
|
.HasColumnType("int");
|
||||||
|
|
||||||
b.Property<int?>("_productID")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.HasKey("Id");
|
b.HasKey("Id");
|
||||||
|
|
||||||
b.HasIndex("ProductID");
|
b.HasIndex("OrderID");
|
||||||
|
|
||||||
b.HasIndex("_productID");
|
b.HasIndex("ProductID");
|
||||||
|
|
||||||
b.ToTable("OrderProducts");
|
b.ToTable("OrderProducts");
|
||||||
});
|
});
|
||||||
@ -274,13 +271,15 @@ namespace ElectronicsShopDataBaseImplement.Migrations
|
|||||||
{
|
{
|
||||||
b.HasOne("ElectronicsShopDataBaseImplement.Models.Order", "_order")
|
b.HasOne("ElectronicsShopDataBaseImplement.Models.Order", "_order")
|
||||||
.WithMany("Products")
|
.WithMany("Products")
|
||||||
.HasForeignKey("ProductID")
|
.HasForeignKey("OrderID")
|
||||||
.OnDelete(DeleteBehavior.Cascade)
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
.IsRequired();
|
.IsRequired();
|
||||||
|
|
||||||
b.HasOne("ElectronicsShopDataBaseImplement.Models.Product", "_product")
|
b.HasOne("ElectronicsShopDataBaseImplement.Models.Product", "_product")
|
||||||
.WithMany()
|
.WithMany()
|
||||||
.HasForeignKey("_productID");
|
.HasForeignKey("ProductID")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
b.Navigation("_order");
|
b.Navigation("_order");
|
||||||
|
|
@ -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)
|
||||||
@ -41,6 +41,27 @@ namespace ElectronicsShopDataBaseImplement.Migrations
|
|||||||
table.PrimaryKey("PK_Employees", x => x.ID);
|
table.PrimaryKey("PK_Employees", x => x.ID);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
migrationBuilder.CreateTable(
|
||||||
|
name: "Messages",
|
||||||
|
columns: table => new
|
||||||
|
{
|
||||||
|
MessageID = table.Column<string>(type: "nvarchar(450)", nullable: false),
|
||||||
|
ClientID = table.Column<int>(type: "int", nullable: true),
|
||||||
|
SenderName = table.Column<string>(type: "nvarchar(max)", nullable: false),
|
||||||
|
DateDelivery = table.Column<DateTime>(type: "datetime2", nullable: false),
|
||||||
|
Subject = table.Column<string>(type: "nvarchar(max)", nullable: false),
|
||||||
|
Body = table.Column<string>(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(
|
migrationBuilder.CreateTable(
|
||||||
name: "Orders",
|
name: "Orders",
|
||||||
columns: table => new
|
columns: table => new
|
||||||
@ -135,23 +156,23 @@ namespace ElectronicsShopDataBaseImplement.Migrations
|
|||||||
.Annotation("SqlServer:Identity", "1, 1"),
|
.Annotation("SqlServer:Identity", "1, 1"),
|
||||||
OrderID = table.Column<int>(type: "int", nullable: false),
|
OrderID = table.Column<int>(type: "int", nullable: false),
|
||||||
ProductID = table.Column<int>(type: "int", nullable: false),
|
ProductID = table.Column<int>(type: "int", nullable: false),
|
||||||
Count = table.Column<int>(type: "int", nullable: false),
|
Count = table.Column<int>(type: "int", nullable: false)
|
||||||
_productID = table.Column<int>(type: "int", nullable: true)
|
|
||||||
},
|
},
|
||||||
constraints: table =>
|
constraints: table =>
|
||||||
{
|
{
|
||||||
table.PrimaryKey("PK_OrderProducts", x => x.Id);
|
table.PrimaryKey("PK_OrderProducts", x => x.Id);
|
||||||
table.ForeignKey(
|
table.ForeignKey(
|
||||||
name: "FK_OrderProducts_Orders_ProductID",
|
name: "FK_OrderProducts_Orders_OrderID",
|
||||||
column: x => x.ProductID,
|
column: x => x.OrderID,
|
||||||
principalTable: "Orders",
|
principalTable: "Orders",
|
||||||
principalColumn: "ID",
|
principalColumn: "ID",
|
||||||
onDelete: ReferentialAction.Cascade);
|
onDelete: ReferentialAction.Cascade);
|
||||||
table.ForeignKey(
|
table.ForeignKey(
|
||||||
name: "FK_OrderProducts_Products__productID",
|
name: "FK_OrderProducts_Products_ProductID",
|
||||||
column: x => x._productID,
|
column: x => x.ProductID,
|
||||||
principalTable: "Products",
|
principalTable: "Products",
|
||||||
principalColumn: "ID");
|
principalColumn: "ID",
|
||||||
|
onDelete: ReferentialAction.Cascade);
|
||||||
});
|
});
|
||||||
|
|
||||||
migrationBuilder.CreateIndex(
|
migrationBuilder.CreateIndex(
|
||||||
@ -160,9 +181,14 @@ namespace ElectronicsShopDataBaseImplement.Migrations
|
|||||||
column: "EmployeeID");
|
column: "EmployeeID");
|
||||||
|
|
||||||
migrationBuilder.CreateIndex(
|
migrationBuilder.CreateIndex(
|
||||||
name: "IX_OrderProducts__productID",
|
name: "IX_Messages_ClientID",
|
||||||
|
table: "Messages",
|
||||||
|
column: "ClientID");
|
||||||
|
|
||||||
|
migrationBuilder.CreateIndex(
|
||||||
|
name: "IX_OrderProducts_OrderID",
|
||||||
table: "OrderProducts",
|
table: "OrderProducts",
|
||||||
column: "_productID");
|
column: "OrderID");
|
||||||
|
|
||||||
migrationBuilder.CreateIndex(
|
migrationBuilder.CreateIndex(
|
||||||
name: "IX_OrderProducts_ProductID",
|
name: "IX_OrderProducts_ProductID",
|
||||||
@ -188,6 +214,9 @@ namespace ElectronicsShopDataBaseImplement.Migrations
|
|||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
protected override void Down(MigrationBuilder migrationBuilder)
|
protected override void Down(MigrationBuilder migrationBuilder)
|
||||||
{
|
{
|
||||||
|
migrationBuilder.DropTable(
|
||||||
|
name: "Messages");
|
||||||
|
|
||||||
migrationBuilder.DropTable(
|
migrationBuilder.DropTable(
|
||||||
name: "OrderProducts");
|
name: "OrderProducts");
|
||||||
|
|
@ -171,14 +171,11 @@ namespace ElectronicsShopDataBaseImplement.Migrations
|
|||||||
b.Property<int>("ProductID")
|
b.Property<int>("ProductID")
|
||||||
.HasColumnType("int");
|
.HasColumnType("int");
|
||||||
|
|
||||||
b.Property<int?>("_productID")
|
|
||||||
.HasColumnType("int");
|
|
||||||
|
|
||||||
b.HasKey("Id");
|
b.HasKey("Id");
|
||||||
|
|
||||||
b.HasIndex("ProductID");
|
b.HasIndex("OrderID");
|
||||||
|
|
||||||
b.HasIndex("_productID");
|
b.HasIndex("ProductID");
|
||||||
|
|
||||||
b.ToTable("OrderProducts");
|
b.ToTable("OrderProducts");
|
||||||
});
|
});
|
||||||
@ -271,13 +268,15 @@ namespace ElectronicsShopDataBaseImplement.Migrations
|
|||||||
{
|
{
|
||||||
b.HasOne("ElectronicsShopDataBaseImplement.Models.Order", "_order")
|
b.HasOne("ElectronicsShopDataBaseImplement.Models.Order", "_order")
|
||||||
.WithMany("Products")
|
.WithMany("Products")
|
||||||
.HasForeignKey("ProductID")
|
.HasForeignKey("OrderID")
|
||||||
.OnDelete(DeleteBehavior.Cascade)
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
.IsRequired();
|
.IsRequired();
|
||||||
|
|
||||||
b.HasOne("ElectronicsShopDataBaseImplement.Models.Product", "_product")
|
b.HasOne("ElectronicsShopDataBaseImplement.Models.Product", "_product")
|
||||||
.WithMany()
|
.WithMany()
|
||||||
.HasForeignKey("_productID");
|
.HasForeignKey("ProductID")
|
||||||
|
.OnDelete(DeleteBehavior.Cascade)
|
||||||
|
.IsRequired();
|
||||||
|
|
||||||
b.Navigation("_order");
|
b.Navigation("_order");
|
||||||
|
|
||||||
|
@ -40,7 +40,7 @@ namespace ElectronicsShopDataBaseImplement.Models
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
[ForeignKey("ProductID")]
|
[ForeignKey("OrderID")]
|
||||||
public virtual List<OrderProduct> Products { get; set; } = new();
|
public virtual List<OrderProduct> Products { get; set; } = new();
|
||||||
|
|
||||||
[ForeignKey("PaymentID")]
|
[ForeignKey("PaymentID")]
|
||||||
@ -72,10 +72,11 @@ namespace ElectronicsShopDataBaseImplement.Models
|
|||||||
ClientID = ClientID,
|
ClientID = ClientID,
|
||||||
Sum = Sum,
|
Sum = Sum,
|
||||||
DateCreate = DateCreate,
|
DateCreate = DateCreate,
|
||||||
|
ProductList = ProductList,
|
||||||
};
|
};
|
||||||
|
|
||||||
public void UpdateProducts(Database context,OrderBindingModel model) {
|
public void UpdateProducts(Database context,OrderBindingModel model) {
|
||||||
var orderProducts = context.OrderProducts.Where(rec => rec.ProductID == model.ID).ToList();
|
var orderProducts = context.OrderProducts.Where(rec => rec.OrderID == model.ID).ToList();
|
||||||
if (orderProducts != null && orderProducts.Count > 0) {
|
if (orderProducts != null && orderProducts.Count > 0) {
|
||||||
context.OrderProducts.RemoveRange(orderProducts.Where(rec => !model.ProductList.ContainsKey(rec.ProductID)));
|
context.OrderProducts.RemoveRange(orderProducts.Where(rec => !model.ProductList.ContainsKey(rec.ProductID)));
|
||||||
context.SaveChanges();
|
context.SaveChanges();
|
||||||
@ -85,7 +86,7 @@ namespace ElectronicsShopDataBaseImplement.Models
|
|||||||
}
|
}
|
||||||
context.SaveChanges();
|
context.SaveChanges();
|
||||||
}
|
}
|
||||||
var order = context.Orders.First(x => x.ID == ID);
|
var order = context.Orders.First(x => x.ID == model.ID);
|
||||||
foreach (var op in model.ProductList) {
|
foreach (var op in model.ProductList) {
|
||||||
context.OrderProducts.Add(new OrderProduct {
|
context.OrderProducts.Add(new OrderProduct {
|
||||||
_order = order,
|
_order = order,
|
||||||
|
@ -12,8 +12,10 @@ namespace ElectronicsShopDataBaseImplement.Models
|
|||||||
{
|
{
|
||||||
public int Id { get; set; }
|
public int Id { get; set; }
|
||||||
|
|
||||||
|
[Required]
|
||||||
public int OrderID { get; set; }
|
public int OrderID { get; set; }
|
||||||
|
|
||||||
|
[Required]
|
||||||
public int ProductID { get; set; }
|
public int ProductID { get; set; }
|
||||||
|
|
||||||
[Required]
|
[Required]
|
||||||
|
@ -56,7 +56,7 @@ namespace ElectronicsShopDataBaseImplement.Models
|
|||||||
ProductName = ProductName,
|
ProductName = ProductName,
|
||||||
Price = Price,
|
Price = Price,
|
||||||
CostItemID = CostItemID,
|
CostItemID = CostItemID,
|
||||||
CostItemName = CostItem.Name
|
CostItemName = CostItem?.Name
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,9 +2,11 @@
|
|||||||
using ElectronicsShopContracts.BusinessLogicContracts;
|
using ElectronicsShopContracts.BusinessLogicContracts;
|
||||||
using ElectronicsShopContracts.SearchModels;
|
using ElectronicsShopContracts.SearchModels;
|
||||||
using ElectronicsShopContracts.ViewModels;
|
using ElectronicsShopContracts.ViewModels;
|
||||||
|
using ElectronicsShopDataBaseImplement;
|
||||||
using ElectronicsShopDataBaseImplement.Models;
|
using ElectronicsShopDataBaseImplement.Models;
|
||||||
using ElectronicsShopDataModels.Models;
|
using ElectronicsShopDataModels.Models;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
|
|
||||||
namespace ElectronicsShopRestAPI.Controllers {
|
namespace ElectronicsShopRestAPI.Controllers {
|
||||||
@ -18,11 +20,14 @@ namespace ElectronicsShopRestAPI.Controllers {
|
|||||||
private readonly IOrderLogic _order;
|
private readonly IOrderLogic _order;
|
||||||
private readonly IMessageInfoLogic _message;
|
private readonly IMessageInfoLogic _message;
|
||||||
|
|
||||||
|
private Dictionary<int, (IProductModel, int)> _productlist;
|
||||||
|
|
||||||
public MainController(ILogger<MainController> logger, IProductLogic product,
|
public MainController(ILogger<MainController> logger, IProductLogic product,
|
||||||
IOrderLogic orderLogic) {
|
IOrderLogic orderLogic) {
|
||||||
_logger = logger;
|
_logger = logger;
|
||||||
_product = product;
|
_product = product;
|
||||||
_order = orderLogic;
|
_order = orderLogic;
|
||||||
|
_productlist = new Dictionary<int, (IProductModel, int)>();
|
||||||
}
|
}
|
||||||
|
|
||||||
[HttpGet]
|
[HttpGet]
|
||||||
@ -89,6 +94,28 @@ namespace ElectronicsShopRestAPI.Controllers {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[HttpGet]
|
||||||
|
public List<List<string>> GetOrderProducts(int _orderid) {
|
||||||
|
var list = new List<List<string>>();
|
||||||
|
try {
|
||||||
|
var products = _order.ReadElement(new OrderSearchModel { ID = _orderid});
|
||||||
|
|
||||||
|
foreach (var pr in products.ProductList) {
|
||||||
|
var sentence = new List<string> {
|
||||||
|
JsonConvert.SerializeObject(pr.Value.Item1),
|
||||||
|
JsonConvert.SerializeObject(pr.Value.Item2.ToString())
|
||||||
|
};
|
||||||
|
|
||||||
|
list.Add(sentence);
|
||||||
|
}
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
catch (Exception ex) {
|
||||||
|
_logger.LogError(ex, "Ошибка получения списка товаров");
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
public void AddProduct(List<string> jslist)
|
public void AddProduct(List<string> jslist)
|
||||||
{
|
{
|
||||||
@ -96,11 +123,39 @@ namespace ElectronicsShopRestAPI.Controllers {
|
|||||||
int count = JsonConvert.DeserializeObject<int>(jslist[1]);
|
int count = JsonConvert.DeserializeObject<int>(jslist[1]);
|
||||||
int orderid = JsonConvert.DeserializeObject<int>(jslist[2]);
|
int orderid = JsonConvert.DeserializeObject<int>(jslist[2]);
|
||||||
|
|
||||||
|
var view = _order.ReadElement(new OrderSearchModel { ID = orderid });
|
||||||
|
if (view != null) {
|
||||||
|
_productlist = view.ProductList;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
_logger.LogInformation($"Добавление нового товара: {product.ProductName} - {count}");
|
||||||
|
if (_productlist.ContainsKey(product.ID)) {
|
||||||
|
_productlist[product.ID] = (product, count);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
_productlist.Add(product.ID, (product, count));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_productlist == null || _productlist.Count == 0) {
|
||||||
|
_logger.LogInformation("Корзина пуста, ошибка");
|
||||||
|
}
|
||||||
|
_logger.LogInformation("Сохранение Заказа");
|
||||||
|
|
||||||
try {
|
try {
|
||||||
_order.AddProduct(product, count, orderid);
|
var model = new OrderBindingModel {
|
||||||
|
ID = orderid,
|
||||||
|
ClientID = view.ClientID,
|
||||||
|
DateCreate = view.DateCreate,
|
||||||
|
ProductList = _productlist
|
||||||
|
};
|
||||||
|
var operationResult = _order.Update(model);
|
||||||
|
if (!operationResult) {
|
||||||
|
throw new Exception("Ошибка при сохранении, дополнительная информация в логах");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex) {
|
catch (Exception ex) {
|
||||||
_logger.LogError(ex, "Ошибка добавления заказа");
|
_logger.LogError(ex, "Ошибка добавления товара");
|
||||||
throw;
|
throw;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,9 +5,11 @@ using ElectronicsShopContracts.ViewModels;
|
|||||||
using ElectronicsShopDataModels.Models;
|
using ElectronicsShopDataModels.Models;
|
||||||
using ElectronicsShopUserApp.Models;
|
using ElectronicsShopUserApp.Models;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
using Newtonsoft.Json;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using System.Runtime.Serialization;
|
using System.Runtime.Serialization;
|
||||||
|
using System.Xml.Serialization;
|
||||||
|
|
||||||
namespace ElectronicsShopUserApp.Controllers {
|
namespace ElectronicsShopUserApp.Controllers {
|
||||||
public class HomeController : Controller {
|
public class HomeController : Controller {
|
||||||
@ -18,6 +20,7 @@ namespace ElectronicsShopUserApp.Controllers {
|
|||||||
public HomeController(ILogger<HomeController> logger/*, IOrderLogic orderLogic*/) {
|
public HomeController(ILogger<HomeController> logger/*, IOrderLogic orderLogic*/) {
|
||||||
_logger = logger;
|
_logger = logger;
|
||||||
//_order = orderLogic;
|
//_order = orderLogic;
|
||||||
|
_productList = new Dictionary<int, (IProductModel, int)>();
|
||||||
}
|
}
|
||||||
|
|
||||||
public IActionResult Index() {
|
public IActionResult Index() {
|
||||||
@ -101,8 +104,9 @@ namespace ElectronicsShopUserApp.Controllers {
|
|||||||
return Redirect("~/Home/Enter");
|
return Redirect("~/Home/Enter");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var view = APIClient.GetRequset<List<OrderViewModel>>($"api/main/getorders?_clientid={APIClient.Client.ID}");
|
||||||
|
|
||||||
return View(APIClient.GetRequset<List<OrderViewModel>>($"api/main/getorders?_clientid={APIClient.Client.ID}"));
|
return View(view);
|
||||||
}
|
}
|
||||||
|
|
||||||
[HttpGet]
|
[HttpGet]
|
||||||
@ -123,8 +127,20 @@ namespace ElectronicsShopUserApp.Controllers {
|
|||||||
return Redirect("~/Home/Enter");
|
return Redirect("~/Home/Enter");
|
||||||
}
|
}
|
||||||
var view = APIClient.GetRequset<OrderViewModel>($"api/main/getorder?_clientid={APIClient.Client?.ID}");
|
var view = APIClient.GetRequset<OrderViewModel>($"api/main/getorder?_clientid={APIClient.Client?.ID}");
|
||||||
|
var products = APIClient.GetRequset<List<List<string>>>($"api/main/getorderproducts?_orderid={view?.ID}");
|
||||||
|
|
||||||
return View(view);
|
foreach (var pr in products) {
|
||||||
|
var product = JsonConvert.DeserializeObject<ProductViewModel>(pr[0]);
|
||||||
|
int count = JsonConvert.DeserializeObject<int>(pr[1]);
|
||||||
|
_productList.Add(product.ID, (product, count));
|
||||||
|
}
|
||||||
|
|
||||||
|
return View(_productList);
|
||||||
|
}
|
||||||
|
|
||||||
|
[HttpPost]
|
||||||
|
public void OrderView(int sum) {
|
||||||
|
Response.Redirect("Orders");
|
||||||
}
|
}
|
||||||
|
|
||||||
[HttpGet]
|
[HttpGet]
|
||||||
@ -142,16 +158,6 @@ namespace ElectronicsShopUserApp.Controllers {
|
|||||||
Response.Redirect("OrderView");
|
Response.Redirect("OrderView");
|
||||||
}
|
}
|
||||||
|
|
||||||
[HttpPost]
|
|
||||||
private double CalcAll(Dictionary<int, (IProductModel, int)> ProductList)
|
|
||||||
{
|
|
||||||
Double Sum = 0;
|
|
||||||
foreach (var ProductItem in ProductList)
|
|
||||||
{
|
|
||||||
Sum += (ProductItem.Value.Item1.Price * ProductItem.Value.Item2);
|
|
||||||
}
|
|
||||||
return Sum;
|
|
||||||
}
|
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
public double Calc(int count, int product)
|
public double Calc(int count, int product)
|
||||||
{
|
{
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
@using ElectronicsShopContracts.ViewModels
|
@using ElectronicsShopContracts.ViewModels
|
||||||
|
@using ElectronicsShopDataModels.Models
|
||||||
|
|
||||||
@model OrderViewModel
|
@model Dictionary<int, (IProductModel, int)>
|
||||||
|
|
||||||
@{
|
@{
|
||||||
ViewData["Title"] = "OrderView";
|
ViewData["Title"] = "OrderView";
|
||||||
@ -10,11 +11,12 @@
|
|||||||
<h1 class="display-4">Создание корзины</h1>
|
<h1 class="display-4">Создание корзины</h1>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class=" text-center">
|
<form method="post">
|
||||||
|
<div class=" text-center">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<label class="col-4">Номер корзины:</label>
|
<div class="col-4">Сумма:</div>
|
||||||
<div class="col-8">
|
<div class="col-8">
|
||||||
<input id="OrderID" class="form-control" type="text" name="OrderID" value="@Model.ID" readonly />
|
<input id="sum" type="text" name="sum" readonly />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<p>
|
<p>
|
||||||
@ -35,22 +37,53 @@
|
|||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
@foreach (var item in Model.ProductList) {
|
@foreach (var item in Model) {
|
||||||
<tr>
|
<tr class="element">
|
||||||
<th>
|
<th>
|
||||||
@Html.DisplayFor(modelItem => item.Value.Item1.ProductName);
|
@Html.DisplayFor(modelItem => item.Value.Item1.ProductName)
|
||||||
</th>
|
|
||||||
<th>
|
|
||||||
@Html.DisplayFor(modelItem => item.Value.Item2);
|
|
||||||
</th>
|
|
||||||
<th>
|
|
||||||
@Html.DisplayFor(modelItem => (item.Value.Item1.Price * item.Value.Item2));
|
|
||||||
</th>
|
</th>
|
||||||
|
|
||||||
|
<th class="count">
|
||||||
|
@Html.DisplayFor(modelItem => item.Value.Item2)
|
||||||
|
</th>
|
||||||
|
|
||||||
|
<th class="countsum">
|
||||||
|
@Html.DisplayFor(modelItem => item.Value.Item1.Price)
|
||||||
|
</th>
|
||||||
|
|
||||||
<td>
|
<td>
|
||||||
<a class="btn btn-primary btn-sm" asp-action="DeleteProductOrder" asp-></a>
|
<a class="btn btn-primary btn-sm" asp-action="DeleteProductOrder" asp->Удалить</a>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
}
|
}
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
<div class="row">
|
||||||
|
<div class="col-4"></div>
|
||||||
|
<div class="col-8">
|
||||||
|
<input type="submit" value="Заказ готова, вернуться!" class="btn btn-primary" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script src="~/lib/jquery/dist/jquery.min.js"></script>
|
||||||
|
</form>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
$('btn').on('click', function () {
|
||||||
|
calc();
|
||||||
|
});
|
||||||
|
|
||||||
|
let sum = 0;
|
||||||
|
const elementRows = document.querySelectorAll('.element');
|
||||||
|
calc();
|
||||||
|
|
||||||
|
function calc() {
|
||||||
|
elementRows.forEach(row => {
|
||||||
|
const count = parseInt(row.querySelector('.count').innerHTML, 10);
|
||||||
|
const countsum = parseInt(row.querySelector('.countsum').innerHTML, 10);
|
||||||
|
const rowTotal = count * countsum;
|
||||||
|
sum += rowTotal;
|
||||||
|
});
|
||||||
|
$('#sum').val(sum);
|
||||||
|
}
|
||||||
|
</script>
|
Loading…
Reference in New Issue
Block a user