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>> GetDepartment(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> PostPutItem(User user, ItemVM viewModel);
|
||||
Task<ItemVM> PutItemDetail(User user, ItemVM viewModel);
|
||||
|
||||
@ -129,10 +129,10 @@ namespace CPRNIMS.Domain.UIServices.Items
|
||||
}
|
||||
#endregion
|
||||
#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,
|
||||
_configuration["LLI:NonInvent:ItemMgmt:GetProjectCode"]);
|
||||
_configuration["LLI:NonInvent:ItemMgmt:GetProjectCodeByTerm"]);
|
||||
}
|
||||
public async Task<List<ItemVM>> GetItemDetail(Infrastructure.Models.Account.User user,
|
||||
ItemVM viewModel)
|
||||
|
||||
@ -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; }
|
||||
}
|
||||
}
|
||||
|
||||
@ -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<IActionResult> GetProjectCodeByTerm(ItemCodeDto itemDto)
|
||||
{
|
||||
return await ExecuteWithErrorHandling(
|
||||
() => _item.GetProjectCodeByTerm(itemDto.FileName),
|
||||
nameof(GetProjectCodeByTerm), false
|
||||
);
|
||||
}
|
||||
[HttpPost("GetProjectCode")]
|
||||
public async Task<IActionResult> 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<IActionResult> GetDepartment(ItemCodeDto itemDto)
|
||||
{
|
||||
|
||||
@ -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()
|
||||
}
|
||||
};
|
||||
|
||||
// Save attachment if provided
|
||||
if(file?.FileName != null)
|
||||
{
|
||||
string? savedFileName = await SaveAttachmentAsync(file, null);
|
||||
|
||||
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);
|
||||
|
||||
@ -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<IActionResult> GetProjectCode(string term)
|
||||
public async Task<IActionResult> 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<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()
|
||||
{
|
||||
|
||||
@ -69,14 +69,10 @@
|
||||
<label for="projectCode" class="form-label fw-semibold">
|
||||
Project Code <small class="text-muted">(Optional)</small>
|
||||
</label>
|
||||
<input type="text" class="form-control form-control"
|
||||
id="projectCode" name="projectCode"
|
||||
placeholder="Start typing here..."
|
||||
autocomplete="off"
|
||||
list="projectCodeList" />
|
||||
<datalist id="projectCodeList">
|
||||
<input type="search" id="projectCode" placeholder="Start typing here..."
|
||||
class="form-control mb-2" name="projectCode" />
|
||||
<input type="hidden" id="projectCodeId" class="form-control" name="projectCodeId" />
|
||||
<!-- Options will be populated dynamically via JavaScript -->
|
||||
</datalist>
|
||||
<div class="form-text">
|
||||
<i class="bi bi-info-circle me-1"></i>Search and select the appropriate project code
|
||||
</div>
|
||||
|
||||
@ -26,7 +26,7 @@
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<link href="~/css/pr/tracking.css" rel="stylesheet" />
|
||||
<link href="~/css/pr/TrackingV3.css" rel="stylesheet" />
|
||||
@await Html.PartialAsync("PagesView/PR/_PRTracking")
|
||||
<script src="~/JsFunctions/PR/ArchivedV2.js"></script>
|
||||
@await Html.PartialAsync("PagesView/PR/_PRScripts")
|
||||
|
||||
@ -5,8 +5,8 @@
|
||||
<link href="~/lib/bootstrap/dist/fonts/boostrap-icons.css" rel="stylesheet" />
|
||||
<link href="~/css/common/rowhighlighter.css" rel="stylesheet" />
|
||||
<script src="~/jsfunctions/items/itemvar.js"></script>
|
||||
<script src="~/jsfunctions/items/ItemViewV6.js"></script>
|
||||
<script src="~/jsfunctions/items/PostPutItemV3.js"></script>
|
||||
<script src="~/jsfunctions/items/ItemViewV7.js"></script>
|
||||
<script src="~/jsfunctions/items/PostPutItemV4.js"></script>
|
||||
<script src="~/microsoft-signalr/signalr.min.js"></script>
|
||||
<script src="~/jsfunctions/updater/CartUpdater.js"></script>
|
||||
|
||||
|
||||
@ -4,7 +4,7 @@
|
||||
<link href="~/css/common/rowhighlighter.css" rel="stylesheet" />
|
||||
|
||||
<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/PRButtonv3.js"></script>
|
||||
<script src="~/jsfunctions/pr/PRVarV3.js"></script>
|
||||
|
||||
@ -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;
|
||||
},
|
||||
@ -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));
|
||||
@ -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();
|
||||
|
||||
Loading…
Reference in New Issue
Block a user