Adding
This commit is contained in:
+92
@@ -0,0 +1,92 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using LCU.API.Collections.CollectionsApiLib.Models;
|
||||
using LCU.API.Collections.RepoApi.DataAccess;
|
||||
using LCU.API.Collections.RepoApi.Exceptions;
|
||||
using LCU.Shared.Collections.RepoApiLib.Models;
|
||||
using LCU.Shared.Collections.RepoApiLib.Repositories;
|
||||
using Serilog;
|
||||
|
||||
namespace LCU.API.Collections.RepoApi.Services
|
||||
{
|
||||
public class RepoLetterService : IRepoLetterService
|
||||
{
|
||||
private readonly ILetterRepository _letterRepository;
|
||||
private readonly ICollectionsDao _collectionsDao;
|
||||
|
||||
public RepoLetterService(ILetterRepository letterRepository,
|
||||
ICollectionsDao collectionsDao)
|
||||
{
|
||||
_letterRepository = letterRepository;
|
||||
_collectionsDao = collectionsDao;
|
||||
}
|
||||
|
||||
public async Task<IReadOnlyCollection<RepoLetter>> ListByAccountIdAsync(int accountId)
|
||||
{
|
||||
try
|
||||
{
|
||||
var collectionsHistory = await _collectionsDao.RetrieveHistoryAsync(accountId);
|
||||
var collectionsLetters =
|
||||
collectionsHistory.Where(history => history.Type == HistoryType.Letter).ToList();
|
||||
|
||||
if (!collectionsLetters.Any())
|
||||
{
|
||||
return new List<RepoLetter>();
|
||||
}
|
||||
|
||||
var letters = await _letterRepository.ListAsync();
|
||||
return ProcessLetters(collectionsLetters, letters.ToList());
|
||||
}
|
||||
catch (MissingRequirementException ex)
|
||||
{
|
||||
throw;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Log.Error(ex, "Failure retrieving Letter List");
|
||||
throw new ServerErrorException();
|
||||
}
|
||||
}
|
||||
|
||||
public static IReadOnlyCollection<RepoLetter> ProcessLetters(List<TemenosHistory> collectionsLetters,
|
||||
List<Letter> letters)
|
||||
{
|
||||
// GJF: Are you here to fix a bug? Probably. These don't match up, who wrote this?!?! This code is fueled by hope.
|
||||
// Ok, so you really need to fix it. Go out to Temenos, go to System Management (the button is labelled 'tools'!)
|
||||
// Find the Communication section, expand it and choose 'letters & forms'. Now find the right Letter and
|
||||
// update the LetterDescription column in the Letters table of RepoDb for the correct letter.
|
||||
var resultList = new List<RepoLetter>();
|
||||
foreach (var letter in letters)
|
||||
{
|
||||
foreach (var collectionsLetter in collectionsLetters)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(letter.LetterDescription))
|
||||
{
|
||||
// If this exception is happening, see LetterUpdate.sql. Also See Above.
|
||||
throw new MissingRequirementException("LetterDescription", "Letter table requires LetterDescription Column entry.");
|
||||
}
|
||||
|
||||
if (collectionsLetter.Message.Trim().ToUpper()
|
||||
.Contains(letter.LetterDescription.Trim().ToUpper()))
|
||||
{
|
||||
resultList.Add(new RepoLetter
|
||||
{
|
||||
NoticeType = collectionsLetter.Message,
|
||||
DateSent = collectionsLetter.Created,
|
||||
DateExpired = collectionsLetter.Created.AddDays(letter.DaysToWait ?? 0),
|
||||
DaysToRedeem = letter.DaysToWait ?? 0,
|
||||
ActionCode = letter.ActionCode.Trim()
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return resultList
|
||||
.GroupBy(x => x.NoticeType.Trim(),
|
||||
(key, g) => g.OrderByDescending(x => x.DateSent).FirstOrDefault())
|
||||
.OrderByDescending(x => x.DateSent).ToList();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user