Files
StockInfoCoreApp/StockInfoCore/frmMyStocks.cs

184 lines
6.8 KiB
C#

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;
using Helpers;
//
namespace StockInfoCore
{
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<string, DiTraderStockRow> Stocks { get; set; }
public IEnumerable<StockMember> 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<StockMember>();
var personStocks = new List<StockMember>();
//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);
}
lblOwnerName.Text = $"* {ConnectedPerson.FirstName} {ConnectedPerson.LastName} *";
//GlobalStopwatch.PrintSecs("In reload (New window)");
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();
lbUpdateTimes.Items.Add($"{DateTime.Now.ToLongTimeString()} - {txtTotDiff.Text.Substring(0, txtTotDiff.Text.Length - 2)}");
}
private void TotalReload()
{
_stockMarketRepository.LoadStockMarketList(ConnectedPerson.Id);
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);
}
}
}