Files
StockInfoCoreApp/StockInfoCore/frmInitial.cs

339 lines
12 KiB
C#

using StockDal.Interface;
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 System.Text.Json;
using System.IO;
using Helpers;
using StockBL.Interface;
using SqliteBackups.Interfaces;
namespace StockInfoCore
{
public partial class frmInitial : Form
{
private readonly IStockRepository _stockRepository;
private readonly IStockMarketRepository _stockMarketRepository;
private readonly IPersonRepository _personRepository;
private readonly IAddressRepository _addressRepository;
private readonly IStockPersonConnect _stockPersonConnect;
private readonly IBackupRepository _backupRepository;
private readonly IBackupRoutines _backupRoutines;
private readonly IPersonStockFacade _personStockFacade;
private readonly frmRegisterStock _regWindow;
private readonly frmMyStocks _stockWindow;
private readonly frmSelling _sellWindow;
private readonly frmPerson _personWindow;
private readonly frmPersonShareConnect _personShareConnect;
private readonly frmBackup _backupWindow;
private readonly frmEditStock _editStock;
private readonly frmUtilities _utilities;
bool loading = false;
int progressValue = 0;
public int SelectedPersonId { get; set; } = 0;
public frmInitial(
IStockRepository stockMemberRepository,
IStockMarketRepository stockMarketRepository,
IPersonRepository personRepository,
IAddressRepository addressRepository,
IStockPersonConnect stockPersonConnect,
IBackupRepository backupRepository,
IBackupRoutines backupRoutines,
IPersonStockFacade personStockFacade,
frmRegisterStock regWindow,
frmMyStocks stockWindow,
frmSelling sellWindow,
frmPerson personWindow,
frmPersonShareConnect personShareConnect,
frmBackup backupWindow,
frmEditStock editStock,
frmUtilities utilities
)
{
InitializeComponent();
_stockRepository = stockMemberRepository;
_stockMarketRepository = stockMarketRepository;
_personRepository = personRepository;
_addressRepository = addressRepository;
_stockPersonConnect = stockPersonConnect;
_backupRepository = backupRepository;
_backupRoutines = backupRoutines;
_personStockFacade = personStockFacade;
_regWindow = regWindow;
_stockWindow = stockWindow;
_sellWindow = sellWindow;
_personWindow = personWindow;
_personShareConnect = personShareConnect;
_backupWindow = backupWindow;
_editStock = editStock;
_utilities = utilities;
}
private void Form1_Load(object sender, EventArgs e)
{
ReloadData();
btnRestoreShares.Enabled = false;
btnBackupShares.Enabled = false;
btnBackupAll.Enabled = false;
}
private async Task ReloadData(bool upd = false)
{
loading = true;
var allStocks = _stockRepository.GetAllStocks();
if (upd)
{
await _stockMarketRepository.LoadStockMarketListAsync(SelectedPersonId);
allStocks.ToList().ForEach(SM => SM.ActValue = UpdateOnlyNonZeroAmount(SM).ActValue);
}
dataGridView.DataSource = allStocks;
// SaveStocks(allStocks);
lblTotalRecords.Text = $"Total records: {dataGridView.RowCount}";
loading = false;
}
private StockMember UpdateOnlyNonZeroAmount(StockMember sMember)
{
var output = new StockMember();
if (sMember.ActAmount > 0)
{
if (_stockMarketRepository.StockMarketList.ContainsKey(sMember.StockId))
{
sMember.ActValue = _stockMarketRepository.StockMarketList[sMember.StockId].LatestPrice;
_stockRepository.UpdateActualPrice(sMember.Id, sMember.ActValue);
}
}
output = sMember;
return output;
}
private async void btnReload_Click(object sender, EventArgs e)
{
StartProgressTicking(350);
await ReloadData(true);
StopProgressTicking();
}
private void frmInitial_FormClosing(object sender, FormClosingEventArgs e)
{
if (DialogResult.OK != MessageBox.Show("B y e B y e !!", "Should we close ?", MessageBoxButtons.OKCancel))
{
e.Cancel = true;
}
}
private void btnStockReg_Click(object sender, EventArgs e)
{
Cursor.Current = Cursors.WaitCursor;
_stockMarketRepository.LoadStockMarketList(SelectedPersonId == 0 ? 10000 : SelectedPersonId);
_regWindow.Stocks = _stockMarketRepository.StockMarketList;
Cursor.Current = DefaultCursor;
_regWindow.ShowDialog();
if (_regWindow.RegisteredStocks.Count > 0)
{
_stockRepository.InsertMany(_regWindow.RegisteredStocks);
}
ReloadData();
}
private async void btnValueView_Click(object sender, EventArgs e)
{
//if(!GlobalStopwatch.IsRunning && GlobalStopwatch.EllapsedMillis>0)
// GlobalStopwatch.Restart();
//else GlobalStopwatch.Start();
if (SelectedPersonId == 0)
{
MessageBox.Show($"Ingen person vald ({SelectedPersonId})");
}
else
{
StartProgressTicking();
var person = _personRepository.GetPersonById(SelectedPersonId);
await _stockMarketRepository.LoadStockMarketListAsync(SelectedPersonId);
StopProgressTicking();
_stockWindow.ConnectedPerson = person;
_stockWindow.Stocks = _stockMarketRepository.StockMarketList;
//GlobalStopwatch.Stop();
//GlobalStopwatch.PrintSecs("Before Show Stockwindow");
_stockWindow.ShowDialog();
}
}
private void chkEnableBackRes_CheckedChanged(object sender, EventArgs e)
{
if (chkEnableBackRes.Checked)
{
btnRestoreShares.Enabled = true;
btnBackupShares.Enabled = true;
btnBackupAll.Enabled = true;
}
else
{
btnRestoreShares.Enabled = false;
btnBackupShares.Enabled = false;
btnBackupAll.Enabled = false;
}
}
private void btnBackupShares_Click(object sender, EventArgs e)
{
var stockList = _stockRepository.GetAllStocks();
var jsonStr = JsonSerializer.Serialize(stockList);
sfdSaver.Title = "Backup your sharedata";
sfdSaver.Filter = "Backup file (.json)|*.json";
sfdSaver.FileName = $"StockBackup{DateTime.Now.ToFileTime()}";
if (sfdSaver.ShowDialog() == DialogResult.OK)
{
File.WriteAllText(sfdSaver.FileName, jsonStr);
}
}
private void btnRestoreShares_Click(object sender, EventArgs e)
{
ofdOpener.Title = "Restore your share data";
ofdOpener.Filter = "Restore file (.json)|*.json";
ofdOpener.CheckFileExists = true;
if (ofdOpener.ShowDialog() == DialogResult.OK)
{
var jsonStr = File.ReadAllText(ofdOpener.FileName);
var stockList = JsonSerializer.Deserialize<List<StockMember>>(jsonStr);
_stockRepository.RestoreStockMembers(stockList);
};
}
private void btnStockSale_Click(object sender, EventArgs e)
{
if (SelectedPersonId == 0)
{
MessageBox.Show($"Ingen person vald ({SelectedPersonId})");
}
else
{
_sellWindow.selectedPersonId = SelectedPersonId;
_sellWindow.ShowDialog();
}
ReloadData();
}
private void btnEditPerson_Click(object sender, EventArgs e)
{
Cursor.Current = Cursors.WaitCursor;
_personWindow.PersonId = SelectedPersonId;
Cursor.Current = DefaultCursor;
_personWindow.ShowDialog();
LoadCmbOwners();
}
private void btnConnShares_Click(object sender, EventArgs e)
{
if (SelectedPersonId == 0)
{
MessageBox.Show($"Ingen person vald ({SelectedPersonId})");
}
else
{
var person = _personRepository.GetPersonById(SelectedPersonId);
Cursor.Current = Cursors.WaitCursor;
_personShareConnect.ConnectPerson = person;
Cursor.Current = DefaultCursor;
_personShareConnect.ShowDialog();
}
}
private void frmInitial_Shown(object sender, EventArgs e)
{
LoadCmbOwners();
}
private void LoadCmbOwners()
{
cmbOwners.Items.Clear();
var owners = _personRepository.GetAllOwners();
if (owners.Count() > 0)
{
foreach (var person in owners)
{
var itemIndex = cmbOwners.Items.Add(new ComboboxItem($"{person.FirstName} {person.LastName} ({person.NickName})", person.Id));
}
}
cmbOwners.Items.Add(new ComboboxItem($"< ny person> ", 0));
}
private void cmbOwners_SelectedIndexChanged(object sender, EventArgs e)
{
SelectedPersonId = ((ComboboxItem)cmbOwners.SelectedItem).HiddenValue;
}
private void btnBackupAll_Click(object sender, EventArgs e)
{
// backupWindow = new frmBackup(_backupRepository, _backupRoutines);
_backupWindow.ShowDialog();
}
private void dataGridView_SelectionChanged(object sender, EventArgs e)
{
if (!loading)
{
int id = Convert.ToInt32(dataGridView.Rows[dataGridView.CurrentRow.Index].Cells[0].Value);
if (DialogResult.OK == MessageBox.Show($"Vald rads id = {id}{Environment.NewLine}Ändra ?", "Fråga", MessageBoxButtons.OKCancel, MessageBoxIcon.Question))
{
_editStock.CurrentStockMember = id;
_editStock.ShowDialog();
};
}
}
private void tmrProgBar_Tick(object sender, EventArgs e)
{
pbInitial.Value = progressValue;
if (progressValue < 100)
progressValue += 1;
}
public void StartProgressTicking(int intervall = 250)
{
pbInitial.Enabled = true;
pbInitial.Minimum = 0;
pbInitial.Maximum = 100;
pbInitial.Value = 0;
pbInitial.Visible = true;
tmrProgBar.Interval = intervall;
tmrProgBar.Enabled = true;
tmrProgBar.Start();
}
public void StopProgressTicking()
{
tmrProgBar.Stop();
tmrProgBar.Enabled = false;
pbInitial.Visible = false;
progressValue = 0;
}
private void btnUtils_Click(object sender, EventArgs e)
{
_utilities.ShowDialog();
}
}
}