using StockDal.Interface; using DataDomain; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using StockDAL.Interface; // namespace StockInfo { public partial class frmMyStocks : Form { Color hdrColor; private readonly IStockRepository _stockRepository; private readonly IStockMarketRepository _stockMarketRepository; private readonly IStockPersonConnect _stockPersonConnect; public decimal BoughtSum { get; set; } public decimal TotalDiff { get; set; } public decimal CurrentSum { get; set; } public decimal TotalPlus { get; set; } public decimal TotalMinus { get; set; } public Dictionary Stocks { get; set; } public IEnumerable CurrentStocks { get; set; } public Person ConnectedPerson { get; set; } public frmMyStocks(IStockRepository stockRepository, IStockMarketRepository stockMarketRepository,IStockPersonConnect stockPersonConnect) { hdrColor = Color.CadetBlue; InitializeComponent(); _stockRepository = stockRepository; _stockMarketRepository = stockMarketRepository; _stockPersonConnect = stockPersonConnect; numericUpDown1.Value = timer1.Interval / 60000; numericUpDown1.Enabled = false; } private void ReloadData() { CurrentStocks = _stockRepository.GetAllRemainingStocks(); lvMyStocks.Items.Clear(); BoughtSum = 0m; TotalDiff = 0m; CurrentSum = 0m; TotalMinus = 0m; TotalPlus = 0m; var tmpStocks = new List(); var personStocks = new List(); //Update all handled shares foreach (var stock in CurrentStocks) { stock.ActValue = Stocks[stock.StockId.Trim()].LatestPrice; stock.ActDate = DateTime.Today; _stockRepository.UpdateActualPrice(stock.Id, stock.ActValue); tmpStocks.Add(stock); } //Use only Stocks belonging to person var connects =_stockPersonConnect.GetAllConnectionsByPersId(ConnectedPerson.Id); personStocks.AddRange(tmpStocks.Where(ts => connects.Any(c => c.StockId == ts.Id)).ToList()); foreach(var stk in personStocks.OrderByDescending(s => s.ActAmount * (s.ActValue -s.BuyValue))) { AddItemToListView(stk); } txtBuyTotal.Text = BoughtSum.ToString(); txtBuyTotal.Refresh(); txtCurrValue.Text = CurrentSum.ToString(); txtCurrValue.Refresh(); txtTotDiff.Text = TotalDiff.ToString(); if (TotalDiff < 0) { txtTotDiff.BackColor = Color.Pink; } else { txtTotDiff.BackColor = Color.LightGreen; } txtTotDiff.Refresh(); txtTotalMinus.Text = TotalMinus.ToString(); txtTotalMinus.Refresh(); txtTotalPlus.Text = TotalPlus.ToString(); txtTotalPlus.Refresh(); } private void TotalReload() { _stockMarketRepository.LoadStockMarketList(); Stocks = _stockMarketRepository.StockMarketList; ReloadData(); lbUpdateTimes.Items.Add($"{DateTime.Now.ToLongTimeString()} - {txtTotDiff.Text.Substring(0, txtTotDiff.Text.Length-2)}"); } private void lvMyStocks_DrawColumnHeader(object sender, DrawListViewColumnHeaderEventArgs e) { using (Brush hBr = new SolidBrush(hdrColor)) { e.Graphics.FillRectangle(hBr, e.Bounds); e.DrawText(); } } private void AddItemToListView(StockMember currStock) { var lv = lvMyStocks.Items.Add(currStock.StockId); lv.SubItems.Add(currStock.BuyValue.ToString()); var currValue = lv.SubItems.Add(currStock.ActValue.ToString()); //var saveBcolor = currValue.BackColor; //var valueLevel = currStock.ActValue - currStock.BuyValue; //currValue.ForeColor = valueLevel > 5 ? Color.Red : saveBcolor; var priceDiff = currStock.ActValue - currStock.BuyValue; lv.SubItems.Add(priceDiff.ToString()); lv.SubItems.Add(currStock.ActAmount.ToString()); lv.SubItems.Add(currStock.BuyDate.ToString()); var buyValue = currStock.PostAmount * currStock.BuyValue; var actValue = currStock.PostAmount * currStock.ActValue; var diffValue = actValue - buyValue; var diffproc = diffValue / buyValue * 100; BoughtSum += buyValue; TotalDiff += diffValue; CurrentSum += actValue; if (diffValue < 0) { TotalMinus += diffValue; } else { TotalPlus += diffValue; } var lvs = lv.SubItems.Add(diffValue.ToString()); lv.SubItems.Add(Math.Round(diffproc, 2).ToString()); lv.SubItems.Add(currStock.ActDate.ToString()); lv.SubItems.Add(actValue.ToString()); var owned = (DateTime.Today - currStock.BuyDate).TotalDays; lv.SubItems.Add(owned.ToString()); if (diffValue < 0) { lv.BackColor = Color.Pink; } else { lv.BackColor = Color.LightGreen; } } private void frmMyStocks_Shown(object sender, EventArgs e) { this.Text = $"{ConnectedPerson.Id} - {ConnectedPerson.FirstName} {ConnectedPerson.LastName}'s Shares"; ReloadData(); } private void timer1_Tick(object sender, EventArgs e) { TotalReload(); } private void chkAutoReload_CheckedChanged(object sender, EventArgs e) { timer1.Enabled = chkAutoReload.Checked; numericUpDown1.Enabled = chkAutoReload.Checked; } private void numericUpDown1_ValueChanged(object sender, EventArgs e) { timer1.Interval = Convert.ToInt32(numericUpDown1.Value * 60000); } } }