Пример #1
0
        /// <summary>
        ///     Inicia sessão de um Utilizador.
        /// <para>Chama AcquireToken para obter o Token de inicio de sessão.</para>
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private async void ButtonEntrar_Click(object sender, RoutedEventArgs e)
        {
            AuthenticationResult     authResult = null;
            IPublicClientApplication app        = App.PublicClientApp;
            IEnumerable <IAccount>   accounts   = (await app.GetAccountsAsync()).ToList();
            IAccount firstAccount = accounts.FirstOrDefault();

            try
            {
                authResult = await app.AcquireTokenSilent(_scopes, firstAccount).ExecuteAsync();
            }
            catch (MsalUiRequiredException ex)
            {
                // A MsalUiRequiredException happened on AcquireTokenSilent.
                // This indicates you need to call AcquireTokenInteractive to acquire a token
                Console.WriteLine(@"MsalUiRequiredException: " + ex.Message);
                try
                {
                    authResult = await app.AcquireTokenInteractive(_scopes).WithAccount(accounts.FirstOrDefault())
                                 .WithParentActivityOrWindow(new WindowInteropHelper(this).Handle)
                                 .WithPrompt(Prompt.SelectAccount).ExecuteAsync();
                }
                catch (MsalException msalex)
                {
                    // Erro ao adquirir Token
                    MessageBox.Show("Erro ao adquirir Token: " + msalex,
                                    "DespesasWPF: MainWindow.ButtonEntrar_Click");
                }
            }
            catch (Exception ex)
            {
                // Erro ao adquirir Token Silenciosamente
                MessageBox.Show("Erro ao adquirir Token Silenciosamente: " + ex,
                                "DespesasWPF: MainWindow.ButtonEntrar_Click");
            }

            if (authResult == null)
            {
                return;
            }
            string nomeTemp = await GetHttpContentWithToken(GraphApiEndpoint, authResult.AccessToken);

            string emailUtilizadorLigadoTemp = authResult.Account.Username;

            UtilizadorLigado.EmailSha = Hash.GetHashSha256(emailUtilizadorLigadoTemp);
            Api = new Api(UtilizadorLigado.EmailSha);

            // Get rates
            EuroEDolar = Api.GetUsdRatesToEuro();
            DolarEEuro = Api.GetEuroRatesToUsd();

            if (!Api.HasUser())
            {
                await SoapClient.AddUserAsync(UtilizadorLigado.EmailSha, "EUR");
            }

            UtilizadorLigado.GetUserFromDb();
            Api.GetExpenses().ForEach(despesa => { Despesas.Add(despesa); });

            // Preenchimento de dados na MainWindow
            LabelUtilizadorLigado.Content  = "";
            LabelUtilizadorLigado.Content += nomeTemp + " (" + emailUtilizadorLigadoTemp + ")";

            // Preencher e organizar a tabela de Despesas
            DespesasTable.ItemsSource = Despesas;
            CollectionView view = (CollectionView)CollectionViewSource.GetDefaultView(DespesasTable.ItemsSource);

            view.SortDescriptions.Add(new SortDescription("Data", ListSortDirection.Descending));

            // Calcular e mostrar o total
            foreach (Expense expense in Despesas)
            {
                TotalEur += expense.ValEur;
                TotalUsd += expense.ValUsd;
            }

            if (UtilizadorLigado.MoedaPadrao == "EUR")
            {
                RadioButtonEur.IsChecked = true;
                LabelTotal.Content       = TotalEur + "€";
            }
            else
            {
                RadioButtonUsd.IsChecked = true;
                LabelTotal.Content       = TotalUsd + "$";
            }

            EntrarPanel.Visibility   = Visibility.Collapsed;
            DespesasPanel.Visibility = Visibility.Visible;
        }
Пример #2
0
        /// <summary>
        ///     Função executada sempre que o botão de Criação/Edição de Despesa é clicado.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void ButtonCriarEditar_OnClick(object sender, RoutedEventArgs e)
        {
            bool statusCreateEdit = false;

            if (TextBoxNome.Text == "" || TextBoxDescricao.Text == "" || DatePickerData.Text == "" ||
                TextBoxValorEur.Text == "" && TextBoxValorUsd.Text == "")
            {
                MessageBox.Show(
                    "Por favor preencha todos os campos. No caso do Valor da Despesa, preencha apenas um campo.",
                    "Alerta");
            }
            else if (TextBoxId.Text == "")
            {
                // Se for para criar uma Despesa

                decimal valEur, valUsd;
                if (TextBoxValorEur.Text == "")
                {
                    // Se o campo do Valor em € não estiver preenchido
                    valUsd = decimal.Parse(TextBoxValorUsd.Text);
                    valEur = valUsd * DolarEEuro;
                }
                else if (TextBoxValorUsd.Text == "")
                {
                    // Se o campo do Valor em $ não estiver preenchido
                    valEur = decimal.Parse(TextBoxValorEur.Text);
                    valUsd = valEur * EuroEDolar;
                }
                else
                {
                    // Se os dois campos forem preenchidos
                    valEur = decimal.Parse(TextBoxValorEur.Text);
                    valUsd = decimal.Parse(TextBoxValorUsd.Text);
                }

                statusCreateEdit = SoapClient.AddExpense(TextBoxNome.Text, TextBoxDescricao.Text,
                                                         DateTime.Parse(DatePickerData.Text), valEur, valUsd, UtilizadorLigado.EmailSha);

                if (statusCreateEdit)
                {
                    Despesas.Add(new Expense(Api.GetLastIdFromTable("despesas").ToString(), TextBoxNome.Text,
                                             TextBoxDescricao.Text, DateTime.Parse(DatePickerData.Text), valEur, valUsd,
                                             UtilizadorLigado.EmailSha));
                    TotalEur += valEur;
                    TotalUsd += valUsd;
                    if (UtilizadorLigado.MoedaPadrao == "EUR")
                    {
                        LabelTotal.Content = TotalEur + "€";
                    }
                    else
                    {
                        LabelTotal.Content = TotalUsd + "$";
                    }
                }
            }
            else
            {
                // Se for para atualizar uma Despesa

                decimal valEur, valUsd;
                if (TextBoxValorEur.Text == "")
                {
                    // Se o campo do Valor em € não estiver preenchido
                    valUsd = decimal.Parse(TextBoxValorUsd.Text);
                    valEur = valUsd * DolarEEuro;
                }
                else if (TextBoxValorUsd.Text == "")
                {
                    // Se o campo do Valor em $ não estiver preenchido
                    valEur = decimal.Parse(TextBoxValorEur.Text);
                    valUsd = valEur * EuroEDolar;
                }
                else
                {
                    // Se os dois campos forem preenchidos
                    valEur = decimal.Parse(TextBoxValorEur.Text);
                    valUsd = decimal.Parse(TextBoxValorUsd.Text);
                }

                statusCreateEdit = SoapClient.UpdateExpense(TextBoxId.Text, TextBoxNome.Text, TextBoxDescricao.Text,
                                                            DateTime.Parse(DatePickerData.Text), valEur, valUsd, UtilizadorLigado.EmailSha);

                Expense despesaEditar = Despesas.FirstOrDefault(d => d.Id == TextBoxId.Text);
                if (despesaEditar != null && statusCreateEdit)
                {
                    Despesas.Remove(despesaEditar);
                    TotalEur -= despesaEditar.ValEur;
                    TotalUsd -= despesaEditar.ValUsd;
                    Despesas.Add(new Expense(TextBoxId.Text, TextBoxNome.Text, TextBoxDescricao.Text,
                                             DateTime.Parse(DatePickerData.Text), valEur, valUsd, UtilizadorLigado.EmailSha));
                    TotalEur += valEur;
                    TotalUsd += valUsd;
                    if (UtilizadorLigado.MoedaPadrao == "EUR")
                    {
                        LabelTotal.Content = TotalEur + "€";
                    }
                    else
                    {
                        LabelTotal.Content = TotalUsd + "$";
                    }
                }
            }

            // Se não criou/editou com sucesso sai
            if (!statusCreateEdit)
            {
                return;
            }

            TextBoxId.Text        = "";
            TextBoxNome.Text      = "";
            TextBoxDescricao.Text = "";
            DatePickerData.Text   = "";
            TextBoxValorEur.Text  = "";
            TextBoxValorUsd.Text  = "";
        }