визуал

This commit is contained in:
Табеев Александр 2024-05-01 22:21:11 +04:00
parent a9b6277b55
commit c8723a1f49
69 changed files with 5493 additions and 185 deletions

View File

@ -1,4 +1,5 @@
using AccountingWarehouseProductsDataModels.Models;
using AccountingWarehouseProductsDataModels.Enums;
using AccountingWarehouseProductsDataModels.Models;
using System;
using System.Collections.Generic;
using System.Linq;
@ -11,10 +12,24 @@ namespace AccountingWarehouseProductsContracts.BindingModels
{
public int Id { get; set; }
public int ProductId { get; set; }
public int SupplierId { get; set; }
public string ProductName { get; set; } = string.Empty;
public string SupplierName { get; set; } = string.Empty;
public int Count { get; set; }
public double Sum { get; set; }
public DateTime? DateofOrder { get; set; }
public DateTime? DateImplement { get; set; }
public AccountingWarehouseProductsDataModels.Enums.OrderStatus Status { get; set; } = AccountingWarehouseProductsDataModels.Enums.OrderStatus.Неизвестен;
public Dictionary<int, (IProductModel, int)> OrderProducts { get; set; } = new();
public Dictionary<int, (IProductModel, int)> OrderProduct { get; set; } = new();
}
}

View File

@ -15,7 +15,9 @@ namespace AccountingWarehouseProductsContracts.BindingModels
public double Cost { get; set; }
public DateTime? ExpirationDate { get; set; }
public string DateofFabrication { get; set; } = string.Empty;
public string ValidUntil { get; set; } = string.Empty;
public string Category { get; set; } = string.Empty;
}

View File

@ -11,7 +11,7 @@ namespace AccountingWarehouseProductsContracts.BindingModels
{
public int Id { get; set; }
public DateTime ShipmentDate { get; set; }
public string ShipmentDate { get; set; } = string.Empty;
public int Count { get; set; }

View File

@ -11,9 +11,9 @@ namespace AccountingWarehouseProductsContracts.BindingModels
{
public int Id { get; set; }
public string StandName { get; set; }
public string StandName { get; set; } = string.Empty;
public DateTime? DeliveryDate { get; set; }
public string DeliveryDate { get; set; } = string.Empty;
public int Count { get; set; }

View File

@ -1,4 +1,5 @@
using AccountingWarehouseProductsDataModels.Models;
using AccountingWarehouseProductsDataModels.Enums;
using AccountingWarehouseProductsDataModels.Models;
using System;
using System.Collections.Generic;
using System.ComponentModel;
@ -10,15 +11,29 @@ namespace AccountingWarehouseProductsContracts.ViewModels
{
public class OrderViewModel : IOrderModel
{
public int ProductId { get; set; }
public int SupplierId { get; set; }
[DisplayName("Номер")]
public int Id { get; set; }
[DisplayName("Дата заказа")]
[DisplayName("Название продукта")]
public string ProductName { get; set; }
[DisplayName("Количество")]
public int Count { get; set; }
[DisplayName("Сумма")]
public double Sum { get; set; }
[DisplayName("Дата создания")]
public DateTime? DateofOrder { get; set; }
[DisplayName("Дата выполнения")]
public DateTime? DateImplement { get; set; }
[DisplayName("Статус заказа")]
public AccountingWarehouseProductsDataModels.Enums.OrderStatus Status { get; set; }
public Dictionary<int, (IProductModel, int)> OrderProducts { get; set; } = new();
public Dictionary<int, (IProductModel, int)> OrderProduct { get; set; } = new();
}
}

View File

@ -18,8 +18,11 @@ namespace AccountingWarehouseProductsContracts.ViewModels
[DisplayName("Цена продукта")]
public double Cost { get; set; }
[DisplayName("Срок годности")]
public DateTime? ExpirationDate { get; set; }
[DisplayName("Дата изготовления")]
public string? DateofFabrication { get; set; } = string.Empty;
[DisplayName("Годен до")]
public string ValidUntil { get; set; } = string.Empty;
[DisplayName("Категория")]
public string Category { get; set; } = string.Empty;

View File

@ -14,7 +14,7 @@ namespace AccountingWarehouseProductsContracts.ViewModels
public int Id { get; set; }
[DisplayName("Дата отгрузки")]
public DateTime ShipmentDate { get; set; }
public string ShipmentDate { get; set; } = string.Empty;
[DisplayName("Количество")]
public int Count { get; set; }

View File

@ -18,7 +18,7 @@ namespace AccountingWarehouseProductsContracts.ViewModels
public string StandName { get; set; } = string.Empty;
[DisplayName("Дата поставки")]
public DateTime? DeliveryDate { get; set; }
public string? DeliveryDate { get; set; } = string.Empty;
[DisplayName("Количество")]
public int Count { get; set; }

View File

@ -1,4 +1,5 @@
using System;
using AccountingWarehouseProductsDataModels.Enums;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
@ -8,10 +9,20 @@ namespace AccountingWarehouseProductsDataModels.Models
{
public interface IOrderModel : IId
{
int ProductId { get; }
string ProductName { get; }
int Count { get; }
double Sum { get; }
DateTime? DateofOrder { get; }
DateTime? DateImplement { get; }
Enums.OrderStatus Status { get; }
Dictionary<int, (IProductModel, int)> OrderProducts { get; }
Dictionary<int, (IProductModel, int)> OrderProduct { get; }
}
}

View File

@ -12,7 +12,9 @@ namespace AccountingWarehouseProductsDataModels.Models
double Cost { get; }
DateTime? ExpirationDate { get; }
string DateofFabrication { get; }
string ValidUntil { get; }
string Category { get; }
}

View File

@ -8,7 +8,7 @@ namespace AccountingWarehouseProductsDataModels.Models
{
public interface IShipmentModel : IId
{
DateTime ShipmentDate { get; }
string ShipmentDate { get; }
int Count { get; }

View File

@ -9,7 +9,7 @@ namespace AccountingWarehouseProductsDataModels.Models
public interface IStandModel : IId
{
string StandName { get; }
DateTime? DeliveryDate { get; }
string? DeliveryDate { get; }
int Count { get; }

View File

@ -25,7 +25,7 @@ namespace AccountingWarehouseProductsDatabaseImplement
public virtual DbSet<Shipment> Shipments { get; set; }
public virtual DbSet<Stand> Stands { get; set; }
public virtual DbSet<Order> Orders { get; set; }
public virtual DbSet<OrderProduct> OrderProducts { get; set; }
public virtual DbSet<WarehouseProduct> WarehouseProducts { get; set; }
public virtual DbSet<OrderProduct> OrderProduct { get; set; }
public virtual DbSet<WarehouseProduct> WarehouseProduct { get; set; }
}
}

View File

@ -45,7 +45,7 @@ namespace AccountingWarehouseProductsDatabaseImplement.Implements
public List<OrderViewModel> GetFullList()
{
using var context = new AccountingWarehouseProductsDatabase();
return context.Orders.Include(x => x.Products).ThenInclude(x => x.Product).ToList().Select(x => x.GetViewModel).ToList();
return context.Orders.Include(x => x.Product).ToList().Select(x => x.GetViewModel).ToList();
}
public OrderViewModel? Insert(OrderBindingModel model)

View File

@ -12,7 +12,7 @@ using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
namespace AccountingWarehouseProductsDatabaseImplement.Migrations
{
[DbContext(typeof(AccountingWarehouseProductsDatabase))]
[Migration("20240421151136_InitMigration")]
[Migration("20240501173855_InitMigration")]
partial class InitMigration
{
/// <inheritdoc />
@ -33,14 +33,35 @@ namespace AccountingWarehouseProductsDatabaseImplement.Migrations
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
b.Property<int>("Count")
.HasColumnType("int");
b.Property<DateTime?>("DateImplement")
.HasColumnType("datetime2");
b.Property<DateTime?>("DateofOrder")
.HasColumnType("datetime2");
b.Property<int>("ProductId")
.HasColumnType("int");
b.Property<string>("ProductName")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<int>("Status")
.HasColumnType("int");
b.Property<double>("Sum")
.HasColumnType("float");
b.Property<int>("SupplierId")
.HasColumnType("int");
b.HasKey("Id");
b.HasIndex("ProductId");
b.ToTable("Orders");
});
@ -67,7 +88,7 @@ namespace AccountingWarehouseProductsDatabaseImplement.Migrations
b.HasIndex("ProductId");
b.ToTable("OrderProducts");
b.ToTable("OrderProduct");
});
modelBuilder.Entity("AccountingWarehouseProductsDatabaseImplement.Models.Product", b =>
@ -85,14 +106,18 @@ namespace AccountingWarehouseProductsDatabaseImplement.Migrations
b.Property<double>("Cost")
.HasColumnType("float");
b.Property<DateTime?>("ExpirationDate")
b.Property<string>("DateofFabrication")
.IsRequired()
.HasColumnType("datetime2");
.HasColumnType("nvarchar(max)");
b.Property<string>("ProductName")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("ValidUntil")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.HasKey("Id");
b.ToTable("Products");
@ -116,8 +141,9 @@ namespace AccountingWarehouseProductsDatabaseImplement.Migrations
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<DateTime>("ShipmentDate")
.HasColumnType("datetime2");
b.Property<string>("ShipmentDate")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.HasKey("Id");
@ -135,8 +161,8 @@ namespace AccountingWarehouseProductsDatabaseImplement.Migrations
b.Property<int>("Count")
.HasColumnType("int");
b.Property<DateTime?>("DeliveryDate")
.HasColumnType("datetime2");
b.Property<string>("DeliveryDate")
.HasColumnType("nvarchar(max)");
b.Property<int>("ProductId")
.HasColumnType("int");
@ -225,7 +251,18 @@ namespace AccountingWarehouseProductsDatabaseImplement.Migrations
b.HasIndex("WarehouseId");
b.ToTable("WarehouseProducts");
b.ToTable("WarehouseProduct");
});
modelBuilder.Entity("AccountingWarehouseProductsDatabaseImplement.Models.Order", b =>
{
b.HasOne("AccountingWarehouseProductsDatabaseImplement.Models.Product", "Product")
.WithMany("Orders")
.HasForeignKey("ProductId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Product");
});
modelBuilder.Entity("AccountingWarehouseProductsDatabaseImplement.Models.OrderProduct", b =>
@ -237,7 +274,7 @@ namespace AccountingWarehouseProductsDatabaseImplement.Migrations
.IsRequired();
b.HasOne("AccountingWarehouseProductsDatabaseImplement.Models.Product", "Product")
.WithMany()
.WithMany("OrderProduct")
.HasForeignKey("ProductId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
@ -271,6 +308,13 @@ namespace AccountingWarehouseProductsDatabaseImplement.Migrations
b.Navigation("Products");
});
modelBuilder.Entity("AccountingWarehouseProductsDatabaseImplement.Models.Product", b =>
{
b.Navigation("OrderProduct");
b.Navigation("Orders");
});
modelBuilder.Entity("AccountingWarehouseProductsDatabaseImplement.Models.Warehouse", b =>
{
b.Navigation("Products");

View File

@ -11,20 +11,6 @@ namespace AccountingWarehouseProductsDatabaseImplement.Migrations
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.CreateTable(
name: "Orders",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
DateofOrder = table.Column<DateTime>(type: "datetime2", nullable: true),
Status = table.Column<int>(type: "int", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_Orders", x => x.Id);
});
migrationBuilder.CreateTable(
name: "Products",
columns: table => new
@ -33,7 +19,8 @@ namespace AccountingWarehouseProductsDatabaseImplement.Migrations
.Annotation("SqlServer:Identity", "1, 1"),
ProductName = table.Column<string>(type: "nvarchar(max)", nullable: false),
Cost = table.Column<double>(type: "float", nullable: false),
ExpirationDate = table.Column<DateTime>(type: "datetime2", nullable: false),
DateofFabrication = table.Column<string>(type: "nvarchar(max)", nullable: false),
ValidUntil = table.Column<string>(type: "nvarchar(max)", nullable: false),
Category = table.Column<string>(type: "nvarchar(max)", nullable: false)
},
constraints: table =>
@ -47,7 +34,7 @@ namespace AccountingWarehouseProductsDatabaseImplement.Migrations
{
Id = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
ShipmentDate = table.Column<DateTime>(type: "datetime2", nullable: false),
ShipmentDate = table.Column<string>(type: "nvarchar(max)", nullable: false),
Count = table.Column<int>(type: "int", nullable: false),
Recipient = table.Column<string>(type: "nvarchar(max)", nullable: false),
OrderId = table.Column<int>(type: "int", nullable: false)
@ -64,7 +51,7 @@ namespace AccountingWarehouseProductsDatabaseImplement.Migrations
Id = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
StandName = table.Column<string>(type: "nvarchar(max)", nullable: false),
DeliveryDate = table.Column<DateTime>(type: "datetime2", nullable: true),
DeliveryDate = table.Column<string>(type: "nvarchar(max)", nullable: true),
Count = table.Column<int>(type: "int", nullable: false),
ProductId = table.Column<int>(type: "int", nullable: false),
SupplierId = table.Column<int>(type: "int", nullable: false)
@ -105,26 +92,25 @@ namespace AccountingWarehouseProductsDatabaseImplement.Migrations
});
migrationBuilder.CreateTable(
name: "OrderProducts",
name: "Orders",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
OrderId = table.Column<int>(type: "int", nullable: false),
ProductId = table.Column<int>(type: "int", nullable: false),
Count = table.Column<int>(type: "int", nullable: false)
SupplierId = table.Column<int>(type: "int", nullable: false),
ProductName = table.Column<string>(type: "nvarchar(max)", nullable: false),
Count = table.Column<int>(type: "int", nullable: false),
Sum = table.Column<double>(type: "float", nullable: false),
DateofOrder = table.Column<DateTime>(type: "datetime2", nullable: true),
DateImplement = table.Column<DateTime>(type: "datetime2", nullable: true),
Status = table.Column<int>(type: "int", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_OrderProducts", x => x.Id);
table.PrimaryKey("PK_Orders", x => x.Id);
table.ForeignKey(
name: "FK_OrderProducts_Orders_OrderId",
column: x => x.OrderId,
principalTable: "Orders",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
name: "FK_OrderProducts_Products_ProductId",
name: "FK_Orders_Products_ProductId",
column: x => x.ProductId,
principalTable: "Products",
principalColumn: "Id",
@ -132,7 +118,7 @@ namespace AccountingWarehouseProductsDatabaseImplement.Migrations
});
migrationBuilder.CreateTable(
name: "WarehouseProducts",
name: "WarehouseProduct",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false)
@ -143,39 +129,71 @@ namespace AccountingWarehouseProductsDatabaseImplement.Migrations
},
constraints: table =>
{
table.PrimaryKey("PK_WarehouseProducts", x => x.Id);
table.PrimaryKey("PK_WarehouseProduct", x => x.Id);
table.ForeignKey(
name: "FK_WarehouseProducts_Products_ProductId",
name: "FK_WarehouseProduct_Products_ProductId",
column: x => x.ProductId,
principalTable: "Products",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
name: "FK_WarehouseProducts_Warehouses_WarehouseId",
name: "FK_WarehouseProduct_Warehouses_WarehouseId",
column: x => x.WarehouseId,
principalTable: "Warehouses",
principalColumn: "Id",
onDelete: ReferentialAction.Restrict);
});
migrationBuilder.CreateTable(
name: "OrderProduct",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
OrderId = table.Column<int>(type: "int", nullable: false),
ProductId = table.Column<int>(type: "int", nullable: false),
Count = table.Column<int>(type: "int", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_OrderProduct", x => x.Id);
table.ForeignKey(
name: "FK_OrderProduct_Orders_OrderId",
column: x => x.OrderId,
principalTable: "Orders",
principalColumn: "Id",
onDelete: ReferentialAction.Cascade);
table.ForeignKey(
name: "FK_OrderProduct_Products_ProductId",
column: x => x.ProductId,
principalTable: "Products",
principalColumn: "Id",
onDelete: ReferentialAction.Restrict);
});
migrationBuilder.CreateIndex(
name: "IX_OrderProducts_OrderId",
table: "OrderProducts",
name: "IX_OrderProduct_OrderId",
table: "OrderProduct",
column: "OrderId");
migrationBuilder.CreateIndex(
name: "IX_OrderProducts_ProductId",
table: "OrderProducts",
name: "IX_OrderProduct_ProductId",
table: "OrderProduct",
column: "ProductId");
migrationBuilder.CreateIndex(
name: "IX_WarehouseProducts_ProductId",
table: "WarehouseProducts",
name: "IX_Orders_ProductId",
table: "Orders",
column: "ProductId");
migrationBuilder.CreateIndex(
name: "IX_WarehouseProducts_WarehouseId",
table: "WarehouseProducts",
name: "IX_WarehouseProduct_ProductId",
table: "WarehouseProduct",
column: "ProductId");
migrationBuilder.CreateIndex(
name: "IX_WarehouseProduct_WarehouseId",
table: "WarehouseProduct",
column: "WarehouseId");
}
@ -183,7 +201,7 @@ namespace AccountingWarehouseProductsDatabaseImplement.Migrations
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropTable(
name: "OrderProducts");
name: "OrderProduct");
migrationBuilder.DropTable(
name: "Shipments");
@ -195,16 +213,16 @@ namespace AccountingWarehouseProductsDatabaseImplement.Migrations
name: "Suppliers");
migrationBuilder.DropTable(
name: "WarehouseProducts");
name: "WarehouseProduct");
migrationBuilder.DropTable(
name: "Orders");
migrationBuilder.DropTable(
name: "Products");
name: "Warehouses");
migrationBuilder.DropTable(
name: "Warehouses");
name: "Products");
}
}
}

View File

@ -30,14 +30,35 @@ namespace AccountingWarehouseProductsDatabaseImplement.Migrations
SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property<int>("Id"));
b.Property<int>("Count")
.HasColumnType("int");
b.Property<DateTime?>("DateImplement")
.HasColumnType("datetime2");
b.Property<DateTime?>("DateofOrder")
.HasColumnType("datetime2");
b.Property<int>("ProductId")
.HasColumnType("int");
b.Property<string>("ProductName")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<int>("Status")
.HasColumnType("int");
b.Property<double>("Sum")
.HasColumnType("float");
b.Property<int>("SupplierId")
.HasColumnType("int");
b.HasKey("Id");
b.HasIndex("ProductId");
b.ToTable("Orders");
});
@ -64,7 +85,7 @@ namespace AccountingWarehouseProductsDatabaseImplement.Migrations
b.HasIndex("ProductId");
b.ToTable("OrderProducts");
b.ToTable("OrderProduct");
});
modelBuilder.Entity("AccountingWarehouseProductsDatabaseImplement.Models.Product", b =>
@ -82,14 +103,18 @@ namespace AccountingWarehouseProductsDatabaseImplement.Migrations
b.Property<double>("Cost")
.HasColumnType("float");
b.Property<DateTime?>("ExpirationDate")
b.Property<string>("DateofFabrication")
.IsRequired()
.HasColumnType("datetime2");
.HasColumnType("nvarchar(max)");
b.Property<string>("ProductName")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<string>("ValidUntil")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.HasKey("Id");
b.ToTable("Products");
@ -113,8 +138,9 @@ namespace AccountingWarehouseProductsDatabaseImplement.Migrations
.IsRequired()
.HasColumnType("nvarchar(max)");
b.Property<DateTime>("ShipmentDate")
.HasColumnType("datetime2");
b.Property<string>("ShipmentDate")
.IsRequired()
.HasColumnType("nvarchar(max)");
b.HasKey("Id");
@ -132,8 +158,8 @@ namespace AccountingWarehouseProductsDatabaseImplement.Migrations
b.Property<int>("Count")
.HasColumnType("int");
b.Property<DateTime?>("DeliveryDate")
.HasColumnType("datetime2");
b.Property<string>("DeliveryDate")
.HasColumnType("nvarchar(max)");
b.Property<int>("ProductId")
.HasColumnType("int");
@ -222,7 +248,18 @@ namespace AccountingWarehouseProductsDatabaseImplement.Migrations
b.HasIndex("WarehouseId");
b.ToTable("WarehouseProducts");
b.ToTable("WarehouseProduct");
});
modelBuilder.Entity("AccountingWarehouseProductsDatabaseImplement.Models.Order", b =>
{
b.HasOne("AccountingWarehouseProductsDatabaseImplement.Models.Product", "Product")
.WithMany("Orders")
.HasForeignKey("ProductId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Product");
});
modelBuilder.Entity("AccountingWarehouseProductsDatabaseImplement.Models.OrderProduct", b =>
@ -234,7 +271,7 @@ namespace AccountingWarehouseProductsDatabaseImplement.Migrations
.IsRequired();
b.HasOne("AccountingWarehouseProductsDatabaseImplement.Models.Product", "Product")
.WithMany()
.WithMany("OrderProduct")
.HasForeignKey("ProductId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
@ -268,6 +305,13 @@ namespace AccountingWarehouseProductsDatabaseImplement.Migrations
b.Navigation("Products");
});
modelBuilder.Entity("AccountingWarehouseProductsDatabaseImplement.Models.Product", b =>
{
b.Navigation("OrderProduct");
b.Navigation("Orders");
});
modelBuilder.Entity("AccountingWarehouseProductsDatabaseImplement.Models.Warehouse", b =>
{
b.Navigation("Products");

View File

@ -1,8 +1,10 @@
using AccountingWarehouseProductsContracts.BindingModels;
using AccountingWarehouseProductsContracts.ViewModels;
using AccountingWarehouseProductsDataModels.Enums;
using AccountingWarehouseProductsDataModels.Models;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
@ -14,14 +16,27 @@ namespace AccountingWarehouseProductsDatabaseImplement.Models
{
public int Id { get; set; }
public DateTime? DateofOrder { get; set; }
public int ProductId { get; set; }
public int SupplierId { get; set; }
public string ProductName { get; set; }
public int Count { get; set; }
public double Sum { get; set; }
public virtual Product Product { get; set; }
public DateTime? DateofOrder { get; set; } = DateTime.Now;
public DateTime? DateImplement { get; private set; }
public AccountingWarehouseProductsDataModels.Enums.OrderStatus Status { get; set; }
private Dictionary<int, (IProductModel, int)>? _orderProduct = null;
[NotMapped]
public Dictionary<int, (IProductModel, int)> OrderProducts
public Dictionary<int, (IProductModel, int)> OrderProduct
{
get
{
@ -41,9 +56,15 @@ namespace AccountingWarehouseProductsDatabaseImplement.Models
return new Order()
{
Id = model.Id,
DateofOrder = model.DateofOrder,
ProductId = model.ProductId,
SupplierId = model.SupplierId,
ProductName = model.ProductName,
Count = model.Count,
Sum = model.Sum,
Status = model.Status,
Products = model.OrderProducts.Select(x => new OrderProduct
DateofOrder = model.DateofOrder,
DateImplement = model.DateImplement,
Products = model.OrderProduct.Select(x => new OrderProduct
{
Product = context.Products.First(y => y.Id == x.Key),
Count = x.Value.Item2
@ -53,37 +74,54 @@ namespace AccountingWarehouseProductsDatabaseImplement.Models
public void Update(OrderBindingModel model)
{
if (model == null)
{
return;
}
Status = model.Status;
if (model.DateofOrder != null)
{
DateofOrder = model.DateofOrder;
}
DateImplement = model.DateImplement;
}
public OrderViewModel GetViewModel => new()
{
Id = Id,
DateofOrder = DateofOrder,
ProductId = ProductId,
SupplierId = SupplierId,
ProductName = ProductName,
Count = Count,
Sum = Sum,
Status = Status,
OrderProducts = OrderProducts
DateofOrder = DateofOrder,
DateImplement = DateImplement,
OrderProduct = OrderProduct
};
public void UpdateProducts(AccountingWarehouseProductsDatabase context, OrderBindingModel model)
{
var orderProducts = context.OrderProducts.Where(rec => rec.OrderId == model.Id).ToList();
if (orderProducts != null && orderProducts.Count > 0)
var orderProduct = context.OrderProduct.Where(rec => rec.OrderId == model.Id).ToList();
if (orderProduct != null && orderProduct.Count > 0)
{
context.OrderProducts.RemoveRange(orderProducts.Where(rec => !model.OrderProducts.ContainsKey(rec.ProductId)));
context.OrderProduct.RemoveRange(orderProduct.Where(rec => !model.OrderProduct.ContainsKey(rec.ProductId)));
context.SaveChanges();
foreach (var updateProduct in orderProducts)
foreach (var updateProduct in orderProduct)
{
updateProduct.Count = model.OrderProducts[updateProduct.ProductId].Item2;
model.OrderProducts.Remove(updateProduct.ProductId);
updateProduct.Count = model.OrderProduct[updateProduct.ProductId].Item2;
model.OrderProduct.Remove(updateProduct.ProductId);
}
context.SaveChanges();
}
var order = context.Orders.First(x => x.Id == Id);
foreach (var rc in model.OrderProducts)
foreach (var rc in model.OrderProduct)
{
context.OrderProducts.Add(new OrderProduct
context.OrderProduct.Add(new OrderProduct
{
Order = order,
Product = context.Products.First(x => x.Id == rc.Key),

View File

@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
@ -10,12 +11,17 @@ namespace AccountingWarehouseProductsDatabaseImplement.Models
{
public int Id { get; set; }
[Required]
public int OrderId { get; set; }
[Required]
public int ProductId { get; set; }
[Required]
public int Count { get; set; }
public virtual Order Order { get; set; } = new();
public virtual Product Product { get; set; } = new();
public virtual Order Order { get; set; } = new();
}
}

View File

@ -1,8 +1,11 @@
using AccountingWarehouseProductsContracts.BindingModels;
using AccountingWarehouseProductsContracts.ViewModels;
using AccountingWarehouseProductsDataModels.Models;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
@ -19,12 +22,36 @@ namespace AccountingWarehouseProductsDatabaseImplement.Models
[Required]
public double Cost { get; set; }
//private Dictionary<int, (IOrderModel, int)>? _orderProducts = null;
[Required]
public DateTime? ExpirationDate { get; set; }
public string? DateofFabrication { get; set; } = string.Empty;
[Required]
public string ValidUntil { get; set; } = string.Empty;
[Required]
public string Category { get; set; } = string.Empty;
//[NotMapped]
//public Dictionary<int, (IOrderModel, int)> OrderProducts
//{
// get
// {
// if (_orderProducts == null)
// {
// _orderProducts = Products.ToDictionary(recPC => recPC.ProductId, recPC => (recPC.Product as IProductModel, recPC.Count));
// }
// return _orderProducts;
// }
//}
[ForeignKey("ProductId")]
public virtual List<OrderProduct> OrderProduct { get; set; } = new();
[ForeignKey("ProductId")]
public virtual List<Order> Orders { get; set; } = new();
public static Product? Create(ProductBindingModel model)
{
if (model == null) return null;
@ -34,7 +61,21 @@ namespace AccountingWarehouseProductsDatabaseImplement.Models
Id = model.Id,
ProductName = model.ProductName,
Cost = model.Cost,
ExpirationDate = model.ExpirationDate,
DateofFabrication = model.DateofFabrication,
ValidUntil = model.ValidUntil,
Category = model.Category
};
}
public static Product Create(ProductViewModel model)
{
return new Product
{
Id = model.Id,
ProductName = model.ProductName,
Cost = model.Cost,
DateofFabrication = model.DateofFabrication,
ValidUntil = model.ValidUntil,
Category = model.Category
};
}
@ -44,7 +85,8 @@ namespace AccountingWarehouseProductsDatabaseImplement.Models
if (model == null) return;
ProductName = model.ProductName;
Cost = model.Cost;
ExpirationDate = model.ExpirationDate;
DateofFabrication = model.DateofFabrication;
ValidUntil = model.ValidUntil;
Category = model.Category;
}
@ -53,7 +95,8 @@ namespace AccountingWarehouseProductsDatabaseImplement.Models
Id = Id,
ProductName = ProductName,
Cost = Cost,
ExpirationDate = ExpirationDate,
DateofFabrication = DateofFabrication,
ValidUntil = ValidUntil,
Category = Category
};
}

View File

@ -14,7 +14,7 @@ namespace AccountingWarehouseProductsDatabaseImplement.Models
public int Id { get; set; }
[Required]
public DateTime ShipmentDate { get; set; }
public string ShipmentDate { get; set; } = string.Empty;
[Required]
public int Count { get; set; }

View File

@ -14,7 +14,7 @@ namespace AccountingWarehouseProductsDatabaseImplement.Models
public string StandName { get; set; } = string.Empty;
public DateTime? DeliveryDate { get; set; }
public string? DeliveryDate { get; set; } = string.Empty;
public int Count { get; set; }

View File

@ -68,13 +68,13 @@ namespace AccountingWarehouseProductsDatabaseImplement.Models
public void UpdateProducts(AccountingWarehouseProductsDatabase context, WarehouseBindingModel model)
{
var warehouseProducts = context.WarehouseProducts.Where(rec => rec.WarehouseId == model.Id).ToList();
if (warehouseProducts != null && warehouseProducts.Count > 0)
var warehouseProduct = context.WarehouseProduct.Where(rec => rec.WarehouseId == model.Id).ToList();
if (warehouseProduct != null && warehouseProduct.Count > 0)
{
context.WarehouseProducts.RemoveRange(warehouseProducts.Where(rec => !model.WarehouseProducts.ContainsKey(rec.ProductId)));
context.WarehouseProduct.RemoveRange(warehouseProduct.Where(rec => !model.WarehouseProducts.ContainsKey(rec.ProductId)));
context.SaveChanges();
foreach (var updateProduct in warehouseProducts)
foreach (var updateProduct in warehouseProduct)
{
updateProduct.Count = model.WarehouseProducts[updateProduct.ProductId].Item2;
model.WarehouseProducts.Remove(updateProduct.ProductId);
@ -85,7 +85,7 @@ namespace AccountingWarehouseProductsDatabaseImplement.Models
var warehouse = context.Warehouses.First(x => x.Id == Id);
foreach (var rc in model.WarehouseProducts)
{
context.WarehouseProducts.Add(new WarehouseProduct
context.WarehouseProduct.Add(new WarehouseProduct
{
Warehouse = warehouse,
Product = context.Products.First(x => x.Id == rc.Key),

View File

@ -16,6 +16,7 @@
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\AccountingWarehouseProductsBusinessLogic\AccountingWarehouseProductsBusinessLogic.csproj" />
<ProjectReference Include="..\AccountingWarehouseProductsDatabaseImplement\AccountingWarehouseProductsDatabaseImplement.csproj" />
</ItemGroup>

View File

@ -1,39 +0,0 @@
namespace AccountingWarehouseProductsView
{
partial class Form1
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(800, 450);
this.Text = "Form1";
}
#endregion
}
}

View File

@ -1,10 +0,0 @@
namespace AccountingWarehouseProductsView
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
}
}

View File

@ -0,0 +1,173 @@
namespace AccountingWarehouseProductsView
{
partial class FormCreateOrder
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
labelProduct = new Label();
labelCount = new Label();
labelSum = new Label();
comboBoxProduct = new ComboBox();
textBoxCount = new TextBox();
textBoxSum = new TextBox();
buttonSave = new Button();
buttonCancel = new Button();
labelSupplier = new Label();
comboBoxSupplier = new ComboBox();
SuspendLayout();
//
// labelProduct
//
labelProduct.AutoSize = true;
labelProduct.Font = new Font("Segoe UI", 12F, FontStyle.Regular, GraphicsUnit.Point);
labelProduct.Location = new Point(38, 66);
labelProduct.Name = "labelProduct";
labelProduct.Size = new Size(74, 21);
labelProduct.TabIndex = 0;
labelProduct.Text = "Продукт:";
//
// labelCount
//
labelCount.AutoSize = true;
labelCount.Font = new Font("Segoe UI", 12F, FontStyle.Regular, GraphicsUnit.Point);
labelCount.Location = new Point(37, 23);
labelCount.Name = "labelCount";
labelCount.Size = new Size(96, 21);
labelCount.TabIndex = 1;
labelCount.Text = "Количество:";
//
// labelSum
//
labelSum.AutoSize = true;
labelSum.Font = new Font("Segoe UI", 12F, FontStyle.Regular, GraphicsUnit.Point);
labelSum.Location = new Point(37, 164);
labelSum.Name = "labelSum";
labelSum.Size = new Size(61, 21);
labelSum.TabIndex = 2;
labelSum.Text = "Сумма:";
//
// comboBoxProduct
//
comboBoxProduct.DropDownStyle = ComboBoxStyle.DropDownList;
comboBoxProduct.FormattingEnabled = true;
comboBoxProduct.Location = new Point(118, 68);
comboBoxProduct.Name = "comboBoxProduct";
comboBoxProduct.Size = new Size(236, 23);
comboBoxProduct.TabIndex = 3;
comboBoxProduct.SelectedIndexChanged += comboBoxProduct_SelectedIndexChanged;
//
// textBoxCount
//
textBoxCount.Location = new Point(139, 25);
textBoxCount.Name = "textBoxCount";
textBoxCount.Size = new Size(215, 23);
textBoxCount.TabIndex = 4;
//
// textBoxSum
//
textBoxSum.Location = new Point(113, 164);
textBoxSum.Name = "textBoxSum";
textBoxSum.ReadOnly = true;
textBoxSum.Size = new Size(241, 23);
textBoxSum.TabIndex = 5;
textBoxSum.TextChanged += textBoxCount_TextChanged;
//
// buttonSave
//
buttonSave.Location = new Point(54, 221);
buttonSave.Name = "buttonSave";
buttonSave.Size = new Size(127, 49);
buttonSave.TabIndex = 6;
buttonSave.Text = "Сохранить";
buttonSave.UseVisualStyleBackColor = true;
buttonSave.Click += ButtonSave_Click;
//
// buttonCancel
//
buttonCancel.Location = new Point(222, 221);
buttonCancel.Name = "buttonCancel";
buttonCancel.Size = new Size(127, 49);
buttonCancel.TabIndex = 7;
buttonCancel.Text = "Отмена";
buttonCancel.UseVisualStyleBackColor = true;
buttonCancel.Click += ButtonCancel_Click;
//
// labelSupplier
//
labelSupplier.AutoSize = true;
labelSupplier.Font = new Font("Segoe UI", 12F, FontStyle.Regular, GraphicsUnit.Point);
labelSupplier.Location = new Point(37, 111);
labelSupplier.Name = "labelSupplier";
labelSupplier.Size = new Size(93, 21);
labelSupplier.TabIndex = 8;
labelSupplier.Text = "Поставщик:";
//
// comboBoxSupplier
//
comboBoxSupplier.DropDownStyle = ComboBoxStyle.DropDownList;
comboBoxSupplier.FormattingEnabled = true;
comboBoxSupplier.Location = new Point(139, 113);
comboBoxSupplier.Name = "comboBoxSupplier";
comboBoxSupplier.Size = new Size(215, 23);
comboBoxSupplier.TabIndex = 9;
//
// FormCreateOrder
//
AutoScaleDimensions = new SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(444, 320);
Controls.Add(comboBoxSupplier);
Controls.Add(labelSupplier);
Controls.Add(buttonCancel);
Controls.Add(buttonSave);
Controls.Add(textBoxSum);
Controls.Add(textBoxCount);
Controls.Add(comboBoxProduct);
Controls.Add(labelSum);
Controls.Add(labelCount);
Controls.Add(labelProduct);
Name = "FormCreateOrder";
Text = "Создание заказа";
Load += FormCreateOrder_Load;
ResumeLayout(false);
PerformLayout();
}
#endregion
private Label labelProduct;
private Label labelCount;
private Label labelSum;
private ComboBox comboBoxProduct;
private TextBox textBoxCount;
private TextBox textBoxSum;
private Button buttonSave;
private Button buttonCancel;
private Label labelSupplier;
private ComboBox comboBoxSupplier;
}
}

View File

@ -0,0 +1,169 @@
using AccountingWarehouseProductsBusinessLogic.BusinessLogic;
using AccountingWarehouseProductsContracts.BindingModels;
using AccountingWarehouseProductsContracts.BusinessLogicsContracts;
using AccountingWarehouseProductsContracts.SearchModels;
using AccountingWarehouseProductsDatabaseImplement.Models;
using AccountingWarehouseProductsDataModels.Enums;
using AccountingWarehouseProductsDataModels.Models;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Windows.Forms.VisualStyles;
namespace AccountingWarehouseProductsView
{
public partial class FormCreateOrder : Form
{
private readonly ISupplierLogic _logicS;
private readonly IProductLogic _logicP;
private readonly IOrderLogic _logicO;
private int? _id;
private Dictionary<int, (IProductModel, int)> _orderProduct;
public int Id { set { _id = value; } }
public FormCreateOrder(ISupplierLogic logicS, IOrderLogic logicO, IProductLogic logicP)
{
InitializeComponent();
_logicS = logicS;
_logicP = logicP;
_logicO = logicO;
_orderProduct = new Dictionary<int, (IProductModel, int)>();
LoadData();
}
private void FormCreateOrder_Load(object sender, EventArgs e)
{
LoadData();
}
private void LoadData()
{
try
{
var list = _logicP.ReadList(null);
if (list != null)
{
comboBoxProduct.DisplayMember = "ProductName";
comboBoxProduct.ValueMember = "Id";
comboBoxProduct.DataSource = list;
comboBoxProduct.SelectedItem = null;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
try
{
var list = _logicS.ReadList(null);
if (list != null)
{
comboBoxSupplier.DisplayMember = "SupplierName";
comboBoxSupplier.ValueMember = "Id";
comboBoxSupplier.DataSource = list;
comboBoxSupplier.SelectedItem = null;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void CalcSum()
{
if (comboBoxProduct.SelectedValue != null && !string.IsNullOrEmpty(textBoxCount.Text))
{
try
{
int id = Convert.ToInt32(comboBoxProduct.SelectedValue);
var product = _logicP.ReadElement(new ProductSearchModel { Id = id });
int count = Convert.ToInt32(textBoxCount.Text);
textBoxSum.Text = Math.Round(count * (product?.Cost ?? 0), 2).ToString();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
private void textBoxCount_TextChanged(object sender, EventArgs e)
{
CalcSum();
}
private void comboBoxProduct_SelectedIndexChanged(object sender, EventArgs e)
{
CalcSum();
}
private void ButtonSave_Click(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(textBoxCount.Text))
{
MessageBox.Show("Заполните поле Количество", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
if (comboBoxProduct.SelectedValue == null)
{
MessageBox.Show("Выберите продукт", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
if (comboBoxSupplier.SelectedValue == null)
{
MessageBox.Show("Выберите поставщика", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
try
{
var model = new OrderBindingModel
{
Id = _id ?? 0,
ProductId = Convert.ToInt32(comboBoxProduct.SelectedValue),
SupplierId = Convert.ToInt32(comboBoxSupplier.SelectedValue),
DateofOrder = DateTime.Now,
Status = OrderStatus.Заказан,
ProductName = comboBoxProduct.Text,
Count = Convert.ToInt32(textBoxCount.Text),
SupplierName = comboBoxSupplier.Text,
Sum = Convert.ToDouble(textBoxSum.Text),
OrderProduct = _orderProduct
};
var operationResult = _id.HasValue ? _logicO.Update(model) : _logicO.Create(model);
if (!operationResult)
{
throw new Exception("Ошибка при создании заказа. Дополнительная информация в логах.");
}
MessageBox.Show("Сохранение прошло успешно", "Сообщение", MessageBoxButtons.OK, MessageBoxIcon.Information);
DialogResult = DialogResult.OK;
Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void ButtonCancel_Click(object sender, EventArgs e)
{
DialogResult = DialogResult.Cancel;
Close();
}
}
}

View File

@ -0,0 +1,217 @@
namespace AccountingWarehouseProductsView
{
partial class FormMain
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
menuStrip1 = new MenuStrip();
справочникиToolStripMenuItem = new ToolStripMenuItem();
продуктToolStripMenuItem = new ToolStripMenuItem();
складскоеПомещениеToolStripMenuItem = new ToolStripMenuItem();
поставщикToolStripMenuItem = new ToolStripMenuItem();
поставкаToolStripMenuItem = new ToolStripMenuItem();
отгрузкаToolStripMenuItem = new ToolStripMenuItem();
dataGridView = new DataGridView();
ButtonCreateOrder = new Button();
buttonComeOrder = new Button();
buttonTakeOrder = new Button();
buttonArrangeOrder = new Button();
buttonChekOrder = new Button();
buttonDeliverOrder = new Button();
menuStrip1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit();
SuspendLayout();
//
// menuStrip1
//
menuStrip1.Items.AddRange(new ToolStripItem[] { справочникиToolStripMenuItem });
menuStrip1.Location = new Point(0, 0);
menuStrip1.Name = "menuStrip1";
menuStrip1.Size = new Size(1260, 24);
menuStrip1.TabIndex = 0;
menuStrip1.Text = "menuStrip1";
//
// справочникиToolStripMenuItem
//
справочникиToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { продуктToolStripMenuItem, складскоеПомещениеToolStripMenuItem, поставщикToolStripMenuItem, поставкаToolStripMenuItem, отгрузкаToolStripMenuItem });
справочникиToolStripMenuItem.Name = "справочникиToolStripMenuItem";
справочникиToolStripMenuItem.Size = new Size(94, 20);
справочникиToolStripMenuItem.Text = "Справочники";
//
// продуктToolStripMenuItem
//
продуктToolStripMenuItem.Name = "продуктToolStripMenuItem";
продуктToolStripMenuItem.Size = new Size(201, 22);
продуктToolStripMenuItem.Text = "Продукт";
продуктToolStripMenuItem.Click += продуктToolStripMenuItem_Click;
//
// складскоеПомещениеToolStripMenuItem
//
складскоеПомещениеToolStripMenuItem.Name = "складскоеПомещениеToolStripMenuItem";
складскоеПомещениеToolStripMenuItem.Size = new Size(201, 22);
складскоеПомещениеToolStripMenuItem.Text = "Складское помещение";
складскоеПомещениеToolStripMenuItem.Click += складскоеПомещениеToolStripMenuItem_Click;
//
// поставщикToolStripMenuItem
//
поставщикToolStripMenuItem.Name = "поставщикToolStripMenuItem";
поставщикToolStripMenuItem.Size = new Size(201, 22);
поставщикToolStripMenuItem.Text = "Поставщик";
поставщикToolStripMenuItem.Click += поставщикToolStripMenuItem_Click;
//
// поставкаToolStripMenuItem
//
поставкаToolStripMenuItem.Name = "поставкаToolStripMenuItem";
поставкаToolStripMenuItem.Size = new Size(201, 22);
поставкаToolStripMenuItem.Text = "Поставка";
поставкаToolStripMenuItem.Click += поставкаToolStripMenuItem_Click;
//
// отгрузкаToolStripMenuItem
//
отгрузкаToolStripMenuItem.Name = "отгрузкаToolStripMenuItem";
отгрузкаToolStripMenuItem.Size = new Size(201, 22);
отгрузкаToolStripMenuItem.Text = "Отгрузка";
отгрузкаToolStripMenuItem.Click += отгрузкаToolStripMenuItem_Click;
//
// dataGridView
//
dataGridView.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
dataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
dataGridView.BackgroundColor = SystemColors.ControlLightLight;
dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
dataGridView.Location = new Point(3, 29);
dataGridView.MultiSelect = false;
dataGridView.Name = "dataGridView";
dataGridView.ReadOnly = true;
dataGridView.RowHeadersVisible = false;
dataGridView.RowTemplate.Height = 25;
dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
dataGridView.Size = new Size(1079, 420);
dataGridView.TabIndex = 1;
//
// ButtonCreateOrder
//
ButtonCreateOrder.Location = new Point(1106, 39);
ButtonCreateOrder.Name = "ButtonCreateOrder";
ButtonCreateOrder.Size = new Size(131, 34);
ButtonCreateOrder.TabIndex = 2;
ButtonCreateOrder.Text = "Создать заказ";
ButtonCreateOrder.UseVisualStyleBackColor = true;
ButtonCreateOrder.Click += ButtonCreateOrder_Click;
//
// buttonComeOrder
//
buttonComeOrder.Location = new Point(1106, 90);
buttonComeOrder.Name = "buttonComeOrder";
buttonComeOrder.Size = new Size(131, 34);
buttonComeOrder.TabIndex = 3;
buttonComeOrder.Text = "Приход";
buttonComeOrder.UseVisualStyleBackColor = true;
buttonComeOrder.Click += buttonComeOrder_Click;
//
// buttonTakeOrder
//
buttonTakeOrder.Location = new Point(1106, 139);
buttonTakeOrder.Name = "buttonTakeOrder";
buttonTakeOrder.Size = new Size(129, 34);
buttonTakeOrder.TabIndex = 4;
buttonTakeOrder.Text = "Принят";
buttonTakeOrder.UseVisualStyleBackColor = true;
buttonTakeOrder.Click += buttonTakeOrder_Click;
//
// buttonArrangeOrder
//
buttonArrangeOrder.Location = new Point(1106, 188);
buttonArrangeOrder.Name = "buttonArrangeOrder";
buttonArrangeOrder.Size = new Size(129, 34);
buttonArrangeOrder.TabIndex = 5;
buttonArrangeOrder.Text = "Расставить";
buttonArrangeOrder.UseVisualStyleBackColor = true;
buttonArrangeOrder.Click += buttonArrangeOrder_Click;
//
// buttonChekOrder
//
buttonChekOrder.Location = new Point(1106, 238);
buttonChekOrder.Name = "buttonChekOrder";
buttonChekOrder.Size = new Size(129, 34);
buttonChekOrder.TabIndex = 6;
buttonChekOrder.Text = "Проверить";
buttonChekOrder.UseVisualStyleBackColor = true;
buttonChekOrder.Click += buttonChekOrder_Click;
//
// buttonDeliverOrder
//
buttonDeliverOrder.Location = new Point(1106, 288);
buttonDeliverOrder.Name = "buttonDeliverOrder";
buttonDeliverOrder.Size = new Size(129, 34);
buttonDeliverOrder.TabIndex = 7;
buttonDeliverOrder.Text = "Доставить";
buttonDeliverOrder.UseVisualStyleBackColor = true;
buttonDeliverOrder.Click += buttonDeliverOrder_Click;
//
// FormMain
//
AutoScaleDimensions = new SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(1260, 450);
Controls.Add(buttonDeliverOrder);
Controls.Add(buttonChekOrder);
Controls.Add(buttonArrangeOrder);
Controls.Add(buttonTakeOrder);
Controls.Add(buttonComeOrder);
Controls.Add(ButtonCreateOrder);
Controls.Add(dataGridView);
Controls.Add(menuStrip1);
MainMenuStrip = menuStrip1;
Name = "FormMain";
Text = "Учет продукции на складе";
Load += FormMain_Load;
menuStrip1.ResumeLayout(false);
menuStrip1.PerformLayout();
((System.ComponentModel.ISupportInitialize)dataGridView).EndInit();
ResumeLayout(false);
PerformLayout();
}
#endregion
private MenuStrip menuStrip1;
private ToolStripMenuItem справочникиToolStripMenuItem;
private ToolStripMenuItem продуктToolStripMenuItem;
private ToolStripMenuItem складскоеПомещениеToolStripMenuItem;
private ToolStripMenuItem поставщикToolStripMenuItem;
private ToolStripMenuItem поставкаToolStripMenuItem;
private ToolStripMenuItem отгрузкаToolStripMenuItem;
private DataGridView dataGridView;
private Button ButtonCreateOrder;
private Button buttonComeOrder;
private Button buttonTakeOrder;
private Button buttonArrangeOrder;
private Button buttonChekOrder;
private Button buttonDeliverOrder;
}
}

View File

@ -0,0 +1,229 @@
using AccountingWarehouseProductsContracts.BindingModels;
using AccountingWarehouseProductsContracts.BusinessLogicsContracts;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace AccountingWarehouseProductsView
{
public partial class FormMain : Form
{
private readonly IOrderLogic _logic;
public FormMain(IOrderLogic logic)
{
InitializeComponent();
_logic = logic;
}
private void продуктToolStripMenuItem_Click(object sender, EventArgs e)
{
var service = Program.ServiceProvider?.GetService(typeof(FormProducts));
if (service is FormProducts form)
{
form.ShowDialog();
}
}
private void складскоеПомещениеToolStripMenuItem_Click(object sender, EventArgs e)
{
var service = Program.ServiceProvider?.GetService(typeof(FormWarehouses));
if (service is FormWarehouses form)
{
form.ShowDialog();
}
}
private void поставщикToolStripMenuItem_Click(object sender, EventArgs e)
{
var service = Program.ServiceProvider?.GetService(typeof(FormSuppliers));
if (service is FormSuppliers form)
{
form.ShowDialog();
}
}
private void поставкаToolStripMenuItem_Click(object sender, EventArgs e)
{
var service = Program.ServiceProvider?.GetService(typeof(FormStands));
if (service is FormStands form)
{
form.ShowDialog();
}
}
private void отгрузкаToolStripMenuItem_Click(object sender, EventArgs e)
{
var service = Program.ServiceProvider?.GetService(typeof(FormShipments));
if (service is FormShipments form)
{
form.ShowDialog();
}
}
private void FormMain_Load(object sender, EventArgs e)
{
LoadData();
}
private void LoadData()
{
var _list = _logic.ReadList(null);
if (_list != null)
{
dataGridView.DataSource = _list;
dataGridView.Columns["ProductId"].Visible = false;
dataGridView.Columns["SupplierId"].Visible = false;
//dataGridView.Columns["WarehouseId"].Visible = false;
//dataGridView.Columns["SupplierId"].Visible = false;
//dataGridView.Columns["StandId"].Visible = false;
//dataGridView.Columns["ShipmentId"].Visible = false;
dataGridView.Columns["OrderProduct"].Visible = false;
//dataGridView.Columns["WarehouseProducts"].Visible = false;
}
}
private void ButtonCreateOrder_Click(object sender, EventArgs e)
{
var service = Program.ServiceProvider?.GetService(typeof(FormCreateOrder));
if (service is FormCreateOrder form)
{
form.ShowDialog();
LoadData();
}
}
private void buttonComeOrder_Click(Object sender, EventArgs e)
{
if (dataGridView.SelectedRows.Count == 1)
{
int id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value);
try
{
var operationResult = _logic.ComeOrder(new OrderBindingModel
{
Id = id,
Status = Enum.Parse<AccountingWarehouseProductsDataModels.Enums.OrderStatus>(dataGridView.SelectedRows[0].Cells["Status"].Value.ToString()),
});
if (!operationResult)
{
throw new Exception("Ошибка при сохранении. Дополнительная информация в логах.");
}
LoadData();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
private void buttonTakeOrder_Click(Object sender, EventArgs e)
{
if (dataGridView.SelectedRows.Count == 1)
{
int id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value);
try
{
var operationResult = _logic.TakeOrder(new OrderBindingModel
{
Id = id,
Status = Enum.Parse<AccountingWarehouseProductsDataModels.Enums.OrderStatus>(dataGridView.SelectedRows[0].Cells["Status"].Value.ToString()),
DateofOrder = DateTime.Now,
});
if (!operationResult)
{
throw new Exception("Ошибка при сохранении. Дополнительная информация в логах.");
}
LoadData();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
private void buttonArrangeOrder_Click(Object sender, EventArgs e)
{
if (dataGridView.SelectedRows.Count == 1)
{
int id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value);
try
{
var operationResult = _logic.ArrangeOrder(new OrderBindingModel
{
Id = id,
Status = Enum.Parse<AccountingWarehouseProductsDataModels.Enums.OrderStatus>(dataGridView.SelectedRows[0].Cells["Status"].Value.ToString()),
});
if (!operationResult)
{
throw new Exception("Ошибка при сохранении. Дополнительная информация в логах.");
}
LoadData();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
private void buttonChekOrder_Click(Object sender, EventArgs e)
{
if (dataGridView.SelectedRows.Count == 1)
{
int id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value);
try
{
var operationResult = _logic.ChekOrder(new OrderBindingModel
{
Id = id,
Status = Enum.Parse<AccountingWarehouseProductsDataModels.Enums.OrderStatus>(dataGridView.SelectedRows[0].Cells["Status"].Value.ToString()),
});
if (!operationResult)
{
throw new Exception("Ошибка при сохранении. Дополнительная информация в логах.");
}
LoadData();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
private void buttonDeliverOrder_Click(Object sender, EventArgs e)
{
if (dataGridView.SelectedRows.Count == 1)
{
int id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value);
try
{
var operationResult = _logic.DeliverOrder(new OrderBindingModel
{
Id = id,
Status = Enum.Parse<AccountingWarehouseProductsDataModels.Enums.OrderStatus>(dataGridView.SelectedRows[0].Cells["Status"].Value.ToString()),
DateImplement = DateTime.Now,
});
if (!operationResult)
{
throw new Exception("Ошибка при сохранении. Дополнительная информация в логах.");
}
LoadData();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
}
}

View File

@ -0,0 +1,123 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="menuStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
</root>

View File

@ -0,0 +1,121 @@
namespace AccountingWarehouseProductsView
{
partial class FormOrderProduct
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
labelProduct = new Label();
labelCount = new Label();
comboBoxProduct = new ComboBox();
textBoxCount = new TextBox();
buttonSave = new Button();
buttonCancel = new Button();
SuspendLayout();
//
// labelProduct
//
labelProduct.AutoSize = true;
labelProduct.Font = new Font("Segoe UI", 12F, FontStyle.Regular, GraphicsUnit.Point);
labelProduct.Location = new Point(21, 42);
labelProduct.Name = "labelProduct";
labelProduct.Size = new Size(74, 21);
labelProduct.TabIndex = 0;
labelProduct.Text = "Продукт:";
//
// labelCount
//
labelCount.AutoSize = true;
labelCount.Font = new Font("Segoe UI", 12F, FontStyle.Regular, GraphicsUnit.Point);
labelCount.Location = new Point(21, 98);
labelCount.Name = "labelCount";
labelCount.Size = new Size(96, 21);
labelCount.TabIndex = 1;
labelCount.Text = "Количество:";
//
// comboBoxProduct
//
comboBoxProduct.DropDownStyle = ComboBoxStyle.DropDownList;
comboBoxProduct.FormattingEnabled = true;
comboBoxProduct.Location = new Point(101, 44);
comboBoxProduct.Name = "comboBoxProduct";
comboBoxProduct.Size = new Size(283, 23);
comboBoxProduct.TabIndex = 2;
//
// textBoxCount
//
textBoxCount.Location = new Point(128, 96);
textBoxCount.Name = "textBoxCount";
textBoxCount.Size = new Size(256, 23);
textBoxCount.TabIndex = 3;
//
// buttonSave
//
buttonSave.Location = new Point(71, 144);
buttonSave.Name = "buttonSave";
buttonSave.Size = new Size(114, 49);
buttonSave.TabIndex = 4;
buttonSave.Text = "Сохранить";
buttonSave.UseVisualStyleBackColor = true;
buttonSave.Click += buttonSave_Click;
//
// buttonCancel
//
buttonCancel.Location = new Point(240, 144);
buttonCancel.Name = "buttonCancel";
buttonCancel.Size = new Size(114, 49);
buttonCancel.TabIndex = 5;
buttonCancel.Text = "Отмена";
buttonCancel.UseVisualStyleBackColor = true;
buttonCancel.Click += buttonCancel_Click;
//
// FormOrderProduct
//
AutoScaleDimensions = new SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(437, 218);
Controls.Add(buttonCancel);
Controls.Add(buttonSave);
Controls.Add(textBoxCount);
Controls.Add(comboBoxProduct);
Controls.Add(labelCount);
Controls.Add(labelProduct);
Name = "FormOrderProduct";
Text = "Заказ продукта";
ResumeLayout(false);
PerformLayout();
}
#endregion
private Label labelProduct;
private Label labelCount;
private ComboBox comboBoxProduct;
private TextBox textBoxCount;
private Button buttonSave;
private Button buttonCancel;
}
}

View File

@ -0,0 +1,77 @@
using AccountingWarehouseProductsContracts.BusinessLogicsContracts;
using AccountingWarehouseProductsContracts.ViewModels;
using AccountingWarehouseProductsDataModels.Models;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace AccountingWarehouseProductsView
{
public partial class FormOrderProduct : Form
{
private readonly List<ProductViewModel?> _list;
public int Id { get { return Convert.ToInt32(comboBoxProduct.SelectedValue); } set { comboBoxProduct.SelectedValue = value; } }
public IProductModel? ProductModel
{
get
{
if (_list == null)
{
return null;
}
foreach (var elem in _list)
{
if (elem.Id == Id)
{
return elem;
}
}
return null;
}
}
public int Count { get { return Convert.ToInt32(textBoxCount.Text); } set { textBoxCount.Text = value.ToString(); } }
public FormOrderProduct(IProductLogic logic)
{
InitializeComponent();
_list = logic.ReadList(null);
if (_list != null)
{
comboBoxProduct.DisplayMember = "ProductName";
comboBoxProduct.ValueMember = "Id";
comboBoxProduct.DataSource = _list;
comboBoxProduct.SelectedItem = null;
}
}
private void buttonSave_Click(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(textBoxCount.Text))
{
MessageBox.Show("Заполните поле Количество", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
if (comboBoxProduct.SelectedValue == null)
{
MessageBox.Show("Выберите продукт", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
DialogResult = DialogResult.OK;
Close();
}
private void buttonCancel_Click(object sender, EventArgs e)
{
DialogResult = DialogResult.Cancel;
Close();
}
}
}

View File

@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@ -0,0 +1,189 @@
namespace AccountingWarehouseProductsView
{
partial class FormProduct
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
labelName = new Label();
labelPrice = new Label();
labelCategory = new Label();
labelDateofFabrication = new Label();
labelValidUntil = new Label();
textBoxName = new TextBox();
textBoxPrice = new TextBox();
textBoxCategory = new TextBox();
textBoxDateofFabrication = new TextBox();
textBoxValidUntil = new TextBox();
buttonSave = new Button();
buttonCancel = new Button();
SuspendLayout();
//
// labelName
//
labelName.AutoSize = true;
labelName.Font = new Font("Segoe UI", 12F, FontStyle.Regular, GraphicsUnit.Point);
labelName.Location = new Point(12, 21);
labelName.Name = "labelName";
labelName.Size = new Size(81, 21);
labelName.TabIndex = 0;
labelName.Text = "Название:";
//
// labelPrice
//
labelPrice.AutoSize = true;
labelPrice.Font = new Font("Segoe UI", 12F, FontStyle.Regular, GraphicsUnit.Point);
labelPrice.Location = new Point(12, 61);
labelPrice.Name = "labelPrice";
labelPrice.Size = new Size(50, 21);
labelPrice.TabIndex = 1;
labelPrice.Text = "Цена:";
//
// labelCategory
//
labelCategory.AutoSize = true;
labelCategory.Font = new Font("Segoe UI", 12F, FontStyle.Regular, GraphicsUnit.Point);
labelCategory.Location = new Point(12, 106);
labelCategory.Name = "labelCategory";
labelCategory.Size = new Size(86, 21);
labelCategory.TabIndex = 2;
labelCategory.Text = "Категория:";
//
// labelDateofFabrication
//
labelDateofFabrication.AutoSize = true;
labelDateofFabrication.Font = new Font("Segoe UI", 12F, FontStyle.Regular, GraphicsUnit.Point);
labelDateofFabrication.Location = new Point(12, 150);
labelDateofFabrication.Name = "labelDateofFabrication";
labelDateofFabrication.Size = new Size(148, 21);
labelDateofFabrication.TabIndex = 3;
labelDateofFabrication.Text = "Дата изготовления:";
//
// labelValidUntil
//
labelValidUntil.AutoSize = true;
labelValidUntil.Font = new Font("Segoe UI", 12F, FontStyle.Regular, GraphicsUnit.Point);
labelValidUntil.Location = new Point(12, 194);
labelValidUntil.Name = "labelValidUntil";
labelValidUntil.Size = new Size(78, 21);
labelValidUntil.TabIndex = 4;
labelValidUntil.Text = "Годен до:";
//
// textBoxName
//
textBoxName.Location = new Point(109, 23);
textBoxName.Name = "textBoxName";
textBoxName.Size = new Size(221, 23);
textBoxName.TabIndex = 5;
//
// textBoxPrice
//
textBoxPrice.Location = new Point(109, 63);
textBoxPrice.Name = "textBoxPrice";
textBoxPrice.Size = new Size(221, 23);
textBoxPrice.TabIndex = 6;
//
// textBoxCategory
//
textBoxCategory.Location = new Point(109, 106);
textBoxCategory.Name = "textBoxCategory";
textBoxCategory.Size = new Size(221, 23);
textBoxCategory.TabIndex = 7;
//
// textBoxDateofFabrication
//
textBoxDateofFabrication.Location = new Point(166, 152);
textBoxDateofFabrication.Name = "textBoxDateofFabrication";
textBoxDateofFabrication.Size = new Size(164, 23);
textBoxDateofFabrication.TabIndex = 8;
//
// textBoxValidUntil
//
textBoxValidUntil.Location = new Point(109, 194);
textBoxValidUntil.Name = "textBoxValidUntil";
textBoxValidUntil.Size = new Size(221, 23);
textBoxValidUntil.TabIndex = 9;
//
// buttonSave
//
buttonSave.Location = new Point(383, 23);
buttonSave.Name = "buttonSave";
buttonSave.Size = new Size(118, 38);
buttonSave.TabIndex = 10;
buttonSave.Text = "Сохранить";
buttonSave.UseVisualStyleBackColor = true;
buttonSave.Click += buttonSave_Click;
//
// buttonCancel
//
buttonCancel.Location = new Point(383, 77);
buttonCancel.Name = "buttonCancel";
buttonCancel.Size = new Size(118, 38);
buttonCancel.TabIndex = 11;
buttonCancel.Text = "Отмена";
buttonCancel.UseVisualStyleBackColor = true;
buttonCancel.Click += buttonCancel_Click;
//
// FormProduct
//
AutoScaleDimensions = new SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(538, 313);
Controls.Add(buttonCancel);
Controls.Add(buttonSave);
Controls.Add(textBoxValidUntil);
Controls.Add(textBoxDateofFabrication);
Controls.Add(textBoxCategory);
Controls.Add(textBoxPrice);
Controls.Add(textBoxName);
Controls.Add(labelValidUntil);
Controls.Add(labelDateofFabrication);
Controls.Add(labelCategory);
Controls.Add(labelPrice);
Controls.Add(labelName);
Name = "FormProduct";
Text = "Продукт";
Load += FormProduct_Load;
ResumeLayout(false);
PerformLayout();
}
#endregion
private Label labelName;
private Label labelPrice;
private Label labelCategory;
private Label labelDateofFabrication;
private Label labelValidUntil;
private TextBox textBoxName;
private TextBox textBoxPrice;
private TextBox textBoxCategory;
private TextBox textBoxDateofFabrication;
private TextBox textBoxValidUntil;
private Button buttonSave;
private Button buttonCancel;
}
}

View File

@ -0,0 +1,89 @@
using AccountingWarehouseProductsContracts.BindingModels;
using AccountingWarehouseProductsContracts.BusinessLogicsContracts;
using AccountingWarehouseProductsContracts.SearchModels;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace AccountingWarehouseProductsView
{
public partial class FormProduct : Form
{
private readonly IProductLogic _logic;
private int? _id;
public int Id { set { _id = value; } }
public FormProduct(IProductLogic logic)
{
InitializeComponent();
_logic = logic;
}
private void FormProduct_Load(object sender, EventArgs e)
{
if (_id.HasValue)
{
try
{
var view = _logic.ReadElement(new ProductSearchModel { Id = _id.Value });
if (view != null)
{
textBoxName.Text = view.ProductName;
textBoxPrice.Text = view.Cost.ToString();
textBoxCategory.Text = view.Category;
textBoxDateofFabrication.Text = view.DateofFabrication;
textBoxValidUntil.Text = view.ValidUntil;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
private void buttonSave_Click(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(textBoxName.Text))
{
MessageBox.Show("Заполните Имя", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
try
{
var model = new ProductBindingModel
{
Id = _id ?? 0,
ProductName = textBoxName.Text,
Cost = Convert.ToDouble(textBoxPrice.Text),
Category = textBoxCategory.Text,
DateofFabrication = textBoxDateofFabrication.Text,
ValidUntil = textBoxValidUntil.Text
};
var operationResult = _id.HasValue ? _logic.Update(model) : _logic.Create(model);
if (!operationResult)
{
throw new Exception("Ошибка при сохранении. Доп информация в логах.");
}
MessageBox.Show("Сохранение прошло успешно", "Сообщение", MessageBoxButtons.OK, MessageBoxIcon.Information);
DialogResult = DialogResult.OK;
Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void buttonCancel_Click(object sender, EventArgs e)
{
DialogResult = DialogResult.Cancel;
Close();
}
}
}

View File

@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@ -0,0 +1,121 @@
namespace AccountingWarehouseProductsView
{
partial class FormProducts
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
dataGridView = new DataGridView();
ButtonAdd = new Button();
ButtonUpd = new Button();
ButtonDel = new Button();
ButtonRef = new Button();
((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit();
SuspendLayout();
//
// dataGridView
//
dataGridView.AllowUserToAddRows = false;
dataGridView.AllowUserToDeleteRows = false;
dataGridView.BackgroundColor = SystemColors.ControlLight;
dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
dataGridView.Dock = DockStyle.Left;
dataGridView.Location = new Point(0, 0);
dataGridView.MultiSelect = false;
dataGridView.Name = "dataGridView";
dataGridView.ReadOnly = true;
dataGridView.RowHeadersVisible = false;
dataGridView.RowTemplate.Height = 25;
dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
dataGridView.Size = new Size(587, 450);
dataGridView.TabIndex = 0;
//
// ButtonAdd
//
ButtonAdd.Location = new Point(629, 34);
ButtonAdd.Name = "ButtonAdd";
ButtonAdd.Size = new Size(139, 48);
ButtonAdd.TabIndex = 1;
ButtonAdd.Text = "Добавить";
ButtonAdd.UseVisualStyleBackColor = true;
ButtonAdd.Click += buttonAdd_Click;
//
// ButtonUpd
//
ButtonUpd.Location = new Point(629, 100);
ButtonUpd.Name = "ButtonUpd";
ButtonUpd.Size = new Size(139, 48);
ButtonUpd.TabIndex = 2;
ButtonUpd.Text = "Изменить";
ButtonUpd.UseVisualStyleBackColor = true;
ButtonUpd.Click += buttonUpd_Click;
//
// ButtonDel
//
ButtonDel.Location = new Point(629, 172);
ButtonDel.Name = "ButtonDel";
ButtonDel.Size = new Size(139, 48);
ButtonDel.TabIndex = 3;
ButtonDel.Text = "Удалить";
ButtonDel.UseVisualStyleBackColor = true;
ButtonDel.Click += buttonDel_Click;
//
// ButtonRef
//
ButtonRef.Location = new Point(629, 242);
ButtonRef.Name = "ButtonRef";
ButtonRef.Size = new Size(139, 48);
ButtonRef.TabIndex = 4;
ButtonRef.Text = "Обновить";
ButtonRef.UseVisualStyleBackColor = true;
ButtonRef.Click += buttonRef_Click;
//
// FormProducts
//
AutoScaleDimensions = new SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(800, 450);
Controls.Add(ButtonRef);
Controls.Add(ButtonDel);
Controls.Add(ButtonUpd);
Controls.Add(ButtonAdd);
Controls.Add(dataGridView);
Name = "FormProducts";
Text = "Продукты";
Load += FormProducts_Load;
((System.ComponentModel.ISupportInitialize)dataGridView).EndInit();
ResumeLayout(false);
}
#endregion
private DataGridView dataGridView;
private Button ButtonAdd;
private Button ButtonUpd;
private Button ButtonDel;
private Button ButtonRef;
}
}

View File

@ -0,0 +1,106 @@
using AccountingWarehouseProductsContracts.BindingModels;
using AccountingWarehouseProductsContracts.BusinessLogicsContracts;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace AccountingWarehouseProductsView
{
public partial class FormProducts : Form
{
private readonly IProductLogic _logic;
public FormProducts(IProductLogic logic)
{
InitializeComponent();
_logic = logic;
}
private void FormProducts_Load(object sender, EventArgs e)
{
LoadData();
}
private void LoadData()
{
try
{
var list = _logic.ReadList(null);
if (list != null)
{
dataGridView.DataSource = list;
dataGridView.Columns["Id"].Visible = false;
dataGridView.Columns["ProductName"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
dataGridView.Columns["DateofFabrication"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
dataGridView.Columns["ValidUntil"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
dataGridView.Columns["Category"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void buttonAdd_Click(object sender, EventArgs e)
{
var service = Program.ServiceProvider?.GetService(typeof(FormProduct));
if (service is FormProduct form)
{
if (form.ShowDialog() == DialogResult.OK)
{
LoadData();
}
}
}
private void buttonUpd_Click(object sender, EventArgs e)
{
if (dataGridView.SelectedRows.Count == 1)
{
var service = Program.ServiceProvider?.GetService(typeof(FormProduct));
if (service is FormProduct form)
{
form.Id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value);
if (form.ShowDialog() == DialogResult.OK)
{
LoadData();
}
}
}
}
private void buttonDel_Click(object sender, EventArgs e)
{
if (dataGridView.SelectedRows.Count == 1)
{
if (MessageBox.Show("Удалить запись?", "Вопрос", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
int id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value);
try
{
if (!_logic.Delete(new ProductBindingModel { Id = id }))
{
throw new Exception("Ошибка при удалении. Доп информация в логах");
}
LoadData();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
}
private void buttonRef_Click(object sender, EventArgs e)
{
LoadData();
}
}
}

View File

@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@ -0,0 +1,143 @@
namespace AccountingWarehouseProductsView
{
partial class FormShipment
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
labelShipmentDate = new Label();
labelCount = new Label();
labelRecipient = new Label();
textBoxShipmentDate = new TextBox();
textBoxCount = new TextBox();
textBoxRecipient = new TextBox();
ButtonSave = new Button();
ButtonCancel = new Button();
SuspendLayout();
//
// labelShipmentDate
//
labelShipmentDate.AutoSize = true;
labelShipmentDate.Font = new Font("Segoe UI", 12F, FontStyle.Regular, GraphicsUnit.Point);
labelShipmentDate.Location = new Point(17, 31);
labelShipmentDate.Name = "labelShipmentDate";
labelShipmentDate.Size = new Size(114, 21);
labelShipmentDate.TabIndex = 0;
labelShipmentDate.Text = "Дата отгрузки:";
//
// labelCount
//
labelCount.AutoSize = true;
labelCount.Font = new Font("Segoe UI", 12F, FontStyle.Regular, GraphicsUnit.Point);
labelCount.Location = new Point(17, 77);
labelCount.Name = "labelCount";
labelCount.Size = new Size(96, 21);
labelCount.TabIndex = 1;
labelCount.Text = "Количество:";
//
// labelRecipient
//
labelRecipient.AutoSize = true;
labelRecipient.Font = new Font("Segoe UI", 12F, FontStyle.Regular, GraphicsUnit.Point);
labelRecipient.Location = new Point(17, 122);
labelRecipient.Name = "labelRecipient";
labelRecipient.Size = new Size(97, 21);
labelRecipient.TabIndex = 2;
labelRecipient.Text = "Получатель:";
//
// textBoxShipmentDate
//
textBoxShipmentDate.Location = new Point(145, 33);
textBoxShipmentDate.Name = "textBoxShipmentDate";
textBoxShipmentDate.Size = new Size(182, 23);
textBoxShipmentDate.TabIndex = 3;
//
// textBoxCount
//
textBoxCount.Location = new Point(145, 77);
textBoxCount.Name = "textBoxCount";
textBoxCount.Size = new Size(182, 23);
textBoxCount.TabIndex = 4;
//
// textBoxRecipient
//
textBoxRecipient.Location = new Point(145, 124);
textBoxRecipient.Name = "textBoxRecipient";
textBoxRecipient.Size = new Size(182, 23);
textBoxRecipient.TabIndex = 5;
//
// ButtonSave
//
ButtonSave.Location = new Point(30, 184);
ButtonSave.Name = "ButtonSave";
ButtonSave.Size = new Size(137, 52);
ButtonSave.TabIndex = 6;
ButtonSave.Text = "Сохранить";
ButtonSave.UseVisualStyleBackColor = true;
ButtonSave.Click += buttonSave_Click;
//
// ButtonCancel
//
ButtonCancel.Location = new Point(203, 184);
ButtonCancel.Name = "ButtonCancel";
ButtonCancel.Size = new Size(137, 52);
ButtonCancel.TabIndex = 7;
ButtonCancel.Text = "Отмена";
ButtonCancel.UseVisualStyleBackColor = true;
ButtonCancel.Click += buttonCancel_Click;
//
// FormShipment
//
AutoScaleDimensions = new SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(385, 283);
Controls.Add(ButtonCancel);
Controls.Add(ButtonSave);
Controls.Add(textBoxRecipient);
Controls.Add(textBoxCount);
Controls.Add(textBoxShipmentDate);
Controls.Add(labelRecipient);
Controls.Add(labelCount);
Controls.Add(labelShipmentDate);
Name = "FormShipment";
Text = "Отгрузка";
Load += FormShipment_Load;
ResumeLayout(false);
PerformLayout();
}
#endregion
private Label labelShipmentDate;
private Label labelCount;
private Label labelRecipient;
private TextBox textBoxShipmentDate;
private TextBox textBoxCount;
private TextBox textBoxRecipient;
private Button ButtonSave;
private Button ButtonCancel;
}
}

View File

@ -0,0 +1,85 @@
using AccountingWarehouseProductsContracts.BindingModels;
using AccountingWarehouseProductsContracts.BusinessLogicsContracts;
using AccountingWarehouseProductsContracts.SearchModels;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace AccountingWarehouseProductsView
{
public partial class FormShipment : Form
{
private readonly IShipmentLogic _logic;
private int? _id;
public int Id { set { _id = value; } }
public FormShipment(IShipmentLogic logic)
{
InitializeComponent();
_logic = logic;
}
private void FormShipment_Load(object sender, EventArgs e)
{
if (_id.HasValue)
{
try
{
var view = _logic.ReadElement(new ShipmentSearchModel { Id = _id.Value });
if (view != null)
{
textBoxShipmentDate.Text = view.ShipmentDate;
textBoxCount.Text = view.Count.ToString();
textBoxRecipient.Text = view.Recipient;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
private void buttonSave_Click(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(textBoxRecipient.Text))
{
MessageBox.Show("Заполните Получателя", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
try
{
var model = new ShipmentBindingModel
{
Id = _id ?? 0,
ShipmentDate = textBoxShipmentDate.Text,
Count = Convert.ToInt32(textBoxCount.Text),
Recipient = textBoxRecipient.Text,
};
var operationResult = _id.HasValue ? _logic.Update(model) : _logic.Create(model);
if (!operationResult)
{
throw new Exception("Ошибка при сохранении. Доп информация в логах.");
}
MessageBox.Show("Сохранение прошло успешно", "Сообщение", MessageBoxButtons.OK, MessageBoxIcon.Information);
DialogResult = DialogResult.OK;
Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void buttonCancel_Click(object sender, EventArgs e)
{
DialogResult = DialogResult.Cancel;
Close();
}
}
}

View File

@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@ -0,0 +1,121 @@
namespace AccountingWarehouseProductsView
{
partial class FormShipments
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
dataGridView = new DataGridView();
ButtonAdd = new Button();
ButtonUpd = new Button();
ButtonDel = new Button();
ButtonRef = new Button();
((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit();
SuspendLayout();
//
// dataGridView
//
dataGridView.AllowUserToAddRows = false;
dataGridView.AllowUserToDeleteRows = false;
dataGridView.BackgroundColor = SystemColors.ControlLight;
dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
dataGridView.Dock = DockStyle.Left;
dataGridView.Location = new Point(0, 0);
dataGridView.MultiSelect = false;
dataGridView.Name = "dataGridView";
dataGridView.ReadOnly = true;
dataGridView.RowHeadersVisible = false;
dataGridView.RowTemplate.Height = 25;
dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
dataGridView.Size = new Size(588, 450);
dataGridView.TabIndex = 0;
//
// ButtonAdd
//
ButtonAdd.Location = new Point(619, 30);
ButtonAdd.Name = "ButtonAdd";
ButtonAdd.Size = new Size(138, 49);
ButtonAdd.TabIndex = 1;
ButtonAdd.Text = "Добавить";
ButtonAdd.UseVisualStyleBackColor = true;
ButtonAdd.Click += buttonAdd_Click;
//
// ButtonUpd
//
ButtonUpd.Location = new Point(619, 100);
ButtonUpd.Name = "ButtonUpd";
ButtonUpd.Size = new Size(138, 49);
ButtonUpd.TabIndex = 2;
ButtonUpd.Text = "Изменить";
ButtonUpd.UseVisualStyleBackColor = true;
ButtonUpd.Click += buttonUpd_Click;
//
// ButtonDel
//
ButtonDel.Location = new Point(619, 177);
ButtonDel.Name = "ButtonDel";
ButtonDel.Size = new Size(138, 49);
ButtonDel.TabIndex = 3;
ButtonDel.Text = "Удалить";
ButtonDel.UseVisualStyleBackColor = true;
ButtonDel.Click += buttonDel_Click;
//
// ButtonRef
//
ButtonRef.Location = new Point(619, 251);
ButtonRef.Name = "ButtonRef";
ButtonRef.Size = new Size(138, 49);
ButtonRef.TabIndex = 4;
ButtonRef.Text = "Обновить";
ButtonRef.UseVisualStyleBackColor = true;
ButtonRef.Click += buttonRef_Click;
//
// FormShipments
//
AutoScaleDimensions = new SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(800, 450);
Controls.Add(ButtonRef);
Controls.Add(ButtonDel);
Controls.Add(ButtonUpd);
Controls.Add(ButtonAdd);
Controls.Add(dataGridView);
Name = "FormShipments";
Text = "Отгрузки";
Load += FormShipments_Load;
((System.ComponentModel.ISupportInitialize)dataGridView).EndInit();
ResumeLayout(false);
}
#endregion
private DataGridView dataGridView;
private Button ButtonAdd;
private Button ButtonUpd;
private Button ButtonDel;
private Button ButtonRef;
}
}

View File

@ -0,0 +1,106 @@
using AccountingWarehouseProductsContracts.BindingModels;
using AccountingWarehouseProductsContracts.BusinessLogicsContracts;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace AccountingWarehouseProductsView
{
public partial class FormShipments : Form
{
private readonly IShipmentLogic _logic;
public FormShipments(IShipmentLogic logic)
{
InitializeComponent();
_logic = logic;
}
private void FormShipments_Load(object sender, EventArgs e)
{
LoadData();
}
private void LoadData()
{
try
{
var list = _logic.ReadList(null);
if (list != null)
{
dataGridView.DataSource = list;
dataGridView.Columns["Id"].Visible = false;
dataGridView.Columns["OrderId"].Visible = false;
dataGridView.Columns["ShipmentDate"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
dataGridView.Columns["Count"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
dataGridView.Columns["Recipient"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void buttonAdd_Click(object sender, EventArgs e)
{
var service = Program.ServiceProvider?.GetService(typeof(FormShipment));
if (service is FormShipment form)
{
if (form.ShowDialog() == DialogResult.OK)
{
LoadData();
}
}
}
private void buttonUpd_Click(object sender, EventArgs e)
{
if (dataGridView.SelectedRows.Count == 1)
{
var service = Program.ServiceProvider?.GetService(typeof(FormShipment));
if (service is FormShipment form)
{
form.Id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value);
if (form.ShowDialog() == DialogResult.OK)
{
LoadData();
}
}
}
}
private void buttonDel_Click(object sender, EventArgs e)
{
if (dataGridView.SelectedRows.Count == 1)
{
if (MessageBox.Show("Удалить запись?", "Вопрос", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
int id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value);
try
{
if (!_logic.Delete(new ShipmentBindingModel { Id = id }))
{
throw new Exception("Ошибка при удалении. Доп информация в логах");
}
LoadData();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
}
private void buttonRef_Click(object sender, EventArgs e)
{
LoadData();
}
}
}

View File

@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@ -0,0 +1,143 @@
namespace AccountingWarehouseProductsView
{
partial class FormStand
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
labelDeliveryDate = new Label();
labelCount = new Label();
textBoxDeliveryDate = new TextBox();
textBoxCount = new TextBox();
buttonSave = new Button();
buttonCancel = new Button();
labelNameStand = new Label();
textBoxNameStand = new TextBox();
SuspendLayout();
//
// labelDeliveryDate
//
labelDeliveryDate.AutoSize = true;
labelDeliveryDate.Font = new Font("Segoe UI", 12F, FontStyle.Regular, GraphicsUnit.Point);
labelDeliveryDate.Location = new Point(29, 65);
labelDeliveryDate.Name = "labelDeliveryDate";
labelDeliveryDate.Size = new Size(116, 21);
labelDeliveryDate.TabIndex = 0;
labelDeliveryDate.Text = "Дата поставки:";
//
// labelCount
//
labelCount.AutoSize = true;
labelCount.Font = new Font("Segoe UI", 12F, FontStyle.Regular, GraphicsUnit.Point);
labelCount.Location = new Point(29, 116);
labelCount.Name = "labelCount";
labelCount.Size = new Size(96, 21);
labelCount.TabIndex = 1;
labelCount.Text = "Количество:";
//
// textBoxDeliveryDate
//
textBoxDeliveryDate.Location = new Point(151, 65);
textBoxDeliveryDate.Name = "textBoxDeliveryDate";
textBoxDeliveryDate.Size = new Size(218, 23);
textBoxDeliveryDate.TabIndex = 2;
//
// textBoxCount
//
textBoxCount.Location = new Point(151, 116);
textBoxCount.Name = "textBoxCount";
textBoxCount.Size = new Size(218, 23);
textBoxCount.TabIndex = 3;
//
// buttonSave
//
buttonSave.Location = new Point(91, 188);
buttonSave.Name = "buttonSave";
buttonSave.Size = new Size(115, 49);
buttonSave.TabIndex = 4;
buttonSave.Text = "Сохранить";
buttonSave.UseVisualStyleBackColor = true;
buttonSave.Click += buttonSave_Click;
//
// buttonCancel
//
buttonCancel.Location = new Point(239, 188);
buttonCancel.Name = "buttonCancel";
buttonCancel.Size = new Size(115, 49);
buttonCancel.TabIndex = 5;
buttonCancel.Text = "Отмена";
buttonCancel.UseVisualStyleBackColor = true;
buttonCancel.Click += buttonCancel_Click;
//
// labelNameStand
//
labelNameStand.AutoSize = true;
labelNameStand.Font = new Font("Segoe UI", 12F, FontStyle.Regular, GraphicsUnit.Point);
labelNameStand.Location = new Point(30, 19);
labelNameStand.Name = "labelNameStand";
labelNameStand.Size = new Size(150, 21);
labelNameStand.TabIndex = 6;
labelNameStand.Text = "Название поставки:";
//
// textBoxNameStand
//
textBoxNameStand.Location = new Point(178, 19);
textBoxNameStand.Name = "textBoxNameStand";
textBoxNameStand.Size = new Size(191, 23);
textBoxNameStand.TabIndex = 7;
//
// FormStand
//
AutoScaleDimensions = new SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(451, 274);
Controls.Add(textBoxNameStand);
Controls.Add(labelNameStand);
Controls.Add(buttonCancel);
Controls.Add(buttonSave);
Controls.Add(textBoxCount);
Controls.Add(textBoxDeliveryDate);
Controls.Add(labelCount);
Controls.Add(labelDeliveryDate);
Name = "FormStand";
Text = "Поставка";
Load += FormStand_Load;
ResumeLayout(false);
PerformLayout();
}
#endregion
private Label labelDeliveryDate;
private Label labelCount;
private TextBox textBoxDeliveryDate;
private TextBox textBoxCount;
private Button buttonSave;
private Button buttonCancel;
private Label labelNameStand;
private TextBox textBoxNameStand;
}
}

View File

@ -0,0 +1,85 @@
using AccountingWarehouseProductsContracts.BindingModels;
using AccountingWarehouseProductsContracts.BusinessLogicsContracts;
using AccountingWarehouseProductsContracts.SearchModels;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace AccountingWarehouseProductsView
{
public partial class FormStand : Form
{
private readonly IStandLogic _logic;
private int? _id;
public int Id { set { _id = value; } }
public FormStand(IStandLogic logic)
{
InitializeComponent();
_logic = logic;
}
private void FormStand_Load(object sender, EventArgs e)
{
if (_id.HasValue)
{
try
{
var view = _logic.ReadElement(new StandSearchModel { Id = _id.Value });
if (view != null)
{
textBoxNameStand.Text = view.StandName;
textBoxDeliveryDate.Text = view.DeliveryDate;
textBoxCount.Text = view.Count.ToString();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
private void buttonSave_Click(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(textBoxDeliveryDate.Text))
{
MessageBox.Show("Заполните Дату поставки", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
try
{
var model = new StandBindingModel
{
Id = _id ?? 0,
StandName = textBoxNameStand.Text,
DeliveryDate = textBoxDeliveryDate.Text,
Count = Convert.ToInt32(textBoxCount.Text),
};
var operationResult = _id.HasValue ? _logic.Update(model) : _logic.Create(model);
if (!operationResult)
{
throw new Exception("Ошибка при сохранении. Доп информация в логах.");
}
MessageBox.Show("Сохранение прошло успешно", "Сообщение", MessageBoxButtons.OK, MessageBoxIcon.Information);
DialogResult = DialogResult.OK;
Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void buttonCancel_Click(object sender, EventArgs e)
{
DialogResult = DialogResult.Cancel;
Close();
}
}
}

View File

@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@ -0,0 +1,121 @@
namespace AccountingWarehouseProductsView
{
partial class FormStands
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
dataGridView = new DataGridView();
ButtonAdd = new Button();
ButtonUpd = new Button();
ButtonDel = new Button();
ButtonRef = new Button();
((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit();
SuspendLayout();
//
// dataGridView
//
dataGridView.AllowUserToAddRows = false;
dataGridView.AllowUserToDeleteRows = false;
dataGridView.BackgroundColor = SystemColors.ControlLight;
dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
dataGridView.Dock = DockStyle.Left;
dataGridView.Location = new Point(0, 0);
dataGridView.MultiSelect = false;
dataGridView.Name = "dataGridView";
dataGridView.ReadOnly = true;
dataGridView.RowHeadersVisible = false;
dataGridView.RowTemplate.Height = 25;
dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
dataGridView.Size = new Size(573, 450);
dataGridView.TabIndex = 0;
//
// ButtonAdd
//
ButtonAdd.Location = new Point(623, 27);
ButtonAdd.Name = "ButtonAdd";
ButtonAdd.Size = new Size(133, 50);
ButtonAdd.TabIndex = 1;
ButtonAdd.Text = "Добавить";
ButtonAdd.UseVisualStyleBackColor = true;
ButtonAdd.Click += buttonAdd_Click;
//
// ButtonUpd
//
ButtonUpd.Location = new Point(623, 102);
ButtonUpd.Name = "ButtonUpd";
ButtonUpd.Size = new Size(133, 50);
ButtonUpd.TabIndex = 2;
ButtonUpd.Text = "Изменить";
ButtonUpd.UseVisualStyleBackColor = true;
ButtonUpd.Click += buttonUpd_Click;
//
// ButtonDel
//
ButtonDel.Location = new Point(623, 175);
ButtonDel.Name = "ButtonDel";
ButtonDel.Size = new Size(133, 50);
ButtonDel.TabIndex = 3;
ButtonDel.Text = "Удалить";
ButtonDel.UseVisualStyleBackColor = true;
ButtonDel.Click += buttonDel_Click;
//
// ButtonRef
//
ButtonRef.Location = new Point(623, 257);
ButtonRef.Name = "ButtonRef";
ButtonRef.Size = new Size(133, 50);
ButtonRef.TabIndex = 4;
ButtonRef.Text = "Обновить";
ButtonRef.UseVisualStyleBackColor = true;
ButtonRef.Click += buttonRef_Click;
//
// FormStands
//
AutoScaleDimensions = new SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(800, 450);
Controls.Add(ButtonRef);
Controls.Add(ButtonDel);
Controls.Add(ButtonUpd);
Controls.Add(ButtonAdd);
Controls.Add(dataGridView);
Name = "FormStands";
Text = "Отгрузки";
Load += FormStands_Load;
((System.ComponentModel.ISupportInitialize)dataGridView).EndInit();
ResumeLayout(false);
}
#endregion
private DataGridView dataGridView;
private Button ButtonAdd;
private Button ButtonUpd;
private Button ButtonDel;
private Button ButtonRef;
}
}

View File

@ -0,0 +1,106 @@
using AccountingWarehouseProductsContracts.BindingModels;
using AccountingWarehouseProductsContracts.BusinessLogicsContracts;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace AccountingWarehouseProductsView
{
public partial class FormStands : Form
{
private readonly IStandLogic _logic;
public FormStands(IStandLogic logic)
{
InitializeComponent();
_logic = logic;
}
private void FormStands_Load(object sender, EventArgs e)
{
LoadData();
}
private void LoadData()
{
try
{
var list = _logic.ReadList(null);
if (list != null)
{
dataGridView.DataSource = list;
dataGridView.Columns["Id"].Visible = false;
dataGridView.Columns["ProductId"].Visible = false;
dataGridView.Columns["SupplierId"].Visible = false;
dataGridView.Columns["DeliveryDate"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
dataGridView.Columns["Count"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void buttonAdd_Click(object sender, EventArgs e)
{
var service = Program.ServiceProvider?.GetService(typeof(FormStand));
if (service is FormStand form)
{
if (form.ShowDialog() == DialogResult.OK)
{
LoadData();
}
}
}
private void buttonUpd_Click(object sender, EventArgs e)
{
if (dataGridView.SelectedRows.Count == 1)
{
var service = Program.ServiceProvider?.GetService(typeof(FormStand));
if (service is FormStand form)
{
form.Id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value);
if (form.ShowDialog() == DialogResult.OK)
{
LoadData();
}
}
}
}
private void buttonDel_Click(object sender, EventArgs e)
{
if (dataGridView.SelectedRows.Count == 1)
{
if (MessageBox.Show("Удалить запись?", "Вопрос", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
int id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value);
try
{
if (!_logic.Delete(new StandBindingModel { Id = id }))
{
throw new Exception("Ошибка при удалении. Доп информация в логах");
}
LoadData();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
}
private void buttonRef_Click(object sender, EventArgs e)
{
LoadData();
}
}
}

View File

@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@ -0,0 +1,143 @@
namespace AccountingWarehouseProductsView
{
partial class FormSupplier
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
labelNameSupplier = new Label();
labelContactPerson = new Label();
labelPhone = new Label();
textBoxNameSupplier = new TextBox();
textBoxContactPerson = new TextBox();
textBoxPhone = new TextBox();
buttonSave = new Button();
buttonCancel = new Button();
SuspendLayout();
//
// labelNameSupplier
//
labelNameSupplier.AutoSize = true;
labelNameSupplier.Font = new Font("Segoe UI", 12F, FontStyle.Regular, GraphicsUnit.Point);
labelNameSupplier.Location = new Point(23, 24);
labelNameSupplier.Name = "labelNameSupplier";
labelNameSupplier.Size = new Size(171, 21);
labelNameSupplier.TabIndex = 0;
labelNameSupplier.Text = "Название поставщика:";
//
// labelContactPerson
//
labelContactPerson.AutoSize = true;
labelContactPerson.Font = new Font("Segoe UI", 12F, FontStyle.Regular, GraphicsUnit.Point);
labelContactPerson.Location = new Point(23, 64);
labelContactPerson.Name = "labelContactPerson";
labelContactPerson.Size = new Size(136, 21);
labelContactPerson.TabIndex = 1;
labelContactPerson.Text = "Контактное лицо:";
//
// labelPhone
//
labelPhone.AutoSize = true;
labelPhone.Font = new Font("Segoe UI", 12F, FontStyle.Regular, GraphicsUnit.Point);
labelPhone.Location = new Point(23, 102);
labelPhone.Name = "labelPhone";
labelPhone.Size = new Size(133, 21);
labelPhone.TabIndex = 2;
labelPhone.Text = "Номер телефона:";
//
// textBoxNameSupplier
//
textBoxNameSupplier.Location = new Point(200, 26);
textBoxNameSupplier.Name = "textBoxNameSupplier";
textBoxNameSupplier.Size = new Size(208, 23);
textBoxNameSupplier.TabIndex = 3;
//
// textBoxContactPerson
//
textBoxContactPerson.Location = new Point(200, 64);
textBoxContactPerson.Name = "textBoxContactPerson";
textBoxContactPerson.Size = new Size(208, 23);
textBoxContactPerson.TabIndex = 4;
//
// textBoxPhone
//
textBoxPhone.Location = new Point(200, 104);
textBoxPhone.Name = "textBoxPhone";
textBoxPhone.Size = new Size(208, 23);
textBoxPhone.TabIndex = 5;
//
// buttonSave
//
buttonSave.Location = new Point(23, 185);
buttonSave.Name = "buttonSave";
buttonSave.Size = new Size(136, 49);
buttonSave.TabIndex = 6;
buttonSave.Text = "Сохранить";
buttonSave.UseVisualStyleBackColor = true;
buttonSave.Click += buttonSave_Click;
//
// buttonCancel
//
buttonCancel.Location = new Point(200, 185);
buttonCancel.Name = "buttonCancel";
buttonCancel.Size = new Size(136, 49);
buttonCancel.TabIndex = 7;
buttonCancel.Text = "Отмена";
buttonCancel.UseVisualStyleBackColor = true;
buttonCancel.Click += buttonCancel_Click;
//
// FormSupplier
//
AutoScaleDimensions = new SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(440, 284);
Controls.Add(buttonCancel);
Controls.Add(buttonSave);
Controls.Add(textBoxPhone);
Controls.Add(textBoxContactPerson);
Controls.Add(textBoxNameSupplier);
Controls.Add(labelPhone);
Controls.Add(labelContactPerson);
Controls.Add(labelNameSupplier);
Name = "FormSupplier";
Text = "Поставщик";
Load += FormSupplier_Load;
ResumeLayout(false);
PerformLayout();
}
#endregion
private Label labelNameSupplier;
private Label labelContactPerson;
private Label labelPhone;
private TextBox textBoxNameSupplier;
private TextBox textBoxContactPerson;
private TextBox textBoxPhone;
private Button buttonSave;
private Button buttonCancel;
}
}

View File

@ -0,0 +1,86 @@
using AccountingWarehouseProductsContracts.BindingModels;
using AccountingWarehouseProductsContracts.BusinessLogicsContracts;
using AccountingWarehouseProductsContracts.SearchModels;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace AccountingWarehouseProductsView
{
public partial class FormSupplier : Form
{
private readonly ISupplierLogic _logic;
private int? _id;
public int Id { set { _id = value; } }
public FormSupplier(ISupplierLogic logic)
{
InitializeComponent();
_logic = logic;
}
private void FormSupplier_Load(object sender, EventArgs e)
{
if (_id.HasValue)
{
try
{
var view = _logic.ReadElement(new SupplierSearchModel { Id = _id.Value });
if (view != null)
{
textBoxNameSupplier.Text = view.SupplierName;
textBoxContactPerson.Text = view.ContactPerson;
textBoxPhone.Text = view.Phone;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
private void buttonSave_Click(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(textBoxNameSupplier.Text))
{
MessageBox.Show("Заполните Имя", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
try
{
var model = new SupplierBindingModel
{
Id = _id ?? 0,
SupplierName = textBoxNameSupplier.Text,
ContactPerson = textBoxContactPerson.Text,
Phone = textBoxPhone.Text,
};
var operationResult = _id.HasValue ? _logic.Update(model) : _logic.Create(model);
if (!operationResult)
{
throw new Exception("Ошибка при сохранении. Доп информация в логах.");
}
MessageBox.Show("Сохранение прошло успешно", "Сообщение", MessageBoxButtons.OK, MessageBoxIcon.Information);
DialogResult = DialogResult.OK;
Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void buttonCancel_Click(object sender, EventArgs e)
{
DialogResult = DialogResult.Cancel;
Close();
}
}
}

View File

@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@ -0,0 +1,121 @@
namespace AccountingWarehouseProductsView
{
partial class FormSuppliers
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
dataGridView = new DataGridView();
ButtonAdd = new Button();
ButtonUpd = new Button();
ButtonDel = new Button();
ButtonRef = new Button();
((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit();
SuspendLayout();
//
// dataGridView
//
dataGridView.AllowUserToAddRows = false;
dataGridView.AllowUserToDeleteRows = false;
dataGridView.BackgroundColor = SystemColors.ControlLight;
dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
dataGridView.Dock = DockStyle.Left;
dataGridView.Location = new Point(0, 0);
dataGridView.MultiSelect = false;
dataGridView.Name = "dataGridView";
dataGridView.ReadOnly = true;
dataGridView.RowHeadersVisible = false;
dataGridView.RowTemplate.Height = 25;
dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
dataGridView.Size = new Size(587, 450);
dataGridView.TabIndex = 0;
//
// ButtonAdd
//
ButtonAdd.Location = new Point(620, 31);
ButtonAdd.Name = "ButtonAdd";
ButtonAdd.Size = new Size(144, 44);
ButtonAdd.TabIndex = 1;
ButtonAdd.Text = "Добавить";
ButtonAdd.UseVisualStyleBackColor = true;
ButtonAdd.Click += buttonAdd_Click;
//
// ButtonUpd
//
ButtonUpd.Location = new Point(620, 93);
ButtonUpd.Name = "ButtonUpd";
ButtonUpd.Size = new Size(144, 44);
ButtonUpd.TabIndex = 2;
ButtonUpd.Text = "Изменить";
ButtonUpd.UseVisualStyleBackColor = true;
ButtonUpd.Click += buttonUpd_Click;
//
// ButtonDel
//
ButtonDel.Location = new Point(620, 163);
ButtonDel.Name = "ButtonDel";
ButtonDel.Size = new Size(144, 44);
ButtonDel.TabIndex = 3;
ButtonDel.Text = "Удалить";
ButtonDel.UseVisualStyleBackColor = true;
ButtonDel.Click += buttonDel_Click;
//
// ButtonRef
//
ButtonRef.Location = new Point(620, 236);
ButtonRef.Name = "ButtonRef";
ButtonRef.Size = new Size(144, 44);
ButtonRef.TabIndex = 4;
ButtonRef.Text = "Обновить";
ButtonRef.UseVisualStyleBackColor = true;
ButtonRef.Click += buttonRef_Click;
//
// FormSuppliers
//
AutoScaleDimensions = new SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(800, 450);
Controls.Add(ButtonRef);
Controls.Add(ButtonDel);
Controls.Add(ButtonUpd);
Controls.Add(ButtonAdd);
Controls.Add(dataGridView);
Name = "FormSuppliers";
Text = "Поставщики";
Load += FormSuppliers_Load;
((System.ComponentModel.ISupportInitialize)dataGridView).EndInit();
ResumeLayout(false);
}
#endregion
private DataGridView dataGridView;
private Button ButtonAdd;
private Button ButtonUpd;
private Button ButtonDel;
private Button ButtonRef;
}
}

View File

@ -0,0 +1,105 @@
using AccountingWarehouseProductsContracts.BindingModels;
using AccountingWarehouseProductsContracts.BusinessLogicsContracts;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace AccountingWarehouseProductsView
{
public partial class FormSuppliers : Form
{
private readonly ISupplierLogic _logic;
public FormSuppliers(ISupplierLogic logic)
{
InitializeComponent();
_logic = logic;
}
private void FormSuppliers_Load(object sender, EventArgs e)
{
LoadData();
}
private void LoadData()
{
try
{
var list = _logic.ReadList(null);
if (list != null)
{
dataGridView.DataSource = list;
dataGridView.Columns["Id"].Visible = false;
dataGridView.Columns["SupplierName"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
dataGridView.Columns["ContactPerson"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
dataGridView.Columns["Phone"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void buttonAdd_Click(object sender, EventArgs e)
{
var service = Program.ServiceProvider?.GetService(typeof(FormSupplier));
if (service is FormSupplier form)
{
if (form.ShowDialog() == DialogResult.OK)
{
LoadData();
}
}
}
private void buttonUpd_Click(object sender, EventArgs e)
{
if (dataGridView.SelectedRows.Count == 1)
{
var service = Program.ServiceProvider?.GetService(typeof(FormSupplier));
if (service is FormSupplier form)
{
form.Id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value);
if (form.ShowDialog() == DialogResult.OK)
{
LoadData();
}
}
}
}
private void buttonDel_Click(object sender, EventArgs e)
{
if (dataGridView.SelectedRows.Count == 1)
{
if (MessageBox.Show("Удалить запись?", "Вопрос", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
int id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value);
try
{
if (!_logic.Delete(new SupplierBindingModel { Id = id }))
{
throw new Exception("Ошибка при удалении. Доп информация в логах");
}
LoadData();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
}
private void buttonRef_Click(object sender, EventArgs e)
{
LoadData();
}
}
}

View File

@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@ -0,0 +1,143 @@
namespace AccountingWarehouseProductsView
{
partial class FormWarehouse
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
labelName = new Label();
labelAddress = new Label();
labelCapacity = new Label();
textBoxName = new TextBox();
textBoxAddress = new TextBox();
textBoxCapacity = new TextBox();
buttonSave = new Button();
buttonCancel = new Button();
SuspendLayout();
//
// labelName
//
labelName.AutoSize = true;
labelName.Font = new Font("Segoe UI", 12F, FontStyle.Regular, GraphicsUnit.Point);
labelName.Location = new Point(24, 24);
labelName.Name = "labelName";
labelName.Size = new Size(81, 21);
labelName.TabIndex = 0;
labelName.Text = "Название:";
//
// labelAddress
//
labelAddress.AutoSize = true;
labelAddress.Font = new Font("Segoe UI", 12F, FontStyle.Regular, GraphicsUnit.Point);
labelAddress.Location = new Point(24, 73);
labelAddress.Name = "labelAddress";
labelAddress.Size = new Size(56, 21);
labelAddress.TabIndex = 1;
labelAddress.Text = "Адрес:";
//
// labelCapacity
//
labelCapacity.AutoSize = true;
labelCapacity.Font = new Font("Segoe UI", 12F, FontStyle.Regular, GraphicsUnit.Point);
labelCapacity.Location = new Point(24, 122);
labelCapacity.Name = "labelCapacity";
labelCapacity.Size = new Size(106, 21);
labelCapacity.TabIndex = 2;
labelCapacity.Text = "Вместимость:";
//
// textBoxName
//
textBoxName.Location = new Point(111, 26);
textBoxName.Name = "textBoxName";
textBoxName.Size = new Size(189, 23);
textBoxName.TabIndex = 3;
//
// textBoxAddress
//
textBoxAddress.Location = new Point(96, 75);
textBoxAddress.Name = "textBoxAddress";
textBoxAddress.Size = new Size(204, 23);
textBoxAddress.TabIndex = 4;
//
// textBoxCapacity
//
textBoxCapacity.Location = new Point(136, 122);
textBoxCapacity.Name = "textBoxCapacity";
textBoxCapacity.Size = new Size(164, 23);
textBoxCapacity.TabIndex = 5;
//
// buttonSave
//
buttonSave.Location = new Point(37, 182);
buttonSave.Name = "buttonSave";
buttonSave.Size = new Size(143, 49);
buttonSave.TabIndex = 6;
buttonSave.Text = "Сохранить";
buttonSave.UseVisualStyleBackColor = true;
buttonSave.Click += buttonSave_Click;
//
// buttonCancel
//
buttonCancel.Location = new Point(227, 182);
buttonCancel.Name = "buttonCancel";
buttonCancel.Size = new Size(143, 49);
buttonCancel.TabIndex = 7;
buttonCancel.Text = "Отмена";
buttonCancel.UseVisualStyleBackColor = true;
buttonCancel.Click += buttonCancel_Click;
//
// FormWarehouse
//
AutoScaleDimensions = new SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(421, 274);
Controls.Add(buttonCancel);
Controls.Add(buttonSave);
Controls.Add(textBoxCapacity);
Controls.Add(textBoxAddress);
Controls.Add(textBoxName);
Controls.Add(labelCapacity);
Controls.Add(labelAddress);
Controls.Add(labelName);
Name = "FormWarehouse";
Text = "Склад";
Load += FormWarehouse_Load;
ResumeLayout(false);
PerformLayout();
}
#endregion
private Label labelName;
private Label labelAddress;
private Label labelCapacity;
private TextBox textBoxName;
private TextBox textBoxAddress;
private TextBox textBoxCapacity;
private Button buttonSave;
private Button buttonCancel;
}
}

View File

@ -0,0 +1,85 @@
using AccountingWarehouseProductsContracts.BindingModels;
using AccountingWarehouseProductsContracts.BusinessLogicsContracts;
using AccountingWarehouseProductsContracts.SearchModels;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace AccountingWarehouseProductsView
{
public partial class FormWarehouse : Form
{
private readonly IWarehouseLogic _logic;
private int? _id;
public int Id { set { _id = value; } }
public FormWarehouse(IWarehouseLogic logic)
{
InitializeComponent();
_logic = logic;
}
private void FormWarehouse_Load(object sender, EventArgs e)
{
if (_id.HasValue)
{
try
{
var view = _logic.ReadElement(new WarehouseSearchModel { Id = _id.Value });
if (view != null)
{
textBoxName.Text = view.WarehouseName;
textBoxAddress.Text = view.Address;
textBoxCapacity.Text = view.Capacity.ToString();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
private void buttonSave_Click(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(textBoxName.Text))
{
MessageBox.Show("Заполните Имя", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
try
{
var model = new WarehouseBindingModel
{
Id = _id ?? 0,
WarehouseName = textBoxName.Text,
Address = textBoxAddress.Text,
Capacity = Convert.ToInt32(textBoxCapacity.Text),
};
var operationResult = _id.HasValue ? _logic.Update(model) : _logic.Create(model);
if (!operationResult)
{
throw new Exception("Ошибка при сохранении. Доп информация в логах.");
}
MessageBox.Show("Сохранение прошло успешно", "Сообщение", MessageBoxButtons.OK, MessageBoxIcon.Information);
DialogResult = DialogResult.OK;
Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void buttonCancel_Click(object sender, EventArgs e)
{
DialogResult = DialogResult.Cancel;
Close();
}
}
}

View File

@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@ -0,0 +1,121 @@
namespace AccountingWarehouseProductsView
{
partial class FormWarehouseProduct
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
labelProduct = new Label();
labelCount = new Label();
comboBoxProduct = new ComboBox();
textBoxCount = new TextBox();
buttonSave = new Button();
buttonCancel = new Button();
SuspendLayout();
//
// labelProduct
//
labelProduct.AutoSize = true;
labelProduct.Font = new Font("Segoe UI", 12F, FontStyle.Regular, GraphicsUnit.Point);
labelProduct.Location = new Point(25, 39);
labelProduct.Name = "labelProduct";
labelProduct.Size = new Size(74, 21);
labelProduct.TabIndex = 0;
labelProduct.Text = "Продукт:";
//
// labelCount
//
labelCount.AutoSize = true;
labelCount.Font = new Font("Segoe UI", 12F, FontStyle.Regular, GraphicsUnit.Point);
labelCount.Location = new Point(25, 83);
labelCount.Name = "labelCount";
labelCount.Size = new Size(96, 21);
labelCount.TabIndex = 1;
labelCount.Text = "Количество:";
//
// comboBoxProduct
//
comboBoxProduct.DropDownStyle = ComboBoxStyle.DropDownList;
comboBoxProduct.FormattingEnabled = true;
comboBoxProduct.Location = new Point(105, 41);
comboBoxProduct.Name = "comboBoxProduct";
comboBoxProduct.Size = new Size(256, 23);
comboBoxProduct.TabIndex = 2;
//
// textBoxCount
//
textBoxCount.Location = new Point(127, 85);
textBoxCount.Name = "textBoxCount";
textBoxCount.Size = new Size(234, 23);
textBoxCount.TabIndex = 3;
//
// buttonSave
//
buttonSave.Location = new Point(52, 140);
buttonSave.Name = "buttonSave";
buttonSave.Size = new Size(121, 47);
buttonSave.TabIndex = 4;
buttonSave.Text = "Сохранить";
buttonSave.UseVisualStyleBackColor = true;
buttonSave.Click += buttonSave_Click;
//
// buttonCancel
//
buttonCancel.Location = new Point(230, 140);
buttonCancel.Name = "buttonCancel";
buttonCancel.Size = new Size(121, 47);
buttonCancel.TabIndex = 5;
buttonCancel.Text = "Отмена";
buttonCancel.UseVisualStyleBackColor = true;
buttonCancel.Click += buttonCancel_Click;
//
// FormWarehouseProduct
//
AutoScaleDimensions = new SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(437, 218);
Controls.Add(buttonCancel);
Controls.Add(buttonSave);
Controls.Add(textBoxCount);
Controls.Add(comboBoxProduct);
Controls.Add(labelCount);
Controls.Add(labelProduct);
Name = "FormWarehouseProduct";
Text = "Склад продукта";
ResumeLayout(false);
PerformLayout();
}
#endregion
private Label labelProduct;
private Label labelCount;
private ComboBox comboBoxProduct;
private TextBox textBoxCount;
private Button buttonSave;
private Button buttonCancel;
}
}

View File

@ -0,0 +1,77 @@
using AccountingWarehouseProductsContracts.BusinessLogicsContracts;
using AccountingWarehouseProductsContracts.ViewModels;
using AccountingWarehouseProductsDataModels.Models;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace AccountingWarehouseProductsView
{
public partial class FormWarehouseProduct : Form
{
private readonly List<ProductViewModel?> _list;
public int Id { get { return Convert.ToInt32(comboBoxProduct.SelectedValue); } set { comboBoxProduct.SelectedValue = value; } }
public IProductModel? ProductModel
{
get
{
if (_list == null)
{
return null;
}
foreach (var elem in _list)
{
if (elem.Id == Id)
{
return elem;
}
}
return null;
}
}
public int Count { get { return Convert.ToInt32(textBoxCount.Text); } set { textBoxCount.Text = value.ToString(); } }
public FormWarehouseProduct(IProductLogic logic)
{
InitializeComponent();
_list = logic.ReadList(null);
if (_list != null)
{
comboBoxProduct.DisplayMember = "ProductName";
comboBoxProduct.ValueMember = "Id";
comboBoxProduct.DataSource = _list;
comboBoxProduct.SelectedItem = null;
}
}
private void buttonSave_Click(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(textBoxCount.Text))
{
MessageBox.Show("Заполните поле Количество", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
if (comboBoxProduct.SelectedValue == null)
{
MessageBox.Show("Выберите продукт", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
DialogResult = DialogResult.OK;
Close();
}
private void buttonCancel_Click(object sender, EventArgs e)
{
DialogResult = DialogResult.Cancel;
Close();
}
}
}

View File

@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@ -0,0 +1,121 @@
namespace AccountingWarehouseProductsView
{
partial class FormWarehouses
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
dataGridView = new DataGridView();
ButtonAdd = new Button();
ButtonUpd = new Button();
ButtonDel = new Button();
ButtonRef = new Button();
((System.ComponentModel.ISupportInitialize)dataGridView).BeginInit();
SuspendLayout();
//
// dataGridView
//
dataGridView.AllowUserToAddRows = false;
dataGridView.AllowUserToDeleteRows = false;
dataGridView.BackgroundColor = SystemColors.ControlLight;
dataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
dataGridView.Dock = DockStyle.Left;
dataGridView.Location = new Point(0, 0);
dataGridView.MultiSelect = false;
dataGridView.Name = "dataGridView";
dataGridView.ReadOnly = true;
dataGridView.RowHeadersVisible = false;
dataGridView.RowTemplate.Height = 25;
dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
dataGridView.Size = new Size(609, 450);
dataGridView.TabIndex = 0;
//
// ButtonAdd
//
ButtonAdd.Location = new Point(652, 24);
ButtonAdd.Name = "ButtonAdd";
ButtonAdd.Size = new Size(126, 53);
ButtonAdd.TabIndex = 1;
ButtonAdd.Text = "Добавить";
ButtonAdd.UseVisualStyleBackColor = true;
ButtonAdd.Click += buttonAdd_Click;
//
// ButtonUpd
//
ButtonUpd.Location = new Point(652, 105);
ButtonUpd.Name = "ButtonUpd";
ButtonUpd.Size = new Size(126, 53);
ButtonUpd.TabIndex = 2;
ButtonUpd.Text = "Изменить";
ButtonUpd.UseVisualStyleBackColor = true;
ButtonUpd.Click += buttonUpd_Click;
//
// ButtonDel
//
ButtonDel.Location = new Point(652, 184);
ButtonDel.Name = "ButtonDel";
ButtonDel.Size = new Size(126, 53);
ButtonDel.TabIndex = 3;
ButtonDel.Text = "Удалить";
ButtonDel.UseVisualStyleBackColor = true;
ButtonDel.Click += buttonDel_Click;
//
// ButtonRef
//
ButtonRef.Location = new Point(652, 267);
ButtonRef.Name = "ButtonRef";
ButtonRef.Size = new Size(126, 53);
ButtonRef.TabIndex = 4;
ButtonRef.Text = "Обновить";
ButtonRef.UseVisualStyleBackColor = true;
ButtonRef.Click += buttonRef_Click;
//
// FormWarehouses
//
AutoScaleDimensions = new SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font;
ClientSize = new Size(800, 450);
Controls.Add(ButtonRef);
Controls.Add(ButtonDel);
Controls.Add(ButtonUpd);
Controls.Add(ButtonAdd);
Controls.Add(dataGridView);
Name = "FormWarehouses";
Text = "Склады";
Load += FormWarehouses_Load;
((System.ComponentModel.ISupportInitialize)dataGridView).EndInit();
ResumeLayout(false);
}
#endregion
private DataGridView dataGridView;
private Button ButtonAdd;
private Button ButtonUpd;
private Button ButtonDel;
private Button ButtonRef;
}
}

View File

@ -0,0 +1,106 @@
using AccountingWarehouseProductsContracts.BindingModels;
using AccountingWarehouseProductsContracts.BusinessLogicsContracts;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace AccountingWarehouseProductsView
{
public partial class FormWarehouses : Form
{
private readonly IWarehouseLogic _logic;
public FormWarehouses(IWarehouseLogic logic)
{
InitializeComponent();
_logic = logic;
}
private void FormWarehouses_Load(object sender, EventArgs e)
{
LoadData();
}
private void LoadData()
{
try
{
var list = _logic.ReadList(null);
if (list != null)
{
dataGridView.DataSource = list;
dataGridView.Columns["Id"].Visible = false;
dataGridView.Columns["Warehouseproducts"].Visible = false;
dataGridView.Columns["WarehouseName"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
dataGridView.Columns["Address"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
dataGridView.Columns["Capacity"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void buttonAdd_Click(object sender, EventArgs e)
{
var service = Program.ServiceProvider?.GetService(typeof(FormWarehouse));
if (service is FormWarehouse form)
{
if (form.ShowDialog() == DialogResult.OK)
{
LoadData();
}
}
}
private void buttonUpd_Click(object sender, EventArgs e)
{
if (dataGridView.SelectedRows.Count == 1)
{
var service = Program.ServiceProvider?.GetService(typeof(FormWarehouse));
if (service is FormWarehouse form)
{
form.Id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value);
if (form.ShowDialog() == DialogResult.OK)
{
LoadData();
}
}
}
}
private void buttonDel_Click(object sender, EventArgs e)
{
if (dataGridView.SelectedRows.Count == 1)
{
if (MessageBox.Show("Удалить запись?", "Вопрос", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
int id = Convert.ToInt32(dataGridView.SelectedRows[0].Cells["Id"].Value);
try
{
if (!_logic.Delete(new WarehouseBindingModel { Id = id }))
{
throw new Exception("Ошибка при удалении. Доп информация в логах");
}
LoadData();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
}
private void buttonRef_Click(object sender, EventArgs e)
{
LoadData();
}
}
}

View File

@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@ -1,7 +1,15 @@
using AccountingWarehouseProductsBusinessLogic.BusinessLogic;
using AccountingWarehouseProductsContracts.BusinessLogicsContracts;
using AccountingWarehouseProductsContracts.StoragesContracts;
using AccountingWarehouseProductsDatabaseImplement.Implements;
using Microsoft.Extensions.DependencyInjection;
namespace AccountingWarehouseProductsView
{
internal static class Program
{
private static ServiceProvider? _serviceProvider;
public static ServiceProvider? ServiceProvider => _serviceProvider;
/// <summary>
/// The main entry point for the application.
/// </summary>
@ -11,7 +19,42 @@ namespace AccountingWarehouseProductsView
// To customize application configuration such as set high DPI settings or default font,
// see https://aka.ms/applicationconfiguration.
ApplicationConfiguration.Initialize();
Application.Run(new Form1());
var services = new ServiceCollection();
ConfigureServices(services);
_serviceProvider = services.BuildServiceProvider();
Application.Run(_serviceProvider.GetRequiredService<FormMain>());
}
private static void ConfigureServices(ServiceCollection services)
{
services.AddTransient<IProductStorage, ProductStorage>();
services.AddTransient<IOrderStorage, OrderStorage>();
services.AddTransient<IShipmentStorage, ShipmentStorage>();
services.AddTransient<IStandStorage, StandStorage>();
services.AddTransient<ISupplierStorage, SupplierStorage>();
services.AddTransient<IWarehouseStorage, WarehouseStorage>();
services.AddTransient<IProductLogic, ProductLogic>();
services.AddTransient<IOrderLogic, OrderLogic>();
services.AddTransient<IShipmentLogic, ShipmentLogic>();
services.AddTransient<IStandLogic, StandLogic>();
services.AddTransient<ISupplierLogic, SupplierLogic>();
services.AddTransient<IWarehouseLogic, WarehouseLogic>();
services.AddTransient<FormMain>();
services.AddTransient<FormProduct>();
services.AddTransient<FormProducts>();
services.AddTransient<FormSupplier>();
services.AddTransient<FormSuppliers>();
services.AddTransient<FormShipment>();
services.AddTransient<FormShipments>();
services.AddTransient<FormStand>();
services.AddTransient<FormStands>();
services.AddTransient<FormWarehouse>();
services.AddTransient<FormWarehouses>();
services.AddTransient<FormCreateOrder>();
services.AddTransient<FormOrderProduct>();
services.AddTransient<FormWarehouseProduct>();
}
}
}