Added an API to add new Expense type to master table for that tenant

This commit is contained in:
ashutosh.nehete 2025-07-25 10:26:29 +05:30
parent c2fe726f0c
commit e1102c2978
3 changed files with 47 additions and 15 deletions

View File

@ -879,7 +879,7 @@ namespace Marco.Pms.Services.Controllers
public async Task<IActionResult> CreateExpenseType(ExpensesTypeMasterDto dto) public async Task<IActionResult> CreateExpenseType(ExpensesTypeMasterDto dto)
{ {
var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync(); var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
var response = await _masterService.GetExpenseTypeListAsync(loggedInEmployee, tenantId); var response = await _masterService.CreateExpenseTypeAsync(dto, loggedInEmployee, tenantId);
return StatusCode(response.StatusCode, response); return StatusCode(response.StatusCode, response);
} }

View File

@ -58,21 +58,43 @@ namespace Marco.Pms.Services.Service
} }
} }
public async Task<ApiResponse<object>> CreateExpenseTypeAsync(ExpensesTypeMasterDto dto, Employee loggedInEmployee, Guid tenantId) public async Task<ApiResponse<object>> CreateExpenseTypeAsync(ExpensesTypeMasterDto model, Employee loggedInEmployee, Guid tenantId)
{ {
var hasManagePermission = await _permission.HasPermission(PermissionsMaster.ManageMasters, loggedInEmployee.Id); try
if (!hasManagePermission)
{ {
_logger.LogWarning("Access DENIED for employee {EmployeeId} for managing EXPANSES TYPE MASTER.", loggedInEmployee.Id); // Validation if employee is taking action in same tenant
return ApiResponse<object>.ErrorResponse("Access Denied.", "You do not have permission to Upload expenses for this project", 403); if (tenantId != loggedInEmployee.TenantId)
} {
var expensesType = _mapper.Map<ExpensesTypeMaster>(dto); _logger.LogWarning("Employee {EmployeeId} attempted to add new expense type in different tenant", loggedInEmployee.Id);
_context.ExpensesTypeMaster.Add(expensesType); return ApiResponse<object>.ErrorResponse("Access Denied", "User do not have access for this information", 403);
await _context.SaveChangesAsync(); }
_logger.LogInfo("New Expense Type {ExpensesTypeId} was added by employee {EmployeeId}", expensesType.Id, loggedInEmployee.Id); var hasManagePermission = await _permission.HasPermission(PermissionsMaster.ManageMasters, loggedInEmployee.Id);
if (!hasManagePermission)
{
_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);
}
var expensesType = _mapper.Map<ExpensesTypeMaster>(model);
expensesType.TenantId = tenantId;
var response = _mapper.Map<ExpensesTypeMasterVM>(expensesType); _context.ExpensesTypeMaster.Add(expensesType);
return ApiResponse<object>.SuccessResponse(response, "Expense type craeted Successfully", 201); await _context.SaveChangesAsync();
_logger.LogInfo("New Expense Type {ExpensesTypeId} was added by employee {EmployeeId}", expensesType.Id, loggedInEmployee.Id);
var response = _mapper.Map<ExpensesTypeMasterVM>(expensesType);
return ApiResponse<object>.SuccessResponse(response, "Expense type craeted Successfully", 201);
}
catch (DbUpdateException dbEx)
{
_logger.LogError(dbEx, "Database Exception occured while adding new expense type by employee {EmployeeId}", loggedInEmployee.Id);
return ApiResponse<object>.ErrorResponse("Internal Error occured", ExceptionMapper(dbEx), 500);
}
catch (Exception ex)
{
_logger.LogError(ex, "Exception occured while adding new expense type by employee {EmployeeId}", loggedInEmployee.Id);
return ApiResponse<object>.ErrorResponse("Internal Error occured", ExceptionMapper(ex), 500);
}
} }
#endregion #endregion
@ -148,7 +170,6 @@ namespace Marco.Pms.Services.Service
} }
} }
#endregion #endregion
#region =================================================================== Helper Function =================================================================== #region =================================================================== Helper Function ===================================================================

View File

@ -1,12 +1,23 @@
using Marco.Pms.Model.Employees; using Marco.Pms.Model.Dtos.Master;
using Marco.Pms.Model.Employees;
using Marco.Pms.Model.Utilities; using Marco.Pms.Model.Utilities;
namespace Marco.Pms.Services.Service.ServiceInterfaces namespace Marco.Pms.Services.Service.ServiceInterfaces
{ {
public interface IMasterService public interface IMasterService
{ {
#region =================================================================== Expenses Type APIs ===================================================================
Task<ApiResponse<object>> GetExpenseTypeListAsync(Employee loggedInEmployee, Guid tenantId); Task<ApiResponse<object>> GetExpenseTypeListAsync(Employee loggedInEmployee, Guid tenantId);
Task<ApiResponse<object>> CreateExpenseTypeAsync(ExpensesTypeMasterDto model, Employee loggedInEmployee, Guid tenantId);
#endregion
#region =================================================================== Expenses Status APIs ===================================================================
Task<ApiResponse<object>> GetExpenseStatusListAsync(Employee loggedInEmployee, Guid tenantId); Task<ApiResponse<object>> GetExpenseStatusListAsync(Employee loggedInEmployee, Guid tenantId);
#endregion
#region =================================================================== Payment mode APIs ===================================================================
Task<ApiResponse<object>> GetPaymentModeListAsync(Employee loggedInEmployee, Guid tenantId); Task<ApiResponse<object>> GetPaymentModeListAsync(Employee loggedInEmployee, Guid tenantId);
#endregion
} }
} }