Add item tracking migrations

This commit is contained in:
2026-10-06 13:30:12 +05:30
parent 92f1aadb81
commit c358764f4e
11 changed files with 9799 additions and 12 deletions
@@ -427,12 +427,15 @@ namespace Distribution.Migrations
b.Property<DateTime>("CreatedAt")
.HasColumnType("datetime(6)");
b.Property<Guid>("FK_PurchaseOrderId")
b.Property<Guid?>("FK_PurchaseOrderId")
.HasColumnType("char(36)");
b.Property<Guid>("FK_ReceivedByUserId")
.HasColumnType("char(36)");
b.Property<Guid?>("FK_SupplierId")
.HasColumnType("char(36)");
b.Property<Guid>("FK_WarehouseId")
.HasColumnType("char(36)");
@@ -446,6 +449,8 @@ namespace Distribution.Migrations
b.HasIndex("FK_PurchaseOrderId");
b.HasIndex("FK_SupplierId");
b.HasIndex("FK_WarehouseId");
b.ToTable("GoodsReceipts");
@@ -478,7 +483,10 @@ namespace Distribution.Migrations
b.Property<Guid>("FK_GoodsReceiptId")
.HasColumnType("char(36)");
b.Property<Guid>("FK_PurchaseOrderItemId")
b.Property<Guid?>("FK_ItemId")
.HasColumnType("char(36)");
b.Property<Guid?>("FK_PurchaseOrderItemId")
.HasColumnType("char(36)");
b.Property<bool>("IsActive")
@@ -491,6 +499,8 @@ namespace Distribution.Migrations
b.HasIndex("FK_GoodsReceiptId");
b.HasIndex("FK_ItemId");
b.HasIndex("FK_PurchaseOrderItemId");
b.ToTable("GoodsReceiptItems");
@@ -518,6 +528,63 @@ namespace Distribution.Migrations
});
});
modelBuilder.Entity("Distribution.Models.GoodsReceiptItemBatch", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("char(36)");
b.Property<DateTime>("CreatedAt")
.HasColumnType("datetime(6)");
b.Property<Guid>("FK_GoodsReceiptItemId")
.HasColumnType("char(36)");
b.Property<Guid>("FK_ItemBatchId")
.HasColumnType("char(36)");
b.Property<bool>("IsActive")
.HasColumnType("tinyint(1)");
b.Property<int>("Quantity")
.HasColumnType("int");
b.HasKey("Id");
b.HasIndex("FK_GoodsReceiptItemId");
b.HasIndex("FK_ItemBatchId");
b.ToTable("GoodsReceiptItemBatches");
});
modelBuilder.Entity("Distribution.Models.GoodsReceiptItemSerial", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("char(36)");
b.Property<DateTime>("CreatedAt")
.HasColumnType("datetime(6)");
b.Property<Guid>("FK_GoodsReceiptItemId")
.HasColumnType("char(36)");
b.Property<Guid>("FK_ItemSerialNumberId")
.HasColumnType("char(36)");
b.Property<bool>("IsActive")
.HasColumnType("tinyint(1)");
b.HasKey("Id");
b.HasIndex("FK_GoodsReceiptItemId");
b.HasIndex("FK_ItemSerialNumberId");
b.ToTable("GoodsReceiptItemSerials");
});
modelBuilder.Entity("Distribution.Models.Invoice", b =>
{
b.Property<Guid>("Id")
@@ -600,6 +667,9 @@ namespace Distribution.Migrations
.ValueGeneratedOnAdd()
.HasColumnType("char(36)");
b.Property<bool>("AllowCustomWarrantyPeriod")
.HasColumnType("tinyint(1)");
b.Property<decimal?>("CostPrice")
.HasColumnType("decimal(65,30)");
@@ -624,6 +694,9 @@ namespace Distribution.Migrations
b.Property<Guid?>("FK_SubCategoryId")
.HasColumnType("char(36)");
b.Property<bool>("HasWarranty")
.HasColumnType("tinyint(1)");
b.Property<bool>("IsActive")
.HasColumnType("tinyint(1)");
@@ -634,7 +707,6 @@ namespace Distribution.Migrations
.IsRequired()
.HasColumnType("longtext");
b.Property<decimal?>("ReorderLevel")
.HasColumnType("decimal(65,30)");
@@ -648,6 +720,18 @@ namespace Distribution.Migrations
b.Property<int>("SyncSource")
.HasColumnType("int");
b.Property<bool>("TracksBatches")
.HasColumnType("tinyint(1)");
b.Property<bool>("TracksExpiryDate")
.HasColumnType("tinyint(1)");
b.Property<bool>("TracksSerialNumbers")
.HasColumnType("tinyint(1)");
b.Property<int?>("WarrantyPeriodDays")
.HasColumnType("int");
b.HasKey("Id");
b.HasIndex("FK_BaseUomId");
@@ -664,61 +748,157 @@ namespace Distribution.Migrations
new
{
Id = new Guid("23000000-0000-0000-0000-000000000001"),
AllowCustomWarrantyPeriod = false,
CreatedAt = new DateTime(2026, 8, 20, 0, 0, 0, 0, DateTimeKind.Unspecified),
Description = "Coca-Cola 500ml bottle",
FK_BaseUomId = new Guid("22000000-0000-0000-0000-000000000001"),
FK_BrandId = new Guid("21000000-0000-0000-0000-000000000001"),
FK_CategoryId = new Guid("20000000-0000-0000-0000-000000000001"),
HasWarranty = false,
IsActive = true,
Name = "Coca-Cola 500ml",
SalePrice = 60m,
Sku = "BEV-COKE-500",
SyncSource = 0
SyncSource = 0,
TracksBatches = false,
TracksExpiryDate = false,
TracksSerialNumbers = false
},
new
{
Id = new Guid("23000000-0000-0000-0000-000000000002"),
AllowCustomWarrantyPeriod = false,
CreatedAt = new DateTime(2026, 8, 20, 0, 0, 0, 0, DateTimeKind.Unspecified),
Description = "Coca-Cola 1.5L bottle",
FK_BaseUomId = new Guid("22000000-0000-0000-0000-000000000001"),
FK_BrandId = new Guid("21000000-0000-0000-0000-000000000001"),
FK_CategoryId = new Guid("20000000-0000-0000-0000-000000000001"),
HasWarranty = false,
IsActive = true,
Name = "Coca-Cola 1.5L",
SalePrice = 120m,
Sku = "BEV-COKE-1500",
SyncSource = 0
SyncSource = 0,
TracksBatches = false,
TracksExpiryDate = false,
TracksSerialNumbers = false
},
new
{
Id = new Guid("23000000-0000-0000-0000-000000000003"),
AllowCustomWarrantyPeriod = false,
CreatedAt = new DateTime(2026, 8, 20, 0, 0, 0, 0, DateTimeKind.Unspecified),
Description = "Lays Classic Salted 52g pack",
FK_BaseUomId = new Guid("22000000-0000-0000-0000-000000000001"),
FK_BrandId = new Guid("21000000-0000-0000-0000-000000000002"),
FK_CategoryId = new Guid("20000000-0000-0000-0000-000000000002"),
HasWarranty = false,
IsActive = true,
Name = "Lays Classic 52g",
SalePrice = 50m,
Sku = "SNK-LAYS-52",
SyncSource = 0
SyncSource = 0,
TracksBatches = false,
TracksExpiryDate = false,
TracksSerialNumbers = false
},
new
{
Id = new Guid("23000000-0000-0000-0000-000000000004"),
AllowCustomWarrantyPeriod = false,
CreatedAt = new DateTime(2026, 8, 20, 0, 0, 0, 0, DateTimeKind.Unspecified),
Description = "Lays Family Pack 150g",
FK_BaseUomId = new Guid("22000000-0000-0000-0000-000000000001"),
FK_BrandId = new Guid("21000000-0000-0000-0000-000000000002"),
FK_CategoryId = new Guid("20000000-0000-0000-0000-000000000002"),
HasWarranty = false,
IsActive = true,
Name = "Lays Family Pack 150g",
SalePrice = 150m,
Sku = "SNK-LAYS-FAM",
SyncSource = 0
SyncSource = 0,
TracksBatches = false,
TracksExpiryDate = false,
TracksSerialNumbers = false
});
});
modelBuilder.Entity("Distribution.Models.ItemBatch", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("char(36)");
b.Property<string>("BatchNumber")
.HasColumnType("varchar(255)");
b.Property<DateTime>("CreatedAt")
.HasColumnType("datetime(6)");
b.Property<DateTime?>("ExpiryDate")
.HasColumnType("datetime(6)");
b.Property<Guid>("FK_ItemId")
.HasColumnType("char(36)");
b.Property<bool>("IsActive")
.HasColumnType("tinyint(1)");
b.Property<DateTime?>("ManufactureDate")
.HasColumnType("datetime(6)");
b.HasKey("Id");
b.HasIndex("FK_ItemId", "BatchNumber");
b.ToTable("ItemBatches");
});
modelBuilder.Entity("Distribution.Models.ItemSerialNumber", b =>
{
b.Property<Guid>("Id")
.ValueGeneratedOnAdd()
.HasColumnType("char(36)");
b.Property<DateTime>("CreatedAt")
.HasColumnType("datetime(6)");
b.Property<Guid?>("CurrentLocationId")
.HasColumnType("char(36)");
b.Property<int?>("CurrentLocationType")
.HasColumnType("int");
b.Property<Guid>("FK_ItemId")
.HasColumnType("char(36)");
b.Property<bool>("IsActive")
.HasColumnType("tinyint(1)");
b.Property<DateTime>("ReceivedAt")
.HasColumnType("datetime(6)");
b.Property<string>("SerialNumber")
.IsRequired()
.HasColumnType("varchar(255)");
b.Property<int>("Status")
.HasColumnType("int");
b.Property<DateTime?>("WarrantyExpiresAt")
.HasColumnType("datetime(6)");
b.Property<int?>("WarrantyPeriodDaysOverride")
.HasColumnType("int");
b.HasKey("Id");
b.HasIndex("FK_ItemId", "SerialNumber")
.IsUnique();
b.ToTable("ItemSerialNumbers");
});
modelBuilder.Entity("Distribution.Models.LoadingSheet", b =>
{
b.Property<Guid>("Id")
@@ -2239,9 +2419,15 @@ namespace Distribution.Migrations
.ValueGeneratedOnAdd()
.HasColumnType("char(36)");
b.Property<Guid?>("FK_ItemBatchId")
.HasColumnType("char(36)");
b.Property<Guid>("FK_ItemId")
.HasColumnType("char(36)");
b.Property<Guid?>("FK_ItemSerialNumberId")
.HasColumnType("char(36)");
b.Property<Guid>("LocationId")
.HasColumnType("char(36)");
@@ -2256,7 +2442,11 @@ namespace Distribution.Migrations
b.HasKey("Id");
b.HasIndex("FK_ItemId", "LocationId")
b.HasIndex("FK_ItemBatchId");
b.HasIndex("FK_ItemSerialNumberId");
b.HasIndex("FK_ItemId", "LocationId", "FK_ItemBatchId", "FK_ItemSerialNumberId")
.IsUnique();
b.ToTable("StockBalances");
@@ -2303,9 +2493,15 @@ namespace Distribution.Migrations
b.Property<Guid>("CreatedBy")
.HasColumnType("char(36)");
b.Property<Guid?>("FK_ItemBatchId")
.HasColumnType("char(36)");
b.Property<Guid>("FK_ItemId")
.HasColumnType("char(36)");
b.Property<Guid?>("FK_ItemSerialNumberId")
.HasColumnType("char(36)");
b.Property<Guid?>("FromLocationId")
.HasColumnType("char(36)");
@@ -2332,8 +2528,12 @@ namespace Distribution.Migrations
b.HasKey("Id");
b.HasIndex("FK_ItemBatchId");
b.HasIndex("FK_ItemId");
b.HasIndex("FK_ItemSerialNumberId");
b.ToTable("StockMovements");
b.HasData(
@@ -2763,6 +2963,42 @@ namespace Distribution.Migrations
Key = "InvoiceCreationMode",
UpdatedAt = new DateTime(2026, 9, 17, 0, 0, 0, 0, DateTimeKind.Unspecified),
Value = "ModeB"
},
new
{
Key = "Feature.SerialNumberTracking",
UpdatedAt = new DateTime(2026, 10, 1, 0, 0, 0, 0, DateTimeKind.Unspecified),
Value = "false"
},
new
{
Key = "Feature.BatchTracking",
UpdatedAt = new DateTime(2026, 10, 1, 0, 0, 0, 0, DateTimeKind.Unspecified),
Value = "false"
},
new
{
Key = "Feature.ExpiryDateTracking",
UpdatedAt = new DateTime(2026, 10, 1, 0, 0, 0, 0, DateTimeKind.Unspecified),
Value = "false"
},
new
{
Key = "Feature.WarrantyTracking",
UpdatedAt = new DateTime(2026, 10, 1, 0, 0, 0, 0, DateTimeKind.Unspecified),
Value = "false"
},
new
{
Key = "Feature.CustomWarrantyOverride",
UpdatedAt = new DateTime(2026, 10, 1, 0, 0, 0, 0, DateTimeKind.Unspecified),
Value = "false"
},
new
{
Key = "Feature.DefaultWarrantyPeriodDays",
UpdatedAt = new DateTime(2026, 10, 1, 0, 0, 0, 0, DateTimeKind.Unspecified),
Value = "0"
});
});
@@ -3256,8 +3492,12 @@ namespace Distribution.Migrations
b.HasOne("Distribution.Models.PurchaseOrder", "PurchaseOrder")
.WithMany()
.HasForeignKey("FK_PurchaseOrderId")
.OnDelete(DeleteBehavior.Restrict)
.IsRequired();
.OnDelete(DeleteBehavior.Restrict);
b.HasOne("Distribution.Models.Supplier", "Supplier")
.WithMany()
.HasForeignKey("FK_SupplierId")
.OnDelete(DeleteBehavior.Restrict);
b.HasOne("Distribution.Models.Warehouse", "Warehouse")
.WithMany()
@@ -3267,6 +3507,8 @@ namespace Distribution.Migrations
b.Navigation("PurchaseOrder");
b.Navigation("Supplier");
b.Navigation("Warehouse");
});
@@ -3278,17 +3520,61 @@ namespace Distribution.Migrations
.OnDelete(DeleteBehavior.Restrict)
.IsRequired();
b.HasOne("Distribution.Models.Item", "Item")
.WithMany()
.HasForeignKey("FK_ItemId")
.OnDelete(DeleteBehavior.Restrict);
b.HasOne("Distribution.Models.PurchaseOrderItem", "PurchaseOrderItem")
.WithMany()
.HasForeignKey("FK_PurchaseOrderItemId")
.OnDelete(DeleteBehavior.Restrict)
.IsRequired();
.OnDelete(DeleteBehavior.Restrict);
b.Navigation("GoodsReceipt");
b.Navigation("Item");
b.Navigation("PurchaseOrderItem");
});
modelBuilder.Entity("Distribution.Models.GoodsReceiptItemBatch", b =>
{
b.HasOne("Distribution.Models.GoodsReceiptItem", "GoodsReceiptItem")
.WithMany("Batches")
.HasForeignKey("FK_GoodsReceiptItemId")
.OnDelete(DeleteBehavior.Restrict)
.IsRequired();
b.HasOne("Distribution.Models.ItemBatch", "ItemBatch")
.WithMany()
.HasForeignKey("FK_ItemBatchId")
.OnDelete(DeleteBehavior.Restrict)
.IsRequired();
b.Navigation("GoodsReceiptItem");
b.Navigation("ItemBatch");
});
modelBuilder.Entity("Distribution.Models.GoodsReceiptItemSerial", b =>
{
b.HasOne("Distribution.Models.GoodsReceiptItem", "GoodsReceiptItem")
.WithMany("Serials")
.HasForeignKey("FK_GoodsReceiptItemId")
.OnDelete(DeleteBehavior.Restrict)
.IsRequired();
b.HasOne("Distribution.Models.ItemSerialNumber", "ItemSerialNumber")
.WithMany()
.HasForeignKey("FK_ItemSerialNumberId")
.OnDelete(DeleteBehavior.Restrict)
.IsRequired();
b.Navigation("GoodsReceiptItem");
b.Navigation("ItemSerialNumber");
});
modelBuilder.Entity("Distribution.Models.Invoice", b =>
{
b.HasOne("Distribution.Models.ShopPO", "ShopPO")
@@ -3331,6 +3617,28 @@ namespace Distribution.Migrations
b.Navigation("SubCategory");
});
modelBuilder.Entity("Distribution.Models.ItemBatch", b =>
{
b.HasOne("Distribution.Models.Item", "Item")
.WithMany()
.HasForeignKey("FK_ItemId")
.OnDelete(DeleteBehavior.Restrict)
.IsRequired();
b.Navigation("Item");
});
modelBuilder.Entity("Distribution.Models.ItemSerialNumber", b =>
{
b.HasOne("Distribution.Models.Item", "Item")
.WithMany()
.HasForeignKey("FK_ItemId")
.OnDelete(DeleteBehavior.Restrict)
.IsRequired();
b.Navigation("Item");
});
modelBuilder.Entity("Distribution.Models.LoadingSheet", b =>
{
b.HasOne("Distribution.Models.DeliveryRun", "Ride")
@@ -3746,24 +4054,52 @@ namespace Distribution.Migrations
modelBuilder.Entity("Distribution.Models.StockBalance", b =>
{
b.HasOne("Distribution.Models.ItemBatch", "ItemBatch")
.WithMany()
.HasForeignKey("FK_ItemBatchId")
.OnDelete(DeleteBehavior.Restrict);
b.HasOne("Distribution.Models.Item", "Item")
.WithMany()
.HasForeignKey("FK_ItemId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Distribution.Models.ItemSerialNumber", "ItemSerialNumber")
.WithMany()
.HasForeignKey("FK_ItemSerialNumberId")
.OnDelete(DeleteBehavior.Restrict);
b.Navigation("Item");
b.Navigation("ItemBatch");
b.Navigation("ItemSerialNumber");
});
modelBuilder.Entity("Distribution.Models.StockMovement", b =>
{
b.HasOne("Distribution.Models.ItemBatch", "ItemBatch")
.WithMany()
.HasForeignKey("FK_ItemBatchId")
.OnDelete(DeleteBehavior.Restrict);
b.HasOne("Distribution.Models.Item", "Item")
.WithMany()
.HasForeignKey("FK_ItemId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Distribution.Models.ItemSerialNumber", "ItemSerialNumber")
.WithMany()
.HasForeignKey("FK_ItemSerialNumberId")
.OnDelete(DeleteBehavior.Restrict);
b.Navigation("Item");
b.Navigation("ItemBatch");
b.Navigation("ItemSerialNumber");
});
modelBuilder.Entity("Distribution.Models.Store", b =>
@@ -3964,6 +4300,13 @@ namespace Distribution.Migrations
b.Navigation("Items");
});
modelBuilder.Entity("Distribution.Models.GoodsReceiptItem", b =>
{
b.Navigation("Batches");
b.Navigation("Serials");
});
modelBuilder.Entity("Distribution.Models.Invoice", b =>
{
b.Navigation("Payments");