Esempio n. 1
0
        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);
                    }
                }
            }
        }
Esempio n. 2
0
 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;
                }
            });
        }