Change the ExpanseController to ExpenseController
This commit is contained in:
parent
741acb194e
commit
c1845dd8b7
23
Marco.Pms.Model/ViewModels/Expenses/ExpenseList.cs
Normal file
23
Marco.Pms.Model/ViewModels/Expenses/ExpenseList.cs
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
using Marco.Pms.Model.ViewModels.Activities;
|
||||||
|
using Marco.Pms.Model.ViewModels.Master;
|
||||||
|
using Marco.Pms.Model.ViewModels.Projects;
|
||||||
|
|
||||||
|
namespace Marco.Pms.Model.ViewModels.Expanses
|
||||||
|
{
|
||||||
|
public class ExpenseList
|
||||||
|
{
|
||||||
|
public Guid Id { get; set; }
|
||||||
|
public ProjectInfoVM? Project { get; set; }
|
||||||
|
public ExpensesTypeMasterVM? ExpensesType { get; set; }
|
||||||
|
public PaymentModeMatserVM? PaymentMode { get; set; }
|
||||||
|
public BasicEmployeeVM? PaidBy { get; set; }
|
||||||
|
public BasicEmployeeVM? CreatedBy { get; set; }
|
||||||
|
public DateTime TransactionDate { get; set; }
|
||||||
|
public DateTime CreatedAt { get; set; }
|
||||||
|
public string SupplerName { get; set; } = string.Empty;
|
||||||
|
public double Amount { get; set; }
|
||||||
|
public ExpensesStatusMasterVM? Status { get; set; }
|
||||||
|
public List<ExpensesStatusMasterVM>? NextStatus { get; set; }
|
||||||
|
public bool PreApproved { get; set; } = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
10
Marco.Pms.Model/ViewModels/Master/ExpensesStatusMasterVM.cs
Normal file
10
Marco.Pms.Model/ViewModels/Master/ExpensesStatusMasterVM.cs
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
namespace Marco.Pms.Model.ViewModels.Master
|
||||||
|
{
|
||||||
|
public class ExpensesStatusMasterVM
|
||||||
|
{
|
||||||
|
public Guid Id { get; set; }
|
||||||
|
public string Name { get; set; } = string.Empty;
|
||||||
|
public string Description { get; set; } = string.Empty;
|
||||||
|
public bool IsSystem { get; set; } = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
10
Marco.Pms.Model/ViewModels/Master/ExpensesTypeMasterVM.cs
Normal file
10
Marco.Pms.Model/ViewModels/Master/ExpensesTypeMasterVM.cs
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
namespace Marco.Pms.Model.ViewModels.Master
|
||||||
|
{
|
||||||
|
public class ExpensesTypeMasterVM
|
||||||
|
{
|
||||||
|
public Guid Id { get; set; }
|
||||||
|
public string Name { get; set; } = string.Empty;
|
||||||
|
public bool NoOfPersonsRequired { get; set; }
|
||||||
|
public string Description { get; set; } = string.Empty;
|
||||||
|
}
|
||||||
|
}
|
||||||
9
Marco.Pms.Model/ViewModels/Master/PaymentModeMatserVM.cs
Normal file
9
Marco.Pms.Model/ViewModels/Master/PaymentModeMatserVM.cs
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
namespace Marco.Pms.Model.ViewModels.Master
|
||||||
|
{
|
||||||
|
public class PaymentModeMatserVM
|
||||||
|
{
|
||||||
|
public Guid Id { get; set; }
|
||||||
|
public string Name { get; set; } = string.Empty;
|
||||||
|
public string Description { get; set; } = string.Empty;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,8 +1,11 @@
|
|||||||
using Marco.Pms.DataAccess.Data;
|
using AutoMapper;
|
||||||
|
using Marco.Pms.DataAccess.Data;
|
||||||
using Marco.Pms.Model.Dtos.Expenses;
|
using Marco.Pms.Model.Dtos.Expenses;
|
||||||
using Marco.Pms.Model.Entitlements;
|
using Marco.Pms.Model.Entitlements;
|
||||||
using Marco.Pms.Model.Expenses;
|
using Marco.Pms.Model.Expenses;
|
||||||
using Marco.Pms.Model.Utilities;
|
using Marco.Pms.Model.Utilities;
|
||||||
|
using Marco.Pms.Model.ViewModels.Expanses;
|
||||||
|
using Marco.Pms.Model.ViewModels.Master;
|
||||||
using Marco.Pms.Services.Service;
|
using Marco.Pms.Services.Service;
|
||||||
using MarcoBMS.Services.Helpers;
|
using MarcoBMS.Services.Helpers;
|
||||||
using MarcoBMS.Services.Service;
|
using MarcoBMS.Services.Service;
|
||||||
@ -18,42 +21,100 @@ namespace Marco.Pms.Services.Controllers
|
|||||||
[Route("api/[controller]")]
|
[Route("api/[controller]")]
|
||||||
[ApiController]
|
[ApiController]
|
||||||
[Authorize]
|
[Authorize]
|
||||||
public class ExpanseController : ControllerBase
|
public class ExpenseController : ControllerBase
|
||||||
{
|
{
|
||||||
private readonly ApplicationDbContext _context;
|
private readonly ApplicationDbContext _context;
|
||||||
private readonly UserHelper _userHelper;
|
private readonly UserHelper _userHelper;
|
||||||
private readonly PermissionServices _permission;
|
private readonly PermissionServices _permission;
|
||||||
private readonly ILoggingService _logger;
|
private readonly ILoggingService _logger;
|
||||||
private readonly S3UploadService _s3Service;
|
private readonly S3UploadService _s3Service;
|
||||||
|
private readonly IMapper _mapper;
|
||||||
private readonly Guid tenantId;
|
private readonly Guid tenantId;
|
||||||
public ExpanseController(
|
public ExpenseController(
|
||||||
ApplicationDbContext context,
|
ApplicationDbContext context,
|
||||||
UserHelper userHelper,
|
UserHelper userHelper,
|
||||||
PermissionServices permission,
|
PermissionServices permission,
|
||||||
ILoggingService logger,
|
ILoggingService logger,
|
||||||
S3UploadService s3Service)
|
S3UploadService s3Service,
|
||||||
|
IMapper mapper)
|
||||||
{
|
{
|
||||||
_context = context;
|
_context = context;
|
||||||
_userHelper = userHelper;
|
_userHelper = userHelper;
|
||||||
_permission = permission;
|
_permission = permission;
|
||||||
_logger = logger;
|
_logger = logger;
|
||||||
tenantId = userHelper.GetTenantId();
|
|
||||||
_s3Service = s3Service;
|
_s3Service = s3Service;
|
||||||
|
_mapper = mapper;
|
||||||
|
tenantId = userHelper.GetTenantId();
|
||||||
}
|
}
|
||||||
|
|
||||||
[HttpGet("list")]
|
[HttpGet("list")]
|
||||||
public async Task<IActionResult> Get()
|
public async Task<IActionResult> GetExpensesList()
|
||||||
{
|
{
|
||||||
var expensesList = await _context.Expenses
|
var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
|
||||||
|
var loggedInEmployeeId = loggedInEmployee.Id;
|
||||||
|
|
||||||
|
List<Expenses>? expensesList = null;
|
||||||
|
var expensesListQuery = _context.Expenses
|
||||||
.Include(e => e.ExpensesType)
|
.Include(e => e.ExpensesType)
|
||||||
.Include(e => e.Project)
|
.Include(e => e.Project)
|
||||||
.Include(e => e.PaidBy)
|
.Include(e => e.PaidBy)
|
||||||
|
.ThenInclude(e => e!.JobRole)
|
||||||
.Include(e => e.PaymentMode)
|
.Include(e => e.PaymentMode)
|
||||||
.Include(e => e.Status)
|
.Include(e => e.Status)
|
||||||
.Include(e => e.CreatedBy)
|
.Include(e => e.CreatedBy)
|
||||||
.Where(e => e.TenantId == tenantId)
|
.Where(e => e.TenantId == tenantId);
|
||||||
|
|
||||||
|
var HasViewAllPermission = await _permission.HasPermission(PermissionsMaster.ExpenseViewAll, loggedInEmployeeId);
|
||||||
|
var HasViewSelfPermission = await _permission.HasPermission(PermissionsMaster.ExpenseViewSelf, loggedInEmployeeId);
|
||||||
|
|
||||||
|
if (HasViewAllPermission)
|
||||||
|
{
|
||||||
|
expensesList = await expensesListQuery.ToListAsync();
|
||||||
|
}
|
||||||
|
else if (HasViewSelfPermission)
|
||||||
|
{
|
||||||
|
expensesList = await expensesListQuery.Where(e => e.CreatedById == loggedInEmployeeId).ToListAsync();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (expensesList == null)
|
||||||
|
{
|
||||||
|
_logger.LogInfo("No Expense found for employee {EmployeeId}", loggedInEmployeeId);
|
||||||
|
return Ok(ApiResponse<object>.SuccessResponse(new List<ExpenseList>(), "No Expense found for current user", 200));
|
||||||
|
}
|
||||||
|
|
||||||
|
//ImageFilter? imageFilter = null;
|
||||||
|
//if (!string.IsNullOrWhiteSpace(filter))
|
||||||
|
//{
|
||||||
|
// try
|
||||||
|
// {
|
||||||
|
// var options = new JsonSerializerOptions { PropertyNameCaseInsensitive = true };
|
||||||
|
// //string unescapedJsonString = JsonSerializer.Deserialize<string>(filter, options) ?? "";
|
||||||
|
// //imageFilter = JsonSerializer.Deserialize<ImageFilter>(unescapedJsonString, options);
|
||||||
|
// imageFilter = JsonSerializer.Deserialize<ImageFilter>(filter, options);
|
||||||
|
// }
|
||||||
|
// catch (Exception ex)
|
||||||
|
// {
|
||||||
|
// _logger.LogWarning("[GetImageList] Failed to parse filter: {Message}", ex.Message);
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
|
||||||
|
|
||||||
|
var response = _mapper.Map<List<ExpenseList>>(expensesList);
|
||||||
|
|
||||||
|
var statusIds = expensesList.Select(e => e.StatusId).ToList();
|
||||||
|
|
||||||
|
var statusMappings = await _context.ExpensesStatusMapping
|
||||||
|
.Include(sm => sm.NextStatus)
|
||||||
|
.Where(sm => statusIds.Contains(sm.StatusId))
|
||||||
.ToListAsync();
|
.ToListAsync();
|
||||||
return StatusCode(200, ApiResponse<object>.SuccessResponse(expensesList));
|
|
||||||
|
foreach (var expense in response)
|
||||||
|
{
|
||||||
|
var statusMapping = statusMappings.Where(sm => sm.StatusId == expense.Status?.Id).Select(sm => _mapper.Map<ExpensesStatusMasterVM>(sm.NextStatus)).ToList();
|
||||||
|
expense.NextStatus = statusMapping;
|
||||||
|
|
||||||
|
}
|
||||||
|
return StatusCode(200, ApiResponse<object>.SuccessResponse(response, $"{response.Count} records of expenses for you fetched successfully", 200));
|
||||||
}
|
}
|
||||||
|
|
||||||
[HttpGet("details/{id}")]
|
[HttpGet("details/{id}")]
|
||||||
@ -2,10 +2,14 @@ using AutoMapper;
|
|||||||
using Marco.Pms.Model.Dtos.Master;
|
using Marco.Pms.Model.Dtos.Master;
|
||||||
using Marco.Pms.Model.Dtos.Project;
|
using Marco.Pms.Model.Dtos.Project;
|
||||||
using Marco.Pms.Model.Employees;
|
using Marco.Pms.Model.Employees;
|
||||||
|
using Marco.Pms.Model.Expenses;
|
||||||
using Marco.Pms.Model.Master;
|
using Marco.Pms.Model.Master;
|
||||||
using Marco.Pms.Model.MongoDBModels;
|
using Marco.Pms.Model.MongoDBModels;
|
||||||
using Marco.Pms.Model.Projects;
|
using Marco.Pms.Model.Projects;
|
||||||
|
using Marco.Pms.Model.ViewModels.Activities;
|
||||||
using Marco.Pms.Model.ViewModels.Employee;
|
using Marco.Pms.Model.ViewModels.Employee;
|
||||||
|
using Marco.Pms.Model.ViewModels.Expanses;
|
||||||
|
using Marco.Pms.Model.ViewModels.Master;
|
||||||
using Marco.Pms.Model.ViewModels.Projects;
|
using Marco.Pms.Model.ViewModels.Projects;
|
||||||
|
|
||||||
namespace Marco.Pms.Services.MappingProfiles
|
namespace Marco.Pms.Services.MappingProfiles
|
||||||
@ -63,6 +67,17 @@ namespace Marco.Pms.Services.MappingProfiles
|
|||||||
|
|
||||||
#region ======================================================= Employee =======================================================
|
#region ======================================================= Employee =======================================================
|
||||||
CreateMap<Employee, EmployeeVM>();
|
CreateMap<Employee, EmployeeVM>();
|
||||||
|
CreateMap<Employee, BasicEmployeeVM>()
|
||||||
|
.ForMember(
|
||||||
|
dest => dest.JobRoleName,
|
||||||
|
opt => opt.MapFrom(src => src.JobRole != null ? src.JobRole.Name : ""));
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region ======================================================= Expenses =======================================================
|
||||||
|
|
||||||
|
CreateMap<Expenses, ExpenseList>();
|
||||||
|
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region ======================================================= Master =======================================================
|
#region ======================================================= Master =======================================================
|
||||||
@ -72,6 +87,9 @@ namespace Marco.Pms.Services.MappingProfiles
|
|||||||
// 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 != null ? src.Id : Guid.Empty)
|
||||||
);
|
);
|
||||||
|
CreateMap<ExpensesTypeMaster, ExpensesTypeMasterVM>();
|
||||||
|
CreateMap<ExpensesStatusMaster, ExpensesStatusMasterVM>();
|
||||||
|
CreateMap<PaymentModeMatser, PaymentModeMatserVM>();
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user