Compare commits

..

No commits in common. "aa47bfe59c10bea07a1e043fb951e994eab0b725" and "e31e19ed74ab1c87295f261ba5025a852215d9ac" have entirely different histories.

3 changed files with 8 additions and 223 deletions

View File

@ -875,31 +875,21 @@ namespace Marco.Pms.Services.Controllers
var response = await _masterService.GetExpenseTypeListAsync(loggedInEmployee, tenantId); var response = await _masterService.GetExpenseTypeListAsync(loggedInEmployee, tenantId);
return StatusCode(response.StatusCode, response); return StatusCode(response.StatusCode, response);
} }
[HttpPost("expenses-type")] [HttpPost("expenses-type")]
public async Task<IActionResult> CreateExpenseType([FromBody] ExpensesTypeMasterDto dto) public async Task<IActionResult> CreateExpenseType(ExpensesTypeMasterDto dto)
{ {
var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync(); var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
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}")] [HttpPut("expenses-type/edit/{id}")]
public async Task<IActionResult> UpdateExpenseType(Guid id, [FromBody] ExpensesTypeMasterDto dto) public async Task<IActionResult> UpdateExpenseType(Guid id, ExpensesTypeMasterDto dto)
{ {
var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync(); var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
var response = await _masterService.UpdateExpenseTypeAsync(id, dto, loggedInEmployee, tenantId); var response = await _masterService.UpdateExpenseTypeAsync(id, dto, loggedInEmployee, tenantId);
return StatusCode(response.StatusCode, response); return StatusCode(response.StatusCode, response);
} }
[HttpDelete("expenses-type/delete/{id}")]
public async Task<IActionResult> DeleteExpenseType(Guid id, [FromQuery] bool isActive = false)
{
var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
var response = await _masterService.DeleteExpenseTypeAsync(id, isActive, loggedInEmployee, tenantId);
return StatusCode(response.StatusCode, response);
}
#endregion #endregion
#region =================================================================== Expenses Status APIs =================================================================== #region =================================================================== Expenses Status APIs ===================================================================
@ -911,31 +901,21 @@ 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")] [HttpPost("expenses-status")]
public async Task<IActionResult> CreateExpensesStatus([FromBody] ExpensesStatusMasterDto dto) public async Task<IActionResult> CreateExpensesStatus(ExpensesStatusMasterDto dto)
{ {
var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync(); var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
var response = await _masterService.CreateExpensesStatusAsync(dto, loggedInEmployee, tenantId); var response = await _masterService.CreateExpensesStatusAsync(dto, loggedInEmployee, tenantId);
return StatusCode(response.StatusCode, response); return StatusCode(response.StatusCode, response);
} }
[HttpPut("expenses-status/edit/{id}")] [HttpPut("expenses-status/edit/{id}")]
public async Task<IActionResult> UpdateExpensesStatus(Guid id, [FromBody] ExpensesStatusMasterDto dto) public async Task<IActionResult> UpdateExpensesStatus(Guid id, ExpensesStatusMasterDto dto)
{ {
var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync(); var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
var response = await _masterService.UpdateExpensesStatusAsync(id, dto, loggedInEmployee, tenantId); var response = await _masterService.UpdateExpensesStatusAsync(id, dto, loggedInEmployee, tenantId);
return StatusCode(response.StatusCode, response); return StatusCode(response.StatusCode, response);
} }
[HttpDelete("expenses-status/delete/{id}")]
public async Task<IActionResult> DeleteExpensesStatus(Guid id, [FromQuery] bool isActive = false)
{
var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
var response = await _masterService.DeleteExpensesStatusAsync(id, isActive, loggedInEmployee, tenantId);
return StatusCode(response.StatusCode, response);
}
#endregion #endregion
#region =================================================================== Payment mode APIs =================================================================== #region =================================================================== Payment mode APIs ===================================================================
@ -949,7 +929,7 @@ namespace Marco.Pms.Services.Controllers
} }
[HttpPost("payment-mode")] [HttpPost("payment-mode")]
public async Task<IActionResult> CreatePaymentMode([FromBody] PaymentModeMatserDto dto) public async Task<IActionResult> CreatePaymentMode(PaymentModeMatserDto dto)
{ {
var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync(); var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
var response = await _masterService.CreatePaymentModeAsync(dto, loggedInEmployee, tenantId); var response = await _masterService.CreatePaymentModeAsync(dto, loggedInEmployee, tenantId);
@ -957,21 +937,13 @@ namespace Marco.Pms.Services.Controllers
} }
[HttpPut("payment-mode/edit/{id}")] [HttpPut("payment-mode/edit/{id}")]
public async Task<IActionResult> UpdatePaymentMode(Guid id, [FromBody] PaymentModeMatserDto dto) public async Task<IActionResult> UpdatePaymentMode(Guid id, PaymentModeMatserDto dto)
{ {
var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync(); var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
var response = await _masterService.UpdatePaymentModeAsync(id, dto, loggedInEmployee, tenantId); var response = await _masterService.UpdatePaymentModeAsync(id, dto, loggedInEmployee, tenantId);
return StatusCode(response.StatusCode, response); return StatusCode(response.StatusCode, response);
} }
[HttpDelete("payment-mode/delete/{id}")]
public async Task<IActionResult> DeletePaymentMode(Guid id, [FromQuery] bool isActive = false)
{
var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
var response = await _masterService.DeletePaymentModeAsync(id, isActive, loggedInEmployee, tenantId);
return StatusCode(response.StatusCode, response);
}
#endregion #endregion
} }
} }

View File

@ -181,68 +181,6 @@ 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>> DeleteExpenseTypeAsync(Guid id, bool isActive, Employee loggedInEmployee, Guid tenantId)
{
string action = isActive ? "delete" : "restore";
try
{
// Validation if employee is taking action in same tenant
if (tenantId != loggedInEmployee.TenantId)
{
_logger.LogWarning("Employee {EmployeeId} attempted to {Action} expense type in different tenant", loggedInEmployee.Id, action);
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);
}
var expensesType = await _context.ExpensesTypeMaster.FirstOrDefaultAsync(et => et.Id == id && et.TenantId == tenantId);
// Checking if expense type exists
if (expensesType == null)
{
_logger.LogWarning("Employee {EmployeeId} tries to {Action} expense type, but not found in database", loggedInEmployee.Id, action);
return ApiResponse<object>.ErrorResponse("Expense Type not found", "Expense Type not found", 404);
}
// Mapping ExpensesTypeMaster to BsonDocument
var existingEntityBson = _updateLogHelper.EntityToBsonDocument(expensesType);
expensesType.IsActive = isActive;
await _context.SaveChangesAsync();
_logger.LogInfo("Expense Type {ExpensesTypeId} was {Action}d by employee {EmployeeId}", expensesType.Id, action, 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 {action}d Successfully", 200);
}
catch (DbUpdateException dbEx)
{
_logger.LogError(dbEx, "Database Exception occured while {Action}ing expense type by employee {EmployeeId}", action, loggedInEmployee.Id);
return ApiResponse<object>.ErrorResponse("Internal Error occured", ExceptionMapper(dbEx), 500);
}
catch (Exception ex)
{
_logger.LogError(ex, "Exception occured while {Action}ing expense type by employee {EmployeeId}", action, loggedInEmployee.Id);
return ApiResponse<object>.ErrorResponse("Internal Error occured", ExceptionMapper(ex), 500);
}
}
#endregion #endregion
@ -287,6 +225,7 @@ 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>> CreateExpensesStatusAsync(ExpensesStatusMasterDto model, Employee loggedInEmployee, Guid tenantId) public async Task<ApiResponse<object>> CreateExpensesStatusAsync(ExpensesStatusMasterDto model, Employee loggedInEmployee, Guid tenantId)
{ {
try try
@ -435,68 +374,6 @@ 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>> DeleteExpensesStatusAsync(Guid id, bool isActive, Employee loggedInEmployee, Guid tenantId)
{
string action = isActive ? "delete" : "restore";
try
{
// Validation if employee is taking action in same tenant
if (tenantId != loggedInEmployee.TenantId)
{
_logger.LogWarning("Employee {EmployeeId} attempted to {Action} Expense Status in different tenant", loggedInEmployee.Id, action);
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 EXPENSE STATUS MASTER.", loggedInEmployee.Id);
return ApiResponse<object>.ErrorResponse("Access Denied.", "You do not have permission to Manage masters", 403);
}
var expensesStatus = await _context.ExpensesStatusMaster.FirstOrDefaultAsync(et => et.Id == id && et.TenantId == tenantId);
// Checking if Expense Status exists
if (expensesStatus == null)
{
_logger.LogWarning("Employee {EmployeeId} tries to {Action} Expense Status, but not found in database", loggedInEmployee.Id, action);
return ApiResponse<object>.ErrorResponse("Expense Status not found", "Expense Status not found", 404);
}
// Mapping ExpensesStatusMaster to BsonDocument
var existingEntityBson = _updateLogHelper.EntityToBsonDocument(expensesStatus);
expensesStatus.IsActive = isActive;
await _context.SaveChangesAsync();
_logger.LogInfo("Expense Status {ExpensesStatusId} was {Action}d by employee {EmployeeId}", expensesStatus.Id, action, loggedInEmployee.Id);
// Saving the old entity in mongoDB
var mongoDBTask = _updateLogHelper.PushToUpdateLogsAsync(new UpdateLogsObject
{
EntityId = expensesStatus.Id.ToString(),
UpdatedById = loggedInEmployee.Id.ToString(),
OldObject = existingEntityBson,
UpdatedAt = DateTime.UtcNow
}, "ExpensesStatusMasterModificationLog");
// Mapping ExpensesStatusMaster to ExpensesStatusMasterVM
var response = _mapper.Map<ExpensesStatusMasterVM>(expensesStatus);
return ApiResponse<object>.SuccessResponse(response, $"Expense Status {action}d Successfully", 200);
}
catch (DbUpdateException dbEx)
{
_logger.LogError(dbEx, "Database Exception occured while {Action}ing Expense Status by employee {EmployeeId}", action, loggedInEmployee.Id);
return ApiResponse<object>.ErrorResponse("Internal Error occured", ExceptionMapper(dbEx), 500);
}
catch (Exception ex)
{
_logger.LogError(ex, "Exception occured while {Action}ing Expense Status by employee {EmployeeId}", action, loggedInEmployee.Id);
return ApiResponse<object>.ErrorResponse("Internal Error occured", ExceptionMapper(ex), 500);
}
}
#endregion #endregion
@ -566,6 +443,7 @@ 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>> UpdatePaymentModeAsync(Guid id, PaymentModeMatserDto model, Employee loggedInEmployee, Guid tenantId) public async Task<ApiResponse<object>> UpdatePaymentModeAsync(Guid id, PaymentModeMatserDto model, Employee loggedInEmployee, Guid tenantId)
{ {
try try
@ -637,68 +515,6 @@ 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>> DeletePaymentModeAsync(Guid id, bool isActive, Employee loggedInEmployee, Guid tenantId)
{
string action = isActive ? "delete" : "restore";
try
{
// Validation if employee is taking action in same tenant
if (tenantId != loggedInEmployee.TenantId)
{
_logger.LogWarning("Employee {EmployeeId} attempted to {Action} Payment Mode in different tenant", loggedInEmployee.Id, action);
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 EXPENSE STATUS MASTER.", loggedInEmployee.Id);
return ApiResponse<object>.ErrorResponse("Access Denied.", "You do not have permission to Manage masters", 403);
}
var paymentMode = await _context.PaymentModeMatser.FirstOrDefaultAsync(et => et.Id == id && et.TenantId == tenantId);
// Checking if Payment Mode exists
if (paymentMode == null)
{
_logger.LogWarning("Employee {EmployeeId} tries to {Action} Payment Mode, but not found in database", loggedInEmployee.Id, action);
return ApiResponse<object>.ErrorResponse("Payment Mode not found", "Payment Mode not found", 404);
}
// Mapping PaymentModeMatser to BsonDocument
var existingEntityBson = _updateLogHelper.EntityToBsonDocument(paymentMode);
paymentMode.IsActive = isActive;
await _context.SaveChangesAsync();
_logger.LogInfo("Payment Mode {PaymentModeId} was {Action}d by employee {EmployeeId}", paymentMode.Id, action, 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
}, "PaymentModeMatserModificationLog");
// Mapping PaymentModeMatser to PaymentModeMatserVM
var response = _mapper.Map<PaymentModeMatserVM>(paymentMode);
return ApiResponse<object>.SuccessResponse(response, $"Payment Mode {action}d Successfully", 200);
}
catch (DbUpdateException dbEx)
{
_logger.LogError(dbEx, "Database Exception occured while {Action}ing Payment Mode by employee {EmployeeId}", action, loggedInEmployee.Id);
return ApiResponse<object>.ErrorResponse("Internal Error occured", ExceptionMapper(dbEx), 500);
}
catch (Exception ex)
{
_logger.LogError(ex, "Exception occured while {Action}ing Payment Mode by employee {EmployeeId}", action, loggedInEmployee.Id);
return ApiResponse<object>.ErrorResponse("Internal Error occured", ExceptionMapper(ex), 500);
}
}
#endregion #endregion

View File

@ -10,21 +10,18 @@ namespace Marco.Pms.Services.Service.ServiceInterfaces
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); Task<ApiResponse<object>> UpdateExpenseTypeAsync(Guid id, ExpensesTypeMasterDto model, Employee loggedInEmployee, Guid tenantId);
Task<ApiResponse<object>> DeleteExpenseTypeAsync(Guid id, bool isActive, 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); Task<ApiResponse<object>> CreateExpensesStatusAsync(ExpensesStatusMasterDto model, Employee loggedInEmployee, Guid tenantId);
Task<ApiResponse<object>> UpdateExpensesStatusAsync(Guid id, ExpensesStatusMasterDto model, Employee loggedInEmployee, Guid tenantId); Task<ApiResponse<object>> UpdateExpensesStatusAsync(Guid id, ExpensesStatusMasterDto model, Employee loggedInEmployee, Guid tenantId);
Task<ApiResponse<object>> DeleteExpensesStatusAsync(Guid id, bool isActive, 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); Task<ApiResponse<object>> UpdatePaymentModeAsync(Guid id, PaymentModeMatserDto model, Employee loggedInEmployee, Guid tenantId);
Task<ApiResponse<object>> DeletePaymentModeAsync(Guid id, bool isActive, Employee loggedInEmployee, Guid tenantId);
#endregion #endregion
} }