Compare commits
4 Commits
9cd9bac975
...
2ad0638d4f
| Author | SHA1 | Date | |
|---|---|---|---|
| 2ad0638d4f | |||
| a196906bf9 | |||
| 5b5aa9f77a | |||
| cad631ec7a |
@ -882,6 +882,13 @@ namespace Marco.Pms.Services.Controllers
|
|||||||
var response = await _masterService.CreateExpenseTypeAsync(dto, loggedInEmployee, tenantId);
|
var response = await _masterService.CreateExpenseTypeAsync(dto, loggedInEmployee, tenantId);
|
||||||
return StatusCode(response.StatusCode, response);
|
return StatusCode(response.StatusCode, response);
|
||||||
}
|
}
|
||||||
|
[HttpPut("expenses-type/edit/{id}")]
|
||||||
|
public async Task<IActionResult> UpdateExpenseType(Guid id, ExpensesTypeMasterDto dto)
|
||||||
|
{
|
||||||
|
var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
|
||||||
|
var response = await _masterService.UpdateExpenseTypeAsync(id, dto, loggedInEmployee, tenantId);
|
||||||
|
return StatusCode(response.StatusCode, response);
|
||||||
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
@ -894,7 +901,13 @@ namespace Marco.Pms.Services.Controllers
|
|||||||
var response = await _masterService.GetExpensesStatusListAsync(loggedInEmployee, tenantId);
|
var response = await _masterService.GetExpensesStatusListAsync(loggedInEmployee, tenantId);
|
||||||
return StatusCode(response.StatusCode, response);
|
return StatusCode(response.StatusCode, response);
|
||||||
}
|
}
|
||||||
|
[HttpPost("expenses-status")]
|
||||||
|
public async Task<IActionResult> CreateExpensesStatus(ExpensesStatusMasterDto dto)
|
||||||
|
{
|
||||||
|
var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
|
||||||
|
var response = await _masterService.CreateExpensesStatusAsync(dto, loggedInEmployee, tenantId);
|
||||||
|
return StatusCode(response.StatusCode, response);
|
||||||
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
@ -916,6 +929,14 @@ namespace Marco.Pms.Services.Controllers
|
|||||||
return StatusCode(response.StatusCode, response);
|
return StatusCode(response.StatusCode, response);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[HttpPut("payment-mode/edit/{id}")]
|
||||||
|
public async Task<IActionResult> UpdatePaymentMode(Guid id, PaymentModeMatserDto dto)
|
||||||
|
{
|
||||||
|
var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
|
||||||
|
var response = await _masterService.UpdatePaymentModeAsync(id, dto, loggedInEmployee, tenantId);
|
||||||
|
return StatusCode(response.StatusCode, response);
|
||||||
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -195,6 +195,7 @@ namespace Marco.Pms.Services.Service
|
|||||||
_logger.LogInfo(message);
|
_logger.LogInfo(message);
|
||||||
var response = new
|
var response = new
|
||||||
{
|
{
|
||||||
|
Filter = expenseFilter,
|
||||||
CurrentPage = pageNumber,
|
CurrentPage = pageNumber,
|
||||||
TotalPages = totalPages,
|
TotalPages = totalPages,
|
||||||
TotalEntites = totalEntites,
|
TotalEntites = totalEntites,
|
||||||
|
|||||||
@ -1,12 +1,15 @@
|
|||||||
using AutoMapper;
|
using AutoMapper;
|
||||||
using Marco.Pms.DataAccess.Data;
|
using Marco.Pms.DataAccess.Data;
|
||||||
|
using Marco.Pms.Helpers.Utility;
|
||||||
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.Expenses;
|
||||||
using Marco.Pms.Model.Master;
|
using Marco.Pms.Model.Master;
|
||||||
|
using Marco.Pms.Model.MongoDBModels.Utility;
|
||||||
using Marco.Pms.Model.Utilities;
|
using Marco.Pms.Model.Utilities;
|
||||||
using Marco.Pms.Model.ViewModels.Master;
|
using Marco.Pms.Model.ViewModels.Master;
|
||||||
|
using Marco.Pms.Services.Helpers;
|
||||||
using Marco.Pms.Services.Service.ServiceInterfaces;
|
using Marco.Pms.Services.Service.ServiceInterfaces;
|
||||||
using MarcoBMS.Services.Service;
|
using MarcoBMS.Services.Service;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
@ -19,17 +22,23 @@ namespace Marco.Pms.Services.Service
|
|||||||
private readonly ILoggingService _logger;
|
private readonly ILoggingService _logger;
|
||||||
private readonly PermissionServices _permission;
|
private readonly PermissionServices _permission;
|
||||||
private readonly IMapper _mapper;
|
private readonly IMapper _mapper;
|
||||||
|
private readonly UtilityMongoDBHelper _updateLogHelper;
|
||||||
|
private readonly CacheUpdateHelper _cache;
|
||||||
|
|
||||||
public MasterService(
|
public MasterService(
|
||||||
ApplicationDbContext context,
|
ApplicationDbContext context,
|
||||||
ILoggingService logger,
|
ILoggingService logger,
|
||||||
PermissionServices permission,
|
PermissionServices permission,
|
||||||
IMapper mapper)
|
IMapper mapper,
|
||||||
|
UtilityMongoDBHelper updateLogHelper,
|
||||||
|
CacheUpdateHelper cache)
|
||||||
{
|
{
|
||||||
_context = context;
|
_context = context;
|
||||||
_logger = logger;
|
_logger = logger;
|
||||||
_permission = permission;
|
_permission = permission;
|
||||||
_mapper = mapper;
|
_mapper = mapper;
|
||||||
|
_updateLogHelper = updateLogHelper;
|
||||||
|
_cache = cache;
|
||||||
}
|
}
|
||||||
|
|
||||||
#region =================================================================== Expenses Type APIs ===================================================================
|
#region =================================================================== Expenses Type APIs ===================================================================
|
||||||
@ -73,7 +82,7 @@ namespace Marco.Pms.Services.Service
|
|||||||
if (!hasManagePermission)
|
if (!hasManagePermission)
|
||||||
{
|
{
|
||||||
_logger.LogWarning("Access DENIED for employee {EmployeeId} for managing EXPANSES TYPE MASTER.", loggedInEmployee.Id);
|
_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);
|
return ApiResponse<object>.ErrorResponse("Access Denied.", "You do not have permission to Manage masters", 403);
|
||||||
}
|
}
|
||||||
var expensesType = _mapper.Map<ExpensesTypeMaster>(model);
|
var expensesType = _mapper.Map<ExpensesTypeMaster>(model);
|
||||||
expensesType.TenantId = tenantId;
|
expensesType.TenantId = tenantId;
|
||||||
@ -97,6 +106,77 @@ namespace Marco.Pms.Services.Service
|
|||||||
return ApiResponse<object>.ErrorResponse("Internal Error occured", ExceptionMapper(ex), 500);
|
return ApiResponse<object>.ErrorResponse("Internal Error occured", ExceptionMapper(ex), 500);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
public async Task<ApiResponse<object>> UpdateExpenseTypeAsync(Guid id, ExpensesTypeMasterDto 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 update expense type in different tenant", loggedInEmployee.Id);
|
||||||
|
return ApiResponse<object>.ErrorResponse("Access Denied", "User do not have access for this information", 403);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Checking permssion for managing masters
|
||||||
|
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 Manage masters", 403);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Validating the prvided data
|
||||||
|
if (model.Id != id)
|
||||||
|
{
|
||||||
|
_logger.LogWarning("Employee {EmployeeId} provide different Ids in payload and path variable", loggedInEmployee.Id);
|
||||||
|
return ApiResponse<object>.ErrorResponse("Invalid Data", "User has send invalid payload", 400);
|
||||||
|
}
|
||||||
|
|
||||||
|
var expensesType = await _context.ExpensesTypeMaster.AsNoTracking().FirstOrDefaultAsync(et => et.Id == model.Id.Value && et.TenantId == tenantId);
|
||||||
|
|
||||||
|
// Checking if expense type exists
|
||||||
|
if (expensesType == null)
|
||||||
|
{
|
||||||
|
_logger.LogWarning("Employee {EmployeeId} tries to update expense type, but not found in database", loggedInEmployee.Id);
|
||||||
|
return ApiResponse<object>.ErrorResponse("Expense Type not found", "Expense Type not found", 404);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Mapping ExpensesTypeMaster to BsonDocument
|
||||||
|
var existingEntityBson = _updateLogHelper.EntityToBsonDocument(expensesType);
|
||||||
|
|
||||||
|
// Mapping ExpensesTypeMasterDto to ExpensesTypeMaster
|
||||||
|
_mapper.Map(model, expensesType);
|
||||||
|
|
||||||
|
_context.ExpensesTypeMaster.Update(expensesType);
|
||||||
|
await _context.SaveChangesAsync();
|
||||||
|
|
||||||
|
_logger.LogInfo("Expense Type {ExpensesTypeId} was updated by employee {EmployeeId}", expensesType.Id, loggedInEmployee.Id);
|
||||||
|
|
||||||
|
// Saving the old entity in mongoDB
|
||||||
|
|
||||||
|
var mongoDBTask = _updateLogHelper.PushToUpdateLogsAsync(new UpdateLogsObject
|
||||||
|
{
|
||||||
|
EntityId = expensesType.Id.ToString(),
|
||||||
|
UpdatedById = loggedInEmployee.Id.ToString(),
|
||||||
|
OldObject = existingEntityBson,
|
||||||
|
UpdatedAt = DateTime.UtcNow
|
||||||
|
}, "ExpensesTypeMasterModificationLog");
|
||||||
|
|
||||||
|
// Mapping ExpensesTypeMaster to ExpensesTypeMasterVM
|
||||||
|
var response = _mapper.Map<ExpensesTypeMasterVM>(expensesType);
|
||||||
|
return ApiResponse<object>.SuccessResponse(response, "Expense type updated Successfully", 200);
|
||||||
|
}
|
||||||
|
catch (DbUpdateException dbEx)
|
||||||
|
{
|
||||||
|
_logger.LogError(dbEx, "Database Exception occured while updating 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 updating expense type by employee {EmployeeId}", loggedInEmployee.Id);
|
||||||
|
return ApiResponse<object>.ErrorResponse("Internal Error occured", ExceptionMapper(ex), 500);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
@ -156,7 +236,7 @@ namespace Marco.Pms.Services.Service
|
|||||||
if (!hasManagePermission)
|
if (!hasManagePermission)
|
||||||
{
|
{
|
||||||
_logger.LogWarning("Access DENIED for employee {EmployeeId} for managing EXPENSE STATUS MASTER.", loggedInEmployee.Id);
|
_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);
|
return ApiResponse<object>.ErrorResponse("Access Denied.", "You do not have permission to Manage masters", 403);
|
||||||
|
|
||||||
}
|
}
|
||||||
// Mapping the DTO to ExpensesStatusMaster Model
|
// Mapping the DTO to ExpensesStatusMaster Model
|
||||||
@ -237,7 +317,7 @@ namespace Marco.Pms.Services.Service
|
|||||||
if (!hasManagePermission)
|
if (!hasManagePermission)
|
||||||
{
|
{
|
||||||
_logger.LogWarning("Access DENIED for employee {EmployeeId} for managing PAYMENT MODE MASTER.", loggedInEmployee.Id);
|
_logger.LogWarning("Access DENIED for employee {EmployeeId} for managing PAYMENT MODE MASTER.", loggedInEmployee.Id);
|
||||||
return ApiResponse<object>.ErrorResponse("Access Denied.", "You do not have permission to Upload expenses for this project", 403);
|
return ApiResponse<object>.ErrorResponse("Access Denied.", "You do not have permission to Manage masters", 403);
|
||||||
|
|
||||||
}
|
}
|
||||||
// Mapping the DTO to PaymentModeMatser Model
|
// Mapping the DTO to PaymentModeMatser Model
|
||||||
@ -265,6 +345,78 @@ namespace Marco.Pms.Services.Service
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async Task<ApiResponse<object>> UpdatePaymentModeAsync(Guid id, PaymentModeMatserDto 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 update Payment Mode in different tenant", loggedInEmployee.Id);
|
||||||
|
return ApiResponse<object>.ErrorResponse("Access Denied", "User do not have access for this information", 403);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Checking permssion for managing masters
|
||||||
|
var hasManagePermission = await _permission.HasPermission(PermissionsMaster.ManageMasters, loggedInEmployee.Id);
|
||||||
|
if (!hasManagePermission)
|
||||||
|
{
|
||||||
|
_logger.LogWarning("Access DENIED for employee {EmployeeId} for managing PAYMENT MODE MASTER.", loggedInEmployee.Id);
|
||||||
|
return ApiResponse<object>.ErrorResponse("Access Denied.", "You do not have permission to Manage masters", 403);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Validating the prvided data
|
||||||
|
if (model.Id != id)
|
||||||
|
{
|
||||||
|
_logger.LogWarning("Employee {EmployeeId} provide different Ids in payload and path variable", loggedInEmployee.Id);
|
||||||
|
return ApiResponse<object>.ErrorResponse("Invalid Data", "User has send invalid payload", 400);
|
||||||
|
}
|
||||||
|
|
||||||
|
var paymentMode = await _context.PaymentModeMatser.AsNoTracking().FirstOrDefaultAsync(et => et.Id == model.Id.Value && et.TenantId == tenantId);
|
||||||
|
|
||||||
|
// Checking if Payment Mode exists
|
||||||
|
if (paymentMode == null)
|
||||||
|
{
|
||||||
|
_logger.LogWarning("Employee {EmployeeId} tries to update Payment Mode, but not found in database", loggedInEmployee.Id);
|
||||||
|
return ApiResponse<object>.ErrorResponse("Payment Mode not found", "Payment Mode not found", 404);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Mapping PaymentModeMatser to BsonDocument
|
||||||
|
var existingEntityBson = _updateLogHelper.EntityToBsonDocument(paymentMode);
|
||||||
|
|
||||||
|
// Mapping PaymentModeMatserDto to PaymentModeMatser
|
||||||
|
_mapper.Map(model, paymentMode);
|
||||||
|
|
||||||
|
_context.PaymentModeMatser.Update(paymentMode);
|
||||||
|
await _context.SaveChangesAsync();
|
||||||
|
|
||||||
|
_logger.LogInfo("Payment Mode {PaymentModeId} was updated by employee {EmployeeId}", paymentMode.Id, loggedInEmployee.Id);
|
||||||
|
|
||||||
|
// Saving the old entity in mongoDB
|
||||||
|
|
||||||
|
var mongoDBTask = _updateLogHelper.PushToUpdateLogsAsync(new UpdateLogsObject
|
||||||
|
{
|
||||||
|
EntityId = paymentMode.Id.ToString(),
|
||||||
|
UpdatedById = loggedInEmployee.Id.ToString(),
|
||||||
|
OldObject = existingEntityBson,
|
||||||
|
UpdatedAt = DateTime.UtcNow
|
||||||
|
}, "PaymentModeMasterModificationLog");
|
||||||
|
|
||||||
|
// Mapping PaymentModeMatser to PaymentModeMatserVM
|
||||||
|
var response = _mapper.Map<PaymentModeMatserVM>(paymentMode);
|
||||||
|
return ApiResponse<object>.SuccessResponse(response, "Payment Mode updated Successfully", 200);
|
||||||
|
}
|
||||||
|
catch (DbUpdateException dbEx)
|
||||||
|
{
|
||||||
|
_logger.LogError(dbEx, "Database Exception occured while updating Payment Mode by employee {EmployeeId}", loggedInEmployee.Id);
|
||||||
|
return ApiResponse<object>.ErrorResponse("Internal Error occured", ExceptionMapper(dbEx), 500);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
_logger.LogError(ex, "Exception occured while updating Payment Mode by employee {EmployeeId}", loggedInEmployee.Id);
|
||||||
|
return ApiResponse<object>.ErrorResponse("Internal Error occured", ExceptionMapper(ex), 500);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region =================================================================== Helper Function ===================================================================
|
#region =================================================================== Helper Function ===================================================================
|
||||||
|
|||||||
@ -9,15 +9,18 @@ namespace Marco.Pms.Services.Service.ServiceInterfaces
|
|||||||
#region =================================================================== Expenses Type APIs ===================================================================
|
#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);
|
Task<ApiResponse<object>> CreateExpenseTypeAsync(ExpensesTypeMasterDto model, Employee loggedInEmployee, Guid tenantId);
|
||||||
|
Task<ApiResponse<object>> UpdateExpenseTypeAsync(Guid id, ExpensesTypeMasterDto model, Employee loggedInEmployee, Guid tenantId);
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
#region =================================================================== Expenses Status APIs ===================================================================
|
#region =================================================================== Expenses Status APIs ===================================================================
|
||||||
Task<ApiResponse<object>> GetExpensesStatusListAsync(Employee loggedInEmployee, Guid tenantId);
|
Task<ApiResponse<object>> GetExpensesStatusListAsync(Employee loggedInEmployee, Guid tenantId);
|
||||||
|
Task<ApiResponse<object>> CreateExpensesStatusAsync(ExpensesStatusMasterDto model, Employee loggedInEmployee, Guid tenantId);
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
#region =================================================================== Payment mode APIs ===================================================================
|
#region =================================================================== Payment mode APIs ===================================================================
|
||||||
Task<ApiResponse<object>> GetPaymentModeListAsync(Employee loggedInEmployee, Guid tenantId);
|
Task<ApiResponse<object>> GetPaymentModeListAsync(Employee loggedInEmployee, Guid tenantId);
|
||||||
Task<ApiResponse<object>> CreatePaymentModeAsync(PaymentModeMatserDto model, Employee loggedInEmployee, Guid tenantId);
|
Task<ApiResponse<object>> CreatePaymentModeAsync(PaymentModeMatserDto model, Employee loggedInEmployee, Guid tenantId);
|
||||||
|
Task<ApiResponse<object>> UpdatePaymentModeAsync(Guid id, PaymentModeMatserDto model, Employee loggedInEmployee, Guid tenantId);
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user