public void CreateFromRawData_UnitPrice(string unitPrice, decimal expected, string expectedCurrency)
        {
            var asset = PortfolioAsset.CreateFromRawData("iShares 20+ Year Treasury Bond ETF", "10", unitPrice, "6617");

            asset.UnitPrice.ShouldBe(expected);
            asset.Currency.ShouldBe(expectedCurrency);
        }
示例#2
0
        public async Task <IActionResult> AddStock(int?id, string tickerinput, string amount)
        {
            Portfolio portfolio = await _context.Portfolio.Include(p => p.PortfolioAssets).SingleAsync(p => p.ID == id);

            List <string>  heldTickers = portfolio.PortfolioAssets.Select(p => p.AssetSymbol).ToList();
            PortfolioAsset newAsset    = new PortfolioAsset {
                AssetSymbol = tickerinput.ToUpper(), NumberOfAssetOwned = Int32.Parse(amount)
            };

            if (portfolio.PortfolioAssets.Count == 0)
            {
                _context.PortfolioAsset.Add(newAsset);
                portfolio.PortfolioAssets = new List <PortfolioAsset>()
                {
                    newAsset
                };
            }
            else if (!heldTickers.Contains(tickerinput))
            {
                portfolio.PortfolioAssets.Add(newAsset);
                _context.Update(portfolio);
            }
            else
            {
                PortfolioAsset asset = portfolio.PortfolioAssets.Single(p => p.AssetSymbol == tickerinput);
                asset.NumberOfAssetOwned += int.Parse(amount);
                _context.Update(asset);
            }

            await _context.SaveChangesAsync();

            HttpContext.Session.Remove("selected_port_viewmodel");
            return(RedirectToAction("AddStock", new { id = id }));
        }
示例#3
0
        static List <PortfolioAsset> Convert(dynamic py_assets)
        {
            var assets = new List <PortfolioAsset>();

            for (int i = 0; i < py_assets.Length(); i++)
            {
                assets.Add(PortfolioAsset.CreateFromRawData((string)py_assets[i].name, (string)py_assets[i].units, (string)py_assets[i].unitPrice, (string)py_assets[i].valueSEK));
            }
            return(assets);
        }
        public void CreateFromRawData_BaseCase()
        {
            const string expectedName = "iShares 20+ Year Treasury Bond ETF";
            var          asset        = PortfolioAsset.CreateFromRawData(expectedName, "2", "600 USD", "6617");

            asset.Name.ShouldBe(expectedName);
            asset.Units.ShouldBe(2);
            asset.UnitPrice.ShouldBe(600);
            asset.Currency.ShouldBe("USD");
            asset.ValueDomesticCurrency.ShouldBe(6617);
        }
 public static PortfolioAssetViewModel FromAsset(PortfolioAsset asset)
 {
     return(new PortfolioAssetViewModel
     {
         Name = asset.Name,
         Tag = asset.Tag,
         ValueDomesticCurrency = asset.ValueDomesticCurrency,
         GoalAllocation = asset.AllocationGoal?.Allocation ?? 0,
         GoalLeverage = asset.AllocationGoal?.Leverage ?? 1.0m,
     });
 }
示例#6
0
        public async Task <IActionResult> DeleteConfirmed(int id)
        {
            Portfolio portfolio = await _context.Portfolio.Include(p => p.PortfolioAssets).SingleAsync(m => m.ID == id);

            foreach (PortfolioAsset asset in portfolio.PortfolioAssets)
            {
                PortfolioAsset assetToRemove = _context.PortfolioAsset.Single(p => p.ID == asset.ID);
                _context.PortfolioAsset.Remove(assetToRemove);
            }

            _context.Portfolio.Remove(portfolio);
            await _context.SaveChangesAsync();

            HttpContext.Session.Remove("selected_port_viewmodel");
            return(RedirectToAction("Index"));
        }
示例#7
0
        public Response <List <PortfolioAsset> > GetPortfolioAssets()
        {
            var data = new List <PortfolioAsset>();

            using (var command = _context.Database.GetDbConnection().CreateCommand())
            {
                // TODO: Move to Config
                command.CommandText = "EXEC dbo.GetPortfolioAssets";
                _context.Database.OpenConnection();

                using (var result = command.ExecuteReader())
                {
                    while (result.Read())
                    {
                        // Build Portfolio Asset
                        var portfolioAsset = new PortfolioAsset()
                        {
                            units = Convert.ToDouble(result["Units"]),

                            asset = new Asset()
                            {
                                AssetId = Convert.ToInt32(result["AssetID"]),
                                Name    = result["Name"].ToString(),
                                Symbol  = result["Symbol"].ToString(),
                            }
                        };

                        // Add Portofolio Asset
                        data.Add(portfolioAsset);
                    }
                }

                //_context.Database.CloseConnection();
            }

            var response = new Response <List <PortfolioAsset> >()
            {
                Data   = data,
                Status = ResponseStatus.Success
            };

            return(response);
        }
示例#8
0
        public async Task <IActionResult> EditPortfolioAsset(PortfolioAssetViewModel assetvm)
        {
            string returnurl      = assetvm.ReturnUrl;
            var    portfolioAsset = new PortfolioAsset
            {
                Id      = assetvm.Id,
                Caption = assetvm.Caption
            };

            if (assetvm.Asset == null)
            {
                portfolioAsset.Asset = assetvm.CurrentAsset;
            }
            else
            {
                if (!string.IsNullOrEmpty(assetvm.CurrentAsset))
                {
                    _fileManager.RemovePortfolioAsset(assetvm.CurrentAsset);
                }
                portfolioAsset.Asset = _fileManager.SavePortfolioAsset(assetvm.Asset);
            }
            if (portfolioAsset.Id > 0)
            {
                _repo.UpdatePortfolioAsset(portfolioAsset);
            }
            else
            {
                var item = _repo.GetPortfolioItemForAssets(assetvm.PortfolioItemId);
                portfolioAsset.PortfolioItem = item;
                _repo.AddPortfolioAsset(portfolioAsset);
            }
            if (await _repo.SaveChangesAsync())
            {
                return(LocalRedirect(returnurl));
            }
            else
            {
                return(View(portfolioAsset));
            }
        }
示例#9
0
        public async Task <IActionResult> DeleteStock(int?id, string stockTicker, string amountRemove)
        {
            ApplicationUser user = await _userManager.FindByIdAsync(HttpContext.User.GetUserId());

            List <Portfolio> portfolios       = _context.Portfolio.Where(p => p.User.Id == user.Id).Include(p => p.PortfolioAssets).ToList();
            Portfolio        workingPortfolio = portfolios.Single(p => p.ID == id);

            portfolios.Remove(workingPortfolio);

            var model = new DeleteStockFromPortfolioViewModel {
                WorkingPortfolio = workingPortfolio, UserPortfolios = portfolios
            };

            PortfolioAsset asset = _context.PortfolioAsset.Single(p => p.PortfolioID == id && p.AssetSymbol == stockTicker);

            if (asset.NumberOfAssetOwned < int.Parse(amountRemove))
            {
                asset.NumberOfAssetOwned = 0;
            }
            else
            {
                asset.NumberOfAssetOwned -= int.Parse(amountRemove);
            }

            if (asset.NumberOfAssetOwned == 0)
            {
                _context.PortfolioAsset.Remove(asset);
                await _context.SaveChangesAsync();
            }
            else
            {
                _context.Update(asset);
                await _context.SaveChangesAsync();
            }

            HttpContext.Session.Remove("selected_port_viewmodel");
            return(View(model));
        }
示例#10
0
 public void UpdatePortfolioAsset(PortfolioAsset portfolioAsset)
 {
     _ctx.PortfolioAssets.Update(portfolioAsset);
 }
示例#11
0
 public void AddPortfolioAsset(PortfolioAsset portfolioAsset)
 {
     _ctx.PortfolioAssets.Add(portfolioAsset);
 }
        public void CreateFromRawData_ValueDomestic(string value, decimal expected)
        {
            var asset = PortfolioAsset.CreateFromRawData("iShares 20+ Year Treasury Bond ETF", "10", "600 USD", value);

            asset.ValueDomesticCurrency.ShouldBe(expected);
        }
        public void CreateFromRawData_Units(string units, decimal expected)
        {
            var asset = PortfolioAsset.CreateFromRawData("iShares 20+ Year Treasury Bond ETF", units, "600 USD", "6617");

            asset.Units.ShouldBe(expected);
        }