From 79fb9649d75b8a3d9b2201bf0150445df19483a2 Mon Sep 17 00:00:00 2001 From: ameerulrasyid Date: Wed, 26 Feb 2025 11:54:07 +0800 Subject: [PATCH] update qrmaster and itemmovement table --- .../Views/InventoryMaster/ItemMovement.cshtml | 25 +++++ .../InventoryMaster/ItemRequestMaster.cshtml | 27 ----- .../Views/InventoryMaster/QrMaster.cshtml | 77 ++++---------- Controllers/API/Inventory/InvMainAPI.cs | 97 +++++++----------- ...3-0567-4419-b39f-d9b9640382878_Request.jpg | Bin 0 -> 18882 bytes 5 files changed, 80 insertions(+), 146 deletions(-) create mode 100644 wwwroot/Media/Inventory/itemmovement/8_26f467f3-0567-4419-b39f-d9b9640382878_Request.jpg diff --git a/Areas/Inventory/Views/InventoryMaster/ItemMovement.cshtml b/Areas/Inventory/Views/InventoryMaster/ItemMovement.cshtml index 77e7f63..29686f4 100644 --- a/Areas/Inventory/Views/InventoryMaster/ItemMovement.cshtml +++ b/Areas/Inventory/Views/InventoryMaster/ItemMovement.cshtml @@ -342,6 +342,31 @@ { "title": "Note", "data": "item.consignmentNote", + "render": function (data, type, full, meta) { + if (!data) { + return "No Document"; + } + + // Check if the document is an image based on file extension + var isImage = /\.(jpeg|jpg|png|gif)$/i.test(data); + var isPdf = /\.pdf$/i.test(data); + + if (isImage) { + return ` + Image + `; + } else if (isPdf) { + return ` + PDF Document +
View PDF +
`; + } else { + return `Download File`; + } + }, + }, { "title": "Send Date", diff --git a/Areas/Inventory/Views/InventoryMaster/ItemRequestMaster.cshtml b/Areas/Inventory/Views/InventoryMaster/ItemRequestMaster.cshtml index e9a53eb..1858b90 100644 --- a/Areas/Inventory/Views/InventoryMaster/ItemRequestMaster.cshtml +++ b/Areas/Inventory/Views/InventoryMaster/ItemRequestMaster.cshtml @@ -201,8 +201,6 @@ this.fetchRequest(); - // Reset the form - this.resetForm(); } else { throw new Error('Failed to submit form.'); } @@ -625,31 +623,6 @@ // Your currency conversion logic here console.log('Selected currency:', this.currency); }, - resetForm() { - // this.company = ''; - // this.Dept = null; - // this.productName = null; - // this.imageProduct = null; - // this.serialNumber = ''; - // this.quantity = 1; - // this.supplierName = null; - // this.purchaseDate = null; - // this.PO = null; - // this.currency = 'MYR'; - // this.DefaultPrice = 0.01; - // this.currencyRate = 1; - // this.convertPrice = 0.01; - // this.DODate = null; - // this.warranty = 0; - // this.EndWDate = null; - // this.invoiceDate = null; - // this.selectedProduct = ''; - // this.selectedSupplier = ''; - // this.selectedCompany = this.currentUserCompanyDept.companyId; - // this.selectedDepartment = ''; - // this.selectedTeamType = ''; - // this.partNumber = null; - }, // FRONT END FUNCTIONS //----------------------// diff --git a/Areas/Inventory/Views/InventoryMaster/QrMaster.cshtml b/Areas/Inventory/Views/InventoryMaster/QrMaster.cshtml index 3914b15..f43def4 100644 --- a/Areas/Inventory/Views/InventoryMaster/QrMaster.cshtml +++ b/Areas/Inventory/Views/InventoryMaster/QrMaster.cshtml @@ -351,19 +351,19 @@ selectedOther: "", remark: "", document: null, - companies: [ - { - companyId: 1, - companyName: "PSTW", - departments: [{ departmentId: 1, departmentName: "Air" }, { departmentId: 2, departmentName: "Marine" }, { departmentId: 3, departmentName: "River" }] - }, - { - companyId: 2, - companyName: "TES", - departments: [{ departmentId: 1, departmentName: "Air" }], - }, - ], - company: "", + // companies: [ + // { + // companyId: 1, + // companyName: "PSTW", + // departments: [{ departmentId: 1, departmentName: "Air" }, { departmentId: 2, departmentName: "Marine" }, { departmentId: 3, departmentName: "River" }] + // }, + // { + // companyId: 2, + // companyName: "TES", + // departments: [{ departmentId: 1, departmentName: "Air" }], + // }, + // ], + // company: "", currentUser: null, currentUserCompanyDept: null, } @@ -419,37 +419,20 @@ const now = new Date(); const formData = { - ...(this.selectedAction === 'user' ? { toUser: this.currentUser.id, toOther: 'On Delivery', SendDate: this.assigndate, lastUser: this.selectedUser, } : {}), - ...(this.selectedAction === 'store' ? { toUser: this.currentUser.id, toOther: 'On Delivery', SendDate: this.assigndate, lastUser: this.selectedStore} : {}), - ...(this.selectedAction === 'supplier' ? { toUser: this.currentUser.id, toOther: this.selectedOther, SendDate: this.assigndate, Remark: this.remark + '. Item sent to ' + this.selectedSupplier + ' for ' + this.selectedOther,lastUser: this.currentUser.id, } : {}), - ...(this.selectedAction === 'faulty' ? { toUser: this.currentUser.id,toOther: 'Faulty', Date: new Date(now.getTime() + 8 * 60 * 60 * 1000).toISOString(), Remark: this.remark, ConsignmentNote: this.document } : {}), + ...(this.selectedAction === 'user' ? { toUser: this.currentUser.id, toOther: 'On Delivery', SendDate: this.assigndate, lastUser: this.selectedUser, MovementComplete: false, } : {}), + ...(this.selectedAction === 'store' ? { toUser: this.currentUser.id, toOther: 'On Delivery', SendDate: this.assigndate, lastUser: this.selectedStore, MovementComplete: false,} : {}), + ...(this.selectedAction === 'supplier' ? { toUser: this.currentUser.id, toOther: this.selectedOther, SendDate: this.assigndate, Remark: this.remark + '. Item sent to ' + this.selectedSupplier + ' for ' + this.selectedOther,lastUser: this.currentUser.id, MovementComplete: false, } : {}), + ...(this.selectedAction === 'faulty' ? { toUser: this.currentUser.id,toOther: 'Faulty', Date: new Date(now.getTime() + 8 * 60 * 60 * 1000).toISOString(), Remark: this.remark, ConsignmentNote: this.document, MovementComplete: true, } : {}), ItemId: this.thisItem.itemID, Action: 'Stock Out', Quantity: 1, - MovementComplete: false, }; try { - // Additional specific checks - // if (this.showSerialNumber) { - // this.quantity = 0; - // if (this.serialNumber === null || this.serialNumber === '') { - // alert('Serial Number Error', 'Serial Number must be filled when selecting Item or Part.', 'warning'); - // return; - // } - // } - // else { - // this.serialNumber = null; - // if (this.quantity === 0 || this.quantity === null || this.quantity === '') { - // alert('quantity Error', 'Quantity is required when selecting Disposable.', 'warning'); - // return; - // } - // } - // Proceed to send the data to the API const response = await fetch('/InvMainAPI/AddItemMovement', { method: 'POST', @@ -462,8 +445,9 @@ if (response.ok) { // If the form submission was successful, display a success message alert('Success!', 'Item form has been successfully submitted.', 'success'); - const updatedItem = await response.json(); + // const updatedItem = await response.json(); // this.items.push(updatedItem); + // console.log(updatedItem); // Reset the form this.resetForm(); @@ -552,6 +536,7 @@ resetForm() { this.selectedUser = ""; this.selectedStore = ""; + this.selectedSupplier = ""; this.remark = ""; this.assigndate = ""; this.selectedStore = ""; @@ -585,28 +570,6 @@ console.error('There was a problem with the fetch operation:', error); } }, - async fetchStoreId() { - try { - const response = await fetch(`/IdentityAPI/GetUserInformation/`, { - method: 'POST', - }); - if (response.ok) { - const data = await response.json(); - this.currentUser = data?.userInfo || null; - const companyDeptData = await this.currentUser.department; - this.currentUserCompanyDept = companyDeptData; - this.selectedCompany = companyDeptData?.companyId || ""; - this.selectedDepartment = companyDeptData?.departmentId || ""; - - } - else { - console.error(`Failed to fetch user: ${response.statusText}`); - } - } - catch (error) { - console.error('There was a problem with the fetch operation:', error); - } - }, async fetchUsers() { try { // const token = localStorage.getItem('token'); // Get the token from localStorage diff --git a/Controllers/API/Inventory/InvMainAPI.cs b/Controllers/API/Inventory/InvMainAPI.cs index d12c803..6078e77 100644 --- a/Controllers/API/Inventory/InvMainAPI.cs +++ b/Controllers/API/Inventory/InvMainAPI.cs @@ -663,8 +663,6 @@ namespace PSTW_CentralSystem.Controllers.API.Inventory public async Task AddItemMovement([FromBody] ItemMovementModel itemmovement) { - - if (!ModelState.IsValid) { return BadRequest(ModelState); @@ -672,6 +670,18 @@ namespace PSTW_CentralSystem.Controllers.API.Inventory try { + if (itemmovement.ToUser == null) + { + throw new Exception("itemmovement.ToUser is null"); + } + + //var inventoryMaster = await _centralDbContext.InventoryMasters.Include("User").FirstOrDefaultAsync(i => i.UserId == itemmovement.ToUser) ?? new InventoryMasterModel { UserId = itemmovement.ToUser }; + var inventoryMaster = await _centralDbContext.InventoryMasters.FirstOrDefaultAsync(i => i.UserId == itemmovement.ToUser); + if (inventoryMaster != null) + { + itemmovement.ToStore = inventoryMaster.StoreId; + } + if (!string.IsNullOrEmpty(itemmovement.ConsignmentNote)) { @@ -702,70 +712,33 @@ namespace PSTW_CentralSystem.Controllers.API.Inventory await _centralDbContext.SaveChangesAsync(); // This generates the auto-incremented ItemID + var updateItem = await _centralDbContext.Items.FindAsync(itemmovement.ItemId); //only access after it have its own itemmovent - //ItemMovementModel itemMovement = new ItemMovementModel - //{ - // ItemId = item.ItemID, - // ToUser = inventoryMaster.UserId, - // ToStore = inventoryMaster.StoreId, - // LastStore = inventoryMaster.StoreId, - // LastUser = inventoryMaster.UserId, - // LatestStatus = "Ready To Deploy", - // Quantity = item.Quantity, - // Action = "Register", - // Date = DateTime.Now, - // MovementComplete = true, - //}; + if (updateItem != null) + { + if (itemmovement.ToOther == "On Delivery") + { + updateItem.ItemStatus = 2; + } + else if (itemmovement.ToOther == "Repair" || itemmovement.ToOther == "Calibration") + { + updateItem.ItemStatus = 4; + } + else if (itemmovement.ToOther == "Faulty") + { + updateItem.ItemStatus = 8; + } - //_centralDbContext.ItemMovements.Add(itemMovement); - //await _centralDbContext.SaveChangesAsync(); + Console.WriteLine("updateItem.MovementId" + updateItem.MovementId); + Console.WriteLine("itemmovement.Id" + itemmovement.Id); + + updateItem.MovementId = itemmovement.Id; + _centralDbContext.Items.Update(updateItem); + + } - // 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); + await _centralDbContext.SaveChangesAsync(); // save changes for table item - movementid - //if (savedItem != null) - //{ - // var companyDepartment = await GetDepartmentWithCompany(item.CompanyId, item.DepartmentId); - // var itemProduct = _centralDbContext.Products.Where(p => p.ProductId == item.ProductId).FirstOrDefault(); - - // string? companyInitial = companyDepartment!.CompanyName?.ToString().Substring(0, 1).ToUpper(); - // string? departmentInitial = companyDepartment!.DepartmentName?.ToString().Substring(0, 1).ToUpper(); - // string? deptCode = companyDepartment!.DepartmentCode?.ToString(); - // char? initialCategory = itemProduct!.Category.ToString().Substring(0, 1).ToUpper().FirstOrDefault(); - // string? productId = itemProduct!.ProductId.ToString("D3"); - // 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, - // savedItem.UniqueID, - // savedItem.CompanyId, - // savedItem.DepartmentId, - // savedItem.ProductId, - // savedItem.SerialNumber, - // savedItem.Quantity, - // savedItem.Supplier, - // savedItem.PurchaseDate, - // savedItem.PONo, - // savedItem.Currency, - // savedItem.DefaultPrice, - // savedItem.CurrencyRate, - // savedItem.ConvertPrice, - // savedItem.DODate, - // savedItem.Warranty, - // savedItem.EndWDate, - // savedItem.InvoiceDate, - // savedItem.PartNumber, - //}; return Json(itemmovement); } catch (Exception ex) diff --git a/wwwroot/Media/Inventory/itemmovement/8_26f467f3-0567-4419-b39f-d9b9640382878_Request.jpg b/wwwroot/Media/Inventory/itemmovement/8_26f467f3-0567-4419-b39f-d9b9640382878_Request.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b4c89420085ad96e5988e2a8a78e500a99d17e21 GIT binary patch literal 18882 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≪wrX5p4C_zOH>@~mvNFO`{du*^cyh;EDp zO~|8Bl~_t6;p)CK`yMx7M5qhtdu6zyW6Wvg_d-4S=#osMQnPY0!SA9t&I?%heMxa<=>Tt^mKRo#JRIX!v(v6DDtCoeGd2fH?D8y z$$5Idzr+N?kBh&?fPY#%*p&#zuOE`&Y{c>Y-o^Jo+NQc?Uork%18YzAMz0fwHOcA% z69qDS(PMM>R_JKYEsDM**VU#v9*Ybs89UidSL_zF|IR9mX zM6}RWiN#?WkOmQ~y3*K{I{2=>$9gy8|5~R+>%WwZPHy>}$U_kY#hbo>QPRy{hm}(u zW(b21?z&RA2b8&@ATR$8a@s!+mueW3b?^85O_w|)f5qa_3w2|hlFqw@Dah>*T)4%g zl29PsNssnqf$#pB4=vV#B=z4pHvCVFNZbB#BMFPfS8 z`T2k0nMeP;jZJomt>0%lXvNq0(`d!rqi!R}Ob0n&W34+X!`LL6qZ!KJbb#p+h#ajq zh?;%-Vr>)5#tPlB+xb7|_sPH1j8E*>;thaK*3K*C$n}=!$C9WQ={2#gg?T{;y>nNZ z`qC|D02-l1N+-gFV`s@G!Q#dXz6X4mgbwAAV$LgO*;v1_0)&1VA|7qsSTvAlrk3?p z=c#;Ca59T*K*%i#}RV>1Fi6!nw z*tBo1p&Q&FrglnYE8Ja1WQi$0#vFb6BS7t*JcWnn_-oHURzjlkwdav4*4YT4#M0oW zrI)YeUe#`V2(QGsd-~tB7>*)iB@A?vrKJG{s@P>|W~$2C?l*}YZ>RigMvwg| zI#~ZZCdmJbN8zfGkr9ZVI{o$aGFQGz{uK&lGf9VdOCw&7fBfilJJQBwT1b&4eYSZ| z+s()=EwPt9bRaqQq!0rOZD3#kA(4rlx7oU6`v(U9>tmCh&`MLbeblo}UK7U#rN(ae zRSM$x`H7EzR`x%x-ha;o-gy{+CkP~&l#aLpD^<`193;m0s&6VV-&nLpra{>j_<6Bn zL#dk*0`TiF zb`}M`Ul_>A(Cq)?-0IYU_RI~W9OK$E8bjav`ubpS_M~IrpC^FHwU23c5qv<)wgV|` zUJ7P=Xdd>Vv0%!i$ic#JU?w~qbe%`@nK|HRqvwQC$#XaMU}FJ_djb z%r-FII^d<|=!Qn{?wfN;Q9O6{D0m)yhc4mI^bKHpl#|m~xl2ArH%w1xY4rh{-(m~M z*_`*uW#DD3y3_m%0K%2PyMf6JYTz|(aNnJZ>_Pw?Xf~)#CPa^0i?(aat#2Cc*pFe<1}RWLR~=m^X&3?sV2*is~? z9&?L)NGQ%eO?hZDSTF|<)71ffdgyNQOzO`)0n2B4>mf{0c^)4+xeUWRghFyq-^xe>Gl`BMl7I(uKuhO>(cb z=$AgjM7co=0~3)=(m-CT#N7@SMos_x`AA2WPrsiJ=xwrdZ#LNiZ~mD-Fw=n%J=2%) ziJH&FiMt5_T&Li-2rE03R)u3QTfj~C!!S;ZD@Q~kd9cX4~#3)+i=|Uf+Ta-7z;6Z06FZ6!0IzR$`xN@`k zUR?mq(6_QLRv-+()Vv)Bp56uA-86v(uve77i-z%QIBB7b2$OoE4@{-AC_-wd2L>x`v zc}Zs)_?MNV3$Yv^kwimJjow@80tt*&HR)?d2L+#H`vFAQ*ISks4RP;I3Ww2vVL-D$ zb;HUvM5@%vPl~v#r>w~ktbrLgT{+$rrwG7)@>?i^!j|d)_ih*leF0+&X9`@&x6GP? zKqv^fE-tcYe-~$?1;wXf6G+_OlbB0$mOHDzl4bp2xlym4-pgq010FyV6OO=&+2LWt$gZl`Vak@4f--y zKBvXe{fA>lTL-y@SXys0Q56*xTG~XIa-4=q06I(1O5PcZEayhqg0BEsO~(;}Em>A{E)n(n{I( z@Pd#|vHP8_6fQJd7?+;gw>`$z0qOq_tZIV9%1Vgp)bKlpDsO||!SWxpnda~8?ZIqV zQw=8QsGK(SrChgT}gcL>@9dvFUA9-D)6K(tlHvAu%v(mOR>hGWXS0~bB@&5)FbZANgv u*XG~$N&b(2RS{i+>gOAOcm literal 0 HcmV?d00001