using Marco.Pms.Model.Dtos.ServiceProject; using Marco.Pms.Model.Employees; using Marco.Pms.Model.ViewModels.ServiceProject; using Marco.Pms.Services.Service.ServiceInterfaces; using MarcoBMS.Services.Helpers; using MarcoBMS.Services.Service; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; namespace Marco.Pms.Services.Controllers { [ApiController] [Route("api/[controller]")] [Authorize] public class ServiceProjectController : Controller { private readonly IServiceProject _serviceProject; private readonly UserHelper _userHelper; private readonly ILoggingService _logger; private readonly ISignalRService _signalR; private readonly Guid tenantId; public ServiceProjectController(IServiceProject serviceProject, UserHelper userHelper, ILoggingService logger, ISignalRService signalR) { _serviceProject = serviceProject; _userHelper = userHelper; _logger = logger; _signalR = signalR; tenantId = userHelper.GetTenantId(); } #region =================================================================== Service Project Functions =================================================================== [HttpGet("list")] public async Task GetServiceProjectList([FromQuery] int pageNumber = 1, [FromQuery] int pageSize = 20) { Employee loggedInEmploee = await _userHelper.GetCurrentEmployeeAsync(); var response = await _serviceProject.GetServiceProjectListAsync(pageNumber, pageSize, loggedInEmploee, tenantId); return StatusCode(response.StatusCode, response); } [HttpGet("details/{id}")] public async Task GetServiceProjectDetails(Guid id) { Employee loggedInEmploee = await _userHelper.GetCurrentEmployeeAsync(); var response = await _serviceProject.GetServiceProjectDetailsAsync(id, loggedInEmploee, tenantId); return StatusCode(response.StatusCode, response); } [HttpPost("create")] public async Task CreateProject([FromBody] ServiceProjectDto serviceProject) { Employee loggedInEmploee = await _userHelper.GetCurrentEmployeeAsync(); var response = await _serviceProject.CreateServiceProjectAsync(serviceProject, loggedInEmploee, tenantId); if (response.Success) { var notification = new { LoggedInUserId = loggedInEmploee.Id, Keyword = "Service_Project", Response = response.Data }; await _signalR.SendNotificationAsync(notification); } return StatusCode(response.StatusCode, response); } [HttpPut("edit/{id}")] public async Task UpdateServicecProject(Guid id, [FromBody] ServiceProjectDto serviceProject) { Employee loggedInEmploee = await _userHelper.GetCurrentEmployeeAsync(); var response = await _serviceProject.UpdateServiceProjectAsync(id, serviceProject, loggedInEmploee, tenantId); if (response.Success) { var notification = new { LoggedInUserId = loggedInEmploee.Id, Keyword = "Service_Project", Response = response.Data }; await _signalR.SendNotificationAsync(notification); } return StatusCode(response.StatusCode, response); } [HttpDelete("delete/{id}")] public async Task DeActivateServiceProject(Guid id, bool isActive = false) { Employee loggedInEmploee = await _userHelper.GetCurrentEmployeeAsync(); var response = await _serviceProject.DeActivateServiceProjectAsync(id, isActive, loggedInEmploee, tenantId); if (response.Success) { var notification = new { LoggedInUserId = loggedInEmploee.Id, Keyword = "Service_Project", Response = response.Data }; await _signalR.SendNotificationAsync(notification); } return StatusCode(response.StatusCode, response); } #endregion #region =================================================================== Job Tickets Functions =================================================================== [HttpGet("job/list")] public async Task GetJobTicketsList([FromQuery] Guid? projectId, [FromQuery] int pageNumber = 1, [FromQuery] int pageSize = 20, [FromQuery] bool isActive = true) { Employee loggedInEmploee = await _userHelper.GetCurrentEmployeeAsync(); var response = await _serviceProject.GetJobTicketsListAsync(projectId, pageNumber, pageSize, isActive, loggedInEmploee, tenantId); return StatusCode(response.StatusCode, response); } [HttpGet("job/details/{id}")] public async Task GetJobTicketDetails(Guid id) { Employee loggedInEmploee = await _userHelper.GetCurrentEmployeeAsync(); var response = await _serviceProject.GetJobTicketDetailsAsync(id, loggedInEmploee, tenantId); return StatusCode(response.StatusCode, response); } [HttpGet("job/comment/list")] public async Task GetCommentListByJobTicket([FromQuery] Guid? jobTicketId, [FromQuery] int pageNumber = 1, [FromQuery] int pageSize = 20) { Employee loggedInEmploee = await _userHelper.GetCurrentEmployeeAsync(); var response = await _serviceProject.GetCommentListByJobTicketAsync(jobTicketId, pageNumber, pageSize, loggedInEmploee, tenantId); return StatusCode(response.StatusCode, response); } [HttpGet("job/tag/list")] public async Task GetJobTagList() { Employee loggedInEmploee = await _userHelper.GetCurrentEmployeeAsync(); var response = await _serviceProject.GetJobTagListAsync(loggedInEmploee, tenantId); return StatusCode(response.StatusCode, response); } [HttpPost("job/create")] public async Task CreateJobTicket(CreateJobTicketDto model) { Employee loggedInEmploee = await _userHelper.GetCurrentEmployeeAsync(); var response = await _serviceProject.CreateJobTicketAsync(model, loggedInEmploee, tenantId); if (response.Success) { var notification = new { LoggedInUserId = loggedInEmploee.Id, Keyword = "Job_Ticket", Response = response.Data }; await _signalR.SendNotificationAsync(notification); } return StatusCode(response.StatusCode, response); } [HttpPost("job/add/comment")] public async Task AddCommentToJobTicket(JobCommentDto model) { Employee loggedInEmploee = await _userHelper.GetCurrentEmployeeAsync(); var response = await _serviceProject.AddCommentToJobTicketAsync(model, loggedInEmploee, tenantId); if (response.Success) { var notification = new { LoggedInUserId = loggedInEmploee.Id, Keyword = "Job_Ticket_Comment", Response = response.Data }; await _signalR.SendNotificationAsync(notification); } return StatusCode(response.StatusCode, response); } #endregion } }