public void Write(string reportFilePath, TradesAggregationsReport reportData) { var lines = new List <string>(); lines.Add("----------------------------------- Securities ------------------------------------------------------"); lines.Add(string.Empty); foreach (var security in reportData.SecuritiesAggregations) { lines.Add($"{security.Security} - Quantity Sum: {security.QuantitySum}; Price Average: {security.PriceAverage}"); } lines.Add(string.Empty); lines.Add("----------------------------------- Transaction Codes -----------------------------------------------"); foreach (var transactionCodes in reportData.TransactionCodeAggregations) { lines.Add($"{transactionCodes.TransactionCode} - Quantity Sum: {transactionCodes.QuantitySum}; Price Average: {transactionCodes.PriceAverage}"); } lines.Add(string.Empty); lines.Add("----------------------------------- Trade Dates ------------------------------------------------------"); foreach (var tradeDate in reportData.TradeDateAggregations) { lines.Add($"{tradeDate.TradeDate.ToString("yyyy/MM/dd")} - Quantity Sum: {tradeDate.QuantitySum}; Price Average: {tradeDate.PriceAverage}"); } lines.Add(string.Empty); lines.Add("------------------------------------ Files with without valid security ------------------------------"); foreach (var file in reportData.FileAggregations) { lines.Add($"{file.FilePath} - Count: {file.InvalidTradesCount}"); } File.WriteAllLines(reportFilePath, lines); }
/// <summary> /// Generate report after processing is done, based on internal state /// </summary> /// <returns></returns> public TradesAggregationsReport GenerateReport() { var report = new TradesAggregationsReport(); // map securities aggregations var securitiesAggregations = new List <SecurityAggregation>(); foreach (var security in this.quantitiesByBloombergId.Keys) { securitiesAggregations.Add(new SecurityAggregation { Security = security, QuantitySum = this.quantitiesByBloombergId[security], PriceAverage = this.priceSumByBloombergId[security] / this.priceCountByBloombergId[security] }); } report.SecuritiesAggregations = securitiesAggregations; // map transaction code aggregations var transactionCodeAggregations = new List <TransactionCodeAggregation>(); foreach (var transactionCode in this.quantitiesByTransactionCode.Keys) { transactionCodeAggregations.Add(new TransactionCodeAggregation { TransactionCode = transactionCode, QuantitySum = this.quantitiesByTransactionCode[transactionCode], PriceAverage = this.priceSumByTransactionCode[transactionCode] / this.priceCountByTransactionCode[transactionCode] }); } report.TransactionCodeAggregations = transactionCodeAggregations; // map trade date aggregations var tradeDateAggregations = new List <TradeDateAggregation>(); foreach (var tradeDate in this.quantitiesByTradeDate.Keys) { tradeDateAggregations.Add(new TradeDateAggregation { TradeDate = tradeDate, QuantitySum = this.quantitiesByTradeDate[tradeDate], PriceAverage = this.priceSumByTradeDate[tradeDate] / this.priceCountByTradeDate[tradeDate] }); } report.TradeDateAggregations = tradeDateAggregations; // map file aggregations var fileAggregations = new List <FileAggregation>(); foreach (var fileName in this.fileCountsDictionary.Keys) { fileAggregations.Add(new FileAggregation { FilePath = fileName, InvalidTradesCount = this.fileCountsDictionary[fileName] }); } report.FileAggregations = fileAggregations; return(report); }