diff --git a/CPRNIMS.Domain/UIContracts/Items/IItem.cs b/CPRNIMS.Domain/UIContracts/Items/IItem.cs index 06598dd..aaf1960 100644 --- a/CPRNIMS.Domain/UIContracts/Items/IItem.cs +++ b/CPRNIMS.Domain/UIContracts/Items/IItem.cs @@ -21,7 +21,7 @@ namespace CPRNIMS.Domain.UIContracts.Items Task> GetItemUOM(User user, ItemVM viewModel); Task> GetDepartment(User user, ItemVM viewModel); Task> GetItemCart(User user, ItemVM viewModel); - Task?> GetProjectCode(User user, ItemVM viewModels); + Task?> GetProjectCodeByTerm(User user, ItemVM viewModels); Task PostPurchRequest(User user, ItemVM viewModel); Task PostPutItem(User user, ItemVM viewModel); Task PutItemDetail(User user, ItemVM viewModel); diff --git a/CPRNIMS.Domain/UIServices/Items/Item.cs b/CPRNIMS.Domain/UIServices/Items/Item.cs index 9c2ff8a..2b004ef 100644 --- a/CPRNIMS.Domain/UIServices/Items/Item.cs +++ b/CPRNIMS.Domain/UIServices/Items/Item.cs @@ -129,10 +129,10 @@ namespace CPRNIMS.Domain.UIServices.Items } #endregion #region Get Method - public async Task> GetProjectCode(Infrastructure.Models.Account.User user, ItemVM viewModel) + public async Task> GetProjectCodeByTerm(Infrastructure.Models.Account.User user, ItemVM viewModel) { return await SendGetApiRequest(user, viewModel, - _configuration["LLI:NonInvent:ItemMgmt:GetProjectCode"]); + _configuration["LLI:NonInvent:ItemMgmt:GetProjectCodeByTerm"]); } public async Task> GetItemDetail(Infrastructure.Models.Account.User user, ItemVM viewModel) diff --git a/CPRNIMS.Infrastructure/ViewModel/Items/ItemVM.cs b/CPRNIMS.Infrastructure/ViewModel/Items/ItemVM.cs index cc9149b..0821c49 100644 --- a/CPRNIMS.Infrastructure/ViewModel/Items/ItemVM.cs +++ b/CPRNIMS.Infrastructure/ViewModel/Items/ItemVM.cs @@ -60,5 +60,6 @@ namespace CPRNIMS.Infrastructure.ViewModel.Items public long PRId { get; set; } public string? ProjectCode { get; set; } public string? OrigFileName { get; set; } + public string? ProjectName { get; set; } } } diff --git a/CPRNIMS.WebApi/Controllers/Items/ItemMgmtController.cs b/CPRNIMS.WebApi/Controllers/Items/ItemMgmtController.cs index ce7e2f8..f138e84 100644 --- a/CPRNIMS.WebApi/Controllers/Items/ItemMgmtController.cs +++ b/CPRNIMS.WebApi/Controllers/Items/ItemMgmtController.cs @@ -109,7 +109,7 @@ namespace CPRNIMS.WebApi.Controllers.Items PRId = dto.PRId }; await _item.PostPutAttachment(attachment); - // await SendNotificationEmail(dto); + await SendNotificationEmail(dto); } return dto; @@ -171,13 +171,20 @@ namespace CPRNIMS.WebApi.Controllers.Items }); } } + [HttpPost("GetProjectCodeByTerm")] + public async Task GetProjectCodeByTerm(ItemCodeDto itemDto) + { + return await ExecuteWithErrorHandling( + () => _item.GetProjectCodeByTerm(itemDto.FileName), + nameof(GetProjectCodeByTerm), false + ); + } [HttpPost("GetProjectCode")] public async Task GetProjectCode(ItemCodeDto itemDto) { - var results = await _item.GetProjectCodeByTerm(itemDto.FileName); - return Ok( new {message="success", messCode=1, data= results }); + var results = await _item.GetProjectCode(); + return Ok(new { message = "success", messCode = 1, data = results }); } - [HttpPost("GetDepartment")] public async Task GetDepartment(ItemCodeDto itemDto) { diff --git a/CPRNIMS.WebApps/Controllers/Items/ItemMgmtController.cs b/CPRNIMS.WebApps/Controllers/Items/ItemMgmtController.cs index 31a6b9c..b965084 100644 --- a/CPRNIMS.WebApps/Controllers/Items/ItemMgmtController.cs +++ b/CPRNIMS.WebApps/Controllers/Items/ItemMgmtController.cs @@ -4,8 +4,10 @@ using CPRNIMS.Domain.UIContracts.Account; using CPRNIMS.Domain.UIContracts.Items; using CPRNIMS.Domain.UIServices.Updater; using CPRNIMS.Infrastructure.Dto.Items; +using CPRNIMS.Infrastructure.Entities.Purchasing; using CPRNIMS.Infrastructure.Helper; using CPRNIMS.Infrastructure.ViewModel.Items; +using CPRNIMS.Infrastructure.ViewModel.PO; using CPRNIMS.WebApps.Controllers.Base; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.SignalR; @@ -197,7 +199,7 @@ namespace CPRNIMS.WebApps.Controllers.Items [FromForm] byte RequestTypeId, [FromForm] int ChargeTo, [FromForm] string? Remarks, - [FromForm] string? ProjectCode, + [FromForm] int ProjectCodeId, IFormFile? file) { try @@ -216,7 +218,7 @@ namespace CPRNIMS.WebApps.Controllers.Items RequestTypeId = RequestTypeId, ChargeTo = ChargeTo, Remarks = Remarks, - ProjectCode = ProjectCode, + ProjectCodeId = ProjectCodeId, ItemCartVM = new ItemCartVM { ItemCartId = itemCartList.Select(ic => ic.ItemCartId).ToList(), @@ -224,12 +226,19 @@ namespace CPRNIMS.WebApps.Controllers.Items ItemNo = itemCartList.Select(ic => ic.ItemNo).ToList() } }; + if(file?.FileName != null) + { + string? savedFileName = await SaveAttachmentAsync(file, null); - // Save attachment if provided - string? savedFileName = await SaveAttachmentAsync(file, null); + viewModel.FileName = savedFileName; + viewModel.OrigFileName = file.FileName ?? "N/A"; - viewModel.FileName = savedFileName; - viewModel.OrigFileName = file.FileName; + // Delete uploaded file if request failed + if (!string.IsNullOrWhiteSpace(savedFileName)) + { + await DeleteAttachmentAsync(savedFileName); + } + } var postPutItem = await _item.PostPurchRequest(GetUser(), viewModel); @@ -238,12 +247,6 @@ namespace CPRNIMS.WebApps.Controllers.Items return Json(new { success = true, message = "Purchase request created successfully" }); } - // Delete uploaded file if request failed - if (!string.IsNullOrWhiteSpace(savedFileName)) - { - await DeleteAttachmentAsync(savedFileName); - } - return Json(new { success = false, response = postPutItem.message }); } catch (Exception ex) @@ -255,12 +258,23 @@ namespace CPRNIMS.WebApps.Controllers.Items #endregion #region Get - public async Task GetProjectCode(string term) + public async Task GetProjectCodeByTerm(string query) { var item = new ItemVM(); - item.FileName = term; - response = await _item.GetProjectCode(GetUser(), item); - return GetResponse(response); + item.FileName = query; + var responseQuery = await _item.GetProjectCodeByTerm(GetUser(), item); + + if (responseQuery == null) + { + responseQuery = new List(); + } + var formattedData = responseQuery.Select(item => new + { + label = $"{item.ProjectCode} {item.ProjectName}", + value = item.ProjectCodeId, + }); + + return Json(new { success = true, data = formattedData }); } public async Task GetImageFileIds() { diff --git a/CPRNIMS.WebApps/Views/ItemMgmt/ItemCart.cshtml b/CPRNIMS.WebApps/Views/ItemMgmt/ItemCart.cshtml index d291a61..bb47ba5 100644 --- a/CPRNIMS.WebApps/Views/ItemMgmt/ItemCart.cshtml +++ b/CPRNIMS.WebApps/Views/ItemMgmt/ItemCart.cshtml @@ -69,14 +69,10 @@ - - + + -
Search and select the appropriate project code
diff --git a/CPRNIMS.WebApps/Views/PRMgmt/PRArchived.cshtml b/CPRNIMS.WebApps/Views/PRMgmt/PRArchived.cshtml index 8aae684..16e2b78 100644 --- a/CPRNIMS.WebApps/Views/PRMgmt/PRArchived.cshtml +++ b/CPRNIMS.WebApps/Views/PRMgmt/PRArchived.cshtml @@ -26,7 +26,7 @@ - + @await Html.PartialAsync("PagesView/PR/_PRTracking") @await Html.PartialAsync("PagesView/PR/_PRScripts") diff --git a/CPRNIMS.WebApps/Views/Shared/PagesView/Item/_Scripts.cshtml b/CPRNIMS.WebApps/Views/Shared/PagesView/Item/_Scripts.cshtml index 1073d4d..b8831d1 100644 --- a/CPRNIMS.WebApps/Views/Shared/PagesView/Item/_Scripts.cshtml +++ b/CPRNIMS.WebApps/Views/Shared/PagesView/Item/_Scripts.cshtml @@ -5,8 +5,8 @@ - - + + diff --git a/CPRNIMS.WebApps/Views/Shared/PagesView/PR/_PRScripts.cshtml b/CPRNIMS.WebApps/Views/Shared/PagesView/PR/_PRScripts.cshtml index 216f756..04e2a2b 100644 --- a/CPRNIMS.WebApps/Views/Shared/PagesView/PR/_PRScripts.cshtml +++ b/CPRNIMS.WebApps/Views/Shared/PagesView/PR/_PRScripts.cshtml @@ -4,7 +4,7 @@ - + diff --git a/CPRNIMS.WebApps/wwwroot/JsFunctions/Items/ItemViewV6.js b/CPRNIMS.WebApps/wwwroot/JsFunctions/Items/ItemViewV7.js similarity index 99% rename from CPRNIMS.WebApps/wwwroot/JsFunctions/Items/ItemViewV6.js rename to CPRNIMS.WebApps/wwwroot/JsFunctions/Items/ItemViewV7.js index 3cace45..c2a15dc 100644 --- a/CPRNIMS.WebApps/wwwroot/JsFunctions/Items/ItemViewV6.js +++ b/CPRNIMS.WebApps/wwwroot/JsFunctions/Items/ItemViewV7.js @@ -2,7 +2,7 @@ $("#projectCode").autocomplete({ source: function (request, response) { $.ajax({ - url:'/ItemMgmt/GetProjectCode', + url:'/ItemMgmt/GetProjectCodeByTerm', data: { query: request.term }, success: function (result) { if (result && result.success && Array.isArray(result.data)) { @@ -24,8 +24,8 @@ }, minLength: 2, select: function (event, ui) { - $('#projectCodeList').val(ui.item.label); - $('#supplierId').val(ui.item.value); + $('#projectCode').val(ui.item.label); + $('#projectCodeId').val(ui.item.value); return false; }, diff --git a/CPRNIMS.WebApps/wwwroot/JsFunctions/Items/PostPutItemV3.js b/CPRNIMS.WebApps/wwwroot/JsFunctions/Items/PostPutItemV4.js similarity index 98% rename from CPRNIMS.WebApps/wwwroot/JsFunctions/Items/PostPutItemV3.js rename to CPRNIMS.WebApps/wwwroot/JsFunctions/Items/PostPutItemV4.js index 9b3ed92..911952a 100644 --- a/CPRNIMS.WebApps/wwwroot/JsFunctions/Items/PostPutItemV3.js +++ b/CPRNIMS.WebApps/wwwroot/JsFunctions/Items/PostPutItemV4.js @@ -3,7 +3,7 @@ isValid = true; var Remarks = document.getElementById('requestorRemarks').value; - var ProjectCode = document.getElementById('projectCode').value; + var ProjectCodeId = document.getElementById('projectCodeId').value; const selectedItems = Object.values(selectedProductsMap); if (selectedItems.length === 0) { @@ -36,7 +36,7 @@ return; } } - + console.log('ProjectCodeId', ProjectCodeId); showConfirmation({ title: 'Purchasing Requisition', message: 'Are you sure you want to proceed? This action cannot be undone.', @@ -59,7 +59,7 @@ formData.append('RequestTypeId', RequestTypeId); formData.append('ChargeTo', ChargeTo || ''); formData.append('Remarks', Remarks || ''); - formData.append('ProjectCode', ProjectCode || ''); + formData.append('ProjectCodeId', ProjectCodeId || 0); // Append array data - serialize as JSON formData.append('ItemCartIds', JSON.stringify(requestData)); diff --git a/CPRNIMS.WebApps/wwwroot/JsFunctions/PR/PRViewV5.js b/CPRNIMS.WebApps/wwwroot/JsFunctions/PR/PRViewV6.js similarity index 94% rename from CPRNIMS.WebApps/wwwroot/JsFunctions/PR/PRViewV5.js rename to CPRNIMS.WebApps/wwwroot/JsFunctions/PR/PRViewV6.js index 9bd4424..b534b5a 100644 --- a/CPRNIMS.WebApps/wwwroot/JsFunctions/PR/PRViewV5.js +++ b/CPRNIMS.WebApps/wwwroot/JsFunctions/PR/PRViewV6.js @@ -711,19 +711,10 @@ function viewPRDetails(data) { tableDestroy(tableElement); var PRNo = data.prNo; - document.getElementById('label-pr-prNo').innerHTML = data.prNo; - document.getElementById('label-prby').innerHTML = data.createdBy; - document.getElementById('label-pr-Department').innerHTML = data.department; - document.getElementById('label-pr-remarks').innerHTML = data.remarks; - document.getElementById('label-pr-attestedBy').innerHTML = data.attestedBy; - document.getElementById('label-pr-approvedBy').innerHTML = data.approvedBy; - document.getElementById('label-pr-ProjectCode').innerHTML = data.projectCode; - $('#prId').val(data.prId); - console.log('data.prId', data.prId); - - document.getElementById('label-pr-dateNeeded').innerHTML = formatDate(data.dateNeeded); + // Populate PR header details + populatePRHeader(data); prDataTable = tableElement.DataTable({ ajax: $.extend({ @@ -736,27 +727,20 @@ function viewPRDetails(data) { emptyTable: "No record available" }, initComplete: function () { - var api = this.api(); - var response = api.ajax.json(); + const api = this.api(); + const response = api.ajax.json() || {}; + const rows = response.data || []; - // 1. Find the first row that actually has a fileName - const rowWithFile = response?.data?.find( - row => row.fileName && row.fileName.trim() !== '' - ); + const rowWithFile = rows.find(r => r.fileName?.trim()); + const rowWithProjectCode = rows.find(r => r.projectCode?.trim()); - // 2. If a file exists, update the hidden inputs and show the button - if (rowWithFile) { - $('#fileName').val(rowWithFile.fileName); - $('#origFileName').val(rowWithFile.origFileName || ''); // Use empty string if null - $('#btnDownloadAttachment').removeClass('d-none'); - } else { - // Clear values and hide button if no attachment is found - $('#fileName').val(''); - $('#origFileName').val(''); - $('#btnDownloadAttachment').addClass('d-none'); + if (rowWithProjectCode) { + document.getElementById('label-pr-ProjectCode').innerHTML = + rowWithProjectCode.projectCode; } - // Keep your selection initialization + toggleAttachment(rowWithFile); + initializeTableSelection({ tableName: tableName, dataTable: prDataTable, @@ -778,6 +762,30 @@ function viewPRDetails(data) { error: errorHandler }); } +function populatePRHeader(data) { + const set = (id, value) => + document.getElementById(id).innerHTML = value ?? ''; + + set('label-pr-prNo', data.prNo); + set('label-prby', data.createdBy); + set('label-pr-Department', data.department); + set('label-pr-remarks', data.remarks); + set('label-pr-attestedBy', data.attestedBy); + set('label-pr-approvedBy', data.approvedBy); + set('label-pr-dateNeeded', formatDate(data.dateNeeded)); +} +function toggleAttachment(rowWithFile) { + if (rowWithFile) { + $('#fileName').val(rowWithFile.fileName); + $('#origFileName').val(rowWithFile.origFileName || ''); + $('#btnDownloadAttachment').removeClass('d-none'); + } else { + $('#fileName').val(''); + $('#origFileName').val(''); + $('#btnDownloadAttachment').addClass('d-none'); + } +} + function downloadPRAttachment() { let fileName = $('#fileName').val();