public Tuple <List <string>, List <string> > ConvertToCsv(FullDatabaseModel data) { try { if (data == null || !data.FullDatabase.Any()) { return(new Tuple <List <string>, List <string> >(new List <string>(), new List <string>())); } var csvData = new List <string>(); var header = $"{ClientId},{InvoiceNumber},{PaymentDue},{PaymentDueDate}"; var payments = Math.Ceiling((double)data.FullDatabase.Max(row => row.Payments.Count) / 3); for (var i = 1; i <= payments; i++) { header = $"{header},{PaymentDate}{i},{PaymentPaid}{i},{Latency}{i}"; } csvData.Add(header); csvData.AddRange( from databaseRow in data.FullDatabase let databaseRowString = $"{databaseRow.ClientId},{databaseRow.InvoiceNumber},{databaseRow.PaymentDue},{databaseRow.PaymentDueDate.Day}.{databaseRow.PaymentDueDate.Month}.{databaseRow.PaymentDueDate.Year}" select databaseRow.Payments .Aggregate(databaseRowString, (current, paymentDateLatencyPaid) => $"{current},{paymentDateLatencyPaid.PaymentDate.Day}.{paymentDateLatencyPaid.PaymentDate.Month}.{paymentDateLatencyPaid.PaymentDate.Year},{paymentDateLatencyPaid.PaymentPaid},{paymentDateLatencyPaid.Latency}")); return(new Tuple <List <string>, List <string> >(csvData, new List <string>())); } catch (Exception e) { MessageBox.Show($@"Failed converting full report to csv. InnerMessage: {e.Message}"); throw; } }
private SummedDatabaseModel ConvertFullReportToSummedReport(FullDatabaseModel fullReportModel) { var dataBaseRowsByClientId = SplitFullDbRowsByClientId(fullReportModel); var summedDatabase = new SummedDatabaseModel(); foreach (var clientInFullDb in dataBaseRowsByClientId) { summedDatabase.SummedDatabase.Add(clientInFullDb.Key, GetSummedDatabasePartner(clientInFullDb.Value)); } return(summedDatabase); }
private List <string> AddCenturionLogsGetBackIssues(FullDatabaseModel fullDatabase, List <CenturionLog> centurionLogs) { var issues = new List <string>(); if (!centurionLogs.Any()) { return(issues); } var uniqueCenturionReportRows = centurionLogs .Select(report => report.CenturionReport) .Aggregate((a, b) => a.Union(b).ToList()); foreach (var uniqueCenturionReportRow in uniqueCenturionReportRows) { var fullDbRow = fullDatabase .FullDatabase .FirstOrDefault(row => row.InvoiceNumber.Equals(uniqueCenturionReportRow.InvoiceNumber)); if (fullDbRow == null) { continue; } fullDbRow.ClientId = uniqueCenturionReportRow.ClientId; var payment = new PaymentDateLatencyPaid { PaymentDate = uniqueCenturionReportRow.PaymentDate, PaymentPaid = uniqueCenturionReportRow.AmountPaid }; var totalDaysBetweenDueAndPaid = (uniqueCenturionReportRow.PaymentDate - fullDbRow.PaymentDueDate).TotalDays; payment.Latency = totalDaysBetweenDueAndPaid > 0 ? (int)totalDaysBetweenDueAndPaid : 0; if (fullDbRow.Payments == null) { fullDbRow.Payments = new List <PaymentDateLatencyPaid>(); } fullDbRow.Payments.Add(payment); } return(issues); }
public Tuple <FullDatabaseModel, List <string> > GetFullReportModel(List <string> centurionLogNames, List <string> clientLogNames, string latencyTable = null) { try { var fullDatabaseModel = new FullDatabaseModel(); var issues = new List <string>(); var centurionLogsAndIssues = centurionLogNames.Select(_logDal.GetCenturionLog).ToList(); var latencyConversionTable = _logDal.GetReportLatencyLog(latencyTable); var clientLogsAndIssues = clientLogNames.Select(logName => _logDal.GetClientLog(logName, latencyConversionTable)).ToList(); centurionLogsAndIssues.ForEach(x => issues.AddRange(x.Item2)); clientLogsAndIssues.ForEach(x => issues.AddRange(x.Item2)); try { issues.AddRange(AddClientLogsGetBackIssues(fullDatabaseModel, clientLogsAndIssues.Select(x => x.Item1).ToList()).Where(x => !string.IsNullOrEmpty(x))); } catch (Exception e) { MessageBox.Show($@"Failed adding client logs to full report model. InnerMessage: {e.Message}, issues cataloged in issues file."); throw; } try { issues.AddRange(AddCenturionLogsGetBackIssues(fullDatabaseModel, centurionLogsAndIssues.Select(x => x.Item1).ToList()).Where(x => !string.IsNullOrEmpty(x))); } catch (Exception e) { MessageBox.Show($@"Failed adding centurions logs to full report model. InnerMessage: {e.Message}, issues cataloged in issues file."); throw; } return(new Tuple <FullDatabaseModel, List <string> >(fullDatabaseModel, issues)); } catch (Exception e) { MessageBox.Show($@"Failed calculating full report model. InnerMessage: {e.Message}, issues cataloged in issues file."); throw; } }
private List <string> AddClientLogsGetBackIssues(FullDatabaseModel fullDatabase, List <ClientLog> clientLogs) { var issues = new List <string>(); if (!clientLogs.Any()) { return(issues); } var uniqueClientReportRows = clientLogs .Select(report => report.ClientReport) .Aggregate((a, b) => a.Union(b).ToList()); foreach (var clientReportRow in uniqueClientReportRows) { if (fullDatabase.FullDatabase.Any(fullDatabaseRow => fullDatabaseRow.InvoiceNumber.Equals(clientReportRow.InvoiceNumber))) { continue; } var newDatabaseRow = new FullDatabaseRow { InvoiceNumber = clientReportRow.InvoiceNumber, PaymentDue = clientReportRow.AmountDue, PaymentDueDate = new DateTime( clientReportRow.InvoiceDate.Year, clientReportRow.InvoiceDate.Month, DateTime.DaysInMonth(clientReportRow.InvoiceDate.Year, clientReportRow.InvoiceDate.Month)). AddDays(clientReportRow.PaymentTerms), ClientId = clientReportRow.ClientId }; fullDatabase.FullDatabase.Add(newDatabaseRow); } return(issues); }
private Dictionary <string, List <FullDatabaseRow> > SplitFullDbRowsByClientId(FullDatabaseModel fullReportModel) { var dataBaseRowsByClientId = new Dictionary <string, List <FullDatabaseRow> >(); foreach (var fullDatabaseRow in fullReportModel.FullDatabase) { if (string.IsNullOrEmpty(fullDatabaseRow.ClientId)) { continue; } var fullDbRowClientId = fullDatabaseRow.ClientId.Replace(" ", ""); if (dataBaseRowsByClientId.ContainsKey(fullDbRowClientId)) { dataBaseRowsByClientId[fullDbRowClientId].Add(fullDatabaseRow); } else { dataBaseRowsByClientId.Add(fullDbRowClientId, new List <FullDatabaseRow> { fullDatabaseRow }); } } return(dataBaseRowsByClientId); }