From a196906bf9efa97c8d83c33e98818e582c9fb677 Mon Sep 17 00:00:00 2001 From: "ashutosh.nehete" Date: Fri, 25 Jul 2025 12:07:16 +0530 Subject: [PATCH] Added an API to update payment mode to master table for that tenant --- .../Controllers/MasterController.cs | 8 ++ Marco.Pms.Services/Service/MasterService.cs | 82 +++++++++++++++++-- .../ServiceInterfaces/IMasterService.cs | 1 + 3 files changed, 86 insertions(+), 5 deletions(-) diff --git a/Marco.Pms.Services/Controllers/MasterController.cs b/Marco.Pms.Services/Controllers/MasterController.cs index 3f00d2e..1571229 100644 --- a/Marco.Pms.Services/Controllers/MasterController.cs +++ b/Marco.Pms.Services/Controllers/MasterController.cs @@ -929,6 +929,14 @@ namespace Marco.Pms.Services.Controllers return StatusCode(response.StatusCode, response); } + [HttpPut("payment-mode/edit/{id}")] + public async Task UpdatePaymentMode(Guid id, PaymentModeMatserDto dto) + { + var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync(); + var response = await _masterService.UpdatePaymentModeAsync(id, dto, loggedInEmployee, tenantId); + return StatusCode(response.StatusCode, response); + } + #endregion } } diff --git a/Marco.Pms.Services/Service/MasterService.cs b/Marco.Pms.Services/Service/MasterService.cs index a03c8ef..4334370 100644 --- a/Marco.Pms.Services/Service/MasterService.cs +++ b/Marco.Pms.Services/Service/MasterService.cs @@ -82,7 +82,7 @@ namespace Marco.Pms.Services.Service if (!hasManagePermission) { _logger.LogWarning("Access DENIED for employee {EmployeeId} for managing EXPANSES TYPE MASTER.", loggedInEmployee.Id); - return ApiResponse.ErrorResponse("Access Denied.", "You do not have permission to Upload expenses for this project", 403); + return ApiResponse.ErrorResponse("Access Denied.", "You do not have permission to Manage masters", 403); } var expensesType = _mapper.Map(model); expensesType.TenantId = tenantId; @@ -122,7 +122,7 @@ namespace Marco.Pms.Services.Service if (!hasManagePermission) { _logger.LogWarning("Access DENIED for employee {EmployeeId} for managing EXPANSES TYPE MASTER.", loggedInEmployee.Id); - return ApiResponse.ErrorResponse("Access Denied.", "You do not have permission to Upload expenses for this project", 403); + return ApiResponse.ErrorResponse("Access Denied.", "You do not have permission to Manage masters", 403); } // Validating the prvided data @@ -150,7 +150,7 @@ namespace Marco.Pms.Services.Service _context.ExpensesTypeMaster.Update(expensesType); await _context.SaveChangesAsync(); - _logger.LogInfo("New Expense Type {ExpensesTypeId} was updated by employee {EmployeeId}", expensesType.Id, loggedInEmployee.Id); + _logger.LogInfo("Expense Type {ExpensesTypeId} was updated by employee {EmployeeId}", expensesType.Id, loggedInEmployee.Id); // Saving the old entity in mongoDB @@ -236,7 +236,7 @@ namespace Marco.Pms.Services.Service if (!hasManagePermission) { _logger.LogWarning("Access DENIED for employee {EmployeeId} for managing EXPENSE STATUS MASTER.", loggedInEmployee.Id); - return ApiResponse.ErrorResponse("Access Denied.", "You do not have permission to Upload expenses for this project", 403); + return ApiResponse.ErrorResponse("Access Denied.", "You do not have permission to Manage masters", 403); } // Mapping the DTO to ExpensesStatusMaster Model @@ -317,7 +317,7 @@ namespace Marco.Pms.Services.Service if (!hasManagePermission) { _logger.LogWarning("Access DENIED for employee {EmployeeId} for managing PAYMENT MODE MASTER.", loggedInEmployee.Id); - return ApiResponse.ErrorResponse("Access Denied.", "You do not have permission to Upload expenses for this project", 403); + return ApiResponse.ErrorResponse("Access Denied.", "You do not have permission to Manage masters", 403); } // Mapping the DTO to PaymentModeMatser Model @@ -345,6 +345,78 @@ namespace Marco.Pms.Services.Service } } + public async Task> UpdatePaymentModeAsync(Guid id, PaymentModeMatserDto model, Employee loggedInEmployee, Guid tenantId) + { + try + { + // Validation if employee is taking action in same tenant + if (tenantId != loggedInEmployee.TenantId) + { + _logger.LogWarning("Employee {EmployeeId} attempted to update Payment Mode in different tenant", loggedInEmployee.Id); + return ApiResponse.ErrorResponse("Access Denied", "User do not have access for this information", 403); + } + + // Checking permssion for managing masters + var hasManagePermission = await _permission.HasPermission(PermissionsMaster.ManageMasters, loggedInEmployee.Id); + if (!hasManagePermission) + { + _logger.LogWarning("Access DENIED for employee {EmployeeId} for managing PAYMENT MODE MASTER.", loggedInEmployee.Id); + return ApiResponse.ErrorResponse("Access Denied.", "You do not have permission to Manage masters", 403); + } + + // Validating the prvided data + if (model.Id != id) + { + _logger.LogWarning("Employee {EmployeeId} provide different Ids in payload and path variable", loggedInEmployee.Id); + return ApiResponse.ErrorResponse("Invalid Data", "User has send invalid payload", 400); + } + + var paymentMode = await _context.PaymentModeMatser.AsNoTracking().FirstOrDefaultAsync(et => et.Id == model.Id.Value && et.TenantId == tenantId); + + // Checking if Payment Mode exists + if (paymentMode == null) + { + _logger.LogWarning("Employee {EmployeeId} tries to update Payment Mode, but not found in database", loggedInEmployee.Id); + return ApiResponse.ErrorResponse("Payment Mode not found", "Payment Mode not found", 404); + } + + // Mapping PaymentModeMatser to BsonDocument + var existingEntityBson = _updateLogHelper.EntityToBsonDocument(paymentMode); + + // Mapping PaymentModeMatserDto to PaymentModeMatser + _mapper.Map(model, paymentMode); + + _context.PaymentModeMatser.Update(paymentMode); + await _context.SaveChangesAsync(); + + _logger.LogInfo("Payment Mode {PaymentModeId} was updated by employee {EmployeeId}", paymentMode.Id, loggedInEmployee.Id); + + // Saving the old entity in mongoDB + + var mongoDBTask = _updateLogHelper.PushToUpdateLogsAsync(new UpdateLogsObject + { + EntityId = paymentMode.Id.ToString(), + UpdatedById = loggedInEmployee.Id.ToString(), + OldObject = existingEntityBson, + UpdatedAt = DateTime.UtcNow + }, "PaymentModeMasterModificationLog"); + + // Mapping PaymentModeMatser to PaymentModeMatserVM + var response = _mapper.Map(paymentMode); + return ApiResponse.SuccessResponse(response, "Payment Mode updated Successfully", 200); + } + catch (DbUpdateException dbEx) + { + _logger.LogError(dbEx, "Database Exception occured while updating Payment Mode by employee {EmployeeId}", loggedInEmployee.Id); + return ApiResponse.ErrorResponse("Internal Error occured", ExceptionMapper(dbEx), 500); + } + catch (Exception ex) + { + _logger.LogError(ex, "Exception occured while updating Payment Mode by employee {EmployeeId}", loggedInEmployee.Id); + return ApiResponse.ErrorResponse("Internal Error occured", ExceptionMapper(ex), 500); + } + } + #endregion #region =================================================================== Helper Function =================================================================== diff --git a/Marco.Pms.Services/Service/ServiceInterfaces/IMasterService.cs b/Marco.Pms.Services/Service/ServiceInterfaces/IMasterService.cs index 67217c4..e5e869c 100644 --- a/Marco.Pms.Services/Service/ServiceInterfaces/IMasterService.cs +++ b/Marco.Pms.Services/Service/ServiceInterfaces/IMasterService.cs @@ -20,6 +20,7 @@ namespace Marco.Pms.Services.Service.ServiceInterfaces #region =================================================================== Payment mode APIs =================================================================== Task> GetPaymentModeListAsync(Employee loggedInEmployee, Guid tenantId); Task> CreatePaymentModeAsync(PaymentModeMatserDto model, Employee loggedInEmployee, Guid tenantId); + Task> UpdatePaymentModeAsync(Guid id, PaymentModeMatserDto model, Employee loggedInEmployee, Guid tenantId); #endregion }