Files
monorepo/LCU.API.Collections.RepoApi-old/LCU.API.Collections.RepoApi/Services/Reporting/RepoCompanyReportingService.cs
T
2026-04-20 14:47:24 -05:00

188 lines
8.4 KiB
C#

using System;
using System.Threading.Tasks;
using LCU.API.Collections.RepoApi.Exceptions;
using LCU.API.Collections.RepoApi.Factories;
using LCU.Shared.Collections.RepoApiLib.Formatting;
using LCU.Shared.Collections.RepoApiLib.Models.Reporting.Responses;
using LCU.Shared.Collections.RepoApiLib.Repositories;
using Serilog;
namespace LCU.API.Collections.RepoApi.Services.Reporting
{
public class RepoCompanyReportingService : IRepoCompanyReportingService
{
private readonly IReportingRepository _reportingRepository;
public RepoCompanyReportingService(IReportingRepository reportingRepository)
{
_reportingRepository = reportingRepository;
}
public async Task<ReportTableResponse> GetAssignedBalance(DateTime lowDateTime, DateTime highDateTime)
{
try
{
var reportData = await _reportingRepository.GetAccountsByDateAssigned(lowDateTime, highDateTime);
return new ReportTableResponse()
{
ReportTable = ReportTableFactory.CreateHistoricalSummationTable(
ReportSumType.Currency,
reportData,
"Repo Companies",
lowDateTime,
highDateTime,
(reportEntry) => reportEntry.Balance,
(reportEntry) => reportEntry.RepoCompany,
(reportEntry) => reportEntry.RepoCompanyAssignmentDate,
(reportEntry) => reportEntry.CollateralId),
DataTable = DataTableFormatting.CreateDataTable(
reportData,
(entry) => entry.RepoId,
StdReportEntryColumns.Member(),
StdReportEntryColumns.AccountNo(),
StdReportEntryColumns.Status(),
StdReportEntryColumns.DaysInStatus(),
StdReportEntryColumns.Balance(),
StdReportEntryColumns.AccountCode(),
StdReportEntryColumns.Bankruptcy(),
StdReportEntryColumns.Collateral(),
StdReportEntryColumns.RepoCompany(),
StdReportEntryColumns.DateAssigned())
};
}
catch (Exception ex)
{
Log.Error(ex, "Failure retrieving Repo Company Active Count Report");
throw new ServerErrorException();
}
}
public async Task<ReportTableResponse> GetAssignmentCountReport(DateTime lowDateTime, DateTime highDateTime)
{
try
{
var reportData = await _reportingRepository.GetAccountsByDateAssigned(lowDateTime, highDateTime);
return new ReportTableResponse()
{
ReportTable = ReportTableFactory.CreateHistoricalSummationTable(
ReportSumType.WholeNumber,
reportData,
"Repo Companies",
lowDateTime,
highDateTime,
(reportEntry) => 1,
(reportEntry) => reportEntry.RepoCompany,
(reportEntry) => reportEntry.RepoCompanyAssignmentDate,
(reportEntry) => reportEntry.CollateralId),
DataTable = DataTableFormatting.CreateDataTable(
reportData,
(entry) => entry.RepoId,
StdReportEntryColumns.Member(),
StdReportEntryColumns.AccountNo(),
StdReportEntryColumns.Status(),
StdReportEntryColumns.DaysInStatus(),
StdReportEntryColumns.RepoType(),
StdReportEntryColumns.Balance(),
StdReportEntryColumns.AccountCode(),
StdReportEntryColumns.Bankruptcy(),
StdReportEntryColumns.Collector(),
StdReportEntryColumns.Collateral(),
StdReportEntryColumns.RepoCompany(),
StdReportEntryColumns.DateAssigned())
};
}
catch (Exception ex)
{
Log.Error(ex, "Failure retrieving Repo Company Active Count Report");
throw new ServerErrorException();
}
}
public async Task<ReportTableResponse> GetAvgDaysAssignedToRepoed(DateTime lowDateTime, DateTime highDateTime)
{
try
{
var reportData = await _reportingRepository.GetAccountsByDateRepoed(lowDateTime, highDateTime);
return new ReportTableResponse()
{
ReportTable = ReportTableFactory.CreateHistoricalSummationTable(
ReportSumType.WholeNumberAvg,
reportData,
"Repo Companies",
lowDateTime,
highDateTime,
(reportEntry) => reportEntry.RepoDuration,
(reportEntry) => reportEntry.RepoCompany,
(reportEntry) => reportEntry.DateRepoed,
(reportEntry) => reportEntry.CollateralId,
false),
DataTable = DataTableFormatting.CreateDataTable(
reportData,
(reportRow) => reportRow.RepoId,
StdReportEntryColumns.Member(),
StdReportEntryColumns.AccountNo(),
StdReportEntryColumns.Status(),
StdReportEntryColumns.DaysInStatus(),
StdReportEntryColumns.RepoType(),
StdReportEntryColumns.Balance(),
StdReportEntryColumns.AccountCode(),
StdReportEntryColumns.Bankruptcy(),
StdReportEntryColumns.Collateral(),
StdReportEntryColumns.RepoCompany(),
StdReportEntryColumns.RepoDuration(),
StdReportEntryColumns.DateAssigned(),
StdReportEntryColumns.DateRepoed())
};
}
catch (Exception ex)
{
Log.Error(ex, "Failure retrieving Avg Days Assigned to Repoed Report");
throw new ServerErrorException();
}
}
public async Task<ReportTableResponse> GetRepoedCountReport(DateTime lowDateTime, DateTime highDateTime)
{
try
{
var reportData = await _reportingRepository.GetAccountsByDateRepoed(lowDateTime, highDateTime);
return new ReportTableResponse()
{
ReportTable = ReportTableFactory.CreateHistoricalSummationTable(
ReportSumType.WholeNumber,
reportData,
"Repo Companies",
lowDateTime,
highDateTime,
(reportEntry) => 1,
(reportEntry) => reportEntry.RepoCompany,
(reportEntry) => reportEntry.DateRepoed,
(reportEntry) => reportEntry.CollateralId),
DataTable = DataTableFormatting.CreateDataTable(
reportData,
(entry) => entry.RepoId,
StdReportEntryColumns.Member(),
StdReportEntryColumns.AccountNo(),
StdReportEntryColumns.Status(),
StdReportEntryColumns.DaysInStatus(),
StdReportEntryColumns.RepoType(),
StdReportEntryColumns.Balance(),
StdReportEntryColumns.AccountCode(),
StdReportEntryColumns.Bankruptcy(),
StdReportEntryColumns.Collateral(),
StdReportEntryColumns.RepoCompany(),
StdReportEntryColumns.RepoDuration())
};
}
catch (Exception ex)
{
Log.Error(ex, "Failure retrieving Repo Company Active Count Report");
throw new ServerErrorException();
}
}
}
}