using Marco.Pms.DataAccess.Data; using Marco.Pms.Model.Dtos.Activities; using Marco.Pms.Model.Entitlements; using Marco.Pms.Model.Mapper; using Marco.Pms.Model.Utilities; using Marco.Pms.Model.ViewModels.Activities; using MarcoBMS.Services.Helpers; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; namespace Marco.Pms.Services.Controllers { [Authorize] [Route("api/[controller]")] [ApiController] public class MasterController : ControllerBase { private readonly ApplicationDbContext _context; private readonly UserHelper _userHelper; public MasterController(ApplicationDbContext context, UserHelper userHelper) { _context = context; _userHelper = userHelper; } [HttpGet] [Route("activities")] public async Task GetActivitiesMaster() { var tenantId = _userHelper.GetTenantId(); var activities = await _context.ActivityMasters.Where(c => c.TenantId == tenantId && c.IsActive == true).ToListAsync(); List activitiesVM = new List(); foreach (var activity in activities) { var checkList = await _context.ActivityCheckLists.Where(c => c.TenantId == tenantId && c.ActivityMasterId == activity.Id).ToListAsync(); List checkListVM = new List(); if(checkList != null) { foreach (ActivityCheckList check in checkList) { var checkVM = check.ToCheckListVMFromActivityCheckList(activity.Id,false); checkListVM.Add(checkVM); } } ActivityVM activityVM = activity.ToActivityVMFromActivityMaster(checkListVM); activitiesVM.Add(activityVM); } return Ok(ApiResponse.SuccessResponse(activitiesVM, "Success.", 200)); } [HttpPost("activity")] public async Task CreateActivity([FromBody] CreateActivityMasterDto createActivity) { var tenantId = _userHelper.GetTenantId(); var employee = await _userHelper.GetCurrentEmployeeAsync(); if (employee.TenantId != tenantId) { return Unauthorized(ApiResponse.ErrorResponse("Current tenant did not match with user's tenant", "Current tenant did not match with user's tenant", 401)); } var activityMaster = createActivity.ToActivityMasterFromCreateActivityMasterDto(tenantId); _context.ActivityMasters.Add(activityMaster); await _context.SaveChangesAsync(); if (createActivity.CheckList != null) { List activityCheckList = new List(); foreach (var check in createActivity.CheckList) { ActivityCheckList checkList = check.ToActivityCheckListFromCreateCheckListDto(tenantId,activityMaster.Id); activityCheckList.Add(checkList); } _context.ActivityCheckLists.AddRange(activityCheckList); await _context.SaveChangesAsync(); List checkListVM = new List(); foreach (ActivityCheckList check in activityCheckList) { var checkVM = check.ToCheckListVMFromActivityCheckList(activityMaster.Id,false); checkListVM.Add(checkVM); } ActivityVM activityVM = activityMaster.ToActivityVMFromActivityMaster(checkListVM); return Ok(ApiResponse.SuccessResponse(activityVM, "Activity created successfully", 200)); } return BadRequest(ApiResponse.ErrorResponse("Check List is Empty", "Check List is Empty", 400)); } [HttpPost("edit/{id}")] public async Task UpdateActivity(int id, [FromBody] CreateActivityMasterDto createActivity) { var tenantId = _userHelper.GetTenantId(); var employee = await _userHelper.GetCurrentEmployeeAsync(); ActivityMaster? activity = await _context.ActivityMasters.FirstOrDefaultAsync(x => x.Id == id && x.IsActive == true && x.TenantId == tenantId); if (activity != null && createActivity.UnitOfMeasurement != null && createActivity.ActivityName != null) { activity.ActivityName = createActivity.ActivityName; activity.UnitOfMeasurement = createActivity.UnitOfMeasurement; if (createActivity.CheckList != null) { List activityCheckList = new List(); foreach (var check in createActivity.CheckList) { ActivityCheckList checkList = check.ToActivityCheckListFromCreateCheckListDto(tenantId,activity.Id); activityCheckList.Add(checkList); } _context.ActivityCheckLists.UpdateRange(activityCheckList); await _context.SaveChangesAsync(); List checkListVM = new List(); foreach (ActivityCheckList check in activityCheckList) { var checkVM = check.ToCheckListVMFromActivityCheckList(activity.Id, false); checkListVM.Add(checkVM); } ActivityVM activityVM = activity.ToActivityVMFromActivityMaster(checkListVM); return Ok(ApiResponse.SuccessResponse(activityVM, "Activity created successfully", 200)); } } return NotFound(ApiResponse.ErrorResponse("Activity no found", "Activity no found", 404)); } #nullable disable [HttpDelete("delete/{id}")] public async Task DeleteActivity(int Id) { int tenantId = _userHelper.GetTenantId(); var activity = await _context.ActivityMasters.FirstOrDefaultAsync(a => a.Id == Id && a.TenantId == tenantId); if(activity != null) { activity.IsActive = false; } await _context.SaveChangesAsync(); return Ok(ApiResponse.SuccessResponse(null, "Activity Deleted Successfully", 200)); } } }