Added an API to update payment mode to master table for that tenant

This commit is contained in:
ashutosh.nehete 2025-07-25 12:07:16 +05:30
parent 5b5aa9f77a
commit a196906bf9
3 changed files with 86 additions and 5 deletions

View File

@ -929,6 +929,14 @@ namespace Marco.Pms.Services.Controllers
return StatusCode(response.StatusCode, response); return StatusCode(response.StatusCode, response);
} }
[HttpPut("payment-mode/edit/{id}")]
public async Task<IActionResult> 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 #endregion
} }
} }

View File

@ -82,7 +82,7 @@ namespace Marco.Pms.Services.Service
if (!hasManagePermission) if (!hasManagePermission)
{ {
_logger.LogWarning("Access DENIED for employee {EmployeeId} for managing EXPANSES TYPE MASTER.", loggedInEmployee.Id); _logger.LogWarning("Access DENIED for employee {EmployeeId} for managing EXPANSES TYPE MASTER.", loggedInEmployee.Id);
return ApiResponse<object>.ErrorResponse("Access Denied.", "You do not have permission to Upload expenses for this project", 403); return ApiResponse<object>.ErrorResponse("Access Denied.", "You do not have permission to Manage masters", 403);
} }
var expensesType = _mapper.Map<ExpensesTypeMaster>(model); var expensesType = _mapper.Map<ExpensesTypeMaster>(model);
expensesType.TenantId = tenantId; expensesType.TenantId = tenantId;
@ -122,7 +122,7 @@ namespace Marco.Pms.Services.Service
if (!hasManagePermission) if (!hasManagePermission)
{ {
_logger.LogWarning("Access DENIED for employee {EmployeeId} for managing EXPANSES TYPE MASTER.", loggedInEmployee.Id); _logger.LogWarning("Access DENIED for employee {EmployeeId} for managing EXPANSES TYPE MASTER.", loggedInEmployee.Id);
return ApiResponse<object>.ErrorResponse("Access Denied.", "You do not have permission to Upload expenses for this project", 403); return ApiResponse<object>.ErrorResponse("Access Denied.", "You do not have permission to Manage masters", 403);
} }
// Validating the prvided data // Validating the prvided data
@ -150,7 +150,7 @@ namespace Marco.Pms.Services.Service
_context.ExpensesTypeMaster.Update(expensesType); _context.ExpensesTypeMaster.Update(expensesType);
await _context.SaveChangesAsync(); 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 // Saving the old entity in mongoDB
@ -236,7 +236,7 @@ namespace Marco.Pms.Services.Service
if (!hasManagePermission) if (!hasManagePermission)
{ {
_logger.LogWarning("Access DENIED for employee {EmployeeId} for managing EXPENSE STATUS MASTER.", loggedInEmployee.Id); _logger.LogWarning("Access DENIED for employee {EmployeeId} for managing EXPENSE STATUS MASTER.", loggedInEmployee.Id);
return ApiResponse<object>.ErrorResponse("Access Denied.", "You do not have permission to Upload expenses for this project", 403); return ApiResponse<object>.ErrorResponse("Access Denied.", "You do not have permission to Manage masters", 403);
} }
// Mapping the DTO to ExpensesStatusMaster Model // Mapping the DTO to ExpensesStatusMaster Model
@ -317,7 +317,7 @@ namespace Marco.Pms.Services.Service
if (!hasManagePermission) if (!hasManagePermission)
{ {
_logger.LogWarning("Access DENIED for employee {EmployeeId} for managing PAYMENT MODE MASTER.", loggedInEmployee.Id); _logger.LogWarning("Access DENIED for employee {EmployeeId} for managing PAYMENT MODE MASTER.", loggedInEmployee.Id);
return ApiResponse<object>.ErrorResponse("Access Denied.", "You do not have permission to Upload expenses for this project", 403); return ApiResponse<object>.ErrorResponse("Access Denied.", "You do not have permission to Manage masters", 403);
} }
// Mapping the DTO to PaymentModeMatser Model // Mapping the DTO to PaymentModeMatser Model
@ -345,6 +345,78 @@ namespace Marco.Pms.Services.Service
} }
} }
public async Task<ApiResponse<object>> 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<object>.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<object>.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<object>.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<object>.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<PaymentModeMatserVM>(paymentMode);
return ApiResponse<object>.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<object>.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<object>.ErrorResponse("Internal Error occured", ExceptionMapper(ex), 500);
}
}
#endregion #endregion
#region =================================================================== Helper Function =================================================================== #region =================================================================== Helper Function ===================================================================

View File

@ -20,6 +20,7 @@ namespace Marco.Pms.Services.Service.ServiceInterfaces
#region =================================================================== Payment mode APIs =================================================================== #region =================================================================== Payment mode APIs ===================================================================
Task<ApiResponse<object>> GetPaymentModeListAsync(Employee loggedInEmployee, Guid tenantId); Task<ApiResponse<object>> GetPaymentModeListAsync(Employee loggedInEmployee, Guid tenantId);
Task<ApiResponse<object>> CreatePaymentModeAsync(PaymentModeMatserDto model, Employee loggedInEmployee, Guid tenantId); Task<ApiResponse<object>> CreatePaymentModeAsync(PaymentModeMatserDto model, Employee loggedInEmployee, Guid tenantId);
Task<ApiResponse<object>> UpdatePaymentModeAsync(Guid id, PaymentModeMatserDto model, Employee loggedInEmployee, Guid tenantId);
#endregion #endregion
} }