167 lines
5.7 KiB
C#
167 lines
5.7 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;
|
|
//
|
|
namespace StockInfo
|
|
{
|
|
public partial class frmMyStocks : Form
|
|
{
|
|
Color hdrColor;
|
|
private readonly IStockRepository _stockRepository;
|
|
private readonly IStockMarketRepository _stockMarketRepository;
|
|
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 frmMyStocks(IStockRepository stockRepository, IStockMarketRepository stockMarketRepository)
|
|
{
|
|
hdrColor = Color.CadetBlue;
|
|
InitializeComponent();
|
|
_stockRepository = stockRepository;
|
|
_stockMarketRepository = stockMarketRepository;
|
|
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>();
|
|
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);
|
|
}
|
|
foreach(var stk in tmpStocks.OrderByDescending(s => s.PostAmount * (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.PostAmount.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)
|
|
{
|
|
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);
|
|
}
|
|
}
|
|
}
|