private void WriteDetails(IReportWriter writer, string prefix, Predicate <Account> filter) { // compute summary foreach (var securityTypeGroup in calc.GetHoldingsBySecurityType(filter)) { WriteDetails(writer, prefix, securityTypeGroup); } }
private decimal WriteSecurities(IReportWriter writer, List <PieData> data, string prefix, Predicate <Account> filter, out bool hasNoneType) { hasNoneType = false; decimal balance = 0; Dictionary <SecurityType, decimal> byType = new Dictionary <SecurityType, decimal>(); CostBasisCalculator calc = new CostBasisCalculator(this.myMoney, DateTime.Now); // compute summary foreach (var securityTypeGroup in calc.GetHoldingsBySecurityType(filter)) { SecurityType stype = securityTypeGroup.Key; decimal sb = 0; byType.TryGetValue(stype, out sb); foreach (SecurityPurchase sp in securityTypeGroup.Value) { sb += sp.MarketValue; } byType[stype] = sb; } if (byType.Count > 0) { foreach (SecurityType st in new SecurityType[] { SecurityType.Bond, SecurityType.MutualFund, SecurityType.Equity, SecurityType.MoneyMarket, SecurityType.ETF, SecurityType.Reit, SecurityType.Futures, SecurityType.None }) { decimal sb = 0; if (byType.TryGetValue(st, out sb)) { string caption = prefix + Security.GetSecurityTypeCaption(st); if (sb > 0) { data.Add(new PieData() { Name = caption, Total = sb }); if (st == SecurityType.None) { hasNoneType = true; caption += "*"; } } WriteRow(writer, caption, sb); balance += sb; } } } else { WriteRow(writer, "N/A", 0); } return(balance); }
private void WriteDetails(IReportWriter writer, string prefix, Predicate <Account> filter) { // compute summary foreach (var securityTypeGroup in calc.GetHoldingsBySecurityType(filter)) { decimal marketValue = 0; decimal costBasis = 0; decimal gainLoss = 0; SecurityType st = securityTypeGroup.Key; string caption = prefix + Security.GetSecurityTypeCaption(st); bool foundSecuritiesInGroup = false; Security current = null; List <SecurityPurchase> bySecurity = new List <SecurityPurchase>(); foreach (SecurityPurchase i in securityTypeGroup.Value) { if (current != null && current != i.Security) { WriteSecurities(writer, bySecurity, ref marketValue, ref costBasis, ref gainLoss); bySecurity.Clear(); } current = i.Security; // only report the security group header if it has some units left in it. if (i.UnitsRemaining > 0) { if (!foundSecuritiesInGroup) { foundSecuritiesInGroup = true; // create the security type group and subtable for these securities. writer.WriteSubHeading(caption); writer.StartTable(); writer.StartColumnDefinitions(); foreach (var minwidth in new double[] { 20, //Expander 80, // Date Acquired 300, // Description 100, // Quantity 100, // Price 100, // Market Value 100, // Unit Cost 100, // Cost Basis 100, // Gain/Loss 50, // % }) { writer.WriteColumnDefinition("Auto", minwidth, double.MaxValue); } writer.EndColumnDefinitions(); WriteRowHeaders(writer); } bySecurity.Add(i); } } if (foundSecuritiesInGroup) { // write the final group of securities. WriteSecurities(writer, bySecurity, ref marketValue, ref costBasis, ref gainLoss); writer.StartFooterRow(); WriteRow(writer, true, true, FontWeights.Bold, null, "Total", null, null, null, marketValue, null, costBasis, gainLoss); // only close the table writer.EndTable(); } } }
private decimal WriteSecurities(IReportWriter writer, IList <ChartDataValue> data, string prefix, Predicate <Account> filter, out bool hasNoneType) { hasNoneType = false; decimal balance = 0; Dictionary <SecurityType, decimal> byType = new Dictionary <SecurityType, decimal>(); Dictionary <SecurityType, SecurityGroup> groupsByType = new Dictionary <SecurityType, SecurityGroup>(); CostBasisCalculator calc = new CostBasisCalculator(this.myMoney, DateTime.Now); // compute summary foreach (var securityTypeGroup in calc.GetHoldingsBySecurityType(filter)) { SecurityType stype = securityTypeGroup.Type; decimal sb = 0; byType.TryGetValue(stype, out sb); foreach (SecurityPurchase sp in securityTypeGroup.Purchases) { sb += sp.MarketValue; } byType[stype] = sb; groupsByType[stype] = securityTypeGroup; } if (byType.Count > 0) { foreach (SecurityType st in new SecurityType[] { SecurityType.Bond, SecurityType.MutualFund, SecurityType.Equity, SecurityType.MoneyMarket, SecurityType.ETF, SecurityType.Reit, SecurityType.Futures, SecurityType.Private, SecurityType.None }) { decimal sb = 0; if (byType.TryGetValue(st, out sb)) { var color = GetRandomColor(); string caption = Security.GetSecurityTypeCaption(st); if (sb > 0) { string tooltip = caption; if (!string.IsNullOrEmpty(prefix)) { tooltip = prefix + " " + tooltip; } data.Add(new ChartDataValue() { Label = tooltip, Value = (double)sb, Color = color, UserData = groupsByType[st] }); if (st == SecurityType.None) { hasNoneType = true; caption += "*"; } } WriteRow(writer, color, caption, sb); balance += sb; } } } else { WriteRow(writer, GetRandomColor(), "N/A", 0); } return(balance); }