public void Export(PowerTrade aggregatedTrade, string directoryPath) { try { var data = DateTimeManager.EnrichDataWithDates(aggregatedTrade); var fullPath = CombineFullPathToExport(directoryPath, aggregatedTrade); if (!Directory.Exists(directoryPath)) { Directory.CreateDirectory(directoryPath); } int suffix = 1; while (File.Exists(fullPath)) { fullPath = CombineFullPathToExport(directoryPath, aggregatedTrade, suffix.ToString()); suffix++; } using (var writer = new StreamWriter(fullPath)) using (var csv = new CsvWriter(writer)) { csv.WriteRecords(data); } } catch (Exception e) { throw new Exception("Report export failed", e.InnerException); } }
private string CombineFullPathToExport(string directoryPath, PowerTrade aggregatedTrade, string suffix = "") { DateTime dateToExport = aggregatedTrade.CreatedDate.ToLocalTime(); string dateDayPart = aggregatedTrade.CreatedDate.ToString("yyyyMMdd"); string dateTimePart = aggregatedTrade.CreatedDate.TimeOfDay.ToString("hhmm"); string extension = "csv"; if (!String.IsNullOrWhiteSpace(suffix)) { suffix = $"_{suffix}"; } return($"{directoryPath}\\PowerPosition_" + $"{dateDayPart}_" + $"{dateTimePart}{suffix}.{extension}"); }
public static List <ReportPeriod> EnrichDataWithDates(PowerTrade aggregatedTrade) { var enrichedData = new List <ReportPeriod>(); var beginningOfReportingDay = CalculateBegginingOfReportingDayUtc(aggregatedTrade.Date); for (int i = 0; i < aggregatedTrade.Volumes.Count(); i++) { var localDateTime = beginningOfReportingDay.Add(TimeSpan.FromHours(i)).ToLocalTime(); string timePeriod = localDateTime.TimeOfDay.ToString(@"hh\:mm"); enrichedData.Add(new ReportPeriod { Period = timePeriod, Value = aggregatedTrade.Volumes[i] }); } return(enrichedData); }
public IEnumerable <PowerTrade> MapTrades(IEnumerable <Trade> trades) { var powerTrades = new List <PowerTrade>(); foreach (var trade in trades) { var powerTrade = new PowerTrade(trade.Periods.Count()); powerTrade.Date = trade.Date; foreach (var period in trade.Periods) { AddVolumeByPeriod(powerTrade.Volumes, period.Period, period.Volume); } powerTrades.Add(powerTrade); } return(powerTrades); }
public PowerTrade Aggregate(IEnumerable <PowerTrade> powerTrades) { int numberOfPeriods = powerTrades.First()?.Volumes?.Count() ?? 0; var tradeDate = powerTrades.First().Date; var resultTrade = new PowerTrade(numberOfPeriods); resultTrade.Date = tradeDate; foreach (var powerTrade in powerTrades) { for (int i = 0; i < powerTrade.Volumes.Count(); i++) { resultTrade.Volumes[i] += powerTrade.Volumes[i]; } } return(resultTrade); }