147 lines
5.1 KiB
C#
147 lines
5.1 KiB
C#
using Newtonsoft.Json;
|
|
using ReserveManagementSystemApi.Enums;
|
|
using ReserveManagementSystemLib.Models;
|
|
using ReserveManagementSystemLib.Repositories;
|
|
|
|
namespace ReserveManagementSystemApi.Services
|
|
{
|
|
public class AuditHistoryService : IAuditHistoryService
|
|
{
|
|
private readonly IAuditHistoryRepository _auditHistoryRepository;
|
|
const string SYSTEM_MODIFIED_BY = "RMS";
|
|
|
|
public AuditHistoryService(IAuditHistoryRepository auditHistoryRepository)
|
|
{
|
|
_auditHistoryRepository = auditHistoryRepository;
|
|
}
|
|
|
|
public async Task<IEnumerable<AuditHistory>> GetAllAsync()
|
|
{
|
|
try
|
|
{
|
|
return await _auditHistoryRepository.GetAll().OrderByDescending(o => o.ModifiedDate).ToListAsync();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Log.Error(ex, "Failure retrieving audit histories.");
|
|
throw;
|
|
}
|
|
}
|
|
|
|
public async Task<AuditHistory> FindByIdAsync(int id)
|
|
{
|
|
AuditHistory history;
|
|
try
|
|
{
|
|
history = await _auditHistoryRepository.FindByIdAsync(id);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Log.Error(ex, $"Failure retrieving history with id {id}.");
|
|
throw;
|
|
}
|
|
|
|
if (history == null)
|
|
{
|
|
throw new Exception($"Audit history with id {id} not found.");
|
|
}
|
|
|
|
return history;
|
|
}
|
|
|
|
public async Task<AuditHistory> AddHistoryAsync(AuditHistory history)
|
|
{
|
|
return await _auditHistoryRepository.AddHistoryAsync(history);
|
|
}
|
|
|
|
public async Task<int> AddAuditHistoriesForNonexistingLoansAsync(List<Loan> loans)
|
|
{
|
|
var currentDate = DateTime.Now;
|
|
var histories = loans.Select(loan => new AuditHistory
|
|
{
|
|
LoanId = null,
|
|
MemberNumber = loan.MemberNumber,
|
|
LoanNumber = loan.LoanNumber,
|
|
ModifiedBy = SYSTEM_MODIFIED_BY,
|
|
ModifiedDate = currentDate,
|
|
ActivityType = ActivityType.Error.ToString(),
|
|
AuditDescription = "Loan in closed file not found",
|
|
OldValue = null,
|
|
NewValue = null
|
|
}).ToList();
|
|
|
|
return await _auditHistoryRepository.AddHistoriesAsync(histories);
|
|
}
|
|
|
|
public AuditHistory GetAuditHistoryForNonexistingClosedLoan(Loan loan)
|
|
{
|
|
var currentDate = DateTime.Now;
|
|
return new AuditHistory
|
|
{
|
|
LoanId = null,
|
|
MemberNumber = loan.MemberNumber,
|
|
LoanNumber = loan.LoanNumber,
|
|
ModifiedBy = SYSTEM_MODIFIED_BY,
|
|
ModifiedDate = currentDate,
|
|
ActivityType = ActivityType.Error.ToString(),
|
|
AuditDescription = "Loan in closed import not found",
|
|
OldValue = null,
|
|
NewValue = null
|
|
};
|
|
}
|
|
|
|
public AuditHistory GetExistingLoanUpdateHistoryAsync(Loan loan, Loan originalLoan)
|
|
{
|
|
var currentDate = DateTime.Now;
|
|
return new AuditHistory
|
|
{
|
|
LoanId = loan.LoanId,
|
|
MemberNumber = loan.MemberNumber,
|
|
LoanNumber = loan.LoanNumber,
|
|
ModifiedBy = SYSTEM_MODIFIED_BY,
|
|
ModifiedDate = currentDate,
|
|
ActivityType = ActivityType.NewLoanUpdate.ToString(),
|
|
AuditDescription = "Loan found in table, record updated",
|
|
OldValue = JsonConvert.SerializeObject(originalLoan),
|
|
NewValue = JsonConvert.SerializeObject(loan)
|
|
};
|
|
}
|
|
|
|
public AuditHistory GetLoanStatusChangeHistory(Loan loan, string oldStatus, string description)
|
|
{
|
|
return new AuditHistory
|
|
{
|
|
LoanId = loan.LoanId,
|
|
MemberNumber = loan.MemberNumber,
|
|
LoanNumber = loan.LoanNumber,
|
|
ModifiedBy = SYSTEM_MODIFIED_BY,
|
|
ModifiedDate = DateTime.Now,
|
|
ActivityType = ActivityType.LoanStatusChange.ToString(),
|
|
OldValue = oldStatus,
|
|
NewValue = loan.LoanStatus,
|
|
AuditDescription = description
|
|
};
|
|
}
|
|
|
|
public async Task<int> AddHistoriesAsync(List<AuditHistory> histories)
|
|
{
|
|
return await _auditHistoryRepository.AddHistoriesAsync(histories);
|
|
}
|
|
|
|
public async Task AddErrorHistoryAsync(string memberNumber, string loanNumber, string description)
|
|
{
|
|
var auditHist = new AuditHistory
|
|
{
|
|
MemberNumber = memberNumber,
|
|
LoanNumber = loanNumber,
|
|
ActivityType = ActivityType.Error.ToString(),
|
|
ModifiedDate = DateTime.Now,
|
|
AuditDescription = description,
|
|
ModifiedBy = SYSTEM_MODIFIED_BY
|
|
};
|
|
|
|
await _auditHistoryRepository.AddHistoryAsync(auditHist);
|
|
}
|
|
}
|
|
}
|