From 523b1eb9d09868790709d45eeacde013ad62c3be Mon Sep 17 00:00:00 2001 From: "ashutosh.nehete" Date: Mon, 5 May 2025 12:28:29 +0530 Subject: [PATCH] Implement an API endpoint to delete a task --- .../Controllers/ProjectController.cs | 44 ++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) diff --git a/Marco.Pms.Services/Controllers/ProjectController.cs b/Marco.Pms.Services/Controllers/ProjectController.cs index 79b6c24..169cc2e 100644 --- a/Marco.Pms.Services/Controllers/ProjectController.cs +++ b/Marco.Pms.Services/Controllers/ProjectController.cs @@ -8,6 +8,7 @@ using Marco.Pms.Model.Utilities; using Marco.Pms.Model.ViewModels; using Marco.Pms.Model.ViewModels.Employee; using MarcoBMS.Services.Helpers; +using MarcoBMS.Services.Service; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; @@ -21,12 +22,14 @@ namespace MarcoBMS.Services.Controllers { private readonly ApplicationDbContext _context; private readonly UserHelper _userHelper; + private readonly ILoggingService _logger; - public ProjectController(ApplicationDbContext context, UserHelper userHelper) + public ProjectController(ApplicationDbContext context, UserHelper userHelper, ILoggingService logger) { _context = context; _userHelper = userHelper; + _logger = logger; } [HttpGet("list")] public async Task GetAll() @@ -522,6 +525,45 @@ namespace MarcoBMS.Services.Controllers return BadRequest(ApiResponse.ErrorResponse("Invalid details.", "Work Item Details are not valid.", 400)); } + + [HttpDelete("task/{id}")] + public async Task DeleteProjectTask(Guid id) + { + Guid tenantId = _userHelper.GetTenantId(); + WorkItem? task = await _context.WorkItems.AsNoTracking().FirstOrDefaultAsync(t => t.Id == id && t.TenantId == tenantId); + if (task != null) + { + if (task.CompletedWork == 0) + { + var assignedTask = await _context.TaskAllocations.Where(t => t.WorkItemId == id).ToListAsync(); + if (assignedTask.Count == 0) + { + _context.WorkItems.Remove(task); + await _context.SaveChangesAsync(); + _logger.LogInfo("Task with ID {WorkItemId} has been successfully deleted.", task.Id); + } + else + { + _logger.LogWarning("Task with ID {WorkItemId} is currently assigned and cannot be deleted.", task.Id); + return BadRequest(ApiResponse.ErrorResponse("Task is currently assigned and cannot be deleted.", "Task is currently assigned and cannot be deleted.", 400)); + } + } + else + { + double percentage = (task.CompletedWork / task.PlannedWork) * 100; + percentage = Math.Round(percentage, 2); + _logger.LogWarning("Task with ID {WorkItemId} is {CompletionPercentage}% complete and cannot be deleted", task.Id, percentage); + return BadRequest(ApiResponse.ErrorResponse(System.String.Format("Task is {0}% complete and cannot be deleted", percentage), System.String.Format("Task is {0}% complete and cannot be deleted", percentage), 400)); + + } + } + else + { + _logger.LogError("Task with ID {WorkItemId} not found ID database", id); + } + return Ok(ApiResponse.SuccessResponse(new { }, "Task deleted successfully", 200)); + } + [HttpPost("manage-infra")] public async Task ManageProjectInfra(List infraDots) {