diff --git a/Areas/Inventory/Models/RequestModel.cs b/Areas/Inventory/Models/RequestModel.cs index fdacce9..5de6fac 100644 --- a/Areas/Inventory/Models/RequestModel.cs +++ b/Areas/Inventory/Models/RequestModel.cs @@ -26,8 +26,12 @@ namespace PSTW_CentralSystem.Areas.Inventory.Models public DateTime? approvalDate { get; set; } public int? RequestQuantity { get; set; } public string? Document { get; set; } - public string? fromStoreItem { get; set; } - public string? assignStoreItem { get; set; } + public int? fromStoreItem { get; set; } + [ForeignKey("fromStoreItem")] + public virtual StoreModel? Store { get; set; } + public int? assignStoreItem { get; set; } + [ForeignKey("assignStoreItem")] + public virtual StoreModel? Stores { get; set; } } } diff --git a/Areas/Inventory/Views/InventoryMaster/ItemRequestMaster.cshtml b/Areas/Inventory/Views/InventoryMaster/ItemRequestMaster.cshtml index 8625b70..f70bd7d 100644 --- a/Areas/Inventory/Views/InventoryMaster/ItemRequestMaster.cshtml +++ b/Areas/Inventory/Views/InventoryMaster/ItemRequestMaster.cshtml @@ -74,7 +74,7 @@
-

Pending Request Master

+

Outgoing Requests to Other Stores

`; + return deleteButton; + }, + "className": "align-middle", + } ], responsive: true, drawCallback: function (settings) { } @@ -725,7 +731,8 @@ { "title": "Action", "data": "requestID", "render": renderActionButtons, "className": "align-middle" }, { "title": "Product", "data": "productName", "render": renderDocument }, { "title": "Requested by User", "data": "userName" }, - { "title": "Requested by Station", "data": "stationName" }, + { "title": "From Store", "data": "fromStoreItem" }, + { "title": "Assign Store", "data": "assignStoreItem" }, { "title": "Product Category", "data": "productCategory" }, { "title": "Request Quantity", "data": "requestQuantity" }, { "title": "Document/Picture", "data": "document", "render": renderDocument }, @@ -741,10 +748,10 @@ "data": this.items.filter(item => item.status != "Requested" && item.assignStoreItem != null && item.userId != this.currentUserId), "columns": [ { "title": "Request ID", "data": "requestID" }, - { "title": "Action", "data": "requestID", "render": renderActionButtons, "className": "align-middle" }, { "title": "Product", "data": "productName", "render": renderDocument }, { "title": "Requested by User", "data": "userName" }, - { "title": "Requested by Station", "data": "stationName" }, + { "title": "From Store", "data": "fromStoreItem" }, + { "title": "Assign Store", "data": "assignStoreItem" }, { "title": "Product Category", "data": "productCategory" }, { "title": "Request Quantity", "data": "requestQuantity" }, { "title": "Document/Picture", "data": "document", "render": renderDocument }, @@ -754,8 +761,8 @@ { "title": "Approval Date", "data": "approvalDate" } ], responsive: true - }); - + }); + // Attach event listeners $('#requestDatatable tbody').on('click', '.reject-btn', function () { const requestID = $(this).data('id'); @@ -767,50 +774,22 @@ self.approveRequestModal(requestID); }); - $('#requestDatatable tbody').on('click', '.print-btn', function () { - const $button = $(this); - const $row = $button.closest('tr'); - const itemId = $button.data('id'); - let imageSrc = $row.hasClass('child') ? $row.prev('tr').find('td:nth-child(1) img').attr('src') : $row.find('td:nth-child(1) img').attr('src'); - if (imageSrc) { - self.printItem(itemId, imageSrc); - } else { - console.error("Image source not found."); - } + // Attach event listeners + $('#requestOtherMasterDatatable tbody').on('click', '.reject-btn', function () { + const requestID = $(this).data('id'); + self.rejectRequestModal(requestID); }); - - $('#requestDatatable tbody').on('click', '.print-btn', function () { - const $button = $(this); // The clicked button - const $row = $button.closest('tr'); // The parent row of the button - const itemId = $button.data('id'); // Get the item ID from the button's data attribute - - let imageSrc; - - // Check if the table is collapsed - if ($row.hasClass('child')) { - // For collapsed view: Look for the closest `.dtr-data` that contains the img - imageSrc = $row.prev('tr').find('td:nth-child(1) img').attr('src'); - } else { - // For expanded view: Find the img in the first column of the current row - imageSrc = $row.find('td:nth-child(1) img').attr('src'); - } - - if (imageSrc) { - self.printItem(itemId, imageSrc); // Call the print function with the itemId and imageSrc - } else { - console.error("Image source not found."); - } + $('#requestOtherMasterDatatable tbody').on('click', '.approve-btn', function () { + const requestID = $(this).data('id'); + self.approveRequestModal(requestID); }); - $('#itemDatatable tbody').on('click', '.reject-btn', function () { - const $button = $(this); // The clicked button - const $row = $button.closest('tr'); // The parent row of the button - const itemId = $button.data('id'); // Get the item ID from the button's data attribute - - - self.printItem(itemId, imageSrc); // Call the print function with the itemId and imageSrc + $('#requestMasterDatatable tbody').off('click', '.delete-btn'); + $('#requestMasterDatatable tbody').on('click', '.delete-btn', function () { + const requestID = $(this).data('id'); + self.deleteRequestItem(requestID); }); this.loading = false; @@ -907,7 +886,10 @@ } const data = await response.json(); - this.stores = data.filter(stores => stores.id !== this.storeUser.storeId); + this.stores = data.filter(store => + !this.storeUser.some(userStore => userStore.id === store.id) + ); + } catch (error) { console.error('Error fetching suppliers:', error); @@ -1102,38 +1084,6 @@ $(`#approveModal`).modal('show'); - }, - async printItem(itemId, imgSrc) { - try { - this.thisQRInfo.uniqueID = itemId; - const uniqueQR = itemId; - const container = document.getElementById("QrContainer"); - - if (!container) { - console.error("Container not found."); - return; - } - - // Safely set image content - const sanitizedImgSrc = encodeURI(imgSrc); // Sanitize the URL - container.innerHTML = `QR Code`; - - // Fetch QR information - const qrInfo = this.getPrintedQR(uniqueQR); - if (!qrInfo) { - console.error("QR Info not found."); - return; - } - - this.thisQRInfo = qrInfo; - this.thisQRInfo.imgSrc = sanitizedImgSrc - this.thisQRInfo.imgContainer = container.innerHTML - $(`#QrItemModal`).modal('show'); // Show modal - } - catch (error) { - console.error("Error generating QR code:", error); - alert("An error occurred while generating the QR code."); - } }, async fetchUser() { try { @@ -1188,11 +1138,79 @@ }, resetForm() { + this.searchQuery = ""; + this.stationId = ""; + this.productId = ""; + this.remark = ""; + this.document = null; + this.quantity = 0; + this.status = ""; + this.requestDate = null; + this.approvalDate = null; + this.productCategory = ""; + this.fromStoreItem = "", + this.assignStoreItem = "", + + this.productName = null; + this.selectedProduct = ""; + this.selectedStation = ""; + this.selectedCategory = ""; + this.loading = false; this.rejectremark = ""; }, + async deleteRequestItem(requestID) { + if (!confirm("Are you sure you want to delete this request?")) { + return false; + } + try { + const response = await fetch(`/InvMainAPI/DeleteRequest/${requestID}`, { + method: 'DELETE', + headers: { + 'Content-Type': 'application/json', + }, + }); + const result = await response.json(); + + if (result.success) { + alert(result.message); + + if ($.fn.dataTable.isDataTable('#requestMasterDatatable')) { + const table = $('#requestMasterDatatable').DataTable(); + table.row($(`.delete-btn[data-id="${requestID}"]`).closest('tr')).remove().draw(); + } + + this.request = this.request.filter(req => req.requestID !== requestID); + } else { + alert(result.message); + } + } + catch (error) { + console.error("Error deleting item:", error); + alert("An error occurred while deleting the item."); + } + finally { + this.loading = false; + } + }, + handleSorting() { - this.fetchRequest(); + if (this.requestDatatable) { + this.requestDatatable.clear().destroy(); + } + if (this.settledrequestDatatable) { + this.settledrequestDatatable.clear().destroy(); + } + if (this.requestMasterDatatable) { + this.requestMasterDatatable.clear().destroy(); + } + if (this.requestOtherMasterDatatable) { + this.requestOtherMasterDatatable.clear().destroy(); + } + if (this.settledrequestMasterDatatable) { + this.settledrequestMasterDatatable.clear().destroy(); + } + this.initiateTable(); }, }, directives: { diff --git a/Controllers/API/Inventory/InvMainAPI.cs b/Controllers/API/Inventory/InvMainAPI.cs index 4822924..e374c86 100644 --- a/Controllers/API/Inventory/InvMainAPI.cs +++ b/Controllers/API/Inventory/InvMainAPI.cs @@ -1014,9 +1014,7 @@ namespace PSTW_CentralSystem.Controllers.API.Inventory _centralDbContext.Requests.Add(request); await _centralDbContext.SaveChangesAsync(); - var updatedList = await _centralDbContext.Requests - .Where(r => r.UserId == request.UserId) - .ToListAsync(); + var updatedList = await _centralDbContext.Requests.ToListAsync(); return Json(updatedList.Select(i => new { @@ -1049,6 +1047,7 @@ namespace PSTW_CentralSystem.Controllers.API.Inventory return Json(itemRequestList.Select(i => new { i.requestID, + i.UserId, productName = i.Product?.ProductName, i.ProductId, productImage = i.Product?.ImageProduct, diff --git a/Migrations/20250311003003_UpdateRequestTable2.Designer.cs b/Migrations/20250311003003_UpdateRequestTable2.Designer.cs new file mode 100644 index 0000000..324e377 --- /dev/null +++ b/Migrations/20250311003003_UpdateRequestTable2.Designer.cs @@ -0,0 +1,1075 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using PSTW_CentralSystem.DBContext; + +#nullable disable + +namespace PSTW_CentralSystem.Migrations +{ + [DbContext(typeof(CentralSystemContext))] + [Migration("20250311003003_UpdateRequestTable2")] + partial class UpdateRequestTable2 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "8.0.11") + .HasAnnotation("Relational:MaxIdentifierLength", 64); + + MySqlModelBuilderExtensions.AutoIncrementColumns(modelBuilder); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id")); + + b.Property("ClaimType") + .HasColumnType("longtext"); + + b.Property("ClaimValue") + .HasColumnType("longtext"); + + b.Property("RoleId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("RoleId"); + + b.ToTable("AspNetRoleClaims", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id")); + + b.Property("ClaimType") + .HasColumnType("longtext"); + + b.Property("ClaimValue") + .HasColumnType("longtext"); + + b.Property("UserId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("AspNetUserClaims", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => + { + b.Property("LoginProvider") + .HasColumnType("varchar(255)"); + + b.Property("ProviderKey") + .HasColumnType("varchar(255)"); + + b.Property("ProviderDisplayName") + .HasColumnType("longtext"); + + b.Property("UserId") + .HasColumnType("int"); + + b.HasKey("LoginProvider", "ProviderKey"); + + b.HasIndex("UserId"); + + b.ToTable("AspNetUserLogins", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => + { + b.Property("UserId") + .HasColumnType("int"); + + b.Property("RoleId") + .HasColumnType("int"); + + b.HasKey("UserId", "RoleId"); + + b.HasIndex("RoleId"); + + b.ToTable("AspNetUserRoles", (string)null); + + b.HasData( + new + { + UserId = 1, + RoleId = 1 + }, + new + { + UserId = 2, + RoleId = 2 + }); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => + { + b.Property("UserId") + .HasColumnType("int"); + + b.Property("LoginProvider") + .HasColumnType("varchar(255)"); + + b.Property("Name") + .HasColumnType("varchar(255)"); + + b.Property("Value") + .HasColumnType("longtext"); + + b.HasKey("UserId", "LoginProvider", "Name"); + + 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") + .IsUnique(); + + b.ToTable("InventoryMasters"); + }); + + modelBuilder.Entity("PSTW_CentralSystem.Areas.Inventory.Models.ItemModel", b => + { + b.Property("ItemID") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("ItemID")); + + b.Property("CompanyId") + .HasColumnType("int"); + + b.Property("ConvertPrice") + .HasColumnType("float"); + + b.Property("CreatedByUserId") + .HasColumnType("int"); + + b.Property("Currency") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("CurrencyRate") + .HasColumnType("float"); + + b.Property("DODate") + .HasColumnType("datetime(6)"); + + b.Property("DONo") + .HasColumnType("longtext"); + + b.Property("DefaultPrice") + .HasColumnType("float"); + + b.Property("DepartmentId") + .HasColumnType("int"); + + b.Property("EndWDate") + .HasColumnType("datetime(6)"); + + b.Property("InvoiceDate") + .HasColumnType("datetime(6)"); + + b.Property("InvoiceNo") + .HasColumnType("longtext"); + + b.Property("ItemStatus") + .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("PartNumber") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("ProductId") + .HasColumnType("int"); + + b.Property("PurchaseDate") + .HasColumnType("datetime(6)"); + + b.Property("Quantity") + .HasColumnType("int"); + + b.Property("SerialNumber") + .HasColumnType("longtext"); + + b.Property("Supplier") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("TeamType") + .HasColumnType("longtext"); + + b.Property("UniqueID") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("Warranty") + .HasColumnType("int"); + + b.HasKey("ItemID"); + + b.HasIndex("CompanyId"); + + b.HasIndex("CreatedByUserId"); + + b.HasIndex("DepartmentId"); + + b.HasIndex("MovementId"); + + 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("Register, 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.Property("receiveDate") + .HasColumnType("datetime(6)"); + + b.Property("sendDate") + .HasColumnType("datetime(6)"); + + b.HasKey("Id"); + + b.HasIndex("ItemId"); + + 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") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("ManufacturerId")); + + b.Property("ManufacturerName") + .IsRequired() + .HasColumnType("longtext"); + + b.HasKey("ManufacturerId"); + + b.ToTable("Manufacturers"); + }); + + modelBuilder.Entity("PSTW_CentralSystem.Areas.Inventory.Models.ProductModel", b => + { + b.Property("ProductId") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("ProductId")); + + b.Property("Category") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("ImageProduct") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("ManufacturerId") + .HasColumnType("int"); + + b.Property("ModelNo") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("ProductName") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("ProductShortName") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("QuantityProduct") + .HasColumnType("int"); + + b.HasKey("ProductId"); + + b.HasIndex("ManufacturerId"); + + b.ToTable("Products"); + }); + + modelBuilder.Entity("PSTW_CentralSystem.Areas.Inventory.Models.RequestModel", b => + { + b.Property("requestID") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("requestID")); + + b.Property("Document") + .HasColumnType("longtext"); + + b.Property("ProductCategory") + .HasColumnType("longtext"); + + b.Property("ProductId") + .HasColumnType("int"); + + b.Property("RequestQuantity") + .HasColumnType("int"); + + b.Property("StationId") + .HasColumnType("int"); + + b.Property("UserId") + .HasColumnType("int"); + + b.Property("approvalDate") + .HasColumnType("datetime(6)"); + + b.Property("assignStoreItem") + .HasColumnType("int"); + + b.Property("fromStoreItem") + .HasColumnType("int"); + + b.Property("remarkMasterInv") + .HasColumnType("longtext"); + + b.Property("remarkUser") + .HasColumnType("longtext"); + + b.Property("requestDate") + .HasColumnType("datetime(6)"); + + b.Property("status") + .HasColumnType("longtext"); + + b.HasKey("requestID"); + + b.HasIndex("ProductId"); + + b.HasIndex("StationId"); + + b.HasIndex("UserId"); + + b.HasIndex("assignStoreItem"); + + b.HasIndex("fromStoreItem"); + + b.ToTable("request"); + }); + + 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") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("SupplierId")); + + b.Property("SupplierAddress") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("SupplierCompName") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("SupplierEmail") + .HasColumnType("longtext"); + + b.Property("SupplierPIC") + .HasColumnType("longtext"); + + b.Property("SupplierPhoneNo") + .HasColumnType("longtext"); + + b.HasKey("SupplierId"); + + b.ToTable("Suppliers"); + }); + + modelBuilder.Entity("PSTW_CentralSystem.Models.CompanyModel", b => + { + b.Property("CompanyId") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("CompanyId")); + + b.Property("CompanyName") + .IsRequired() + .HasColumnType("longtext"); + + b.HasKey("CompanyId"); + + b.ToTable("Companies"); + }); + + modelBuilder.Entity("PSTW_CentralSystem.Models.DepartmentModel", b => + { + b.Property("DepartmentId") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("DepartmentId")); + + b.Property("CompanyId") + .HasColumnType("int"); + + b.Property("DepartmentCode") + .IsRequired() + .HasColumnType("longtext"); + + b.Property("DepartmentName") + .IsRequired() + .HasColumnType("longtext"); + + b.HasKey("DepartmentId"); + + b.HasIndex("CompanyId"); + + b.ToTable("Departments"); + }); + + modelBuilder.Entity("PSTW_CentralSystem.Models.ModuleSettingModel", b => + { + b.Property("SettingId") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("SettingId")); + + b.Property("AllowedUserType") + .HasColumnType("longtext"); + + b.Property("Description") + .HasColumnType("longtext"); + + b.Property("MethodAllowedUserType") + .HasColumnType("json"); + + b.Property("ModuleName") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("varchar(50)"); + + b.Property("ModuleStatus") + .HasColumnType("int"); + + b.HasKey("SettingId"); + + b.ToTable("ModuleSettings"); + }); + + modelBuilder.Entity("PSTW_CentralSystem.Models.RoleModel", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id")); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnType("longtext"); + + b.Property("Description") + .HasColumnType("longtext"); + + b.Property("Name") + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + + b.Property("NormalizedName") + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + + b.HasKey("Id"); + + b.HasIndex("NormalizedName") + .IsUnique() + .HasDatabaseName("RoleNameIndex"); + + b.ToTable("AspNetRoles", (string)null); + + b.HasData( + new + { + Id = 1, + Description = "Can access all pages", + Name = "SuperAdmin", + NormalizedName = "SUPERADMIN" + }, + new + { + Id = 2, + Description = "Can access some admin pages", + Name = "SystemAdmin", + NormalizedName = "SYSTEMADMIN" + }, + new + { + Id = 3, + Description = "Can access operation pages", + Name = "Engineer", + NormalizedName = "ENGINEER" + }, + new + { + Id = 4, + Description = "Can access data viewer pages", + Name = "Observer", + NormalizedName = "OBSERVER" + }, + new + { + Id = 5, + Description = "Handle inventory module", + Name = "Inventory Master", + NormalizedName = "INVENTORY MASTER" + }, + new + { + Id = 6, + Description = "Involve in inventory transaction", + Name = "Finance", + NormalizedName = "FINANCE" + }); + }); + + modelBuilder.Entity("PSTW_CentralSystem.Models.UserModel", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id")); + + b.Property("AccessFailedCount") + .HasColumnType("int"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnType("longtext"); + + b.Property("Email") + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + + b.Property("EmailConfirmed") + .HasColumnType("tinyint(1)"); + + b.Property("FullName") + .HasColumnType("longtext"); + + b.Property("LockoutEnabled") + .HasColumnType("tinyint(1)"); + + b.Property("LockoutEnd") + .HasColumnType("datetime(6)"); + + b.Property("NormalizedEmail") + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + + b.Property("NormalizedUserName") + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + + b.Property("PasswordHash") + .HasColumnType("longtext"); + + b.Property("PhoneNumber") + .HasColumnType("longtext"); + + b.Property("PhoneNumberConfirmed") + .HasColumnType("tinyint(1)"); + + b.Property("SecurityStamp") + .HasColumnType("longtext"); + + b.Property("TwoFactorEnabled") + .HasColumnType("tinyint(1)"); + + b.Property("UserInfoStatus") + .HasColumnType("int"); + + b.Property("UserName") + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + + b.Property("departmentId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("NormalizedEmail") + .HasDatabaseName("EmailIndex"); + + b.HasIndex("NormalizedUserName") + .IsUnique() + .HasDatabaseName("UserNameIndex"); + + b.HasIndex("departmentId"); + + b.ToTable("AspNetUsers", (string)null); + + b.HasData( + new + { + Id = 1, + AccessFailedCount = 0, + ConcurrencyStamp = "853a1cf1-3482-47c4-b4b0-7b6a3af6696c", + Email = "admin@pstw.com.my", + EmailConfirmed = true, + FullName = "MAAdmin", + LockoutEnabled = false, + NormalizedEmail = "ADMIN@PSTW.COM.MY", + NormalizedUserName = "ADMIN@PSTW.COM.MY", + PasswordHash = "AQAAAAIAAYagAAAAEBJPP1cHHZZyaGLaskNvSj8sOEizvDa1W2JgxMlYtK18+uhZWvW2RPlqBOhaKc0loQ==", + PhoneNumberConfirmed = false, + SecurityStamp = "c911b03d-918a-482f-9c9e-773dc64cdd5d", + TwoFactorEnabled = false, + UserInfoStatus = 1, + UserName = "admin@pstw.com.my" + }, + new + { + Id = 2, + AccessFailedCount = 0, + ConcurrencyStamp = "9ccd914d-6310-4d4e-88c0-e842892e1831", + Email = "sysadmin@pstw.com.my", + EmailConfirmed = true, + FullName = "SysAdmin", + LockoutEnabled = false, + NormalizedEmail = "SYSADMIN@PSTW.COM.MY", + NormalizedUserName = "SYSADMIN@PSTW.COM.MY", + PasswordHash = "AQAAAAIAAYagAAAAELxkKuB4hcfQ7Pqe/XCRgygejUsY7X9ByQuS/3FMl50OSzmz9s0byWxGYWQXbyBpGA==", + PhoneNumberConfirmed = false, + SecurityStamp = "5b9a67a3-8186-474b-9499-c9c40457fb54", + TwoFactorEnabled = false, + UserInfoStatus = 1, + UserName = "sysadmin@pstw.com.my" + }); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => + { + b.HasOne("PSTW_CentralSystem.Models.RoleModel", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => + { + b.HasOne("PSTW_CentralSystem.Models.UserModel", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => + { + b.HasOne("PSTW_CentralSystem.Models.UserModel", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => + { + b.HasOne("PSTW_CentralSystem.Models.RoleModel", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PSTW_CentralSystem.Models.UserModel", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => + { + b.HasOne("PSTW_CentralSystem.Models.UserModel", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .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") + .WithOne("Store") + .HasForeignKey("PSTW_CentralSystem.Areas.Inventory.Models.InventoryMasterModel", "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") + .WithMany() + .HasForeignKey("CompanyId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PSTW_CentralSystem.Models.UserModel", "CreatedBy") + .WithMany() + .HasForeignKey("CreatedByUserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PSTW_CentralSystem.Models.DepartmentModel", "Department") + .WithMany() + .HasForeignKey("DepartmentId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PSTW_CentralSystem.Areas.Inventory.Models.ItemMovementModel", "Movement") + .WithMany() + .HasForeignKey("MovementId"); + + b.HasOne("PSTW_CentralSystem.Areas.Inventory.Models.ProductModel", "Product") + .WithMany("Items") + .HasForeignKey("ProductId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Company"); + + b.Navigation("CreatedBy"); + + 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.ItemModel", "Item") + .WithMany() + .HasForeignKey("ItemId"); + + 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("Item"); + + 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") + .WithMany() + .HasForeignKey("ManufacturerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Manufacturer"); + }); + + modelBuilder.Entity("PSTW_CentralSystem.Areas.Inventory.Models.RequestModel", b => + { + b.HasOne("PSTW_CentralSystem.Areas.Inventory.Models.ProductModel", "Product") + .WithMany() + .HasForeignKey("ProductId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PSTW_CentralSystem.Areas.Inventory.Models.StationModel", "Station") + .WithMany() + .HasForeignKey("StationId"); + + b.HasOne("PSTW_CentralSystem.Models.UserModel", "User") + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("PSTW_CentralSystem.Areas.Inventory.Models.StoreModel", "Stores") + .WithMany() + .HasForeignKey("assignStoreItem"); + + b.HasOne("PSTW_CentralSystem.Areas.Inventory.Models.StoreModel", "Store") + .WithMany() + .HasForeignKey("fromStoreItem"); + + b.Navigation("Product"); + + b.Navigation("Station"); + + b.Navigation("Store"); + + b.Navigation("Stores"); + + b.Navigation("User"); + }); + + 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") + .WithMany("Departments") + .HasForeignKey("CompanyId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Company"); + }); + + modelBuilder.Entity("PSTW_CentralSystem.Models.UserModel", b => + { + b.HasOne("PSTW_CentralSystem.Models.DepartmentModel", "Department") + .WithMany() + .HasForeignKey("departmentId"); + + b.Navigation("Department"); + }); + + modelBuilder.Entity("PSTW_CentralSystem.Areas.Inventory.Models.ProductModel", b => + { + b.Navigation("Items"); + }); + + modelBuilder.Entity("PSTW_CentralSystem.Models.CompanyModel", b => + { + b.Navigation("Departments"); + }); + + modelBuilder.Entity("PSTW_CentralSystem.Models.UserModel", b => + { + b.Navigation("Store"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/Migrations/20250311003003_UpdateRequestTable2.cs b/Migrations/20250311003003_UpdateRequestTable2.cs new file mode 100644 index 0000000..c1742ce --- /dev/null +++ b/Migrations/20250311003003_UpdateRequestTable2.cs @@ -0,0 +1,126 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace PSTW_CentralSystem.Migrations +{ + /// + public partial class UpdateRequestTable2 : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AlterColumn( + name: "fromStoreItem", + table: "request", + type: "int", + nullable: true, + oldClrType: typeof(string), + oldType: "longtext", + oldNullable: true) + .OldAnnotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.AlterColumn( + name: "assignStoreItem", + table: "request", + type: "int", + nullable: true, + oldClrType: typeof(string), + oldType: "longtext", + oldNullable: true) + .OldAnnotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.UpdateData( + table: "AspNetUsers", + keyColumn: "Id", + keyValue: 1, + columns: new[] { "ConcurrencyStamp", "PasswordHash", "SecurityStamp" }, + values: new object[] { "853a1cf1-3482-47c4-b4b0-7b6a3af6696c", "AQAAAAIAAYagAAAAEBJPP1cHHZZyaGLaskNvSj8sOEizvDa1W2JgxMlYtK18+uhZWvW2RPlqBOhaKc0loQ==", "c911b03d-918a-482f-9c9e-773dc64cdd5d" }); + + migrationBuilder.UpdateData( + table: "AspNetUsers", + keyColumn: "Id", + keyValue: 2, + columns: new[] { "ConcurrencyStamp", "PasswordHash", "SecurityStamp" }, + values: new object[] { "9ccd914d-6310-4d4e-88c0-e842892e1831", "AQAAAAIAAYagAAAAELxkKuB4hcfQ7Pqe/XCRgygejUsY7X9ByQuS/3FMl50OSzmz9s0byWxGYWQXbyBpGA==", "5b9a67a3-8186-474b-9499-c9c40457fb54" }); + + migrationBuilder.CreateIndex( + name: "IX_request_assignStoreItem", + table: "request", + column: "assignStoreItem"); + + migrationBuilder.CreateIndex( + name: "IX_request_fromStoreItem", + table: "request", + column: "fromStoreItem"); + + migrationBuilder.AddForeignKey( + name: "FK_request_Stores_assignStoreItem", + table: "request", + column: "assignStoreItem", + principalTable: "Stores", + principalColumn: "Id"); + + migrationBuilder.AddForeignKey( + name: "FK_request_Stores_fromStoreItem", + table: "request", + column: "fromStoreItem", + principalTable: "Stores", + principalColumn: "Id"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropForeignKey( + name: "FK_request_Stores_assignStoreItem", + table: "request"); + + migrationBuilder.DropForeignKey( + name: "FK_request_Stores_fromStoreItem", + table: "request"); + + migrationBuilder.DropIndex( + name: "IX_request_assignStoreItem", + table: "request"); + + migrationBuilder.DropIndex( + name: "IX_request_fromStoreItem", + table: "request"); + + migrationBuilder.AlterColumn( + name: "fromStoreItem", + table: "request", + type: "longtext", + nullable: true, + oldClrType: typeof(int), + oldType: "int", + oldNullable: true) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.AlterColumn( + name: "assignStoreItem", + table: "request", + type: "longtext", + nullable: true, + oldClrType: typeof(int), + oldType: "int", + oldNullable: true) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.UpdateData( + table: "AspNetUsers", + keyColumn: "Id", + keyValue: 1, + columns: new[] { "ConcurrencyStamp", "PasswordHash", "SecurityStamp" }, + values: new object[] { "407727d8-2266-45f2-9b48-ef3a450f09c6", "AQAAAAIAAYagAAAAEDc91vi8/AJwNGigDpnzFh7Iplvlph0VGj9GfG1zI6tY/jM/4f3P0CWVQZ/0oetzVg==", "2faceaca-f491-455a-9f10-3f641a5a7e0d" }); + + migrationBuilder.UpdateData( + table: "AspNetUsers", + keyColumn: "Id", + keyValue: 2, + columns: new[] { "ConcurrencyStamp", "PasswordHash", "SecurityStamp" }, + values: new object[] { "8065f043-f8ed-4733-aa42-6ee6a1ebb636", "AQAAAAIAAYagAAAAEOmfi3vsFMnCUitXZqLgUaq5+Jqmigy8HrXwNqd8IELW2yvFQAMrfHLvJM5h0c+lfQ==", "46a8accc-305f-42e6-a4a2-376bfec07e84" }); + } + } +} diff --git a/Migrations/CentralSystemContextModelSnapshot.cs b/Migrations/CentralSystemContextModelSnapshot.cs index 3ed5b8e..3296b5c 100644 --- a/Migrations/CentralSystemContextModelSnapshot.cs +++ b/Migrations/CentralSystemContextModelSnapshot.cs @@ -422,11 +422,11 @@ namespace PSTW_CentralSystem.Migrations b.Property("approvalDate") .HasColumnType("datetime(6)"); - b.Property("assignStoreItem") - .HasColumnType("longtext"); + b.Property("assignStoreItem") + .HasColumnType("int"); - b.Property("fromStoreItem") - .HasColumnType("longtext"); + b.Property("fromStoreItem") + .HasColumnType("int"); b.Property("remarkMasterInv") .HasColumnType("longtext"); @@ -448,6 +448,10 @@ namespace PSTW_CentralSystem.Migrations b.HasIndex("UserId"); + b.HasIndex("assignStoreItem"); + + b.HasIndex("fromStoreItem"); + b.ToTable("request"); }); @@ -760,16 +764,16 @@ namespace PSTW_CentralSystem.Migrations { Id = 1, AccessFailedCount = 0, - ConcurrencyStamp = "407727d8-2266-45f2-9b48-ef3a450f09c6", + ConcurrencyStamp = "853a1cf1-3482-47c4-b4b0-7b6a3af6696c", Email = "admin@pstw.com.my", EmailConfirmed = true, FullName = "MAAdmin", LockoutEnabled = false, NormalizedEmail = "ADMIN@PSTW.COM.MY", NormalizedUserName = "ADMIN@PSTW.COM.MY", - PasswordHash = "AQAAAAIAAYagAAAAEDc91vi8/AJwNGigDpnzFh7Iplvlph0VGj9GfG1zI6tY/jM/4f3P0CWVQZ/0oetzVg==", + PasswordHash = "AQAAAAIAAYagAAAAEBJPP1cHHZZyaGLaskNvSj8sOEizvDa1W2JgxMlYtK18+uhZWvW2RPlqBOhaKc0loQ==", PhoneNumberConfirmed = false, - SecurityStamp = "2faceaca-f491-455a-9f10-3f641a5a7e0d", + SecurityStamp = "c911b03d-918a-482f-9c9e-773dc64cdd5d", TwoFactorEnabled = false, UserInfoStatus = 1, UserName = "admin@pstw.com.my" @@ -778,16 +782,16 @@ namespace PSTW_CentralSystem.Migrations { Id = 2, AccessFailedCount = 0, - ConcurrencyStamp = "8065f043-f8ed-4733-aa42-6ee6a1ebb636", + ConcurrencyStamp = "9ccd914d-6310-4d4e-88c0-e842892e1831", Email = "sysadmin@pstw.com.my", EmailConfirmed = true, FullName = "SysAdmin", LockoutEnabled = false, NormalizedEmail = "SYSADMIN@PSTW.COM.MY", NormalizedUserName = "SYSADMIN@PSTW.COM.MY", - PasswordHash = "AQAAAAIAAYagAAAAEOmfi3vsFMnCUitXZqLgUaq5+Jqmigy8HrXwNqd8IELW2yvFQAMrfHLvJM5h0c+lfQ==", + PasswordHash = "AQAAAAIAAYagAAAAELxkKuB4hcfQ7Pqe/XCRgygejUsY7X9ByQuS/3FMl50OSzmz9s0byWxGYWQXbyBpGA==", PhoneNumberConfirmed = false, - SecurityStamp = "46a8accc-305f-42e6-a4a2-376bfec07e84", + SecurityStamp = "5b9a67a3-8186-474b-9499-c9c40457fb54", TwoFactorEnabled = false, UserInfoStatus = 1, UserName = "sysadmin@pstw.com.my" @@ -979,10 +983,22 @@ namespace PSTW_CentralSystem.Migrations .OnDelete(DeleteBehavior.Cascade) .IsRequired(); + b.HasOne("PSTW_CentralSystem.Areas.Inventory.Models.StoreModel", "Stores") + .WithMany() + .HasForeignKey("assignStoreItem"); + + b.HasOne("PSTW_CentralSystem.Areas.Inventory.Models.StoreModel", "Store") + .WithMany() + .HasForeignKey("fromStoreItem"); + b.Navigation("Product"); b.Navigation("Station"); + b.Navigation("Store"); + + b.Navigation("Stores"); + b.Navigation("User"); });