145 lines
6.8 KiB
C#

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<IActionResult> GetActivitiesMaster()
{
var tenantId = _userHelper.GetTenantId();
var activities = await _context.ActivityMasters.Where(c => c.TenantId == tenantId && c.IsActive == true).ToListAsync();
List<ActivityVM> activitiesVM = new List<ActivityVM>();
foreach (var activity in activities) {
var checkList = await _context.ActivityCheckLists.Where(c => c.TenantId == tenantId && c.ActivityId == activity.Id).ToListAsync();
List<CheckListVM> checkListVM = new List<CheckListVM>();
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<object>.SuccessResponse(activitiesVM, "Success.", 200));
}
[HttpPost("activity")]
public async Task<IActionResult> CreateActivity([FromBody] CreateActivityMasterDto createActivity)
{
var tenantId = _userHelper.GetTenantId();
var employee = await _userHelper.GetCurrentEmployeeAsync();
if (employee.TenantId != tenantId)
{
return Unauthorized(ApiResponse<object>.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> activityCheckList = new List<ActivityCheckList>();
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> checkListVM = new List<CheckListVM>();
foreach (ActivityCheckList check in activityCheckList)
{
var checkVM = check.ToCheckListVMFromActivityCheckList(activityMaster.Id,false);
checkListVM.Add(checkVM);
}
ActivityVM activityVM = activityMaster.ToActivityVMFromActivityMaster(checkListVM);
return Ok(ApiResponse<object>.SuccessResponse(activityVM, "Activity created successfully", 200));
}
return BadRequest(ApiResponse<object>.ErrorResponse("Check List is Empty", "Check List is Empty", 400));
}
[HttpPost("edit/{id}")]
public async Task<IActionResult> 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> activityCheckList = new List<ActivityCheckList>();
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> checkListVM = new List<CheckListVM>();
foreach (ActivityCheckList check in activityCheckList)
{
var checkVM = check.ToCheckListVMFromActivityCheckList(activity.Id, false);
checkListVM.Add(checkVM);
}
ActivityVM activityVM = activity.ToActivityVMFromActivityMaster(checkListVM);
return Ok(ApiResponse<object>.SuccessResponse(activityVM, "Activity created successfully", 200));
}
}
return NotFound(ApiResponse<object>.ErrorResponse("Activity no found", "Activity no found", 404));
}
#nullable disable
[HttpDelete("delete/{id}")]
public async Task<IActionResult> 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<object>.SuccessResponse(null, "Activity Deleted Successfully", 200));
}
[HttpGet]
[Route("industries")]
public async Task<IActionResult> GetIndustries()
{
var tenantId = _userHelper.GetTenantId();
var industries = await _context.Industries.ToListAsync();
return Ok(ApiResponse<object>.SuccessResponse(industries, "Success.", 200));
}
}
}