diff --git a/Areas/Inventory/Models/InventoryMasterModel.cs b/Areas/Inventory/Models/InventoryMasterModel.cs
new file mode 100644
index 0000000..34fe4f8
--- /dev/null
+++ b/Areas/Inventory/Models/InventoryMasterModel.cs
@@ -0,0 +1,20 @@
+using Microsoft.AspNetCore.Mvc;
+using System;
+using System.Collections.Generic;
+using PSTW_CentralSystem.Models;
+using System.ComponentModel.DataAnnotations.Schema;
+using System.ComponentModel.DataAnnotations;
+
+namespace PSTW_CentralSystem.Areas.Inventory.Models
+{
+ public class InventoryMasterModel
+ {
+ [Key]
+ public int StoreId { get; set; }
+ public int UserId { get; set; }
+ [ForeignKey("UserId")]
+ public virtual UserModel? User { get; set; }
+ [ForeignKey("StoreId")]
+ public virtual StoreModel? Store { get; set; }
+ }
+}
diff --git a/Areas/Inventory/Models/ItemModel.cs b/Areas/Inventory/Models/ItemModel.cs
index a6e9838..1ec16a4 100644
--- a/Areas/Inventory/Models/ItemModel.cs
+++ b/Areas/Inventory/Models/ItemModel.cs
@@ -32,7 +32,7 @@ namespace PSTW_CentralSystem.Areas.Inventory.Models
public DateTime? InvoiceDate { get; set; }
[Comment("1 = In stock; 2 = Item Moving; 3 = Item Out; 4 = Item Broken; 5 = Item Lost; 6 = Item Stolen; 7 = Item Damaged; 8 = Item Discarded; 9 = Item Destroyed; 10 = Item Finished;")]
public int ItemStatus { get; set; } = 1;
- public string ItemLocation { get; set; } = string.Empty;
+ public int? MovementId { get; set; }
public int CreatedByUserId { get; set; }
[ForeignKey("CreatedByUserId")]
public virtual UserModel? CreatedBy { get; set; }
@@ -42,5 +42,8 @@ namespace PSTW_CentralSystem.Areas.Inventory.Models
public virtual DepartmentModel? Department { get; set; }
[ForeignKey("ProductId")]
public virtual ProductModel? Product { get; set; }
+ [ForeignKey("MovementId")]
+ public virtual ItemMovementModel? Movement { get; set; }
+
}
}
diff --git a/Areas/Inventory/Models/ItemMovementModel.cs b/Areas/Inventory/Models/ItemMovementModel.cs
new file mode 100644
index 0000000..7ee1647
--- /dev/null
+++ b/Areas/Inventory/Models/ItemMovementModel.cs
@@ -0,0 +1,43 @@
+using PSTW_CentralSystem.Models;
+using System.ComponentModel.DataAnnotations.Schema;
+using Microsoft.EntityFrameworkCore;
+using System.ComponentModel.DataAnnotations;
+namespace PSTW_CentralSystem.Areas.Inventory.Models
+{
+ public class ItemMovementModel
+ {
+ [Key]
+ public int Id { get; set; }
+ public int ItemId { get; set; }
+ public int? ToStation { get; set; }
+ public int? ToStore { get; set; }
+ public int? ToUser { get; set; }
+ [Comment("Repair, Calibration, Faulty, Ready To Deploy, On Delivery")]
+ public string? ToOther { get; set; }
+ [Comment("StockIn, Stock Out")]
+ public string? Action { get; set; }
+ public int? Quantity { get; set; }
+ public string? Remark { get; set; }
+ public string? ConsignmentNote { get; set; }
+ public DateTime? Date { get; set; }
+ public int? LastUser { get; set; }
+ public int? LastStore{ get; set; }
+ public int? LastStation{ get; set; }
+ [Comment("Repair, Calibration, Faulty, Ready To Deploy, On Delivery")]
+ public string? LatestStatus { get; set; }
+ public bool MovementComplete { get; set; } = false;
+ public virtual ItemModel? Item { get; set; }
+ [ForeignKey("ToStore")]
+ public virtual StoreModel? NextStore { get; set; }
+ [ForeignKey("ToStation")]
+ public virtual StationModel? NextStation { get; set; }
+ [ForeignKey("ToUser")]
+ public virtual UserModel? NextUser { get; set; }
+ [ForeignKey("LastStore")]
+ public virtual StoreModel? FromStore { get; set; }
+ [ForeignKey("LastStation")]
+ public virtual StationModel? FromStation { get; set; }
+ [ForeignKey("LastUser")]
+ public virtual UserModel? FromUser { get; set; }
+ }
+}
diff --git a/Areas/Inventory/Models/StationModel.cs b/Areas/Inventory/Models/StationModel.cs
new file mode 100644
index 0000000..e27b141
--- /dev/null
+++ b/Areas/Inventory/Models/StationModel.cs
@@ -0,0 +1,19 @@
+using PSTW_CentralSystem.Models;
+using System.ComponentModel.DataAnnotations;
+using System.ComponentModel.DataAnnotations.Schema;
+namespace PSTW_CentralSystem.Areas.Inventory.Models
+{
+ public class StationModel
+ {
+ [Key]
+ public int StationId { get; set; }
+ public int StationPicID { get; set; }
+ public string? StationName { get; set; }
+ public int DepartmentId { get; set; }
+ [ForeignKey("DepartmentId")]
+ public virtual DepartmentModel? Department { get; set; }
+ [ForeignKey("StationPicID")]
+ public virtual UserModel? StationPic { get; set; }
+
+ }
+}
diff --git a/Areas/Inventory/Models/StoreModel.cs b/Areas/Inventory/Models/StoreModel.cs
index 3482b00..0027181 100644
--- a/Areas/Inventory/Models/StoreModel.cs
+++ b/Areas/Inventory/Models/StoreModel.cs
@@ -1,6 +1,16 @@
-namespace PSTW_CentralSystem.Areas.Inventory.Models
+using PSTW_CentralSystem.Models;
+using System.ComponentModel.DataAnnotations;
+using System.ComponentModel.DataAnnotations.Schema;
+namespace PSTW_CentralSystem.Areas.Inventory.Models
{
public class StoreModel
{
+ [Key]
+ public int Id { get; set; }
+ public int CompanyId { get; set; }
+ public string StoreName { get; set; } = string.Empty;
+ [ForeignKey("CompanyId")]
+ public virtual CompanyModel? Company { get; set; }
+
}
}
diff --git a/Areas/Inventory/Views/Item/ItemRegistration.cshtml b/Areas/Inventory/Views/Item/ItemRegistration.cshtml
index a9fa9e4..3481acd 100644
--- a/Areas/Inventory/Views/Item/ItemRegistration.cshtml
+++ b/Areas/Inventory/Views/Item/ItemRegistration.cshtml
@@ -543,6 +543,10 @@
$(td).attr('id', `qr${cellData}`);
},
},
+ {
+ "title": "Category",
+ "data": "category",
+ },
{
"title": "Serial Number",
"data": "serialNumber",
@@ -560,7 +564,7 @@
"data": "purchaseDate",
},
{
- "title": "Price After Convert(RM)",
+ "title": "Price(RM)",
"data": "convertPrice",
},
{
@@ -575,6 +579,18 @@
else { return data }
}
},
+ {
+ "title": "Location",
+ "data": "currentUser",
+ "render": function (data, type, full, meta) {
+ currentUser = data ?? null;
+ currentStore = full.currentStore ?? 'N/A';
+ currentStation = full.currentStation ?? 'N/A';
+ return `User: ${currentUser}
+ Store: ${currentStore}
+ Station: ${currentStation}`
+ }
+ },
{
"title": "Print",
"data": "uniqueID",
@@ -601,7 +617,7 @@
const containerId = `qr${data.uniqueID}`;
const container = $(`#${containerId}`);
container.empty();
- container.append(`${data.uniqueID}`);
+ container.append(`${data.uniqueID}`);
// console.log(container[0]);
if (container) {
// Generate QR code only if not already generated
@@ -939,9 +955,9 @@
const imgData = canvas.toDataURL('image/png');
// Open the image in a new tab for preview (optional)
- const newWindow = window.open();
- newWindow.location.href = imgData;
- console.log(imgData)
+ // const newWindow = window.open();
+ // newWindow.location.href = imgData;
+ // console.log(imgData)
// Use printJS to print the image
printJS({
printable: imgData,
diff --git a/Controllers/API/AdminAPI.cs b/Controllers/API/AdminAPI.cs
index 2ad1a4f..a37eb17 100644
--- a/Controllers/API/AdminAPI.cs
+++ b/Controllers/API/AdminAPI.cs
@@ -9,6 +9,8 @@ using System.Security.Cryptography;
using System.Text;
using System.Text.Json;
using System.ComponentModel.DataAnnotations;
+using PSTW_CentralSystem.Areas.Inventory.Models;
+using System.Security.Cryptography.X509Certificates;
namespace PSTW_CentralSystem.Controllers.API
{
@@ -18,7 +20,7 @@ namespace PSTW_CentralSystem.Controllers.API
public class AdminAPI : Controller
{
private readonly ILogger _logger;
- private readonly CentralSystemContext _identityDbContext;
+ private readonly CentralSystemContext _centralDbContext;
private readonly UserManager _userManager;
private readonly SignInManager _signInManager;
private readonly RoleManager _roleManager;
@@ -26,7 +28,7 @@ namespace PSTW_CentralSystem.Controllers.API
public AdminAPI(ILogger logger, CentralSystemContext authDbContext, UserManager userManager, SignInManager signInManager, RoleManager roleManager)
{
_logger = logger;
- _identityDbContext = authDbContext;
+ _centralDbContext = authDbContext;
_userManager = userManager;
_signInManager = signInManager;
_roleManager = roleManager;
@@ -100,7 +102,7 @@ namespace PSTW_CentralSystem.Controllers.API
List userInfo = new List();
// Fetch all users excluding those with roles SuperAdmin or SystemAdmin
- var allUsers = await _identityDbContext.Users
+ var allUsers = await _centralDbContext.Users
.Include(u => u.Department.Company)
.ToListAsync();
@@ -141,7 +143,7 @@ namespace PSTW_CentralSystem.Controllers.API
{
try
{
- var user = await _identityDbContext.Users.FindAsync(id);
+ var user = await _centralDbContext.Users.Include("Department").FirstOrDefaultAsync(u => u.Id == id);
if (user == null)
{
@@ -156,7 +158,31 @@ namespace PSTW_CentralSystem.Controllers.API
await _userManager.AddToRoleAsync(user, role);
user.UserInfoStatus = 1;
- await _identityDbContext.SaveChangesAsync();
+ if (role == "Inventory Master") {
+ var StoreName = user.Department!.DepartmentName + " (" + user.Department!.DepartmentCode + ")";
+
+ var existingStore = await _centralDbContext.Stores.FirstOrDefaultAsync(s => s.StoreName == StoreName);
+ if (existingStore == null)
+ {
+ existingStore = new StoreModel
+ {
+ StoreName = StoreName,
+ CompanyId = user.Department.CompanyId,
+ };
+
+ await _centralDbContext.Stores.AddAsync(existingStore);
+ await _centralDbContext.SaveChangesAsync();
+ }
+
+ var masterStore = await _centralDbContext.Stores.FirstOrDefaultAsync(s => s.Id == existingStore.Id);
+ var newInventoryMaster = new InventoryMasterModel
+ {
+ UserId = user.Id,
+ StoreId = existingStore.Id,
+ };
+ await _centralDbContext.InventoryMasters.AddAsync(newInventoryMaster);
+ }
+ await _centralDbContext.SaveChangesAsync();
return Ok(new { message = "User updated successfully" });
}
@@ -169,7 +195,7 @@ namespace PSTW_CentralSystem.Controllers.API
[HttpPost("GetDepartmentWithCompanyList")]
public async Task GetDepartmentWithCompanyList()
{
- var companyList = await _identityDbContext.Companies
+ var companyList = await _centralDbContext.Companies
.Include(c => c.Departments)
.Select(c => new {
c.CompanyId,
@@ -185,8 +211,8 @@ namespace PSTW_CentralSystem.Controllers.API
[HttpPost("GetDepartmentWithCompany")]
public async Task GetDepartmentWithCompany(int companyId, int departmentId)
{
- var departmentList = await _identityDbContext.Departments.FirstOrDefaultAsync(d => d.DepartmentId == departmentId);
- var companyList = await _identityDbContext.Companies.FirstOrDefaultAsync(c => c.CompanyId == companyId);
+ var departmentList = await _centralDbContext.Departments.FirstOrDefaultAsync(d => d.DepartmentId == departmentId);
+ var companyList = await _centralDbContext.Companies.FirstOrDefaultAsync(c => c.CompanyId == companyId);
// Create a new list to store departments with their company name
var departmentWithCompany = new DepartmentCompany
@@ -211,8 +237,8 @@ namespace PSTW_CentralSystem.Controllers.API
CompanyName = departmentCompanyDetails.Company!
};
- _identityDbContext.Companies.Add(companyModel);
- await _identityDbContext.SaveChangesAsync();
+ _centralDbContext.Companies.Add(companyModel);
+ await _centralDbContext.SaveChangesAsync();
foreach (var department in departmentCompanyDetails.Department!)
{
@@ -223,8 +249,8 @@ namespace PSTW_CentralSystem.Controllers.API
DepartmentCode = department.DepartmentCode ?? string.Empty
};
- _identityDbContext.Departments.Add(departmentModel);
- await _identityDbContext.SaveChangesAsync();
+ _centralDbContext.Departments.Add(departmentModel);
+ await _centralDbContext.SaveChangesAsync();
}
return Ok( new { message = "Company and department added successfully" });
diff --git a/Controllers/API/Inventory/InvMainAPI.cs b/Controllers/API/Inventory/InvMainAPI.cs
index e6e731c..bff074b 100644
--- a/Controllers/API/Inventory/InvMainAPI.cs
+++ b/Controllers/API/Inventory/InvMainAPI.cs
@@ -265,11 +265,34 @@ namespace PSTW_CentralSystem.Controllers.API.Inventory
// Get the item list
if (isAdmin)
{
- itemList = await _centralDbContext.Items.Include("CreatedBy").Include("Department").Include("Product").ToListAsync();
+ itemList = await _centralDbContext.Items
+ .AsNoTracking()
+ .Include("CreatedBy")
+ .Include("Department")
+ .Include("Product")
+ .Include(i => i.Movement)
+ .ThenInclude(m => m!.FromStore)
+ .Include(i => i.Movement)
+ .ThenInclude(m => m!.FromStation)
+ .Include(i => i.Movement)
+ .ThenInclude(m => m!.FromUser)
+ .ToListAsync();
}
else
{
- itemList = await _centralDbContext.Items.Include("CreatedBy").Include("Department").Include("Product").Where(i => i.DepartmentId == user.departmentId).ToListAsync();
+ itemList = await _centralDbContext.Items
+ .AsNoTracking()
+ .Include("CreatedBy")
+ .Include("Department")
+ .Include("Product")
+ .Include(i => i.Movement)
+ .ThenInclude(m => m!.FromStore)
+ .Include(i => i.Movement)
+ .ThenInclude(m => m!.FromStation)
+ .Include(i => i.Movement)
+ .ThenInclude(m => m!.FromUser)
+ .Where(i => i.DepartmentId == user.departmentId)
+ .ToListAsync();
}
// Get the departments list (DepartmentId references Departments)
@@ -295,10 +318,16 @@ namespace PSTW_CentralSystem.Controllers.API.Inventory
item.DODate,
item.Warranty,
EndWDate = item.EndWDate.ToString("dd/MM/yyyy"),
- item.InvoiceDate,
+ InvoiceDate = item.InvoiceDate?.ToString("dd/MM/yyyy"),
item.Department?.DepartmentName,
- item.CreatedBy!.UserName,
+ CreatedBy=item.CreatedBy!.UserName,
item.Product!.ProductName,
+ item.Product!.Category,
+ //CurrentUser = item.Movement?.FromUser?.UserName,
+ CurrentUser = item.Movement?.FromUser?.UserName,
+ CurrentStore = item.Movement?.FromStore?.StoreName,
+ CurrentStation = item.Movement?.FromStation?.StationName,
+
QRString = $"{HttpContext.Request.Scheme}://{HttpContext.Request.Host.Value}/I/{item.UniqueID}" // Generate QR String
}).ToList();
@@ -333,7 +362,7 @@ namespace PSTW_CentralSystem.Controllers.API.Inventory
try
{
var product = await _centralDbContext.Products.FirstOrDefaultAsync(p => p.ProductId == item.ProductId) ?? throw new Exception("Product not found");
-
+ var inventoryMaster = await _centralDbContext.InventoryMasters.Include("User").FirstOrDefaultAsync(i => i.UserId == item.CreatedByUserId) ?? new InventoryMasterModel{ UserId = item.CreatedByUserId };
var addToProduct = item.Quantity;
product.QuantityProduct += addToProduct;
@@ -347,8 +376,27 @@ namespace PSTW_CentralSystem.Controllers.API.Inventory
await _centralDbContext.SaveChangesAsync(); // This generates the auto-incremented ItemID
+
+ ItemMovementModel itemMovement = new ItemMovementModel
+ {
+ ItemId = item.ItemID,
+ ToUser = inventoryMaster.UserId,
+ ToStore = inventoryMaster.StoreId,
+ LastStore = inventoryMaster.StoreId,
+ LastUser = inventoryMaster.UserId,
+ LatestStatus = "Ready To Deploy",
+ Action= "Stock In",
+ Date = DateTime.Now,
+ MovementComplete = true,
+ };
+
+ _centralDbContext.ItemMovements.Add(itemMovement);
+ await _centralDbContext.SaveChangesAsync();
+
// Fetch the generated ItemID
var savedItem = await _centralDbContext.Items.FirstOrDefaultAsync(i => i.ItemID == item.ItemID);
+ // Fetch the generated itemMovement
+ var savedMovement = await _centralDbContext.ItemMovements.FirstOrDefaultAsync(i => i.Id == itemMovement.Id);
if (savedItem != null)
{
@@ -363,10 +411,12 @@ namespace PSTW_CentralSystem.Controllers.API.Inventory
string? itemId = item.ItemID.ToString("D5");
var uniqueId = $"{deptCode}{initialCategory}{productId}{itemId}".ToUpper();
savedItem.UniqueID = uniqueId;
+ savedItem.MovementId = savedMovement?.Id;
_centralDbContext.Items.Update(savedItem);
await _centralDbContext.SaveChangesAsync();
}
+
var updatedItem = new
{
savedItem!.ItemID,
@@ -437,7 +487,7 @@ namespace PSTW_CentralSystem.Controllers.API.Inventory
item.DODate,
item.Warranty,
EndWDate = item.EndWDate.ToString("dd/MM/yyyy"),
- item.InvoiceDate,
+ InvoiceDate = item.InvoiceDate?.ToString("dd/MM/yyyy"),
item.Department?.DepartmentName,
item.CreatedBy!.UserName,
item.Product!.ProductName,
diff --git a/DBContext/CentralSystemContext.cs b/DBContext/CentralSystemContext.cs
index caf8fd6..dfdbf80 100644
--- a/DBContext/CentralSystemContext.cs
+++ b/DBContext/CentralSystemContext.cs
@@ -38,7 +38,8 @@ namespace PSTW_CentralSystem.DBContext
new RoleModel { Id = 1, Name = "SuperAdmin", NormalizedName = "SuperAdmin".ToUpper(), Description = "Can access all pages" },
new RoleModel { Id = 2, Name = "SystemAdmin", NormalizedName = "SystemAdmin".ToUpper(), Description = "Can access some admin pages" },
new RoleModel { Id = 3, Name = "Engineer", NormalizedName = "Engineer".ToUpper(), Description = "Can access operation pages" },
- new RoleModel { Id = 4, Name = "Observer", NormalizedName = "Observer".ToUpper(), Description = "Can access data viewer pages" });
+ new RoleModel { Id = 4, Name = "Observer", NormalizedName = "Observer".ToUpper(), Description = "Can access data viewer pages" },
+ new RoleModel { Id = 5, Name = "Inventory Master", NormalizedName = "Inventory Master".ToUpper(), Description = "Handle inventory module" });
var passwordHasher = new PasswordHasher();
@@ -91,6 +92,10 @@ namespace PSTW_CentralSystem.DBContext
public DbSet Items { get; set; }
public DbSet Products { get; set; }
public DbSet Suppliers { get; set; }
+ public DbSet InventoryMasters { get; set; }
+ public DbSet ItemMovements { get; set; }
+ public DbSet Stations { get; set; }
+ public DbSet Stores { get; set; }
}
}
diff --git a/Migrations/20241223071002_Initiate.Designer.cs b/Migrations/20241230074733_Initiate.Designer.cs
similarity index 72%
rename from Migrations/20241223071002_Initiate.Designer.cs
rename to Migrations/20241230074733_Initiate.Designer.cs
index eaaea2d..47a403a 100644
--- a/Migrations/20241223071002_Initiate.Designer.cs
+++ b/Migrations/20241230074733_Initiate.Designer.cs
@@ -12,7 +12,7 @@ using PSTW_CentralSystem.DBContext;
namespace PSTW_CentralSystem.Migrations
{
[DbContext(typeof(CentralSystemContext))]
- [Migration("20241223071002_Initiate")]
+ [Migration("20241230074733_Initiate")]
partial class Initiate
{
///
@@ -140,6 +140,21 @@ namespace PSTW_CentralSystem.Migrations
b.ToTable("AspNetUserTokens", (string)null);
});
+ modelBuilder.Entity("PSTW_CentralSystem.Areas.Inventory.Models.InventoryMasterModel", b =>
+ {
+ b.Property("StoreId")
+ .HasColumnType("int");
+
+ b.Property("UserId")
+ .HasColumnType("int");
+
+ b.HasKey("StoreId");
+
+ b.HasIndex("UserId");
+
+ b.ToTable("InventoryMasters");
+ });
+
modelBuilder.Entity("PSTW_CentralSystem.Areas.Inventory.Models.ItemModel", b =>
{
b.Property("ItemID")
@@ -170,6 +185,9 @@ namespace PSTW_CentralSystem.Migrations
b.Property("DONo")
.HasColumnType("longtext");
+ b.Property("DefaultPrice")
+ .HasColumnType("float");
+
b.Property("DepartmentId")
.HasColumnType("int");
@@ -190,13 +208,13 @@ namespace PSTW_CentralSystem.Migrations
.HasColumnType("int")
.HasComment("1 = In stock; 2 = Item Moving; 3 = Item Out; 4 = Item Broken; 5 = Item Lost; 6 = Item Stolen; 7 = Item Damaged; 8 = Item Discarded; 9 = Item Destroyed; 10 = Item Finished;");
+ b.Property("MovementId")
+ .HasColumnType("int");
+
b.Property("PONo")
.IsRequired()
.HasColumnType("longtext");
- b.Property("DefaultPrice")
- .HasColumnType("float");
-
b.Property("ProductId")
.HasColumnType("int");
@@ -231,11 +249,87 @@ namespace PSTW_CentralSystem.Migrations
b.HasIndex("DepartmentId");
+ b.HasIndex("MovementId")
+ .IsUnique();
+
b.HasIndex("ProductId");
b.ToTable("Items");
});
+ modelBuilder.Entity("PSTW_CentralSystem.Areas.Inventory.Models.ItemMovementModel", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int");
+
+ MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id"));
+
+ b.Property("Action")
+ .HasColumnType("longtext")
+ .HasComment("StockIn, Stock Out");
+
+ b.Property("ConsignmentNote")
+ .HasColumnType("longtext");
+
+ b.Property("Date")
+ .HasColumnType("datetime(6)");
+
+ b.Property("ItemId")
+ .HasColumnType("int");
+
+ b.Property("LastStation")
+ .HasColumnType("int");
+
+ b.Property("LastStore")
+ .HasColumnType("int");
+
+ b.Property("LastUser")
+ .HasColumnType("int");
+
+ b.Property("LatestStatus")
+ .HasColumnType("longtext")
+ .HasComment("Repair, Calibration, Faulty, Ready To Deploy, On Delivery");
+
+ b.Property("MovementComplete")
+ .HasColumnType("tinyint(1)");
+
+ b.Property("Quantity")
+ .HasColumnType("int");
+
+ b.Property("Remark")
+ .HasColumnType("longtext");
+
+ b.Property("ToOther")
+ .HasColumnType("longtext")
+ .HasComment("Repair, Calibration, Faulty, Ready To Deploy, On Delivery");
+
+ b.Property("ToStation")
+ .HasColumnType("int");
+
+ b.Property("ToStore")
+ .HasColumnType("int");
+
+ b.Property("ToUser")
+ .HasColumnType("int");
+
+ b.HasKey("Id");
+
+ b.HasIndex("LastStation");
+
+ b.HasIndex("LastStore");
+
+ b.HasIndex("LastUser");
+
+ b.HasIndex("ToStation");
+
+ b.HasIndex("ToStore");
+
+ b.HasIndex("ToUser");
+
+ b.ToTable("ItemMovements");
+ });
+
modelBuilder.Entity("PSTW_CentralSystem.Areas.Inventory.Models.ManufacturerModel", b =>
{
b.Property("ManufacturerId")
@@ -290,6 +384,54 @@ namespace PSTW_CentralSystem.Migrations
b.ToTable("Products");
});
+ modelBuilder.Entity("PSTW_CentralSystem.Areas.Inventory.Models.StationModel", b =>
+ {
+ b.Property("StationId")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int");
+
+ MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("StationId"));
+
+ b.Property("DepartmentId")
+ .HasColumnType("int");
+
+ b.Property("StationName")
+ .HasColumnType("longtext");
+
+ b.Property("StationPicID")
+ .HasColumnType("int");
+
+ b.HasKey("StationId");
+
+ b.HasIndex("DepartmentId");
+
+ b.HasIndex("StationPicID");
+
+ b.ToTable("Stations");
+ });
+
+ modelBuilder.Entity("PSTW_CentralSystem.Areas.Inventory.Models.StoreModel", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int");
+
+ MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id"));
+
+ b.Property("CompanyId")
+ .HasColumnType("int");
+
+ b.Property("StoreName")
+ .IsRequired()
+ .HasColumnType("longtext");
+
+ b.HasKey("Id");
+
+ b.HasIndex("CompanyId");
+
+ b.ToTable("Stores");
+ });
+
modelBuilder.Entity("PSTW_CentralSystem.Areas.Inventory.Models.SupplierModel", b =>
{
b.Property("SupplierId")
@@ -451,6 +593,13 @@ namespace PSTW_CentralSystem.Migrations
Description = "Can access data viewer pages",
Name = "Observer",
NormalizedName = "OBSERVER"
+ },
+ new
+ {
+ Id = 5,
+ Description = "Handle inventory module",
+ Name = "Inventory Master",
+ NormalizedName = "INVENTORY MASTER"
});
});
@@ -536,16 +685,16 @@ namespace PSTW_CentralSystem.Migrations
{
Id = 1,
AccessFailedCount = 0,
- ConcurrencyStamp = "7a7ee381-cecc-4268-9fc4-1f04eebfcb2c",
+ ConcurrencyStamp = "cedbd3af-4aa6-41cc-a71f-f85ac3a7c6ac",
Email = "admin@pstw.com.my",
EmailConfirmed = true,
FullName = "MAAdmin",
LockoutEnabled = false,
NormalizedEmail = "ADMIN@PSTW.COM.MY",
NormalizedUserName = "ADMIN@PSTW.COM.MY",
- PasswordHash = "AQAAAAIAAYagAAAAEKL4x2bfz8vXmcqMKqRsdQPdP9FVEhj4IR3FVvfFdeMdJb1Z7vekx6E3Qzycgpj3WA==",
+ PasswordHash = "AQAAAAIAAYagAAAAEEsEPaF/WtRT6js4zpE9wiOXZXn+Vq29o4nc8esBsMmSE3Sm5q636DZeu7ECQlQ0RA==",
PhoneNumberConfirmed = false,
- SecurityStamp = "5f7b5fe6-fb4d-4350-93aa-f3103c6e9a4d",
+ SecurityStamp = "a7be7fa2-a275-4646-a387-2d1d1042878d",
TwoFactorEnabled = false,
UserInfoStatus = 1,
UserName = "admin@pstw.com.my"
@@ -554,16 +703,16 @@ namespace PSTW_CentralSystem.Migrations
{
Id = 2,
AccessFailedCount = 0,
- ConcurrencyStamp = "fd4022cd-e08a-43c1-823c-573a86e86a9d",
+ ConcurrencyStamp = "948106ca-aeaa-49fa-87c9-018445595c12",
Email = "sysadmin@pstw.com.my",
EmailConfirmed = true,
FullName = "SysAdmin",
LockoutEnabled = false,
NormalizedEmail = "SYSADMIN@PSTW.COM.MY",
NormalizedUserName = "SYSADMIN@PSTW.COM.MY",
- PasswordHash = "AQAAAAIAAYagAAAAENI+MWqt+OwSLiTBhOC5LBV7nWb8hnfcGEnUOLpadTdCHa6rV0ukUo6Hd5nGRL5rTw==",
+ PasswordHash = "AQAAAAIAAYagAAAAEL/iXkcbIqa5+OnqaBOBuG2KiSvkxA2shZYl0XQVtmadQnaO2eARuKwyGQqlWu9NqQ==",
PhoneNumberConfirmed = false,
- SecurityStamp = "0b4291c9-d818-4485-bd96-adde7e14286d",
+ SecurityStamp = "04aeb405-81f6-4ca0-9ed8-ce10c2e5dd6e",
TwoFactorEnabled = false,
UserInfoStatus = 1,
UserName = "sysadmin@pstw.com.my"
@@ -621,6 +770,25 @@ namespace PSTW_CentralSystem.Migrations
.IsRequired();
});
+ modelBuilder.Entity("PSTW_CentralSystem.Areas.Inventory.Models.InventoryMasterModel", b =>
+ {
+ b.HasOne("PSTW_CentralSystem.Areas.Inventory.Models.StoreModel", "Store")
+ .WithMany()
+ .HasForeignKey("StoreId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.HasOne("PSTW_CentralSystem.Models.UserModel", "User")
+ .WithMany()
+ .HasForeignKey("UserId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Store");
+
+ b.Navigation("User");
+ });
+
modelBuilder.Entity("PSTW_CentralSystem.Areas.Inventory.Models.ItemModel", b =>
{
b.HasOne("PSTW_CentralSystem.Models.CompanyModel", "Company")
@@ -641,6 +809,10 @@ namespace PSTW_CentralSystem.Migrations
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
+ b.HasOne("PSTW_CentralSystem.Areas.Inventory.Models.ItemMovementModel", "Movement")
+ .WithOne("Item")
+ .HasForeignKey("PSTW_CentralSystem.Areas.Inventory.Models.ItemModel", "MovementId");
+
b.HasOne("PSTW_CentralSystem.Areas.Inventory.Models.ProductModel", "Product")
.WithMany("Items")
.HasForeignKey("ProductId")
@@ -653,9 +825,50 @@ namespace PSTW_CentralSystem.Migrations
b.Navigation("Department");
+ b.Navigation("Movement");
+
b.Navigation("Product");
});
+ modelBuilder.Entity("PSTW_CentralSystem.Areas.Inventory.Models.ItemMovementModel", b =>
+ {
+ b.HasOne("PSTW_CentralSystem.Areas.Inventory.Models.StationModel", "FromStation")
+ .WithMany()
+ .HasForeignKey("LastStation");
+
+ b.HasOne("PSTW_CentralSystem.Areas.Inventory.Models.StoreModel", "FromStore")
+ .WithMany()
+ .HasForeignKey("LastStore");
+
+ b.HasOne("PSTW_CentralSystem.Models.UserModel", "FromUser")
+ .WithMany()
+ .HasForeignKey("LastUser");
+
+ b.HasOne("PSTW_CentralSystem.Areas.Inventory.Models.StationModel", "NextStation")
+ .WithMany()
+ .HasForeignKey("ToStation");
+
+ b.HasOne("PSTW_CentralSystem.Areas.Inventory.Models.StoreModel", "NextStore")
+ .WithMany()
+ .HasForeignKey("ToStore");
+
+ b.HasOne("PSTW_CentralSystem.Models.UserModel", "NextUser")
+ .WithMany()
+ .HasForeignKey("ToUser");
+
+ b.Navigation("FromStation");
+
+ b.Navigation("FromStore");
+
+ b.Navigation("FromUser");
+
+ b.Navigation("NextStation");
+
+ b.Navigation("NextStore");
+
+ b.Navigation("NextUser");
+ });
+
modelBuilder.Entity("PSTW_CentralSystem.Areas.Inventory.Models.ProductModel", b =>
{
b.HasOne("PSTW_CentralSystem.Areas.Inventory.Models.ManufacturerModel", "Manufacturer")
@@ -667,6 +880,36 @@ namespace PSTW_CentralSystem.Migrations
b.Navigation("Manufacturer");
});
+ modelBuilder.Entity("PSTW_CentralSystem.Areas.Inventory.Models.StationModel", b =>
+ {
+ b.HasOne("PSTW_CentralSystem.Models.DepartmentModel", "Department")
+ .WithMany()
+ .HasForeignKey("DepartmentId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.HasOne("PSTW_CentralSystem.Models.UserModel", "StationPic")
+ .WithMany()
+ .HasForeignKey("StationPicID")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Department");
+
+ b.Navigation("StationPic");
+ });
+
+ modelBuilder.Entity("PSTW_CentralSystem.Areas.Inventory.Models.StoreModel", b =>
+ {
+ b.HasOne("PSTW_CentralSystem.Models.CompanyModel", "Company")
+ .WithMany()
+ .HasForeignKey("CompanyId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Company");
+ });
+
modelBuilder.Entity("PSTW_CentralSystem.Models.DepartmentModel", b =>
{
b.HasOne("PSTW_CentralSystem.Models.CompanyModel", "Company")
@@ -687,6 +930,11 @@ namespace PSTW_CentralSystem.Migrations
b.Navigation("Department");
});
+ modelBuilder.Entity("PSTW_CentralSystem.Areas.Inventory.Models.ItemMovementModel", b =>
+ {
+ b.Navigation("Item");
+ });
+
modelBuilder.Entity("PSTW_CentralSystem.Areas.Inventory.Models.ProductModel", b =>
{
b.Navigation("Items");
diff --git a/Migrations/20241223071002_Initiate.cs b/Migrations/20241230074733_Initiate.cs
similarity index 71%
rename from Migrations/20241223071002_Initiate.cs
rename to Migrations/20241230074733_Initiate.cs
index 4ff2e74..d79c446 100644
--- a/Migrations/20241223071002_Initiate.cs
+++ b/Migrations/20241230074733_Initiate.cs
@@ -159,6 +159,28 @@ namespace PSTW_CentralSystem.Migrations
})
.Annotation("MySql:CharSet", "utf8mb4");
+ migrationBuilder.CreateTable(
+ name: "Stores",
+ columns: table => new
+ {
+ Id = table.Column(type: "int", nullable: false)
+ .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn),
+ CompanyId = table.Column(type: "int", nullable: false),
+ StoreName = table.Column(type: "longtext", nullable: false)
+ .Annotation("MySql:CharSet", "utf8mb4")
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_Stores", x => x.Id);
+ table.ForeignKey(
+ name: "FK_Stores_Companies_CompanyId",
+ column: x => x.CompanyId,
+ principalTable: "Companies",
+ principalColumn: "CompanyId",
+ onDelete: ReferentialAction.Cascade);
+ })
+ .Annotation("MySql:CharSet", "utf8mb4");
+
migrationBuilder.CreateTable(
name: "Products",
columns: table => new
@@ -329,6 +351,123 @@ namespace PSTW_CentralSystem.Migrations
})
.Annotation("MySql:CharSet", "utf8mb4");
+ migrationBuilder.CreateTable(
+ name: "InventoryMasters",
+ columns: table => new
+ {
+ StoreId = table.Column(type: "int", nullable: false),
+ UserId = table.Column(type: "int", nullable: false)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_InventoryMasters", x => x.StoreId);
+ table.ForeignKey(
+ name: "FK_InventoryMasters_AspNetUsers_UserId",
+ column: x => x.UserId,
+ principalTable: "AspNetUsers",
+ principalColumn: "Id",
+ onDelete: ReferentialAction.Cascade);
+ table.ForeignKey(
+ name: "FK_InventoryMasters_Stores_StoreId",
+ column: x => x.StoreId,
+ principalTable: "Stores",
+ principalColumn: "Id",
+ onDelete: ReferentialAction.Cascade);
+ })
+ .Annotation("MySql:CharSet", "utf8mb4");
+
+ migrationBuilder.CreateTable(
+ name: "Stations",
+ columns: table => new
+ {
+ StationId = table.Column(type: "int", nullable: false)
+ .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn),
+ StationPicID = table.Column(type: "int", nullable: false),
+ StationName = table.Column(type: "longtext", nullable: true)
+ .Annotation("MySql:CharSet", "utf8mb4"),
+ DepartmentId = table.Column(type: "int", nullable: false)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_Stations", x => x.StationId);
+ table.ForeignKey(
+ name: "FK_Stations_AspNetUsers_StationPicID",
+ column: x => x.StationPicID,
+ principalTable: "AspNetUsers",
+ principalColumn: "Id",
+ onDelete: ReferentialAction.Cascade);
+ table.ForeignKey(
+ name: "FK_Stations_Departments_DepartmentId",
+ column: x => x.DepartmentId,
+ principalTable: "Departments",
+ principalColumn: "DepartmentId",
+ onDelete: ReferentialAction.Cascade);
+ })
+ .Annotation("MySql:CharSet", "utf8mb4");
+
+ migrationBuilder.CreateTable(
+ name: "ItemMovements",
+ columns: table => new
+ {
+ Id = table.Column(type: "int", nullable: false)
+ .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn),
+ ItemId = table.Column(type: "int", nullable: false),
+ ToStation = table.Column(type: "int", nullable: true),
+ ToStore = table.Column(type: "int", nullable: true),
+ ToUser = table.Column(type: "int", nullable: true),
+ ToOther = table.Column(type: "longtext", nullable: true, comment: "Repair, Calibration, Faulty, Ready To Deploy, On Delivery")
+ .Annotation("MySql:CharSet", "utf8mb4"),
+ Action = table.Column(type: "longtext", nullable: true, comment: "StockIn, Stock Out")
+ .Annotation("MySql:CharSet", "utf8mb4"),
+ Quantity = table.Column(type: "int", nullable: true),
+ Remark = table.Column(type: "longtext", nullable: true)
+ .Annotation("MySql:CharSet", "utf8mb4"),
+ ConsignmentNote = table.Column(type: "longtext", nullable: true)
+ .Annotation("MySql:CharSet", "utf8mb4"),
+ Date = table.Column(type: "datetime(6)", nullable: true),
+ LastUser = table.Column(type: "int", nullable: true),
+ LastStore = table.Column(type: "int", nullable: true),
+ LastStation = table.Column(type: "int", nullable: true),
+ LatestStatus = table.Column(type: "longtext", nullable: true, comment: "Repair, Calibration, Faulty, Ready To Deploy, On Delivery")
+ .Annotation("MySql:CharSet", "utf8mb4"),
+ MovementComplete = table.Column(type: "tinyint(1)", nullable: false)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_ItemMovements", x => x.Id);
+ table.ForeignKey(
+ name: "FK_ItemMovements_AspNetUsers_LastUser",
+ column: x => x.LastUser,
+ principalTable: "AspNetUsers",
+ principalColumn: "Id");
+ table.ForeignKey(
+ name: "FK_ItemMovements_AspNetUsers_ToUser",
+ column: x => x.ToUser,
+ principalTable: "AspNetUsers",
+ principalColumn: "Id");
+ table.ForeignKey(
+ name: "FK_ItemMovements_Stations_LastStation",
+ column: x => x.LastStation,
+ principalTable: "Stations",
+ principalColumn: "StationId");
+ table.ForeignKey(
+ name: "FK_ItemMovements_Stations_ToStation",
+ column: x => x.ToStation,
+ principalTable: "Stations",
+ principalColumn: "StationId");
+ table.ForeignKey(
+ name: "FK_ItemMovements_Stores_LastStore",
+ column: x => x.LastStore,
+ principalTable: "Stores",
+ principalColumn: "Id");
+ table.ForeignKey(
+ name: "FK_ItemMovements_Stores_ToStore",
+ column: x => x.ToStore,
+ principalTable: "Stores",
+ principalColumn: "Id");
+ })
+ .Annotation("MySql:CharSet", "utf8mb4");
+
migrationBuilder.CreateTable(
name: "Items",
columns: table => new
@@ -352,7 +491,7 @@ namespace PSTW_CentralSystem.Migrations
.Annotation("MySql:CharSet", "utf8mb4"),
Currency = table.Column(type: "longtext", nullable: false)
.Annotation("MySql:CharSet", "utf8mb4"),
- PriceInRM = table.Column(type: "float", nullable: false),
+ DefaultPrice = table.Column(type: "float", nullable: false),
CurrencyRate = table.Column(type: "float", nullable: false),
ConvertPrice = table.Column(type: "float", nullable: false),
DONo = table.Column(type: "longtext", nullable: true)
@@ -366,6 +505,7 @@ namespace PSTW_CentralSystem.Migrations
ItemStatus = table.Column(type: "int", nullable: false, comment: "1 = In stock; 2 = Item Moving; 3 = Item Out; 4 = Item Broken; 5 = Item Lost; 6 = Item Stolen; 7 = Item Damaged; 8 = Item Discarded; 9 = Item Destroyed; 10 = Item Finished;"),
ItemLocation = table.Column(type: "longtext", nullable: false)
.Annotation("MySql:CharSet", "utf8mb4"),
+ MovementId = table.Column(type: "int", nullable: true),
CreatedByUserId = table.Column(type: "int", nullable: false)
},
constraints: table =>
@@ -389,6 +529,11 @@ namespace PSTW_CentralSystem.Migrations
principalTable: "Departments",
principalColumn: "DepartmentId",
onDelete: ReferentialAction.Cascade);
+ table.ForeignKey(
+ name: "FK_Items_ItemMovements_MovementId",
+ column: x => x.MovementId,
+ principalTable: "ItemMovements",
+ principalColumn: "Id");
table.ForeignKey(
name: "FK_Items_Products_ProductId",
column: x => x.ProductId,
@@ -406,7 +551,8 @@ namespace PSTW_CentralSystem.Migrations
{ 1, null, "Can access all pages", "SuperAdmin", "SUPERADMIN" },
{ 2, null, "Can access some admin pages", "SystemAdmin", "SYSTEMADMIN" },
{ 3, null, "Can access operation pages", "Engineer", "ENGINEER" },
- { 4, null, "Can access data viewer pages", "Observer", "OBSERVER" }
+ { 4, null, "Can access data viewer pages", "Observer", "OBSERVER" },
+ { 5, null, "Handle inventory module", "Inventory Master", "INVENTORY MASTER" }
});
migrationBuilder.InsertData(
@@ -414,8 +560,8 @@ namespace PSTW_CentralSystem.Migrations
columns: new[] { "Id", "AccessFailedCount", "ConcurrencyStamp", "Email", "EmailConfirmed", "FullName", "LockoutEnabled", "LockoutEnd", "NormalizedEmail", "NormalizedUserName", "PasswordHash", "PhoneNumber", "PhoneNumberConfirmed", "SecurityStamp", "TwoFactorEnabled", "UserInfoStatus", "UserName", "departmentId" },
values: new object[,]
{
- { 1, 0, "7a7ee381-cecc-4268-9fc4-1f04eebfcb2c", "admin@pstw.com.my", true, "MAAdmin", false, null, "ADMIN@PSTW.COM.MY", "ADMIN@PSTW.COM.MY", "AQAAAAIAAYagAAAAEKL4x2bfz8vXmcqMKqRsdQPdP9FVEhj4IR3FVvfFdeMdJb1Z7vekx6E3Qzycgpj3WA==", null, false, "5f7b5fe6-fb4d-4350-93aa-f3103c6e9a4d", false, 1, "admin@pstw.com.my", null },
- { 2, 0, "fd4022cd-e08a-43c1-823c-573a86e86a9d", "sysadmin@pstw.com.my", true, "SysAdmin", false, null, "SYSADMIN@PSTW.COM.MY", "SYSADMIN@PSTW.COM.MY", "AQAAAAIAAYagAAAAENI+MWqt+OwSLiTBhOC5LBV7nWb8hnfcGEnUOLpadTdCHa6rV0ukUo6Hd5nGRL5rTw==", null, false, "0b4291c9-d818-4485-bd96-adde7e14286d", false, 1, "sysadmin@pstw.com.my", null }
+ { 1, 0, "cedbd3af-4aa6-41cc-a71f-f85ac3a7c6ac", "admin@pstw.com.my", true, "MAAdmin", false, null, "ADMIN@PSTW.COM.MY", "ADMIN@PSTW.COM.MY", "AQAAAAIAAYagAAAAEEsEPaF/WtRT6js4zpE9wiOXZXn+Vq29o4nc8esBsMmSE3Sm5q636DZeu7ECQlQ0RA==", null, false, "a7be7fa2-a275-4646-a387-2d1d1042878d", false, 1, "admin@pstw.com.my", null },
+ { 2, 0, "948106ca-aeaa-49fa-87c9-018445595c12", "sysadmin@pstw.com.my", true, "SysAdmin", false, null, "SYSADMIN@PSTW.COM.MY", "SYSADMIN@PSTW.COM.MY", "AQAAAAIAAYagAAAAEL/iXkcbIqa5+OnqaBOBuG2KiSvkxA2shZYl0XQVtmadQnaO2eARuKwyGQqlWu9NqQ==", null, false, "04aeb405-81f6-4ca0-9ed8-ce10c2e5dd6e", false, 1, "sysadmin@pstw.com.my", null }
});
migrationBuilder.InsertData(
@@ -474,6 +620,41 @@ namespace PSTW_CentralSystem.Migrations
table: "Departments",
column: "CompanyId");
+ migrationBuilder.CreateIndex(
+ name: "IX_InventoryMasters_UserId",
+ table: "InventoryMasters",
+ column: "UserId");
+
+ migrationBuilder.CreateIndex(
+ name: "IX_ItemMovements_LastStation",
+ table: "ItemMovements",
+ column: "LastStation");
+
+ migrationBuilder.CreateIndex(
+ name: "IX_ItemMovements_LastStore",
+ table: "ItemMovements",
+ column: "LastStore");
+
+ migrationBuilder.CreateIndex(
+ name: "IX_ItemMovements_LastUser",
+ table: "ItemMovements",
+ column: "LastUser");
+
+ migrationBuilder.CreateIndex(
+ name: "IX_ItemMovements_ToStation",
+ table: "ItemMovements",
+ column: "ToStation");
+
+ migrationBuilder.CreateIndex(
+ name: "IX_ItemMovements_ToStore",
+ table: "ItemMovements",
+ column: "ToStore");
+
+ migrationBuilder.CreateIndex(
+ name: "IX_ItemMovements_ToUser",
+ table: "ItemMovements",
+ column: "ToUser");
+
migrationBuilder.CreateIndex(
name: "IX_Items_CompanyId",
table: "Items",
@@ -489,6 +670,12 @@ namespace PSTW_CentralSystem.Migrations
table: "Items",
column: "DepartmentId");
+ migrationBuilder.CreateIndex(
+ name: "IX_Items_MovementId",
+ table: "Items",
+ column: "MovementId",
+ unique: true);
+
migrationBuilder.CreateIndex(
name: "IX_Items_ProductId",
table: "Items",
@@ -498,6 +685,21 @@ namespace PSTW_CentralSystem.Migrations
name: "IX_Products_ManufacturerId",
table: "Products",
column: "ManufacturerId");
+
+ migrationBuilder.CreateIndex(
+ name: "IX_Stations_DepartmentId",
+ table: "Stations",
+ column: "DepartmentId");
+
+ migrationBuilder.CreateIndex(
+ name: "IX_Stations_StationPicID",
+ table: "Stations",
+ column: "StationPicID");
+
+ migrationBuilder.CreateIndex(
+ name: "IX_Stores_CompanyId",
+ table: "Stores",
+ column: "CompanyId");
}
///
@@ -518,6 +720,9 @@ namespace PSTW_CentralSystem.Migrations
migrationBuilder.DropTable(
name: "AspNetUserTokens");
+ migrationBuilder.DropTable(
+ name: "InventoryMasters");
+
migrationBuilder.DropTable(
name: "Items");
@@ -531,17 +736,26 @@ namespace PSTW_CentralSystem.Migrations
name: "AspNetRoles");
migrationBuilder.DropTable(
- name: "AspNetUsers");
+ name: "ItemMovements");
migrationBuilder.DropTable(
name: "Products");
migrationBuilder.DropTable(
- name: "Departments");
+ name: "Stations");
+
+ migrationBuilder.DropTable(
+ name: "Stores");
migrationBuilder.DropTable(
name: "Manufacturers");
+ migrationBuilder.DropTable(
+ name: "AspNetUsers");
+
+ migrationBuilder.DropTable(
+ name: "Departments");
+
migrationBuilder.DropTable(
name: "Companies");
}
diff --git a/Migrations/CentralSystemContextModelSnapshot.cs b/Migrations/CentralSystemContextModelSnapshot.cs
index 9fd3baa..8286762 100644
--- a/Migrations/CentralSystemContextModelSnapshot.cs
+++ b/Migrations/CentralSystemContextModelSnapshot.cs
@@ -137,6 +137,21 @@ namespace PSTW_CentralSystem.Migrations
b.ToTable("AspNetUserTokens", (string)null);
});
+ modelBuilder.Entity("PSTW_CentralSystem.Areas.Inventory.Models.InventoryMasterModel", b =>
+ {
+ b.Property("StoreId")
+ .HasColumnType("int");
+
+ b.Property("UserId")
+ .HasColumnType("int");
+
+ b.HasKey("StoreId");
+
+ b.HasIndex("UserId");
+
+ b.ToTable("InventoryMasters");
+ });
+
modelBuilder.Entity("PSTW_CentralSystem.Areas.Inventory.Models.ItemModel", b =>
{
b.Property("ItemID")
@@ -167,6 +182,9 @@ namespace PSTW_CentralSystem.Migrations
b.Property("DONo")
.HasColumnType("longtext");
+ b.Property("DefaultPrice")
+ .HasColumnType("float");
+
b.Property("DepartmentId")
.HasColumnType("int");
@@ -187,13 +205,13 @@ namespace PSTW_CentralSystem.Migrations
.HasColumnType("int")
.HasComment("1 = In stock; 2 = Item Moving; 3 = Item Out; 4 = Item Broken; 5 = Item Lost; 6 = Item Stolen; 7 = Item Damaged; 8 = Item Discarded; 9 = Item Destroyed; 10 = Item Finished;");
+ b.Property("MovementId")
+ .HasColumnType("int");
+
b.Property("PONo")
.IsRequired()
.HasColumnType("longtext");
- b.Property("DefaultPrice")
- .HasColumnType("float");
-
b.Property("ProductId")
.HasColumnType("int");
@@ -228,11 +246,87 @@ namespace PSTW_CentralSystem.Migrations
b.HasIndex("DepartmentId");
+ b.HasIndex("MovementId")
+ .IsUnique();
+
b.HasIndex("ProductId");
b.ToTable("Items");
});
+ modelBuilder.Entity("PSTW_CentralSystem.Areas.Inventory.Models.ItemMovementModel", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int");
+
+ MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id"));
+
+ b.Property("Action")
+ .HasColumnType("longtext")
+ .HasComment("StockIn, Stock Out");
+
+ b.Property("ConsignmentNote")
+ .HasColumnType("longtext");
+
+ b.Property("Date")
+ .HasColumnType("datetime(6)");
+
+ b.Property("ItemId")
+ .HasColumnType("int");
+
+ b.Property("LastStation")
+ .HasColumnType("int");
+
+ b.Property("LastStore")
+ .HasColumnType("int");
+
+ b.Property("LastUser")
+ .HasColumnType("int");
+
+ b.Property("LatestStatus")
+ .HasColumnType("longtext")
+ .HasComment("Repair, Calibration, Faulty, Ready To Deploy, On Delivery");
+
+ b.Property("MovementComplete")
+ .HasColumnType("tinyint(1)");
+
+ b.Property("Quantity")
+ .HasColumnType("int");
+
+ b.Property("Remark")
+ .HasColumnType("longtext");
+
+ b.Property("ToOther")
+ .HasColumnType("longtext")
+ .HasComment("Repair, Calibration, Faulty, Ready To Deploy, On Delivery");
+
+ b.Property("ToStation")
+ .HasColumnType("int");
+
+ b.Property("ToStore")
+ .HasColumnType("int");
+
+ b.Property("ToUser")
+ .HasColumnType("int");
+
+ b.HasKey("Id");
+
+ b.HasIndex("LastStation");
+
+ b.HasIndex("LastStore");
+
+ b.HasIndex("LastUser");
+
+ b.HasIndex("ToStation");
+
+ b.HasIndex("ToStore");
+
+ b.HasIndex("ToUser");
+
+ b.ToTable("ItemMovements");
+ });
+
modelBuilder.Entity("PSTW_CentralSystem.Areas.Inventory.Models.ManufacturerModel", b =>
{
b.Property("ManufacturerId")
@@ -287,6 +381,54 @@ namespace PSTW_CentralSystem.Migrations
b.ToTable("Products");
});
+ modelBuilder.Entity("PSTW_CentralSystem.Areas.Inventory.Models.StationModel", b =>
+ {
+ b.Property("StationId")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int");
+
+ MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("StationId"));
+
+ b.Property("DepartmentId")
+ .HasColumnType("int");
+
+ b.Property("StationName")
+ .HasColumnType("longtext");
+
+ b.Property("StationPicID")
+ .HasColumnType("int");
+
+ b.HasKey("StationId");
+
+ b.HasIndex("DepartmentId");
+
+ b.HasIndex("StationPicID");
+
+ b.ToTable("Stations");
+ });
+
+ modelBuilder.Entity("PSTW_CentralSystem.Areas.Inventory.Models.StoreModel", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int");
+
+ MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id"));
+
+ b.Property("CompanyId")
+ .HasColumnType("int");
+
+ b.Property("StoreName")
+ .IsRequired()
+ .HasColumnType("longtext");
+
+ b.HasKey("Id");
+
+ b.HasIndex("CompanyId");
+
+ b.ToTable("Stores");
+ });
+
modelBuilder.Entity("PSTW_CentralSystem.Areas.Inventory.Models.SupplierModel", b =>
{
b.Property("SupplierId")
@@ -448,6 +590,13 @@ namespace PSTW_CentralSystem.Migrations
Description = "Can access data viewer pages",
Name = "Observer",
NormalizedName = "OBSERVER"
+ },
+ new
+ {
+ Id = 5,
+ Description = "Handle inventory module",
+ Name = "Inventory Master",
+ NormalizedName = "INVENTORY MASTER"
});
});
@@ -533,16 +682,16 @@ namespace PSTW_CentralSystem.Migrations
{
Id = 1,
AccessFailedCount = 0,
- ConcurrencyStamp = "7a7ee381-cecc-4268-9fc4-1f04eebfcb2c",
+ ConcurrencyStamp = "cedbd3af-4aa6-41cc-a71f-f85ac3a7c6ac",
Email = "admin@pstw.com.my",
EmailConfirmed = true,
FullName = "MAAdmin",
LockoutEnabled = false,
NormalizedEmail = "ADMIN@PSTW.COM.MY",
NormalizedUserName = "ADMIN@PSTW.COM.MY",
- PasswordHash = "AQAAAAIAAYagAAAAEKL4x2bfz8vXmcqMKqRsdQPdP9FVEhj4IR3FVvfFdeMdJb1Z7vekx6E3Qzycgpj3WA==",
+ PasswordHash = "AQAAAAIAAYagAAAAEEsEPaF/WtRT6js4zpE9wiOXZXn+Vq29o4nc8esBsMmSE3Sm5q636DZeu7ECQlQ0RA==",
PhoneNumberConfirmed = false,
- SecurityStamp = "5f7b5fe6-fb4d-4350-93aa-f3103c6e9a4d",
+ SecurityStamp = "a7be7fa2-a275-4646-a387-2d1d1042878d",
TwoFactorEnabled = false,
UserInfoStatus = 1,
UserName = "admin@pstw.com.my"
@@ -551,16 +700,16 @@ namespace PSTW_CentralSystem.Migrations
{
Id = 2,
AccessFailedCount = 0,
- ConcurrencyStamp = "fd4022cd-e08a-43c1-823c-573a86e86a9d",
+ ConcurrencyStamp = "948106ca-aeaa-49fa-87c9-018445595c12",
Email = "sysadmin@pstw.com.my",
EmailConfirmed = true,
FullName = "SysAdmin",
LockoutEnabled = false,
NormalizedEmail = "SYSADMIN@PSTW.COM.MY",
NormalizedUserName = "SYSADMIN@PSTW.COM.MY",
- PasswordHash = "AQAAAAIAAYagAAAAENI+MWqt+OwSLiTBhOC5LBV7nWb8hnfcGEnUOLpadTdCHa6rV0ukUo6Hd5nGRL5rTw==",
+ PasswordHash = "AQAAAAIAAYagAAAAEL/iXkcbIqa5+OnqaBOBuG2KiSvkxA2shZYl0XQVtmadQnaO2eARuKwyGQqlWu9NqQ==",
PhoneNumberConfirmed = false,
- SecurityStamp = "0b4291c9-d818-4485-bd96-adde7e14286d",
+ SecurityStamp = "04aeb405-81f6-4ca0-9ed8-ce10c2e5dd6e",
TwoFactorEnabled = false,
UserInfoStatus = 1,
UserName = "sysadmin@pstw.com.my"
@@ -618,6 +767,25 @@ namespace PSTW_CentralSystem.Migrations
.IsRequired();
});
+ modelBuilder.Entity("PSTW_CentralSystem.Areas.Inventory.Models.InventoryMasterModel", b =>
+ {
+ b.HasOne("PSTW_CentralSystem.Areas.Inventory.Models.StoreModel", "Store")
+ .WithMany()
+ .HasForeignKey("StoreId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.HasOne("PSTW_CentralSystem.Models.UserModel", "User")
+ .WithMany()
+ .HasForeignKey("UserId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Store");
+
+ b.Navigation("User");
+ });
+
modelBuilder.Entity("PSTW_CentralSystem.Areas.Inventory.Models.ItemModel", b =>
{
b.HasOne("PSTW_CentralSystem.Models.CompanyModel", "Company")
@@ -638,6 +806,10 @@ namespace PSTW_CentralSystem.Migrations
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
+ b.HasOne("PSTW_CentralSystem.Areas.Inventory.Models.ItemMovementModel", "Movement")
+ .WithOne("Item")
+ .HasForeignKey("PSTW_CentralSystem.Areas.Inventory.Models.ItemModel", "MovementId");
+
b.HasOne("PSTW_CentralSystem.Areas.Inventory.Models.ProductModel", "Product")
.WithMany("Items")
.HasForeignKey("ProductId")
@@ -650,9 +822,50 @@ namespace PSTW_CentralSystem.Migrations
b.Navigation("Department");
+ b.Navigation("Movement");
+
b.Navigation("Product");
});
+ modelBuilder.Entity("PSTW_CentralSystem.Areas.Inventory.Models.ItemMovementModel", b =>
+ {
+ b.HasOne("PSTW_CentralSystem.Areas.Inventory.Models.StationModel", "FromStation")
+ .WithMany()
+ .HasForeignKey("LastStation");
+
+ b.HasOne("PSTW_CentralSystem.Areas.Inventory.Models.StoreModel", "FromStore")
+ .WithMany()
+ .HasForeignKey("LastStore");
+
+ b.HasOne("PSTW_CentralSystem.Models.UserModel", "FromUser")
+ .WithMany()
+ .HasForeignKey("LastUser");
+
+ b.HasOne("PSTW_CentralSystem.Areas.Inventory.Models.StationModel", "NextStation")
+ .WithMany()
+ .HasForeignKey("ToStation");
+
+ b.HasOne("PSTW_CentralSystem.Areas.Inventory.Models.StoreModel", "NextStore")
+ .WithMany()
+ .HasForeignKey("ToStore");
+
+ b.HasOne("PSTW_CentralSystem.Models.UserModel", "NextUser")
+ .WithMany()
+ .HasForeignKey("ToUser");
+
+ b.Navigation("FromStation");
+
+ b.Navigation("FromStore");
+
+ b.Navigation("FromUser");
+
+ b.Navigation("NextStation");
+
+ b.Navigation("NextStore");
+
+ b.Navigation("NextUser");
+ });
+
modelBuilder.Entity("PSTW_CentralSystem.Areas.Inventory.Models.ProductModel", b =>
{
b.HasOne("PSTW_CentralSystem.Areas.Inventory.Models.ManufacturerModel", "Manufacturer")
@@ -664,6 +877,36 @@ namespace PSTW_CentralSystem.Migrations
b.Navigation("Manufacturer");
});
+ modelBuilder.Entity("PSTW_CentralSystem.Areas.Inventory.Models.StationModel", b =>
+ {
+ b.HasOne("PSTW_CentralSystem.Models.DepartmentModel", "Department")
+ .WithMany()
+ .HasForeignKey("DepartmentId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.HasOne("PSTW_CentralSystem.Models.UserModel", "StationPic")
+ .WithMany()
+ .HasForeignKey("StationPicID")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Department");
+
+ b.Navigation("StationPic");
+ });
+
+ modelBuilder.Entity("PSTW_CentralSystem.Areas.Inventory.Models.StoreModel", b =>
+ {
+ b.HasOne("PSTW_CentralSystem.Models.CompanyModel", "Company")
+ .WithMany()
+ .HasForeignKey("CompanyId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Company");
+ });
+
modelBuilder.Entity("PSTW_CentralSystem.Models.DepartmentModel", b =>
{
b.HasOne("PSTW_CentralSystem.Models.CompanyModel", "Company")
@@ -684,6 +927,11 @@ namespace PSTW_CentralSystem.Migrations
b.Navigation("Department");
});
+ modelBuilder.Entity("PSTW_CentralSystem.Areas.Inventory.Models.ItemMovementModel", b =>
+ {
+ b.Navigation("Item");
+ });
+
modelBuilder.Entity("PSTW_CentralSystem.Areas.Inventory.Models.ProductModel", b =>
{
b.Navigation("Items");
diff --git a/wwwroot/Media/Inventory/Images/Ts02Abc.jpg b/wwwroot/Media/Inventory/Images/Ts02Abc.jpg
new file mode 100644
index 0000000..12192bb
Binary files /dev/null and b/wwwroot/Media/Inventory/Images/Ts02Abc.jpg differ