Added an API to add new Expense status to master table for that tenant
This commit is contained in:
parent
1834c103f0
commit
9cd9bac975
12
Marco.Pms.Model/Dtos/Master/ExpensesStatusMasterDto.cs
Normal file
12
Marco.Pms.Model/Dtos/Master/ExpensesStatusMasterDto.cs
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
namespace Marco.Pms.Model.Dtos.Master
|
||||||
|
{
|
||||||
|
public class ExpensesStatusMasterDto
|
||||||
|
{
|
||||||
|
public Guid? Id { get; set; }
|
||||||
|
public required string Name { get; set; } = string.Empty;
|
||||||
|
public string DisplayName { get; set; } = string.Empty;
|
||||||
|
public string Description { get; set; } = string.Empty;
|
||||||
|
public List<Guid>? PermissionIds { get; set; }
|
||||||
|
public required string? Color { get; set; }
|
||||||
|
}
|
||||||
|
}
|
@ -888,10 +888,10 @@ namespace Marco.Pms.Services.Controllers
|
|||||||
#region =================================================================== Expenses Status APIs ===================================================================
|
#region =================================================================== Expenses Status APIs ===================================================================
|
||||||
|
|
||||||
[HttpGet("expenses-status")]
|
[HttpGet("expenses-status")]
|
||||||
public async Task<IActionResult> GetExpenseStatusList()
|
public async Task<IActionResult> GetExpensesStatusList()
|
||||||
{
|
{
|
||||||
var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
|
var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
|
||||||
var response = await _masterService.GetExpenseStatusListAsync(loggedInEmployee, tenantId);
|
var response = await _masterService.GetExpensesStatusListAsync(loggedInEmployee, tenantId);
|
||||||
return StatusCode(response.StatusCode, response);
|
return StatusCode(response.StatusCode, response);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -195,7 +195,7 @@ namespace Marco.Pms.Services.MappingProfiles
|
|||||||
.ForMember(
|
.ForMember(
|
||||||
dest => dest.Id,
|
dest => dest.Id,
|
||||||
// Explicitly and safely convert nullable Guid to non-nullable Guid
|
// Explicitly and safely convert nullable Guid to non-nullable Guid
|
||||||
opt => opt.MapFrom(src => src.Id != null ? src.Id : Guid.Empty)
|
opt => opt.MapFrom(src => src.Id ?? Guid.Empty)
|
||||||
);
|
);
|
||||||
CreateMap<ExpensesTypeMaster, ExpensesTypeMasterVM>();
|
CreateMap<ExpensesTypeMaster, ExpensesTypeMasterVM>();
|
||||||
|
|
||||||
@ -215,6 +215,13 @@ namespace Marco.Pms.Services.MappingProfiles
|
|||||||
|
|
||||||
#region ======================================================= Expenses Status Master =======================================================
|
#region ======================================================= Expenses Status Master =======================================================
|
||||||
|
|
||||||
|
CreateMap<ExpensesStatusMasterDto, ExpensesStatusMaster>()
|
||||||
|
.ForMember(
|
||||||
|
dest => dest.Id,
|
||||||
|
opt => opt.MapFrom(src => src.Id ?? Guid.Empty))
|
||||||
|
.ForMember(
|
||||||
|
dest => dest.DisplayName,
|
||||||
|
opt => opt.MapFrom(src => string.IsNullOrWhiteSpace(src.DisplayName) ? src.Name : src.DisplayName));
|
||||||
CreateMap<ExpensesStatusMaster, ExpensesStatusMasterVM>();
|
CreateMap<ExpensesStatusMaster, ExpensesStatusMasterVM>();
|
||||||
|
|
||||||
CreateMap<ExpensesStatusMaster, ExpensesStatusMasterMongoDB>()
|
CreateMap<ExpensesStatusMaster, ExpensesStatusMasterMongoDB>()
|
||||||
@ -237,7 +244,7 @@ namespace Marco.Pms.Services.MappingProfiles
|
|||||||
.ForMember(
|
.ForMember(
|
||||||
dest => dest.Id,
|
dest => dest.Id,
|
||||||
// Explicitly and safely convert nullable Guid to non-nullable Guid
|
// Explicitly and safely convert nullable Guid to non-nullable Guid
|
||||||
opt => opt.MapFrom(src => src.Id != null ? src.Id : Guid.Empty)
|
opt => opt.MapFrom(src => src.Id ?? Guid.Empty)
|
||||||
);
|
);
|
||||||
CreateMap<PaymentModeMatser, PaymentModeMatserVM>();
|
CreateMap<PaymentModeMatser, PaymentModeMatserVM>();
|
||||||
|
|
||||||
|
@ -3,6 +3,7 @@ using Marco.Pms.DataAccess.Data;
|
|||||||
using Marco.Pms.Model.Dtos.Master;
|
using Marco.Pms.Model.Dtos.Master;
|
||||||
using Marco.Pms.Model.Employees;
|
using Marco.Pms.Model.Employees;
|
||||||
using Marco.Pms.Model.Entitlements;
|
using Marco.Pms.Model.Entitlements;
|
||||||
|
using Marco.Pms.Model.Expenses;
|
||||||
using Marco.Pms.Model.Master;
|
using Marco.Pms.Model.Master;
|
||||||
using Marco.Pms.Model.Utilities;
|
using Marco.Pms.Model.Utilities;
|
||||||
using Marco.Pms.Model.ViewModels.Master;
|
using Marco.Pms.Model.ViewModels.Master;
|
||||||
@ -100,7 +101,7 @@ namespace Marco.Pms.Services.Service
|
|||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region =================================================================== Expenses Status APIs ===================================================================
|
#region =================================================================== Expenses Status APIs ===================================================================
|
||||||
public async Task<ApiResponse<object>> GetExpenseStatusListAsync(Employee loggedInEmployee, Guid tenantId)
|
public async Task<ApiResponse<object>> GetExpensesStatusListAsync(Employee loggedInEmployee, Guid tenantId)
|
||||||
{
|
{
|
||||||
|
|
||||||
try
|
try
|
||||||
@ -141,6 +142,59 @@ namespace Marco.Pms.Services.Service
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async Task<ApiResponse<object>> CreateExpensesStatusAsync(ExpensesStatusMasterDto 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 add new Expense Status in different tenant", loggedInEmployee.Id);
|
||||||
|
return ApiResponse<object>.ErrorResponse("Access Denied", "User do not have access for this information", 403);
|
||||||
|
}
|
||||||
|
var hasManagePermission = await _permission.HasPermission(PermissionsMaster.ManageMasters, loggedInEmployee.Id);
|
||||||
|
if (!hasManagePermission)
|
||||||
|
{
|
||||||
|
_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);
|
||||||
|
|
||||||
|
}
|
||||||
|
// Mapping the DTO to ExpensesStatusMaster Model
|
||||||
|
var expensesStatus = _mapper.Map<ExpensesStatusMaster>(model);
|
||||||
|
expensesStatus.TenantId = tenantId;
|
||||||
|
|
||||||
|
_context.ExpensesStatusMaster.Add(expensesStatus);
|
||||||
|
|
||||||
|
if (model.PermissionIds?.Any() ?? false)
|
||||||
|
{
|
||||||
|
var permissionStatusMappings = model.PermissionIds.Select(p => new StatusPermissionMapping
|
||||||
|
{
|
||||||
|
PermissionId = p,
|
||||||
|
StatusId = expensesStatus.Id,
|
||||||
|
TenantId = tenantId
|
||||||
|
}).ToList();
|
||||||
|
|
||||||
|
_context.StatusPermissionMapping.AddRange(permissionStatusMappings);
|
||||||
|
}
|
||||||
|
await _context.SaveChangesAsync();
|
||||||
|
|
||||||
|
_logger.LogInfo("New Expense Status {ExpensesStatusId} was added by employee {EmployeeId}", expensesStatus.Id, loggedInEmployee.Id);
|
||||||
|
|
||||||
|
// Mapping the ExpensesStatusMaster Model to View Model
|
||||||
|
var response = _mapper.Map<ExpensesStatusMasterVM>(expensesStatus);
|
||||||
|
return ApiResponse<object>.SuccessResponse(response, "Expense Status craeted Successfully", 201);
|
||||||
|
}
|
||||||
|
catch (DbUpdateException dbEx)
|
||||||
|
{
|
||||||
|
_logger.LogError(dbEx, "Database Exception occured while adding new Expense Status 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 Status by employee {EmployeeId}", loggedInEmployee.Id);
|
||||||
|
return ApiResponse<object>.ErrorResponse("Internal Error occured", ExceptionMapper(ex), 500);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
@ -12,7 +12,7 @@ namespace Marco.Pms.Services.Service.ServiceInterfaces
|
|||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
#region =================================================================== Expenses Status APIs ===================================================================
|
#region =================================================================== Expenses Status APIs ===================================================================
|
||||||
Task<ApiResponse<object>> GetExpenseStatusListAsync(Employee loggedInEmployee, Guid tenantId);
|
Task<ApiResponse<object>> GetExpensesStatusListAsync(Employee loggedInEmployee, Guid tenantId);
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
#region =================================================================== Payment mode APIs ===================================================================
|
#region =================================================================== Payment mode APIs ===================================================================
|
||||||
|
Loading…
x
Reference in New Issue
Block a user