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; bool loading = false; 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 ) { 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; } private void Form1_Load(object sender, EventArgs e) { ReloadData(); btnRestoreShares.Enabled = false; btnBackupShares.Enabled = false; btnBackupAll.Enabled = false; } private void ReloadData(bool upd = false) { loading = true; var allStocks = _stockRepository.GetAllStocks(); if (upd) { _stockMarketRepository.LoadStockMarketList(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 void btnReload_Click(object sender, EventArgs e) { Cursor = Cursors.WaitCursor; ReloadData(true); Cursor=Cursors.Default; } private void frmInitial_FormClosing(object sender, FormClosingEventArgs e) { MessageBox.Show("B y e B y e !!"); } 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 { var person = _personRepository.GetPersonById(SelectedPersonId); Cursor.Current = Cursors.WaitCursor; await _stockMarketRepository.LoadStockMarketListAsync(SelectedPersonId); _stockWindow.ConnectedPerson = person; _stockWindow.Stocks = _stockMarketRepository.StockMarketList; Cursor.Current = DefaultCursor; //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>(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(); }; } } } }