/// <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; }
/// <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 = ""; }