Beispiel #1
0
        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);
            }
        }
Beispiel #2
0
        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}");
        }
Beispiel #3
0
        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);
        }