101 lines
3.7 KiB
C#
101 lines
3.7 KiB
C#
using ReserveManagementSystemLib.Models;
|
|
using ReserveManagementSystemLib.Repositories;
|
|
|
|
namespace ReserveManagementSystemApi.Services
|
|
{
|
|
public class DealerService: IDealerService
|
|
{
|
|
private readonly IDealerRepository _dealerRepository;
|
|
|
|
public DealerService(IDealerRepository dealerRepository)
|
|
{
|
|
_dealerRepository = dealerRepository;
|
|
}
|
|
|
|
public async Task<IEnumerable<Dealer>> Search(string dealerSearchText)
|
|
{
|
|
try
|
|
{
|
|
return await _dealerRepository.GetAll().Where(d => d.DealerCode.Contains(dealerSearchText) || d.Name.Contains(dealerSearchText)).OrderBy(x => x.DealerCode).ToListAsync();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Log.Error(ex, "Failure retrieving dealers.");
|
|
throw;
|
|
}
|
|
}
|
|
|
|
public async Task<Dealer> GetDealerByCodeAsync(string dealerCode)
|
|
{
|
|
try
|
|
{
|
|
return await _dealerRepository.FindByCodeAsync(dealerCode);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Log.Error(ex, "Failure retrieving dealer by code.");
|
|
throw;
|
|
}
|
|
}
|
|
|
|
public async Task<IEnumerable<Dealer>> GetAllDealersAsync()
|
|
{
|
|
return await _dealerRepository.GetAll().ToListAsync();
|
|
}
|
|
|
|
public async Task UpdateDealersAsync(List<Dealer> dealers)
|
|
{
|
|
try
|
|
{
|
|
var allDealers = await GetAllDealersAsync();
|
|
var dealersToAdd = new List<Dealer>();
|
|
var dealersToUpdate = new List<Dealer>();
|
|
dealers.ForEach(d =>
|
|
{
|
|
var currentDealer = allDealers.FirstOrDefault(a => a.DealerOrganizationNumber == d.DealerOrganizationNumber);
|
|
if (currentDealer != null && !currentDealer.Equals(d))
|
|
{
|
|
currentDealer.Name = d.Name ?? currentDealer.Name;
|
|
currentDealer.DealerCode = d.DealerCode?.ToUpper() ?? currentDealer.DealerCode;
|
|
currentDealer.DealerAccountNumber = d.DealerAccountNumber ?? currentDealer.DealerAccountNumber;
|
|
currentDealer.DealerOrganizationNumber = d.DealerOrganizationNumber ?? currentDealer.DealerOrganizationNumber;
|
|
dealersToUpdate.Add(currentDealer);
|
|
}
|
|
else if (currentDealer == null)
|
|
{
|
|
//write the new dealer record to set Action required to true if invalid
|
|
dealersToAdd.Add(d);
|
|
}
|
|
});
|
|
if (dealersToUpdate.Any())
|
|
{
|
|
await _dealerRepository.UpdateDealersAsync(dealersToUpdate);
|
|
}
|
|
if (dealersToAdd.Any())
|
|
{
|
|
await _dealerRepository.AddDealersAsync(dealersToAdd);
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Log.Error(ex, "Failure updating dealers.");
|
|
throw;
|
|
}
|
|
}
|
|
|
|
public async Task UpdateDealersAsync(List<Loan> loans)
|
|
{
|
|
var dealers = loans.Select(l => new Dealer
|
|
{
|
|
DealerCode = l.Dealer.DealerCode,
|
|
Name = l.Dealer.Name,
|
|
DealerOrganizationNumber = l.DealerOrganizationNumber,
|
|
DealerAccountNumber = l.Dealer.DealerAccountNumber
|
|
})
|
|
.GroupBy(d => d.DealerOrganizationNumber).Select(g => g.First()).ToList();
|
|
|
|
await UpdateDealersAsync(dealers);
|
|
}
|
|
}
|
|
}
|