using CPRNIMS.Domain.Contracts.Inventory; using CPRNIMS.Infrastructure.Dto.Inventory; using CPRNIMS.Infrastructure.Dto.Inventory.Request; using CPRNIMS.WebApi.Security; using Microsoft.AspNetCore.Mvc; namespace CPRNIMS.WebApi.Controllers.Inventory { [Route("api/[controller]")] [ApiController] public partial class MRSMgmtController : ControllerBase { private readonly IMRS _mrs; public MRSMgmtController(IMRS mrs) => _mrs = mrs; [HttpGet] public async Task GetMRS([FromQuery] MRSFilterDto filter, CancellationToken ct) { var currentUser = User.ToUserClaims(); if (currentUser == null) return BadRequest(); var result = await _mrs.GetPagedAsync(filter, ct, currentUser.DepartmentId, currentUser.UserName); return Ok(result); } [HttpGet("SearchRIS")] public async Task SearchRIS([FromQuery] string? searchRISNo, int? projectCodeId, CancellationToken ct) { var results = await _mrs.SearchRISForReturnAsync(searchRISNo, projectCodeId, ct); return Ok(new { success = true, data = results }); } [HttpGet("SearchProjects")] public async Task SearchProjects([FromQuery] string? searchProjectCode, CancellationToken ct) { var results = await _mrs.GetProjectsWithOpenRISAsync(searchProjectCode, ct); return Ok(new { success = true, data = results }); } [HttpPost] public async Task CreateMRS([FromBody] CreateMRSRequest request, CancellationToken ct) { var currentUser = User.ToUserClaims(); if (currentUser == null) return BadRequest(); var result = await _mrs.CreateAsync(request, currentUser.UserName, ct); return Ok(new { success = true, message = $"MRS# {result.MRSNo} created successfully." }); } [HttpPost("Approve")] public async Task ApproveMRS([FromBody] ApproveMRSRequest request, CancellationToken ct) { var currentUser = User.ToUserClaims(); if (currentUser == null) return BadRequest(); await _mrs.ApproveAsync(request.MRSId, currentUser.UserName, ct); return Ok(new { success = true, message = "MRS approved successfully." }); } [HttpPost("Cancel")] public async Task CancelMRS([FromBody] CancelMRSRequest request, CancellationToken ct) { if (string.IsNullOrWhiteSpace(request.Reason)) return BadRequest(new { success = false, message = "A reason for cancellation is required." }); var currentUser = User.ToUserClaims(); if (currentUser == null) return BadRequest(); await _mrs.CancelAsync(request, currentUser.UserName, ct); return Ok(new {success = true,message = "MRS cancelled and inventory adjusted."}); } } }