using CPRNIMS.Domain.Services; using CPRNIMS.Domain.UIContracts.Account; using CPRNIMS.Domain.UIContracts.PR; using CPRNIMS.Infrastructure.Dto.PR; using CPRNIMS.Infrastructure.Helper; using CPRNIMS.Infrastructure.ViewModel.PR; using CPRNIMS.WebApps.Controllers.Base; using Microsoft.AspNetCore.Mvc; namespace CPRNIMS.WebApps.Controllers.PR { public class PRMgmtController : BaseMethod { List? response; private readonly IPRequest _pRequest; public PRMgmtController(TokenHelper tokenHelper, ErrorLogHelper errorMessageService, IWebHostEnvironment webHostEnvironment , IPRequest pRequest, IConfiguration configuration,IAccount account) : base(errorMessageService, webHostEnvironment, tokenHelper, account) { _pRequest = pRequest; } #region Get private async Task GetProductFile(string fileName) { try { // Validate filename if (string.IsNullOrWhiteSpace(fileName) || fileName.Contains("..")) { return BadRequest("Invalid file name"); } var uploadsPath = Path.Combine(_webHostEnvironment.WebRootPath, "Content/Uploads", "PRAttachment"); var filePath = Path.Combine(uploadsPath, fileName); ContentTypeHelper.ValidateFile(filePath, uploadsPath); // Stream the file instead of loading entirely into memory var fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read); var contentType = ContentTypeHelper.GetContentType(fileName); return File(fileStream, contentType, fileName, enableRangeProcessing: true); } catch (Exception ex) { return StatusCode(500, "Error retrieving file"); } } public async Task GetProjectCodes(PRVM viewModels) { response = await _pRequest.GetProjectCodes(GetUser(), viewModels); return GetResponse(response); } public async Task GetApproverName(PRVM viewModels) { response = await _pRequest.GetApproverName(GetUser(), viewModels); return GetResponse(response); } public async Task GetAllPR(PRVM viewModels) { response = await _pRequest.GetAllPR(GetUser(), viewModels); return GetResponse(response); } public async Task GetPRDetailByPRNo(PRVM viewModels) { response = await _pRequest.GetPRDetailByPRNo(GetUser(), viewModels); return GetResponse(response); } public async Task GetPRListByPRNo(PRVM viewModels) { response = await _pRequest.GetPRListByPRNo(GetUser(), viewModels); return GetResponse(response); } public async Task GetMyPR(PRVM viewModels) { response = await _pRequest.GetMyPR(GetUser(), viewModels); return GetResponse(response); } public async Task GetForReceiving() { var viewModels = new PRVM(); response = await _pRequest.GetForReceiving(GetUser(), viewModels); return GetResponse(response); } public async Task GetDeniedItem(PRVM viewModels) { response = await _pRequest.GetForReceiving(GetUser(), viewModels); return GetResponse(response); } public async Task GetPRByRRId(PRVM viewModel) { response = await _pRequest.GetPRByRRId(GetUser(), viewModel); return GetResponse(response); } public async Task GetRRDetailByPO(PRVM viewModel) { response = await _pRequest.GetRRDetailByPO(GetUser(), viewModel); return GetResponse(response); } public async Task GetPRStatusById(PRVM viewModel) { response = await _pRequest.GetPRStatusById(GetUser(), viewModel); return GetResponse(response); } public async Task GetItemDetailForReceiving(PRVM viewModel) { response = await _pRequest.GetItemDetailForReceiving(GetUser(), viewModel); return GetResponse(response); } public async Task GetDetailedPRTracking(PRVM viewModel) { response = await _pRequest.GetDetailedPRTracking(GetUser(), viewModel); return GetResponse(response); } public async Task GetSupplierAlternativeOffer(PRVM viewModel) { response = await _pRequest.GetSupplierAlternativeOffer(GetUser(), viewModel); return GetResponse(response); } public async Task GetSupplierAlterOfferDetails(PRVM viewModel) { response = await _pRequest.GetSupplierAlterOfferDetails(GetUser(), viewModel); return GetResponse(response); } public async Task GetDashBoard() { var viewModel = new PRVM(); response = await _pRequest.GetDashBoard(GetUser(), viewModel); return GetResponse(response); } private PRList MapToPRItemList(IEnumerable prList) { if (prList == null || !prList.Any()) { return new PRList { PRDetailsId = new List(), ItemNo = new List(), }; } return new PRList { PRDetailsId = prList.SelectMany(ic => ic.PRDetailsId).ToList(), ItemNo = prList.SelectMany(ic => ic.ItemNo).ToList() }; } #endregion #region POST PUT public async Task PostPutProjectCode([FromBody] PRVM viewModel) { var postPutItem = await _pRequest.PostPutProjectCode(GetUser(), viewModel); if (postPutItem.messCode != 0) { return Json(new { success = true, Response = postPutItem.Message }); } return Json(new { success = false, Response = postPutItem.Message }); } public async Task ApprovedSelectedPRItem(PRVM viewModel, List PRList) { viewModel.PRList = MapToPRItemList(PRList); var postPutItem = await _pRequest.ApprovedSelectedPRItem(GetUser(), viewModel); if (postPutItem.messCode != 0) { return Json(new { success = true }); } return Json(new { success = false, Response = postPutItem.Message }); } public async Task PostPutDeniedItem(PRVM viewModel, List ItemList) { if (ItemList.Count > 0) { viewModel.ItemList = new ItemReceivingList { PRDetailsId = ItemList.SelectMany(ic => ic.PRDetailsId).ToList(), PRNo = ItemList.SelectMany(ic => ic.PRNo).ToList(), ItemNo = ItemList.SelectMany(ic => ic.ItemNo).ToList(), }; var postPutItem = await _pRequest.PostPutDeniedItem(GetUser(), viewModel); if (postPutItem.messCode != 0) { return Json(new { success = true, Response = postPutItem.Message }); } return Json(new { success = false, Response = postPutItem.Message }); } return Json(new { success = false, Response = "EmptyArray" }); } public async Task PutItemDetail(PRVM viewModel) { var postPutItem = await _pRequest.PutItemDetail(GetUser(), viewModel); if (postPutItem.messCode != 0) { return Json(new { success = true, Response = postPutItem.Message }); } return Json(new { success = false, Response = postPutItem.Message }); } public async Task PostPRApproveReject(PRVM viewModel) { var postPutItem = await _pRequest.PostPRApproveReject(GetUser(), viewModel); if (postPutItem.messCode != 0) { return Json(new { success = true, Response = postPutItem.Message }); } return Json(new { success = false, Response = postPutItem.Message }); } public async Task PutSupplierAlterOffer(PRVM viewModel) { var postPutItem = await _pRequest.PutSupplierAlterOffer(GetUser(), viewModel); if (postPutItem.messCode != 0) { return Json(new { success = true, Response = postPutItem.Message }); } return Json(new { success = false, Response = postPutItem.Message }); } public async Task PRItemRemoval(PRVM viewModel) { var postPutItem = await _pRequest.PRItemRemoval(GetUser(), viewModel); if (postPutItem.messCode != 0) { return Json(new { success = true , Response = postPutItem.Message }); } return Json(new { success = false, Response = postPutItem.Message }); } #endregion #region Views public IActionResult GetDashBoardById(int DashboardId) { return ViewComponent("Dashboard", new { dashboardId = DashboardId }); } public async Task DashBoard() { return await IsAuthenTicated(); } public async Task Index() { return await IsAuthenTicated(); } public async Task PRArchived() { return await IsAuthenTicated(); } public async Task DeniedItem() { return await IsAuthenTicated(); } public async Task PRTracking() { return await IsAuthenTicated(); } public async Task AlterOffer() { return await IsAuthenTicated(); } public async Task ProjectCode() { return await IsAuthenTicated(); } #endregion } }