Пример #1
0
 private void WriteDetails(IReportWriter writer, string prefix, Predicate <Account> filter)
 {
     // compute summary
     foreach (var securityTypeGroup in calc.GetHoldingsBySecurityType(filter))
     {
         WriteDetails(writer, prefix, securityTypeGroup);
     }
 }
Пример #2
0
        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);
        }
Пример #3
0
        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();
                }
            }
        }
Пример #4
0
        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);
        }