diff --git a/app/src/main/java/com/example/lifegrid/menu/AtivosFragment.java b/app/src/main/java/com/example/lifegrid/menu/AtivosFragment.java index 3488b25..e4f1079 100644 --- a/app/src/main/java/com/example/lifegrid/menu/AtivosFragment.java +++ b/app/src/main/java/com/example/lifegrid/menu/AtivosFragment.java @@ -1,5 +1,9 @@ package com.example.lifegrid.menu; +import android.app.AlertDialog; +import android.app.DatePickerDialog; +import android.graphics.Color; +import android.graphics.drawable.ColorDrawable; import android.os.Bundle; import androidx.fragment.app.Fragment; @@ -7,8 +11,21 @@ import androidx.fragment.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.ArrayAdapter; +import android.widget.Button; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.Spinner; +import android.widget.Toast; + +import java.util.Calendar; +import java.util.Locale; import com.example.lifegrid.R; +import com.example.lifegrid.models.Ativos; +import com.google.firebase.auth.FirebaseAuth; +import com.google.firebase.database.DatabaseReference; +import com.google.firebase.database.FirebaseDatabase; /** * AtivosFragment diz respeito à janela do ecossistema dedicada à gestão @@ -31,7 +48,74 @@ public class AtivosFragment extends Fragment { // Inflaciona o layout para este fragmento View root = inflater.inflate(R.layout.fragment_ativos, container, false); + Button novaTransacaoButton = root.findViewById(R.id.novaTransacaoButton); + novaTransacaoButton.setOnClickListener(v -> showNovoAtivoDialog()); return root; } + + private void showNovoAtivoDialog() { + AlertDialog.Builder builder = new AlertDialog.Builder(requireContext()); + View dialogView = getLayoutInflater().inflate(R.layout.dialog_novo_ativo, null); + builder.setView(dialogView); + + AlertDialog dialog = builder.create(); + if (dialog.getWindow() != null) { + dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); + } + + ImageView btnFechar = dialogView.findViewById(R.id.btnFechar); + btnFechar.setOnClickListener(v -> dialog.dismiss()); + + EditText etDataCompra = dialogView.findViewById(R.id.etDataCompra); + etDataCompra.setOnClickListener(v -> { + Calendar calendar = Calendar.getInstance(); + int year = calendar.get(Calendar.YEAR); + int month = calendar.get(Calendar.MONTH); + int day = calendar.get(Calendar.DAY_OF_MONTH); + + DatePickerDialog datePickerDialog = new DatePickerDialog(requireContext(), + (view, selectedYear, selectedMonth, selectedDay) -> { + String formattedDate = String.format(Locale.getDefault(), "%02d/%02d/%04d", selectedDay, selectedMonth + 1, selectedYear); + etDataCompra.setText(formattedDate); + }, year, month, day); + datePickerDialog.show(); + }); + + Button btnAdicionarAtivoDialog = dialogView.findViewById(R.id.btnAdicionarAtivoDialog); + EditText etNomeAtivo = dialogView.findViewById(R.id.etNomeAtivo); + Spinner spinnerTipoAtivo = dialogView.findViewById(R.id.spinnerTipoAtivo); + EditText etQuantidade = dialogView.findViewById(R.id.etQuantidade); + EditText etPrecoCompra = dialogView.findViewById(R.id.etPrecoCompra); + EditText etPrecoAtual = dialogView.findViewById(R.id.etPrecoAtual); + + btnAdicionarAtivoDialog.setOnClickListener(v -> { + String nome = etNomeAtivo.getText().toString().trim(); + String tipo = spinnerTipoAtivo.getSelectedItem().toString(); + String quantidade = etQuantidade.getText().toString().trim(); + String precoCompra = etPrecoCompra.getText().toString().trim(); + String precoAtual = etPrecoAtual.getText().toString().trim(); + String dataCompra = etDataCompra.getText().toString().trim(); + + Ativos ativos = new Ativos(nome, quantidade, Double.parseDouble(precoCompra), Double.parseDouble(precoAtual), dataCompra, tipo); + + + if (nome.isEmpty() || quantidade.isEmpty() || precoCompra.isEmpty() || precoAtual.isEmpty() || dataCompra.isEmpty() || spinnerTipoAtivo.getSelectedItemPosition() == 0) { + Toast.makeText(requireContext(), "Por favor, preencha os campos obrigatórios.", Toast.LENGTH_SHORT).show(); + } else { + // Aqui seria a lógica para guardar na Firebase + DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference(); + String userId = FirebaseAuth.getInstance().getCurrentUser().getUid(); + String key = databaseReference.child("users").child(userId).child("ativos").push().getKey(); + + databaseReference.child("users").child(userId).child("ativos").child(key).setValue(ativos); + + + dialog.dismiss(); + Toast.makeText(requireContext(), "Ativo adicionado com sucesso!", Toast.LENGTH_SHORT).show(); + } + }); + + dialog.show(); + } } \ No newline at end of file diff --git a/app/src/main/java/com/example/lifegrid/menu/MetasFragment.java b/app/src/main/java/com/example/lifegrid/menu/MetasFragment.java index 3bd8ea2..7a5ec6f 100644 --- a/app/src/main/java/com/example/lifegrid/menu/MetasFragment.java +++ b/app/src/main/java/com/example/lifegrid/menu/MetasFragment.java @@ -1,5 +1,9 @@ package com.example.lifegrid.menu; +import android.app.AlertDialog; +import android.app.DatePickerDialog; +import android.graphics.Color; +import android.graphics.drawable.ColorDrawable; import android.os.Bundle; import androidx.fragment.app.Fragment; @@ -7,8 +11,19 @@ import androidx.fragment.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.Button; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.Toast; + +import java.util.Calendar; +import java.util.Locale; import com.example.lifegrid.R; +import com.example.lifegrid.models.Meta; +import com.google.firebase.auth.FirebaseAuth; +import com.google.firebase.database.DatabaseReference; +import com.google.firebase.database.FirebaseDatabase; /** * MetasFragment projeta objetivos futuros onde o utilizador fixa montantes e datas a alcançar @@ -31,7 +46,73 @@ public class MetasFragment extends Fragment { // Inflaciona o layout para este fragmento View root = inflater.inflate(R.layout.fragment_metas, container, false); + Button novaTransacaoButton = root.findViewById(R.id.novaTransacaoButton); + novaTransacaoButton.setOnClickListener(v -> showNovaMetaDialog()); return root; } + + private void showNovaMetaDialog() { + AlertDialog.Builder builder = new AlertDialog.Builder(requireContext()); + View dialogView = getLayoutInflater().inflate(R.layout.dialog_nova_meta, null); + builder.setView(dialogView); + + AlertDialog dialog = builder.create(); + if (dialog.getWindow() != null) { + dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); + } + + ImageView btnFechar = dialogView.findViewById(R.id.btnFecharMeta); + btnFechar.setOnClickListener(v -> dialog.dismiss()); + + EditText etDataLimite = dialogView.findViewById(R.id.etDataLimite); + etDataLimite.setOnClickListener(v -> { + Calendar calendar = Calendar.getInstance(); + int year = calendar.get(Calendar.YEAR); + int month = calendar.get(Calendar.MONTH); + int day = calendar.get(Calendar.DAY_OF_MONTH); + + DatePickerDialog datePickerDialog = new DatePickerDialog(requireContext(), + (view, selectedYear, selectedMonth, selectedDay) -> { + String formattedDate = String.format(Locale.getDefault(), "%02d/%02d/%04d", selectedDay, selectedMonth + 1, selectedYear); + etDataLimite.setText(formattedDate); + }, year, month, day); + datePickerDialog.show(); + }); + + Button btnCriarMetaDialog = dialogView.findViewById(R.id.btnCriarMetaDialog); + EditText etNomeMeta = dialogView.findViewById(R.id.etNomeMeta); + EditText etCategoriaMeta = dialogView.findViewById(R.id.etCategoriaMeta); + EditText etValorObjetivo = dialogView.findViewById(R.id.etValorObjetivo); + + + + + btnCriarMetaDialog.setOnClickListener(v -> { + String nome = etNomeMeta.getText().toString().trim(); + String categoria = etCategoriaMeta.getText().toString().trim(); + String valor = etValorObjetivo.getText().toString().trim(); + String data = etDataLimite.getText().toString().trim(); + + Meta meta = new Meta(nome, categoria, valor, data); + + + if (nome.isEmpty() || categoria.isEmpty() || valor.isEmpty() || data.isEmpty()) { + Toast.makeText(requireContext(), "Por favor, preencha todos os campos.", Toast.LENGTH_SHORT).show(); + } else { + // Aqui seria a lógica para guardar na Firebase + DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference(); + String userId = FirebaseAuth.getInstance().getCurrentUser().getUid(); + String key = databaseReference.child("users").child(userId).child("metas").push().getKey(); + + databaseReference.child("users").child(userId).child("metas").child(key).setValue(meta); + + + dialog.dismiss(); + Toast.makeText(requireContext(), "Meta criada com sucesso!", Toast.LENGTH_SHORT).show(); + } + }); + + dialog.show(); + } } \ No newline at end of file diff --git a/app/src/main/java/com/example/lifegrid/models/Ativos.java b/app/src/main/java/com/example/lifegrid/models/Ativos.java new file mode 100644 index 0000000..7b0c7a1 --- /dev/null +++ b/app/src/main/java/com/example/lifegrid/models/Ativos.java @@ -0,0 +1,71 @@ +package com.example.lifegrid.models; + +public class Ativos { + private String nome; + private String quantidade; + private double precoCompra; + private double precoAtual; + private String dataCompra; + private String tipo; + + + public Ativos() { + } + + public Ativos(String nome, String quantidade, double precoCompra, double precoAtual, String dataCompra, String tipo) { + this.nome = nome; + this.quantidade = quantidade; + this.precoCompra = precoCompra; + this.precoAtual = precoAtual; + this.dataCompra = dataCompra; + this.tipo = tipo; + } + + public String getNome() { + return nome; + } + + public void setNome(String nome) { + this.nome = nome; + } + + public String getQuantidade() { + return quantidade; + } + + public void setQuantidade(String quantidade) { + this.quantidade = quantidade; + } + + public double getPrecoCompra() { + return precoCompra; + } + + public void setPrecoCompra(double precoCompra) { + this.precoCompra = precoCompra; + } + + public double getPrecoAtual() { + return precoAtual; + } + + public void setPrecoAtual(double precoAtual) { + this.precoAtual = precoAtual; + } + + public String getDataCompra() { + return dataCompra; + } + + public void setDataCompra(String dataCompra) { + this.dataCompra = dataCompra; + } + + public String getTipo() { + return tipo; + } + + public void setTipo(String tipo) { + this.tipo = tipo; + } +} diff --git a/app/src/main/java/com/example/lifegrid/models/Meta.java b/app/src/main/java/com/example/lifegrid/models/Meta.java new file mode 100644 index 0000000..60a8acb --- /dev/null +++ b/app/src/main/java/com/example/lifegrid/models/Meta.java @@ -0,0 +1,50 @@ +package com.example.lifegrid.models; + +public class Meta { + private String nome; + private String categoria; + private String valor; + private String data; + + public Meta(){ + } + + public Meta(String nome, String categoria, String valor, String data) { + this.nome = nome; + this.categoria = categoria; + this.valor = valor; + this.data = data; + } + + public String getNome() { + return nome; + } + + public void setNome(String nome) { + this.nome = nome; + } + + public String getCategoria() { + return categoria; + } + + public void setCategoria(String categoria) { + this.categoria = categoria; + } + + public String getValor() { + return valor; + } + + public void setValor(String valor) { + this.valor = valor; + } + + public String getData() { + return data; + } + + public void setData(String data) { + this.data = data; + } +} diff --git a/app/src/main/res/layout/activity_tela_inicial.xml b/app/src/main/res/layout/activity_tela_inicial.xml index e75d595..e293967 100644 --- a/app/src/main/res/layout/activity_tela_inicial.xml +++ b/app/src/main/res/layout/activity_tela_inicial.xml @@ -73,7 +73,7 @@ android:layout_marginTop="40dp" android:text="0.00€" android:textColor="#000000" - android:textSize="28sp" + android:textSize="23sp" android:textStyle="bold" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/tvTitulo" /> @@ -169,7 +169,7 @@ android:layout_marginTop="40dp" android:text="0.00€" android:textColor="#000000" - android:textSize="28sp" + android:textSize="23sp" android:textStyle="bold" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/tvTitulo2" /> @@ -240,7 +240,7 @@ android:layout_marginTop="40dp" android:text="0.00€" android:textColor="#000000" - android:textSize="28sp" + android:textSize="23sp" android:textStyle="bold" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/tvTitulo3" /> @@ -311,7 +311,7 @@ android:layout_marginTop="40dp" android:text="0.00€" android:textColor="#000000" - android:textSize="28sp" + android:textSize="23sp" android:textStyle="bold" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/tvTitulo4" /> @@ -334,7 +334,7 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +