private void buttonLoadTransactions_Click(object sender, EventArgs e) { using (OpenFileDialog openFileDialog = new OpenFileDialog()) { openFileDialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); //openFileDialog.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*"; openFileDialog.Filter = "CSV files (*.csv)|*.csv"; openFileDialog.FilterIndex = 1; openFileDialog.RestoreDirectory = true; if (openFileDialog.ShowDialog() == DialogResult.OK) { try { Stream fileStream = openFileDialog.OpenFile(); string name = "New portfolio"; APIResponse <Portfolio> response = PortfoliosAPICaller.CreateNewPortfolioFromTransacions(userName, name, fileStream); if (response.Ok) { Show(response.Content); } else { MessageBox.Show(response.ErrorMessage, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } } catch (Exception ex) { MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } } } }
private void LoadPortfolios() { try { _portfolios = PortfoliosAPICaller.GetPortfoliosByUser(userName); dataGridViewPortfolios.DataSource = _portfolios; portfolioSummaryUserControl1.Clear(); } catch (Exception ex) { _portfolios = null; MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
private void UpdatePortfolio(Portfolio portfolio, decimal marketValue) { bool ok = PortfoliosAPICaller.Save(portfolio.Id, marketValue, out APIResponse <bool> response, out string message); if (ok) { if (response.Ok) { MessageBox.Show(response.ErrorMessage, "Update process", MessageBoxButtons.OK, MessageBoxIcon.Information); } else { MessageBox.Show(response.ErrorMessage, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } } else { MessageBox.Show(message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
private void LaunchUpdateTask(Portfolio portfolio) { if (_updateTask != null) { MessageBox.Show("Task is already running", "Update proces", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } if (_selectedPortfolio == null) { MessageBox.Show("Must select a portfolio", "Update proces", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } _updateTask = Task.Factory.StartNew(() => { try { //update market values int i = 0; decimal total = 0; while (i < portfolio.AssetAllocations.Count) { AssetAllocation assetAllocation = portfolio.AssetAllocations[i]; try { bool ok = PortfoliosAPICaller.UpdateAssetAllocation(assetAllocation, out APIResponse <AssetAllocation> response, out string message); decimal marketValue; if (ok) { marketValue = response.Content.MarketValue.Value; portfolio.AssetAllocations[i] = response.Content; } else { marketValue = 0; } total += marketValue; Invoke(new Action(() => dataGridViewAssets.Refresh())); } catch (Exception ex) { _logger.Error($"LaunchUpdateTask failed for portfolio='{portfolio.Name}' (UserId='{portfolio.UserId}'), Ticker={assetAllocation.Asset.Ticker}: {ex.Message}", ex); } i++; } //pending to update percentages foreach (AssetAllocation assetAllocation in portfolio.AssetAllocations) { if (assetAllocation.MarketValue.HasValue) { assetAllocation.Percentage = assetAllocation.MarketValue.Value / total * 100; } else { if (assetAllocation.Costs.HasValue) { assetAllocation.Percentage = assetAllocation.Costs.Value / total * 100; } } Invoke(new Action(() => dataGridViewAssets.Refresh())); } Invoke(new Action(() => { CalculateTotals(portfolio, true); })); } catch (Exception ex) { _logger.Error($"LaunchUpdateTask failed for portfolio='{portfolio.Name}' (UserId='{portfolio.UserId}'): {ex.Message}", ex); MessageBox.Show(ex.Message, "Prices update failed", MessageBoxButtons.OK, MessageBoxIcon.Error); } finally { _updateTask = null; } }); }