/// <summary> /// Builds the report on the position. /// </summary> /// <param name="reportSpec">Configuration parameters used to format the report.</param> /// <param name="position">The position.</param> /// <returns>The report.</returns> public static Report BuildReport(ReportSpecification reportSpec, Position position) { var contents = Enumerable.Repeat(reportSpec.Headers, 1) .Concat(position.Periods.Zip(Helpers.LocalTimes(position.Day), (period, localTime) => string.Format("{0},{1}", localTime.ToString(reportSpec.LocalTimeFormat), period.Volume))).ToArray(); return(new Report { Day = position.Day, Contents = contents }); }
/// <summary> /// Writes a report to a file. /// </summary> /// <param name="reportSpec">Configuration parameters used to write the report.</param> /// <param name="report">The report.</param> public static void WriteReport(ReportSpecification reportSpec, Report report) { Directory.CreateDirectory(reportSpec.OutputPath); var reportFilename = string.Format(reportSpec.FilenameFormat, report.Day.LocalDateTime.ToString(reportSpec.FilenameDateFormat)); var reportFilepath = Path.Combine(reportSpec.OutputPath, reportFilename); var temporaryFilename = string.Format("{0}.tmp", reportFilename); var temporaryFilepath = Path.Combine(reportSpec.OutputPath, temporaryFilename); File.WriteAllLines(temporaryFilepath, report.Contents); if (File.Exists(reportFilepath)) { File.Delete(reportFilepath); } File.Move(temporaryFilepath, reportFilepath); }