Added the edit recurring payment API template
This commit is contained in:
parent
c285f2be03
commit
e9175156e6
33
Marco.Pms.Model/ViewModels/Expenses/RecurringPaymentVM.cs
Normal file
33
Marco.Pms.Model/ViewModels/Expenses/RecurringPaymentVM.cs
Normal file
@ -0,0 +1,33 @@
|
||||
using Marco.Pms.Model.Expenses;
|
||||
using Marco.Pms.Model.Master;
|
||||
using Marco.Pms.Model.TenantModels;
|
||||
using Marco.Pms.Model.ViewModels.Activities;
|
||||
using Marco.Pms.Model.ViewModels.Master;
|
||||
using Marco.Pms.Model.ViewModels.Projects;
|
||||
|
||||
namespace Marco.Pms.Model.ViewModels.Expenses
|
||||
{
|
||||
public class RecurringPaymentVM
|
||||
{
|
||||
public Guid Id { get; set; }
|
||||
public string? Title { get; set; }
|
||||
public string? Description { get; set; }
|
||||
public string? RecurringPaymentUId { get; set; }
|
||||
public string? Payee { get; set; }
|
||||
public string? NotifyTo { get; set; }
|
||||
public CurrencyMaster? Currency { get; set; }
|
||||
public double Amount { get; set; }
|
||||
public DateTime StrikeDate { get; set; }
|
||||
public DateTime? LatestPRGeneratedAt { get; set; }
|
||||
public BasicProjectVM? Project { get; set; }
|
||||
public int PaymentBufferDays { get; set; }
|
||||
public int NumberOfIteration { get; set; }
|
||||
public ExpensesCategoryMasterVM? ExpenseCategory { get; set; }
|
||||
public RecurringPaymentStatus? Status { get; set; }
|
||||
public PLAN_FREQUENCY Frequency { get; set; }
|
||||
public bool IsVariable { get; set; }
|
||||
public bool IsActive { get; set; }
|
||||
public DateTime CreatedAt { get; set; }
|
||||
public BasicEmployeeVM? CreatedBy { get; set; }
|
||||
}
|
||||
}
|
||||
@ -222,6 +222,16 @@ namespace Marco.Pms.Services.Controllers
|
||||
|
||||
return StatusCode(response.StatusCode, response);
|
||||
|
||||
}
|
||||
|
||||
[HttpPost("recurring-payment/edit/{id}")]
|
||||
public async Task<IActionResult> EditRecurringPaymentAsync(Guid id, [FromBody] RecurringTemplateDto model)
|
||||
{
|
||||
var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
|
||||
var response = await _expensesService.EditRecurringPaymentAsync(id, model, loggedInEmployee, tenantId);
|
||||
|
||||
return StatusCode(response.StatusCode, response);
|
||||
|
||||
}
|
||||
#endregion
|
||||
|
||||
|
||||
@ -270,7 +270,7 @@ namespace Marco.Pms.Services.MappingProfiles
|
||||
#region ======================================================= Recurring Request =======================================================
|
||||
|
||||
CreateMap<RecurringTemplateDto, RecurringPayment>();
|
||||
//CreateMap<RecurringPayment, PaymentRequestVM>();
|
||||
CreateMap<RecurringPayment, RecurringPaymentVM>();
|
||||
//CreateMap<RecurringPayment, PaymentRequestDetailsVM>();
|
||||
|
||||
#endregion
|
||||
|
||||
@ -1943,7 +1943,7 @@ namespace Marco.Pms.Services.Service
|
||||
|
||||
if (!hasAttachments && paymentRequest.ExpenseCategory!.IsAttachmentRequried)
|
||||
{
|
||||
_logger.LogWarning("Attachment is required for ExpenseCategory {ExpenseCategoryId} but no attachments provided.", paymentRequest.ExpenseCategoryId);
|
||||
_logger.LogWarning("Attachment is required for ExpenseCategory {ExpenseCategoryId} but no attachments provided.", paymentRequest.ExpenseCategoryId!);
|
||||
return ApiResponse<object>.ErrorResponse("Attachment is required.", "Attachment is required.", 400);
|
||||
}
|
||||
|
||||
@ -1969,7 +1969,7 @@ namespace Marco.Pms.Services.Service
|
||||
var expenseStatuses = expenseStatusTask.Result;
|
||||
|
||||
// Generate Expense UID with prefix for current period
|
||||
string uIDPrefix = $"EX/{DateTime.Now:MM.yy}";
|
||||
string uIDPrefix = $"EX/{DateTime.Now:MMyy}";
|
||||
|
||||
var lastExpense = await _context.Expenses
|
||||
.Where(e => e.UIDPrefix == uIDPrefix)
|
||||
@ -2067,7 +2067,6 @@ namespace Marco.Pms.Services.Service
|
||||
_logger.LogInfo("End ChangeToExpanseFromPaymentRequestAsync called by EmployeeId: {EmployeeId}", loggedInEmployee.Id);
|
||||
}
|
||||
}
|
||||
|
||||
public async Task<ApiResponse<object>> EditPaymentRequestAsync(Guid id, PaymentRequestDto model, Employee loggedInEmployee, Guid tenantId)
|
||||
{
|
||||
_logger.LogInfo("Start EditPaymentRequestAsync for PaymentRequestId: {PaymentRequestId}, EmployeeId: {EmployeeId}", id, loggedInEmployee.Id);
|
||||
@ -2311,8 +2310,98 @@ namespace Marco.Pms.Services.Service
|
||||
#region =================================================================== Recurring Payment Functions ===================================================================
|
||||
public async Task<ApiResponse<object>> CreateRecurringPaymentAsync(RecurringTemplateDto model, Employee loggedInEmployee, Guid tenantId)
|
||||
{
|
||||
using var scope = _serviceScopeFactory.CreateScope();
|
||||
var permissionService = scope.ServiceProvider.GetRequiredService<PermissionServices>();
|
||||
var hasPermission = await permissionService.HasPermission(PermissionsMaster.ManageRecurring, loggedInEmployee.Id);
|
||||
|
||||
if (!hasPermission)
|
||||
{
|
||||
_logger.LogWarning("Employee {EmployeeId} attempted to create recurring template", loggedInEmployee.Id);
|
||||
return ApiResponse<object>.ErrorResponse("You do not have access to create recurring template", "You do not have access to create recurring template", 400);
|
||||
}
|
||||
|
||||
var expenseCategoryTask = Task.Run(async () =>
|
||||
{
|
||||
await using var context = await _dbContextFactory.CreateDbContextAsync();
|
||||
return await context.ExpenseCategoryMasters.FirstOrDefaultAsync(et => et.Id == model.ExpenseCategoryId && et.IsActive);
|
||||
});
|
||||
var currencyTask = Task.Run(async () =>
|
||||
{
|
||||
await using var context = await _dbContextFactory.CreateDbContextAsync();
|
||||
return await context.CurrencyMaster.FirstOrDefaultAsync(c => c.Id == model.CurrencyId);
|
||||
});
|
||||
var projectTask = Task.Run(async () =>
|
||||
{
|
||||
await using var context = await _dbContextFactory.CreateDbContextAsync();
|
||||
return await context.Projects.FirstOrDefaultAsync(P => model.ProjectId.HasValue && P.Id == model.ProjectId.Value);
|
||||
});
|
||||
|
||||
await Task.WhenAll(expenseCategoryTask, currencyTask, projectTask);
|
||||
|
||||
var expenseCategory = await expenseCategoryTask;
|
||||
if (expenseCategory == null)
|
||||
{
|
||||
_logger.LogWarning("Expense Category not found with Id: {ExpenseCategoryId}", model.ExpenseCategoryId);
|
||||
return ApiResponse<object>.ErrorResponse("Expense Category not found.", "Expense Category not found.", 404);
|
||||
}
|
||||
|
||||
var currency = await currencyTask;
|
||||
if (currency == null)
|
||||
{
|
||||
_logger.LogWarning("Currency not found with Id: {CurrencyId}", model.CurrencyId);
|
||||
return ApiResponse<object>.ErrorResponse("Currency not found.", "Currency not found.", 404);
|
||||
}
|
||||
|
||||
var project = await projectTask;
|
||||
|
||||
string uIDPrefix = $"RP/{DateTime.Now:MMyy}";
|
||||
|
||||
var lastExpense = await _context.RecurringPayments
|
||||
.Where(e => e.UIDPrefix == uIDPrefix)
|
||||
.OrderByDescending(e => e.UIDPostfix)
|
||||
.FirstOrDefaultAsync();
|
||||
|
||||
int uIDPostfix = lastExpense == null ? 1 : (lastExpense.UIDPostfix + 1);
|
||||
|
||||
var recurringPayment = _mapper.Map<RecurringPayment>(model);
|
||||
return ApiResponse<object>.SuccessResponse(recurringPayment, "Recurring Payment Template created successfully", 201);
|
||||
recurringPayment.UIDPrefix = uIDPrefix;
|
||||
recurringPayment.UIDPostfix = uIDPostfix;
|
||||
recurringPayment.IsActive = true;
|
||||
recurringPayment.CreatedAt = DateTime.UtcNow;
|
||||
recurringPayment.CreatedById = loggedInEmployee.Id;
|
||||
recurringPayment.TenantId = tenantId;
|
||||
|
||||
await _context.SaveChangesAsync();
|
||||
|
||||
var response = _mapper.Map<RecurringPaymentVM>(recurringPayment);
|
||||
response.RecurringPaymentUId = $"{recurringPayment.UIDPrefix}/{recurringPayment.UIDPostfix:D5}";
|
||||
|
||||
return ApiResponse<object>.SuccessResponse(response, "Recurring Payment Template created successfully", 201);
|
||||
}
|
||||
|
||||
public async Task<ApiResponse<object>> EditRecurringPaymentAsync(Guid id, RecurringTemplateDto model, Employee loggedInEmployee, Guid tenantId)
|
||||
{
|
||||
string uIDPrefix = $"RP/{DateTime.Now:MMyy}";
|
||||
|
||||
var lastExpense = await _context.RecurringPayments
|
||||
.Where(e => e.UIDPrefix == uIDPrefix)
|
||||
.OrderByDescending(e => e.UIDPostfix)
|
||||
.FirstOrDefaultAsync();
|
||||
|
||||
int uIDPostfix = lastExpense == null ? 1 : (lastExpense.UIDPostfix + 1);
|
||||
|
||||
var recurringPayment = _mapper.Map<RecurringPayment>(model);
|
||||
recurringPayment.UIDPrefix = uIDPrefix;
|
||||
recurringPayment.UIDPostfix = uIDPostfix;
|
||||
recurringPayment.IsActive = true;
|
||||
recurringPayment.CreatedAt = DateTime.UtcNow;
|
||||
recurringPayment.CreatedById = loggedInEmployee.Id;
|
||||
recurringPayment.TenantId = tenantId;
|
||||
|
||||
var response = _mapper.Map<RecurringPaymentVM>(recurringPayment);
|
||||
response.RecurringPaymentUId = $"{recurringPayment.UIDPrefix}/{recurringPayment.UIDPostfix:D5}";
|
||||
|
||||
return ApiResponse<object>.SuccessResponse(response, "Recurring Payment Template created successfully", 201);
|
||||
}
|
||||
#endregion
|
||||
|
||||
|
||||
@ -28,13 +28,14 @@ namespace Marco.Pms.Services.Service.ServiceInterfaces
|
||||
Task<ApiResponse<object>> EditPaymentRequestAsync(Guid id, PaymentRequestDto model, Employee loggedInEmployee, Guid tenantId);
|
||||
#endregion
|
||||
|
||||
#region =================================================================== Recurring Payment Functions ===================================================================
|
||||
Task<ApiResponse<object>> CreateRecurringPaymentAsync(RecurringTemplateDto model, Employee loggedInEmployee, Guid tenantId);
|
||||
Task<ApiResponse<object>> EditRecurringPaymentAsync(Guid id, RecurringTemplateDto model, Employee loggedInEmployee, Guid tenantId);
|
||||
#endregion
|
||||
|
||||
#region =================================================================== Advance Payment Functions ===================================================================
|
||||
Task<ApiResponse<object>> GetAdvancePaymentTransactionAsync(Guid id);
|
||||
#endregion
|
||||
|
||||
#region =================================================================== Recurring Payment Functions ===================================================================
|
||||
Task<ApiResponse<object>> CreateRecurringPaymentAsync(RecurringTemplateDto model, Employee loggedInEmployee, Guid tenantId);
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user