From 8634af5f456e31c16bc8f4fa605648f2596bcba0 Mon Sep 17 00:00:00 2001 From: "ashutosh.nehete" Date: Mon, 28 Apr 2025 12:20:16 +0530 Subject: [PATCH] If a checklist item is removed while updating an activity, it must also be deleted from the database. --- .../Controllers/MasterController.cs | 32 +++++++++++++++---- 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/Marco.Pms.Services/Controllers/MasterController.cs b/Marco.Pms.Services/Controllers/MasterController.cs index 38ba783..037db52 100644 --- a/Marco.Pms.Services/Controllers/MasterController.cs +++ b/Marco.Pms.Services/Controllers/MasterController.cs @@ -105,25 +105,45 @@ namespace Marco.Pms.Services.Controllers activity.ActivityName = createActivity.ActivityName; activity.UnitOfMeasurement = createActivity.UnitOfMeasurement; + List activityCheckLists = await _context.ActivityCheckLists.AsNoTracking().Where(c => c.ActivityId == activity.Id).ToListAsync(); List checkListVM = new List(); if (createActivity.CheckList != null) { - List activityCheckList = new List(); - foreach (var check in createActivity.CheckList) + var newCheckIds = createActivity.CheckList.Select(c => c.Id); + List updateCheckList = new List(); + List deleteCheckList = new List(); + foreach (var check in activityCheckLists) { - ActivityCheckList checkList = check.ToActivityCheckListFromCreateCheckListDto(tenantId, activity.Id); - activityCheckList.Add(checkList); + if (newCheckIds.Contains(check.Id)) + { + var updatedCheck = createActivity.CheckList.Find(c => c.Id == check.Id); + ActivityCheckList checkList = updatedCheck.ToActivityCheckListFromCreateCheckListDto(tenantId, activity.Id); + updateCheckList.Add(checkList); + } + else + { + deleteCheckList.Add(check); + } + } + _context.ActivityCheckLists.UpdateRange(updateCheckList); + if (deleteCheckList != null) + { + _context.ActivityCheckLists.RemoveRange(deleteCheckList); } - _context.ActivityCheckLists.UpdateRange(activityCheckList); await _context.SaveChangesAsync(); - foreach (ActivityCheckList check in activityCheckList) + foreach (ActivityCheckList check in updateCheckList) { var checkVM = check.ToCheckListVMFromActivityCheckList(activity.Id, false); checkListVM.Add(checkVM); } } + else if (activityCheckLists != null) + { + _context.ActivityCheckLists.RemoveRange(activityCheckLists); + await _context.SaveChangesAsync(); + } ActivityVM activityVM = activity.ToActivityVMFromActivityMaster(checkListVM); _logger.LogInfo("activity updated successfully from tenant {tenantId}", tenantId); return Ok(ApiResponse.SuccessResponse(activityVM, "activity updated successfully", 200));