approval and project code maintenance is working properly
This commit is contained in:
parent
6e0551707e
commit
9419130ee3
@ -21,7 +21,7 @@ namespace CPRNIMS.Domain.UIContracts.Items
|
|||||||
Task<List<ItemVM>> GetItemUOM(User user, ItemVM viewModel);
|
Task<List<ItemVM>> GetItemUOM(User user, ItemVM viewModel);
|
||||||
Task<List<ItemVM>> GetDepartment(User user, ItemVM viewModel);
|
Task<List<ItemVM>> GetDepartment(User user, ItemVM viewModel);
|
||||||
Task<List<ItemVM>> GetItemCart(User user, ItemVM viewModel);
|
Task<List<ItemVM>> GetItemCart(User user, ItemVM viewModel);
|
||||||
Task<List<ItemVM>?> GetProjectCode(User user, ItemVM viewModels);
|
Task<List<ItemVM>?> GetProjectCodeByTerm(User user, ItemVM viewModels);
|
||||||
Task<ItemVM> PostPurchRequest(User user, ItemVM viewModel);
|
Task<ItemVM> PostPurchRequest(User user, ItemVM viewModel);
|
||||||
Task<ItemVM> PostPutItem(User user, ItemVM viewModel);
|
Task<ItemVM> PostPutItem(User user, ItemVM viewModel);
|
||||||
Task<ItemVM> PutItemDetail(User user, ItemVM viewModel);
|
Task<ItemVM> PutItemDetail(User user, ItemVM viewModel);
|
||||||
|
|||||||
@ -129,10 +129,10 @@ namespace CPRNIMS.Domain.UIServices.Items
|
|||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
#region Get Method
|
#region Get Method
|
||||||
public async Task<List<ItemVM>> GetProjectCode(Infrastructure.Models.Account.User user, ItemVM viewModel)
|
public async Task<List<ItemVM>> GetProjectCodeByTerm(Infrastructure.Models.Account.User user, ItemVM viewModel)
|
||||||
{
|
{
|
||||||
return await SendGetApiRequest(user, viewModel,
|
return await SendGetApiRequest(user, viewModel,
|
||||||
_configuration["LLI:NonInvent:ItemMgmt:GetProjectCode"]);
|
_configuration["LLI:NonInvent:ItemMgmt:GetProjectCodeByTerm"]);
|
||||||
}
|
}
|
||||||
public async Task<List<ItemVM>> GetItemDetail(Infrastructure.Models.Account.User user,
|
public async Task<List<ItemVM>> GetItemDetail(Infrastructure.Models.Account.User user,
|
||||||
ItemVM viewModel)
|
ItemVM viewModel)
|
||||||
|
|||||||
@ -60,5 +60,6 @@ namespace CPRNIMS.Infrastructure.ViewModel.Items
|
|||||||
public long PRId { get; set; }
|
public long PRId { get; set; }
|
||||||
public string? ProjectCode { get; set; }
|
public string? ProjectCode { get; set; }
|
||||||
public string? OrigFileName { get; set; }
|
public string? OrigFileName { get; set; }
|
||||||
|
public string? ProjectName { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -109,7 +109,7 @@ namespace CPRNIMS.WebApi.Controllers.Items
|
|||||||
PRId = dto.PRId
|
PRId = dto.PRId
|
||||||
};
|
};
|
||||||
await _item.PostPutAttachment(attachment);
|
await _item.PostPutAttachment(attachment);
|
||||||
// await SendNotificationEmail(dto);
|
await SendNotificationEmail(dto);
|
||||||
}
|
}
|
||||||
|
|
||||||
return dto;
|
return dto;
|
||||||
@ -171,13 +171,20 @@ namespace CPRNIMS.WebApi.Controllers.Items
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
[HttpPost("GetProjectCodeByTerm")]
|
||||||
|
public async Task<IActionResult> GetProjectCodeByTerm(ItemCodeDto itemDto)
|
||||||
|
{
|
||||||
|
return await ExecuteWithErrorHandling(
|
||||||
|
() => _item.GetProjectCodeByTerm(itemDto.FileName),
|
||||||
|
nameof(GetProjectCodeByTerm), false
|
||||||
|
);
|
||||||
|
}
|
||||||
[HttpPost("GetProjectCode")]
|
[HttpPost("GetProjectCode")]
|
||||||
public async Task<IActionResult> GetProjectCode(ItemCodeDto itemDto)
|
public async Task<IActionResult> GetProjectCode(ItemCodeDto itemDto)
|
||||||
{
|
{
|
||||||
var results = await _item.GetProjectCodeByTerm(itemDto.FileName);
|
var results = await _item.GetProjectCode();
|
||||||
return Ok(new { message = "success", messCode = 1, data = results });
|
return Ok(new { message = "success", messCode = 1, data = results });
|
||||||
}
|
}
|
||||||
|
|
||||||
[HttpPost("GetDepartment")]
|
[HttpPost("GetDepartment")]
|
||||||
public async Task<IActionResult> GetDepartment(ItemCodeDto itemDto)
|
public async Task<IActionResult> GetDepartment(ItemCodeDto itemDto)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -4,8 +4,10 @@ using CPRNIMS.Domain.UIContracts.Account;
|
|||||||
using CPRNIMS.Domain.UIContracts.Items;
|
using CPRNIMS.Domain.UIContracts.Items;
|
||||||
using CPRNIMS.Domain.UIServices.Updater;
|
using CPRNIMS.Domain.UIServices.Updater;
|
||||||
using CPRNIMS.Infrastructure.Dto.Items;
|
using CPRNIMS.Infrastructure.Dto.Items;
|
||||||
|
using CPRNIMS.Infrastructure.Entities.Purchasing;
|
||||||
using CPRNIMS.Infrastructure.Helper;
|
using CPRNIMS.Infrastructure.Helper;
|
||||||
using CPRNIMS.Infrastructure.ViewModel.Items;
|
using CPRNIMS.Infrastructure.ViewModel.Items;
|
||||||
|
using CPRNIMS.Infrastructure.ViewModel.PO;
|
||||||
using CPRNIMS.WebApps.Controllers.Base;
|
using CPRNIMS.WebApps.Controllers.Base;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using Microsoft.AspNetCore.SignalR;
|
using Microsoft.AspNetCore.SignalR;
|
||||||
@ -197,7 +199,7 @@ namespace CPRNIMS.WebApps.Controllers.Items
|
|||||||
[FromForm] byte RequestTypeId,
|
[FromForm] byte RequestTypeId,
|
||||||
[FromForm] int ChargeTo,
|
[FromForm] int ChargeTo,
|
||||||
[FromForm] string? Remarks,
|
[FromForm] string? Remarks,
|
||||||
[FromForm] string? ProjectCode,
|
[FromForm] int ProjectCodeId,
|
||||||
IFormFile? file)
|
IFormFile? file)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
@ -216,7 +218,7 @@ namespace CPRNIMS.WebApps.Controllers.Items
|
|||||||
RequestTypeId = RequestTypeId,
|
RequestTypeId = RequestTypeId,
|
||||||
ChargeTo = ChargeTo,
|
ChargeTo = ChargeTo,
|
||||||
Remarks = Remarks,
|
Remarks = Remarks,
|
||||||
ProjectCode = ProjectCode,
|
ProjectCodeId = ProjectCodeId,
|
||||||
ItemCartVM = new ItemCartVM
|
ItemCartVM = new ItemCartVM
|
||||||
{
|
{
|
||||||
ItemCartId = itemCartList.Select(ic => ic.ItemCartId).ToList(),
|
ItemCartId = itemCartList.Select(ic => ic.ItemCartId).ToList(),
|
||||||
@ -224,12 +226,19 @@ namespace CPRNIMS.WebApps.Controllers.Items
|
|||||||
ItemNo = itemCartList.Select(ic => ic.ItemNo).ToList()
|
ItemNo = itemCartList.Select(ic => ic.ItemNo).ToList()
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
if(file?.FileName != null)
|
||||||
// Save attachment if provided
|
{
|
||||||
string? savedFileName = await SaveAttachmentAsync(file, null);
|
string? savedFileName = await SaveAttachmentAsync(file, null);
|
||||||
|
|
||||||
viewModel.FileName = savedFileName;
|
viewModel.FileName = savedFileName;
|
||||||
viewModel.OrigFileName = file.FileName;
|
viewModel.OrigFileName = file.FileName ?? "N/A";
|
||||||
|
|
||||||
|
// Delete uploaded file if request failed
|
||||||
|
if (!string.IsNullOrWhiteSpace(savedFileName))
|
||||||
|
{
|
||||||
|
await DeleteAttachmentAsync(savedFileName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
var postPutItem = await _item.PostPurchRequest(GetUser(), viewModel);
|
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" });
|
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 });
|
return Json(new { success = false, response = postPutItem.message });
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
@ -255,12 +258,23 @@ namespace CPRNIMS.WebApps.Controllers.Items
|
|||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Get
|
#region Get
|
||||||
public async Task<IActionResult> GetProjectCode(string term)
|
public async Task<IActionResult> GetProjectCodeByTerm(string query)
|
||||||
{
|
{
|
||||||
var item = new ItemVM();
|
var item = new ItemVM();
|
||||||
item.FileName = term;
|
item.FileName = query;
|
||||||
response = await _item.GetProjectCode(GetUser(), item);
|
var responseQuery = await _item.GetProjectCodeByTerm(GetUser(), item);
|
||||||
return GetResponse(response);
|
|
||||||
|
if (responseQuery == null)
|
||||||
|
{
|
||||||
|
responseQuery = new List<ItemVM>();
|
||||||
|
}
|
||||||
|
var formattedData = responseQuery.Select(item => new
|
||||||
|
{
|
||||||
|
label = $"{item.ProjectCode} {item.ProjectName}",
|
||||||
|
value = item.ProjectCodeId,
|
||||||
|
});
|
||||||
|
|
||||||
|
return Json(new { success = true, data = formattedData });
|
||||||
}
|
}
|
||||||
public async Task<IActionResult> GetImageFileIds()
|
public async Task<IActionResult> GetImageFileIds()
|
||||||
{
|
{
|
||||||
|
|||||||
@ -69,14 +69,10 @@
|
|||||||
<label for="projectCode" class="form-label fw-semibold">
|
<label for="projectCode" class="form-label fw-semibold">
|
||||||
Project Code <small class="text-muted">(Optional)</small>
|
Project Code <small class="text-muted">(Optional)</small>
|
||||||
</label>
|
</label>
|
||||||
<input type="text" class="form-control form-control"
|
<input type="search" id="projectCode" placeholder="Start typing here..."
|
||||||
id="projectCode" name="projectCode"
|
class="form-control mb-2" name="projectCode" />
|
||||||
placeholder="Start typing here..."
|
<input type="hidden" id="projectCodeId" class="form-control" name="projectCodeId" />
|
||||||
autocomplete="off"
|
|
||||||
list="projectCodeList" />
|
|
||||||
<datalist id="projectCodeList">
|
|
||||||
<!-- Options will be populated dynamically via JavaScript -->
|
<!-- Options will be populated dynamically via JavaScript -->
|
||||||
</datalist>
|
|
||||||
<div class="form-text">
|
<div class="form-text">
|
||||||
<i class="bi bi-info-circle me-1"></i>Search and select the appropriate project code
|
<i class="bi bi-info-circle me-1"></i>Search and select the appropriate project code
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -26,7 +26,7 @@
|
|||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<link href="~/css/pr/tracking.css" rel="stylesheet" />
|
<link href="~/css/pr/TrackingV3.css" rel="stylesheet" />
|
||||||
@await Html.PartialAsync("PagesView/PR/_PRTracking")
|
@await Html.PartialAsync("PagesView/PR/_PRTracking")
|
||||||
<script src="~/JsFunctions/PR/ArchivedV2.js"></script>
|
<script src="~/JsFunctions/PR/ArchivedV2.js"></script>
|
||||||
@await Html.PartialAsync("PagesView/PR/_PRScripts")
|
@await Html.PartialAsync("PagesView/PR/_PRScripts")
|
||||||
|
|||||||
@ -5,8 +5,8 @@
|
|||||||
<link href="~/lib/bootstrap/dist/fonts/boostrap-icons.css" rel="stylesheet" />
|
<link href="~/lib/bootstrap/dist/fonts/boostrap-icons.css" rel="stylesheet" />
|
||||||
<link href="~/css/common/rowhighlighter.css" rel="stylesheet" />
|
<link href="~/css/common/rowhighlighter.css" rel="stylesheet" />
|
||||||
<script src="~/jsfunctions/items/itemvar.js"></script>
|
<script src="~/jsfunctions/items/itemvar.js"></script>
|
||||||
<script src="~/jsfunctions/items/ItemViewV6.js"></script>
|
<script src="~/jsfunctions/items/ItemViewV7.js"></script>
|
||||||
<script src="~/jsfunctions/items/PostPutItemV3.js"></script>
|
<script src="~/jsfunctions/items/PostPutItemV4.js"></script>
|
||||||
<script src="~/microsoft-signalr/signalr.min.js"></script>
|
<script src="~/microsoft-signalr/signalr.min.js"></script>
|
||||||
<script src="~/jsfunctions/updater/CartUpdater.js"></script>
|
<script src="~/jsfunctions/updater/CartUpdater.js"></script>
|
||||||
|
|
||||||
|
|||||||
@ -4,7 +4,7 @@
|
|||||||
<link href="~/css/common/rowhighlighter.css" rel="stylesheet" />
|
<link href="~/css/common/rowhighlighter.css" rel="stylesheet" />
|
||||||
|
|
||||||
<script src="~/jsfunctions/pr/PRColumnV7.js"></script>
|
<script src="~/jsfunctions/pr/PRColumnV7.js"></script>
|
||||||
<script src="~/jsfunctions/pr/PRViewV5.js"></script>
|
<script src="~/jsfunctions/pr/PRViewV6.js"></script>
|
||||||
<script src="~/jsfunctions/pr/PRPutPost.js"></script>
|
<script src="~/jsfunctions/pr/PRPutPost.js"></script>
|
||||||
<script src="~/jsfunctions/pr/PRButtonv3.js"></script>
|
<script src="~/jsfunctions/pr/PRButtonv3.js"></script>
|
||||||
<script src="~/jsfunctions/pr/PRVarV3.js"></script>
|
<script src="~/jsfunctions/pr/PRVarV3.js"></script>
|
||||||
|
|||||||
@ -2,7 +2,7 @@
|
|||||||
$("#projectCode").autocomplete({
|
$("#projectCode").autocomplete({
|
||||||
source: function (request, response) {
|
source: function (request, response) {
|
||||||
$.ajax({
|
$.ajax({
|
||||||
url:'/ItemMgmt/GetProjectCode',
|
url:'/ItemMgmt/GetProjectCodeByTerm',
|
||||||
data: { query: request.term },
|
data: { query: request.term },
|
||||||
success: function (result) {
|
success: function (result) {
|
||||||
if (result && result.success && Array.isArray(result.data)) {
|
if (result && result.success && Array.isArray(result.data)) {
|
||||||
@ -24,8 +24,8 @@
|
|||||||
},
|
},
|
||||||
minLength: 2,
|
minLength: 2,
|
||||||
select: function (event, ui) {
|
select: function (event, ui) {
|
||||||
$('#projectCodeList').val(ui.item.label);
|
$('#projectCode').val(ui.item.label);
|
||||||
$('#supplierId').val(ui.item.value);
|
$('#projectCodeId').val(ui.item.value);
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
},
|
},
|
||||||
@ -3,7 +3,7 @@
|
|||||||
isValid = true;
|
isValid = true;
|
||||||
|
|
||||||
var Remarks = document.getElementById('requestorRemarks').value;
|
var Remarks = document.getElementById('requestorRemarks').value;
|
||||||
var ProjectCode = document.getElementById('projectCode').value;
|
var ProjectCodeId = document.getElementById('projectCodeId').value;
|
||||||
|
|
||||||
const selectedItems = Object.values(selectedProductsMap);
|
const selectedItems = Object.values(selectedProductsMap);
|
||||||
if (selectedItems.length === 0) {
|
if (selectedItems.length === 0) {
|
||||||
@ -36,7 +36,7 @@
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
console.log('ProjectCodeId', ProjectCodeId);
|
||||||
showConfirmation({
|
showConfirmation({
|
||||||
title: 'Purchasing Requisition',
|
title: 'Purchasing Requisition',
|
||||||
message: 'Are you sure you want to proceed? This action cannot be undone.',
|
message: 'Are you sure you want to proceed? This action cannot be undone.',
|
||||||
@ -59,7 +59,7 @@
|
|||||||
formData.append('RequestTypeId', RequestTypeId);
|
formData.append('RequestTypeId', RequestTypeId);
|
||||||
formData.append('ChargeTo', ChargeTo || '');
|
formData.append('ChargeTo', ChargeTo || '');
|
||||||
formData.append('Remarks', Remarks || '');
|
formData.append('Remarks', Remarks || '');
|
||||||
formData.append('ProjectCode', ProjectCode || '');
|
formData.append('ProjectCodeId', ProjectCodeId || 0);
|
||||||
|
|
||||||
// Append array data - serialize as JSON
|
// Append array data - serialize as JSON
|
||||||
formData.append('ItemCartIds', JSON.stringify(requestData));
|
formData.append('ItemCartIds', JSON.stringify(requestData));
|
||||||
@ -711,19 +711,10 @@ function viewPRDetails(data) {
|
|||||||
tableDestroy(tableElement);
|
tableDestroy(tableElement);
|
||||||
|
|
||||||
var PRNo = data.prNo;
|
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);
|
$('#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({
|
prDataTable = tableElement.DataTable({
|
||||||
ajax: $.extend({
|
ajax: $.extend({
|
||||||
@ -736,27 +727,20 @@ function viewPRDetails(data) {
|
|||||||
emptyTable: "No record available"
|
emptyTable: "No record available"
|
||||||
},
|
},
|
||||||
initComplete: function () {
|
initComplete: function () {
|
||||||
var api = this.api();
|
const api = this.api();
|
||||||
var response = api.ajax.json();
|
const response = api.ajax.json() || {};
|
||||||
|
const rows = response.data || [];
|
||||||
|
|
||||||
// 1. Find the first row that actually has a fileName
|
const rowWithFile = rows.find(r => r.fileName?.trim());
|
||||||
const rowWithFile = response?.data?.find(
|
const rowWithProjectCode = rows.find(r => r.projectCode?.trim());
|
||||||
row => row.fileName && row.fileName.trim() !== ''
|
|
||||||
);
|
|
||||||
|
|
||||||
// 2. If a file exists, update the hidden inputs and show the button
|
if (rowWithProjectCode) {
|
||||||
if (rowWithFile) {
|
document.getElementById('label-pr-ProjectCode').innerHTML =
|
||||||
$('#fileName').val(rowWithFile.fileName);
|
rowWithProjectCode.projectCode;
|
||||||
$('#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');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Keep your selection initialization
|
toggleAttachment(rowWithFile);
|
||||||
|
|
||||||
initializeTableSelection({
|
initializeTableSelection({
|
||||||
tableName: tableName,
|
tableName: tableName,
|
||||||
dataTable: prDataTable,
|
dataTable: prDataTable,
|
||||||
@ -778,6 +762,30 @@ function viewPRDetails(data) {
|
|||||||
error: errorHandler
|
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() {
|
function downloadPRAttachment() {
|
||||||
let fileName = $('#fileName').val();
|
let fileName = $('#fileName').val();
|
||||||
|
|
||||||
Loading…
Reference in New Issue
Block a user