diff --git a/AutoWorkshopDatabaseImplement/Implements/ShopStorage.cs b/AutoWorkshopDatabaseImplement/Implements/ShopStorage.cs
index 41443c0..2685c94 100644
--- a/AutoWorkshopDatabaseImplement/Implements/ShopStorage.cs
+++ b/AutoWorkshopDatabaseImplement/Implements/ShopStorage.cs
@@ -106,60 +106,7 @@ namespace AutoWorkshopDatabaseImplement.Implements
Context.SaveChanges();
return Shop.GetViewModel;
- }
-
- public bool RestockingShops(SupplyBindingModel Model)
- {
- using var Context = new AutoWorkshopDatabase();
- var Transaction = Context.Database.BeginTransaction();
-
- var Shops = Context.Shops
- .Include(x => x.Repairs)
- .ThenInclude(x => x.Repair)
- .ToList()
- .Where(x => x.RepairsMaxCount > x.ShopRepairs
- .Select(x => x.Value.Item2).Sum())
- .ToList();
-
- try
- {
- foreach (Shop Shop in Shops)
- {
- int Difference = Shop.RepairsMaxCount - Shop.ShopRepairs.Select(x => x.Value.Item2).Sum();
- int Refill = Math.Min(Difference, Model.Count);
-
- Model.Count -= Refill;
-
- if (Shop.ShopRepairs.ContainsKey(Model.RepairId))
- {
- var DatePair = Shop.ShopRepairs[Model.RepairId];
- DatePair.Item2 += Refill;
- Shop.ShopRepairs[Model.RepairId] = DatePair;
- }
- else
- {
- var Repair = Context.Repairs.First(x => x.Id == Model.RepairId);
- Shop.ShopRepairs.Add(Model.RepairId, (Repair, Refill));
- }
-
- Shop.RepairsDictionatyUpdate(Context);
-
- if (Model.Count == 0)
- {
- Transaction.Commit();
- return true;
- }
- }
-
- Transaction.Rollback();
- return false;
- }
- catch
- {
- Transaction.Rollback();
- throw;
- }
- }
+ }
public bool Sell(SupplySearchModel Model)
{
@@ -168,7 +115,7 @@ namespace AutoWorkshopDatabaseImplement.Implements
try
{
- var Shops = Context.Shops
+ var ShopsWithDesiredRepair = Context.Shops
.Include(x => x.Repairs)
.ThenInclude(x => x.Repair)
.ToList()
@@ -176,28 +123,29 @@ namespace AutoWorkshopDatabaseImplement.Implements
.OrderByDescending(x => x.ShopRepairs[Model.RepairId.Value].Item2)
.ToList();
- foreach (var Shop in Shops)
+ foreach (var Shop in ShopsWithDesiredRepair)
{
- int Residue = Model.Count.Value - Shop.ShopRepairs[Model.RepairId.Value].Item2;
+ int Slack = Model.Count.Value - Shop.ShopRepairs[Model.RepairId.Value].Item2;
- if (Residue > 0)
+ if (Slack > 0)
{
- Shop.ShopRepairs.Remove(Model.RepairId.Value);
+ Shop.ShopRepairs.Remove(Model.RepairId.Value);
Shop.RepairsDictionatyUpdate(Context);
Context.SaveChanges();
- Model.Count = Residue;
+ Model.Count = Slack;
}
else
{
- if (Residue == 0)
+ if (Slack == 0)
+ {
Shop.ShopRepairs.Remove(Model.RepairId.Value);
-
+ }
else
{
- var DataPair = Shop.ShopRepairs[Model.RepairId.Value];
- DataPair.Item2 = -Residue;
- Shop.ShopRepairs[Model.RepairId.Value] = DataPair;
+ var RepairAndCount = Shop.ShopRepairs[Model.RepairId.Value];
+ RepairAndCount.Item2 = -Slack;
+ Shop.ShopRepairs[Model.RepairId.Value] = RepairAndCount;
}
Shop.RepairsDictionatyUpdate(Context);
@@ -216,5 +164,58 @@ namespace AutoWorkshopDatabaseImplement.Implements
throw;
}
}
- }
+
+ public bool RestockingShops(SupplyBindingModel Model)
+ {
+ using var Context = new AutoWorkshopDatabase();
+ var Transaction = Context.Database.BeginTransaction();
+
+ var Shops = Context.Shops
+ .Include(x => x.Repairs)
+ .ThenInclude(x => x.Repair)
+ .ToList()
+ .Where(x => x.RepairsMaxCount > x.ShopRepairs
+ .Select(x => x.Value.Item2).Sum())
+ .ToList();
+
+ try
+ {
+ foreach (Shop Shop in Shops)
+ {
+ int FreeSpaceNum = Shop.RepairsMaxCount - Shop.ShopRepairs.Select(x => x.Value.Item2).Sum();
+
+ int Refill = Math.Min(FreeSpaceNum, Model.Count);
+ Model.Count -= Refill;
+
+ if (Shop.ShopRepairs.ContainsKey(Model.RepairId))
+ {
+ var RepairAndCount = Shop.ShopRepairs[Model.RepairId];
+ RepairAndCount.Item2 += Refill;
+ Shop.ShopRepairs[Model.RepairId] = RepairAndCount;
+ }
+ else
+ {
+ var Repair = Context.Repairs.First(x => x.Id == Model.RepairId);
+ Shop.ShopRepairs.Add(Model.RepairId, (Repair, Refill));
+ }
+
+ Shop.RepairsDictionatyUpdate(Context);
+
+ if (Model.Count == 0)
+ {
+ Transaction.Commit();
+ return true;
+ }
+ }
+
+ Transaction.Rollback();
+ return false;
+ }
+ catch
+ {
+ Transaction.Rollback();
+ throw;
+ }
+ }
+ }
}
diff --git a/AutoWorkshopDatabaseImplement/Migrations/20240402181656_InitialCreate.Designer.cs b/AutoWorkshopDatabaseImplement/Migrations/20240417061857_Shops.Designer.cs
similarity index 68%
rename from AutoWorkshopDatabaseImplement/Migrations/20240402181656_InitialCreate.Designer.cs
rename to AutoWorkshopDatabaseImplement/Migrations/20240417061857_Shops.Designer.cs
index 06a8333..dcb69a0 100644
--- a/AutoWorkshopDatabaseImplement/Migrations/20240402181656_InitialCreate.Designer.cs
+++ b/AutoWorkshopDatabaseImplement/Migrations/20240417061857_Shops.Designer.cs
@@ -12,8 +12,8 @@ using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
namespace AutoWorkshopDatabaseImplement.Migrations
{
[DbContext(typeof(AutoWorkshopDatabase))]
- [Migration("20240402181656_InitialCreate")]
- partial class InitialCreate
+ [Migration("20240417061857_Shops")]
+ partial class Shops
{
///
protected override void BuildTargetModel(ModelBuilder modelBuilder)
@@ -124,6 +124,59 @@ namespace AutoWorkshopDatabaseImplement.Migrations
b.ToTable("RepairComponents");
});
+ modelBuilder.Entity("AutoWorkshopDatabaseImplement.Models.Shop", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("Address")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("OpeningDate")
+ .HasColumnType("timestamp without time zone");
+
+ b.Property("RepairsMaxCount")
+ .HasColumnType("integer");
+
+ b.Property("ShopName")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.HasKey("Id");
+
+ b.ToTable("Shops");
+ });
+
+ modelBuilder.Entity("AutoWorkshopDatabaseImplement.Models.ShopRepair", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("Count")
+ .HasColumnType("integer");
+
+ b.Property("RepairId")
+ .HasColumnType("integer");
+
+ b.Property("ShopId")
+ .HasColumnType("integer");
+
+ b.HasKey("Id");
+
+ b.HasIndex("RepairId");
+
+ b.HasIndex("ShopId");
+
+ b.ToTable("ShopRepairs");
+ });
+
modelBuilder.Entity("AutoWorkshopDatabaseImplement.Models.Order", b =>
{
b.HasOne("AutoWorkshopDatabaseImplement.Models.Repair", "Repair")
@@ -154,6 +207,25 @@ namespace AutoWorkshopDatabaseImplement.Migrations
b.Navigation("Repair");
});
+ modelBuilder.Entity("AutoWorkshopDatabaseImplement.Models.ShopRepair", b =>
+ {
+ b.HasOne("AutoWorkshopDatabaseImplement.Models.Repair", "Repair")
+ .WithMany()
+ .HasForeignKey("RepairId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.HasOne("AutoWorkshopDatabaseImplement.Models.Shop", "Shop")
+ .WithMany("Repairs")
+ .HasForeignKey("ShopId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Repair");
+
+ b.Navigation("Shop");
+ });
+
modelBuilder.Entity("AutoWorkshopDatabaseImplement.Models.Component", b =>
{
b.Navigation("RepairComponents");
@@ -165,6 +237,11 @@ namespace AutoWorkshopDatabaseImplement.Migrations
b.Navigation("Orders");
});
+
+ modelBuilder.Entity("AutoWorkshopDatabaseImplement.Models.Shop", b =>
+ {
+ b.Navigation("Repairs");
+ });
#pragma warning restore 612, 618
}
}
diff --git a/AutoWorkshopDatabaseImplement/Migrations/20240402181656_InitialCreate.cs b/AutoWorkshopDatabaseImplement/Migrations/20240417061857_Shops.cs
similarity index 66%
rename from AutoWorkshopDatabaseImplement/Migrations/20240402181656_InitialCreate.cs
rename to AutoWorkshopDatabaseImplement/Migrations/20240417061857_Shops.cs
index dd113b0..a4f4cc6 100644
--- a/AutoWorkshopDatabaseImplement/Migrations/20240402181656_InitialCreate.cs
+++ b/AutoWorkshopDatabaseImplement/Migrations/20240417061857_Shops.cs
@@ -7,7 +7,7 @@ using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
namespace AutoWorkshopDatabaseImplement.Migrations
{
///
- public partial class InitialCreate : Migration
+ public partial class Shops : Migration
{
///
protected override void Up(MigrationBuilder migrationBuilder)
@@ -40,6 +40,22 @@ namespace AutoWorkshopDatabaseImplement.Migrations
table.PrimaryKey("PK_Repairs", x => x.Id);
});
+ migrationBuilder.CreateTable(
+ name: "Shops",
+ columns: table => new
+ {
+ Id = table.Column(type: "integer", nullable: false)
+ .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
+ ShopName = table.Column(type: "text", nullable: false),
+ Address = table.Column(type: "text", nullable: false),
+ OpeningDate = table.Column(type: "timestamp without time zone", nullable: false),
+ RepairsMaxCount = table.Column(type: "integer", nullable: false)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_Shops", x => x.Id);
+ });
+
migrationBuilder.CreateTable(
name: "Orders",
columns: table => new
@@ -91,6 +107,33 @@ namespace AutoWorkshopDatabaseImplement.Migrations
onDelete: ReferentialAction.Cascade);
});
+ migrationBuilder.CreateTable(
+ name: "ShopRepairs",
+ columns: table => new
+ {
+ Id = table.Column(type: "integer", nullable: false)
+ .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
+ RepairId = table.Column(type: "integer", nullable: false),
+ ShopId = table.Column(type: "integer", nullable: false),
+ Count = table.Column(type: "integer", nullable: false)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_ShopRepairs", x => x.Id);
+ table.ForeignKey(
+ name: "FK_ShopRepairs_Repairs_RepairId",
+ column: x => x.RepairId,
+ principalTable: "Repairs",
+ principalColumn: "Id",
+ onDelete: ReferentialAction.Cascade);
+ table.ForeignKey(
+ name: "FK_ShopRepairs_Shops_ShopId",
+ column: x => x.ShopId,
+ principalTable: "Shops",
+ principalColumn: "Id",
+ onDelete: ReferentialAction.Cascade);
+ });
+
migrationBuilder.CreateIndex(
name: "IX_Orders_RepairId",
table: "Orders",
@@ -105,6 +148,16 @@ namespace AutoWorkshopDatabaseImplement.Migrations
name: "IX_RepairComponents_RepairId",
table: "RepairComponents",
column: "RepairId");
+
+ migrationBuilder.CreateIndex(
+ name: "IX_ShopRepairs_RepairId",
+ table: "ShopRepairs",
+ column: "RepairId");
+
+ migrationBuilder.CreateIndex(
+ name: "IX_ShopRepairs_ShopId",
+ table: "ShopRepairs",
+ column: "ShopId");
}
///
@@ -116,11 +169,17 @@ namespace AutoWorkshopDatabaseImplement.Migrations
migrationBuilder.DropTable(
name: "RepairComponents");
+ migrationBuilder.DropTable(
+ name: "ShopRepairs");
+
migrationBuilder.DropTable(
name: "Components");
migrationBuilder.DropTable(
name: "Repairs");
+
+ migrationBuilder.DropTable(
+ name: "Shops");
}
}
}
diff --git a/AutoWorkshopDatabaseImplement/Migrations/AutoWorkshopDatabaseModelSnapshot.cs b/AutoWorkshopDatabaseImplement/Migrations/AutoWorkshopDatabaseModelSnapshot.cs
index 40a9aca..454b66c 100644
--- a/AutoWorkshopDatabaseImplement/Migrations/AutoWorkshopDatabaseModelSnapshot.cs
+++ b/AutoWorkshopDatabaseImplement/Migrations/AutoWorkshopDatabaseModelSnapshot.cs
@@ -121,6 +121,59 @@ namespace AutoWorkshopDatabaseImplement.Migrations
b.ToTable("RepairComponents");
});
+ modelBuilder.Entity("AutoWorkshopDatabaseImplement.Models.Shop", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("Address")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("OpeningDate")
+ .HasColumnType("timestamp without time zone");
+
+ b.Property("RepairsMaxCount")
+ .HasColumnType("integer");
+
+ b.Property("ShopName")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.HasKey("Id");
+
+ b.ToTable("Shops");
+ });
+
+ modelBuilder.Entity("AutoWorkshopDatabaseImplement.Models.ShopRepair", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("Count")
+ .HasColumnType("integer");
+
+ b.Property("RepairId")
+ .HasColumnType("integer");
+
+ b.Property("ShopId")
+ .HasColumnType("integer");
+
+ b.HasKey("Id");
+
+ b.HasIndex("RepairId");
+
+ b.HasIndex("ShopId");
+
+ b.ToTable("ShopRepairs");
+ });
+
modelBuilder.Entity("AutoWorkshopDatabaseImplement.Models.Order", b =>
{
b.HasOne("AutoWorkshopDatabaseImplement.Models.Repair", "Repair")
@@ -151,6 +204,25 @@ namespace AutoWorkshopDatabaseImplement.Migrations
b.Navigation("Repair");
});
+ modelBuilder.Entity("AutoWorkshopDatabaseImplement.Models.ShopRepair", b =>
+ {
+ b.HasOne("AutoWorkshopDatabaseImplement.Models.Repair", "Repair")
+ .WithMany()
+ .HasForeignKey("RepairId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.HasOne("AutoWorkshopDatabaseImplement.Models.Shop", "Shop")
+ .WithMany("Repairs")
+ .HasForeignKey("ShopId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Repair");
+
+ b.Navigation("Shop");
+ });
+
modelBuilder.Entity("AutoWorkshopDatabaseImplement.Models.Component", b =>
{
b.Navigation("RepairComponents");
@@ -162,6 +234,11 @@ namespace AutoWorkshopDatabaseImplement.Migrations
b.Navigation("Orders");
});
+
+ modelBuilder.Entity("AutoWorkshopDatabaseImplement.Models.Shop", b =>
+ {
+ b.Navigation("Repairs");
+ });
#pragma warning restore 612, 618
}
}
diff --git a/AutoWorkshopDatabaseImplement/Models/Shop.cs b/AutoWorkshopDatabaseImplement/Models/Shop.cs
index 3ad4006..59aef6c 100644
--- a/AutoWorkshopDatabaseImplement/Models/Shop.cs
+++ b/AutoWorkshopDatabaseImplement/Models/Shop.cs
@@ -84,8 +84,10 @@ namespace AutoWorkshopDatabaseImplement.Models
{
Context.ShopRepairs.RemoveRange(ShopRepairs.Where(rec => !Model.ShopRepairs.ContainsKey(rec.RepairId)));
Context.SaveChanges();
-
- foreach (var RepairToUpdate in ShopRepairs)
+
+ ShopRepairs = Context.ShopRepairs.Where(rec => rec.ShopId == Model.Id).ToList();
+
+ foreach (var RepairToUpdate in ShopRepairs)
{
RepairToUpdate.Count = Model.ShopRepairs[RepairToUpdate.RepairId].Item2;
Model.ShopRepairs.Remove(RepairToUpdate.RepairId);