Files
monorepo/LCU.WebApps.Indirect.ReserveManagementSystem/Api/ReserveManagementSystemApi/Services/DealerService.cs
T
2026-03-17 08:54:34 -05:00

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);
}
}
}