added get advance payment transaction api
This commit is contained in:
parent
18cd1efafa
commit
e8a2191bc2
@ -0,0 +1,24 @@
|
|||||||
|
using Marco.Pms.Model.ViewModels.Activities;
|
||||||
|
using Microsoft.AspNetCore.Mvc.ModelBinding.Validation;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.ComponentModel.DataAnnotations.Schema;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Marco.Pms.Model.ViewModels.Expenses
|
||||||
|
{
|
||||||
|
public class AdvancePaymentTransactionVM
|
||||||
|
{
|
||||||
|
public Guid Id { get; set; }
|
||||||
|
public string FinanceUId { get; set; } = default!;
|
||||||
|
public BasicEmployeeVM? Employee { get; set; }
|
||||||
|
public double Amount { get; set; }
|
||||||
|
public DateTime CreatedAt { get; set; }
|
||||||
|
|
||||||
|
public BasicEmployeeVM? CreatedBy { get; set; }
|
||||||
|
public bool IsActive { get; set; }
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -46,11 +46,11 @@ namespace Marco.Pms.Services.Controllers
|
|||||||
return StatusCode(response.StatusCode, response);
|
return StatusCode(response.StatusCode, response);
|
||||||
}
|
}
|
||||||
|
|
||||||
[HttpGet("details/{id}")]
|
[HttpGet("details")]
|
||||||
public async Task<IActionResult> GetExpenseDetails(Guid id)
|
public async Task<IActionResult> GetExpenseDetails([FromQuery] Guid? id,[FromQuery] string? financeUId)
|
||||||
{
|
{
|
||||||
var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
|
var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
|
||||||
var response = await _expensesService.GetExpenseDetailsAsync(id, loggedInEmployee, tenantId);
|
var response = await _expensesService.GetExpenseDetailsAsync(id, financeUId, loggedInEmployee, tenantId);
|
||||||
return StatusCode(response.StatusCode, response);
|
return StatusCode(response.StatusCode, response);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -122,5 +122,14 @@ namespace Marco.Pms.Services.Controllers
|
|||||||
return StatusCode(response.StatusCode, response);
|
return StatusCode(response.StatusCode, response);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[HttpGet("/get/transactions/{employeeId}")]
|
||||||
|
public async Task<IActionResult> GetAdvancePaymentTransaction(Guid employeeId)
|
||||||
|
{
|
||||||
|
var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
|
||||||
|
var response = await _expensesService.GetAdvancePaymentTransactionAsync(employeeId);
|
||||||
|
|
||||||
|
return StatusCode(response.StatusCode, response);
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -258,6 +258,8 @@ namespace Marco.Pms.Services.MappingProfiles
|
|||||||
dest => dest.Id,
|
dest => dest.Id,
|
||||||
opt => opt.MapFrom(src => Guid.Parse(src.Id)));
|
opt => opt.MapFrom(src => Guid.Parse(src.Id)));
|
||||||
|
|
||||||
|
CreateMap<AdvancePaymentTransaction, AdvancePaymentTransactionVM>();
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region ======================================================= Collection =======================================================
|
#region ======================================================= Collection =======================================================
|
||||||
|
|||||||
@ -284,11 +284,23 @@ namespace Marco.Pms.Services.Service
|
|||||||
return ApiResponse<object>.ErrorResponse("Error Occured", ExceptionMapper(ex), 500);
|
return ApiResponse<object>.ErrorResponse("Error Occured", ExceptionMapper(ex), 500);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public async Task<ApiResponse<object>> GetExpenseDetailsAsync(Guid id, Employee loggedInEmployee, Guid tenantId)
|
public async Task<ApiResponse<object>> GetExpenseDetailsAsync(Guid? id,string? financeUId, Employee loggedInEmployee, Guid tenantId)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
//ExpenseDetailsMongoDB? expenseDetails = await _cache.GetExpenseDetailsById(id, tenantId);
|
|
||||||
|
if(string.IsNullOrWhiteSpace(financeUId))
|
||||||
|
return ApiResponse<object>.ErrorResponse("Finance UID is required.", null, 400);
|
||||||
|
|
||||||
|
var parts = financeUId.Split('-');
|
||||||
|
if (parts.Length != 2)
|
||||||
|
return ApiResponse<object>.ErrorResponse("Invalid Finance UID format.", null, 400);
|
||||||
|
|
||||||
|
var prefix = parts[0];
|
||||||
|
var postfixStr = parts[1];
|
||||||
|
|
||||||
|
if (!int.TryParse(postfixStr, out int postfix))
|
||||||
|
return ApiResponse<object>.ErrorResponse("Invalid Finance UID number format.", null, 400);
|
||||||
ExpenseDetailsMongoDB? expenseDetails = null;
|
ExpenseDetailsMongoDB? expenseDetails = null;
|
||||||
if (expenseDetails == null)
|
if (expenseDetails == null)
|
||||||
{
|
{
|
||||||
@ -303,7 +315,7 @@ namespace Marco.Pms.Services.Service
|
|||||||
.Include(e => e.PaymentMode)
|
.Include(e => e.PaymentMode)
|
||||||
.Include(e => e.ExpensesType)
|
.Include(e => e.ExpensesType)
|
||||||
.Include(e => e.Status)
|
.Include(e => e.Status)
|
||||||
.AsNoTracking().FirstOrDefaultAsync(e => e.Id == id && e.TenantId == tenantId);
|
.AsNoTracking().FirstOrDefaultAsync(e =>(e.Id == id || e.ExpenseUId == financeUId ) && e.TenantId == tenantId);
|
||||||
|
|
||||||
if (expense == null)
|
if (expense == null)
|
||||||
{
|
{
|
||||||
@ -422,6 +434,60 @@ namespace Marco.Pms.Services.Service
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async Task<ApiResponse<object>> GetAdvancePaymentTransactionAsync(Guid employeeId)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var transactions = await _context.AdvancePaymentTransactions
|
||||||
|
.Include(t => t.Employee)
|
||||||
|
.Include(t => t.CreatedBy)
|
||||||
|
.Where(t => t.EmployeeId == employeeId && t.IsActive)
|
||||||
|
.OrderByDescending(t => t.CreatedAt)
|
||||||
|
//.Select(t => new AdvancePaymentTransactionVM
|
||||||
|
//{
|
||||||
|
// Id = t.Id,
|
||||||
|
// FinanceUId = t.FinanceUIdPrefix + "/" + t.FinanceUIdPostfix,
|
||||||
|
// Amount = t.Amount,
|
||||||
|
// CreatedAt = t.CreatedAt,
|
||||||
|
// IsActive = t.IsActive,
|
||||||
|
// Employee = t.Employee == null ? null : new BasicEmployeeVM
|
||||||
|
// {
|
||||||
|
// Id = t.Employee.Id,
|
||||||
|
// FirstName = t.Employee.FirstName,
|
||||||
|
// LastName = t.Employee.LastName,
|
||||||
|
// },
|
||||||
|
// CreatedBy = t.CreatedBy == null ? null : new BasicEmployeeVM
|
||||||
|
// {
|
||||||
|
// Id = t.CreatedBy.Id,
|
||||||
|
// FirstName = t.Employee.FirstName,
|
||||||
|
// LastName = t.Employee.LastName,
|
||||||
|
// }
|
||||||
|
//})
|
||||||
|
.ToListAsync();
|
||||||
|
|
||||||
|
if (transactions == null || !transactions.Any())
|
||||||
|
return ApiResponse<object>.ErrorResponse("No advance payment transactions found.", null, 404);
|
||||||
|
|
||||||
|
var response = transactions.Select(transaction =>
|
||||||
|
{
|
||||||
|
var result = _mapper.Map<AdvancePaymentTransactionVM>(transaction);
|
||||||
|
result.FinanceUId = transaction.FinanceUIdPrefix + "/" + transaction.FinanceUIdPostfix.ToString("D5");
|
||||||
|
return result;
|
||||||
|
}).ToList();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
return ApiResponse<object>.SuccessResponse(response, "Advance payment transaction fetched successfully", 200);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
_logger.LogError(ex, "Exception occurred while fetching the list of Advance Payment Transactions.");
|
||||||
|
return ApiResponse<object>.ErrorResponse("Internal exception occurred.", ExceptionMapper(ex), 500);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region =================================================================== Post Functions ===================================================================
|
#region =================================================================== Post Functions ===================================================================
|
||||||
|
|||||||
@ -7,12 +7,14 @@ namespace Marco.Pms.Services.Service.ServiceInterfaces
|
|||||||
public interface IExpensesService
|
public interface IExpensesService
|
||||||
{
|
{
|
||||||
Task<ApiResponse<object>> GetExpensesListAsync(Employee loggedInEmployee, Guid tenantId, string? searchString, string? filter, int pageSize, int pageNumber);
|
Task<ApiResponse<object>> GetExpensesListAsync(Employee loggedInEmployee, Guid tenantId, string? searchString, string? filter, int pageSize, int pageNumber);
|
||||||
Task<ApiResponse<object>> GetExpenseDetailsAsync(Guid id, Employee loggedInEmployee, Guid tenantId);
|
Task<ApiResponse<object>> GetExpenseDetailsAsync(Guid? id, string? financeUId, Employee loggedInEmployee, Guid tenantId);
|
||||||
Task<ApiResponse<object>> GetSupplerNameListAsync(Employee loggedInEmployee, Guid tenantId);
|
Task<ApiResponse<object>> GetSupplerNameListAsync(Employee loggedInEmployee, Guid tenantId);
|
||||||
Task<ApiResponse<object>> GetFilterObjectAsync(Employee loggedInEmployee, Guid tenantId);
|
Task<ApiResponse<object>> GetFilterObjectAsync(Employee loggedInEmployee, Guid tenantId);
|
||||||
Task<ApiResponse<object>> CreateExpenseAsync(CreateExpensesDto dto, Employee loggedInEmployee, Guid tenantId);
|
Task<ApiResponse<object>> CreateExpenseAsync(CreateExpensesDto dto, Employee loggedInEmployee, Guid tenantId);
|
||||||
Task<ApiResponse<object>> ChangeStatusAsync(ExpenseRecordDto model, Employee loggedInEmployee, Guid tenantId);
|
Task<ApiResponse<object>> ChangeStatusAsync(ExpenseRecordDto model, Employee loggedInEmployee, Guid tenantId);
|
||||||
Task<ApiResponse<object>> UpdateExpanseAsync(Guid id, UpdateExpensesDto model, Employee loggedInEmployee, Guid tenantId);
|
Task<ApiResponse<object>> UpdateExpanseAsync(Guid id, UpdateExpensesDto model, Employee loggedInEmployee, Guid tenantId);
|
||||||
Task<ApiResponse<object>> DeleteExpanseAsync(Guid id, Employee loggedInEmployee, Guid tenantId);
|
Task<ApiResponse<object>> DeleteExpanseAsync(Guid id, Employee loggedInEmployee, Guid tenantId);
|
||||||
|
|
||||||
|
Task<ApiResponse<object>> GetAdvancePaymentTransactionAsync(Guid id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user