tudo a andar rapido vamossss
This commit is contained in:
@@ -14,16 +14,32 @@ import android.view.ViewGroup;
|
||||
import android.widget.Button;
|
||||
import android.widget.EditText;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import java.util.Calendar;
|
||||
import java.util.Locale;
|
||||
|
||||
import com.example.lifegrid.R;
|
||||
import com.example.lifegrid.adapters.MetaAdapter;
|
||||
import com.example.lifegrid.models.Meta;
|
||||
import com.example.lifegrid.models.Transacao;
|
||||
import com.google.firebase.auth.FirebaseAuth;
|
||||
import com.google.firebase.auth.FirebaseUser;
|
||||
import com.google.firebase.database.DataSnapshot;
|
||||
import com.google.firebase.database.DatabaseError;
|
||||
import com.google.firebase.database.DatabaseReference;
|
||||
import com.google.firebase.database.FirebaseDatabase;
|
||||
import com.google.firebase.database.ValueEventListener;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* MetasFragment projeta objetivos futuros onde o utilizador fixa montantes e datas a alcançar
|
||||
@@ -31,6 +47,13 @@ import com.google.firebase.database.FirebaseDatabase;
|
||||
*/
|
||||
public class MetasFragment extends Fragment {
|
||||
|
||||
private RecyclerView rvMetas;
|
||||
private MetaAdapter metaAdapter;
|
||||
private List<Meta> metasList;
|
||||
private TextView tvEmptyState;
|
||||
private DatabaseReference databaseReference;
|
||||
private String userId;
|
||||
|
||||
public MetasFragment() {
|
||||
// Construtor público vazio obrigatório
|
||||
}
|
||||
@@ -49,8 +72,99 @@ public class MetasFragment extends Fragment {
|
||||
Button novaTransacaoButton = root.findViewById(R.id.novaTransacaoButton);
|
||||
novaTransacaoButton.setOnClickListener(v -> showNovaMetaDialog());
|
||||
|
||||
rvMetas = root.findViewById(R.id.rvMetas);
|
||||
tvEmptyState = root.findViewById(R.id.textView13);
|
||||
|
||||
rvMetas.setLayoutManager(new LinearLayoutManager(requireContext()));
|
||||
metasList = new ArrayList<>();
|
||||
|
||||
metaAdapter = new MetaAdapter(metasList, new MetaAdapter.OnItemClickListener() {
|
||||
@Override
|
||||
public void onDeleteClick(Meta meta) {
|
||||
new AlertDialog.Builder(requireContext())
|
||||
.setTitle("Excluir Meta")
|
||||
.setMessage("Tem a certeza que deseja excluir esta meta?")
|
||||
.setPositiveButton("Sim", (dialog, which) -> {
|
||||
if (databaseReference != null && userId != null && meta.getId() != null) {
|
||||
databaseReference.child("users").child(userId).child("metas").child(meta.getId()).removeValue();
|
||||
Toast.makeText(requireContext(), "Meta excluída.", Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
})
|
||||
.setNegativeButton("Não", null)
|
||||
.show();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAddValueClick(Meta meta, double valorAdicional, EditText editText) {
|
||||
if (databaseReference != null && userId != null && meta.getId() != null) {
|
||||
double valorAtual = 0;
|
||||
if (meta.getValorGuardado() != null && !meta.getValorGuardado().isEmpty()) {
|
||||
valorAtual = Double.parseDouble(meta.getValorGuardado().replace(",", "."));
|
||||
}
|
||||
|
||||
double novoValor = valorAtual + valorAdicional;
|
||||
|
||||
// Update Meta
|
||||
databaseReference.child("users").child(userId).child("metas").child(meta.getId())
|
||||
.child("valorGuardado").setValue(String.format(Locale.US, "%.2f", novoValor));
|
||||
|
||||
// Create a Despesa Transaction to adjust the global balance (Receitas - Despesas)
|
||||
String todayDate = new SimpleDateFormat("dd/MM/yyyy", Locale.getDefault()).format(new Date());
|
||||
Transacao transacao = new Transacao("Despesa", String.format(Locale.US, "%.2f", valorAdicional), "Investimento/Meta", "Adicionado à meta: " + meta.getNome(), todayDate);
|
||||
|
||||
String key = databaseReference.child("users").child(userId).child("transacoes").push().getKey();
|
||||
if (key != null) {
|
||||
databaseReference.child("users").child(userId).child("transacoes").child(key).setValue(transacao);
|
||||
}
|
||||
|
||||
editText.setText("");
|
||||
Toast.makeText(requireContext(), "Valor adicionado e despesa registada!", Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
rvMetas.setAdapter(metaAdapter);
|
||||
|
||||
carregarMetas();
|
||||
|
||||
return root;
|
||||
}
|
||||
|
||||
private void carregarMetas() {
|
||||
FirebaseUser currentUser = FirebaseAuth.getInstance().getCurrentUser();
|
||||
if (currentUser == null) return;
|
||||
|
||||
userId = currentUser.getUid();
|
||||
databaseReference = FirebaseDatabase.getInstance().getReference();
|
||||
|
||||
databaseReference.child("users").child(userId).child("metas").addValueEventListener(new ValueEventListener() {
|
||||
@Override
|
||||
public void onDataChange(@NonNull DataSnapshot snapshot) {
|
||||
metasList.clear();
|
||||
for (DataSnapshot ds : snapshot.getChildren()) {
|
||||
Meta m = ds.getValue(Meta.class);
|
||||
if (m != null) {
|
||||
m.setId(ds.getKey());
|
||||
metasList.add(m);
|
||||
}
|
||||
}
|
||||
metaAdapter.notifyDataSetChanged();
|
||||
|
||||
if (metasList.isEmpty()) {
|
||||
tvEmptyState.setVisibility(View.VISIBLE);
|
||||
rvMetas.setVisibility(View.GONE);
|
||||
} else {
|
||||
tvEmptyState.setVisibility(View.GONE);
|
||||
rvMetas.setVisibility(View.VISIBLE);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCancelled(@NonNull DatabaseError error) {
|
||||
Toast.makeText(requireContext(), "Erro ao carregar metas.", Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void showNovaMetaDialog() {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(requireContext());
|
||||
|
||||
@@ -25,12 +25,21 @@ import java.util.Calendar;
|
||||
import java.util.Locale;
|
||||
|
||||
import com.example.lifegrid.R;
|
||||
import com.example.lifegrid.adapters.TransacaoAdapter;
|
||||
import com.example.lifegrid.models.Transacao;
|
||||
import com.google.firebase.Firebase;
|
||||
import com.google.firebase.auth.FirebaseAuth;
|
||||
import com.google.firebase.auth.FirebaseUser;
|
||||
import com.google.firebase.database.DataSnapshot;
|
||||
import com.google.firebase.database.DatabaseError;
|
||||
import com.google.firebase.database.DatabaseReference;
|
||||
import com.google.firebase.database.FirebaseDatabase;
|
||||
import com.google.firebase.database.ValueEventListener;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* TransacoesFragment controla a aba pertencente às listagens e histórico de carteira e gestão de dados base.
|
||||
@@ -38,7 +47,12 @@ import com.google.firebase.database.FirebaseDatabase;
|
||||
*/
|
||||
public class TransacoesFragment extends Fragment {
|
||||
|
||||
|
||||
private RecyclerView rvTransacoes;
|
||||
private TransacaoAdapter transacaoAdapter;
|
||||
private List<Transacao> transacoesList;
|
||||
private TextView tvEmptyState;
|
||||
private DatabaseReference databaseReference;
|
||||
private String userId;
|
||||
|
||||
public TransacoesFragment() {
|
||||
// Construtor público vazio obrigatório
|
||||
@@ -60,8 +74,67 @@ public class TransacoesFragment extends Fragment {
|
||||
Button novaTransacaoButton = root.findViewById(R.id.novaTransacaoButton);
|
||||
novaTransacaoButton.setOnClickListener(v -> showNovaTransacaoDialog());
|
||||
|
||||
rvTransacoes = root.findViewById(R.id.rvTransacoes);
|
||||
tvEmptyState = root.findViewById(R.id.textView13);
|
||||
|
||||
rvTransacoes.setLayoutManager(new LinearLayoutManager(requireContext()));
|
||||
transacoesList = new ArrayList<>();
|
||||
|
||||
transacaoAdapter = new TransacaoAdapter(transacoesList, transacao -> {
|
||||
new AlertDialog.Builder(requireContext())
|
||||
.setTitle("Excluir Transação")
|
||||
.setMessage("Tem a certeza que deseja excluir esta transação?")
|
||||
.setPositiveButton("Sim", (dialog, which) -> {
|
||||
if (databaseReference != null && userId != null && transacao.getId() != null) {
|
||||
databaseReference.child("users").child(userId).child("transacoes").child(transacao.getId()).removeValue();
|
||||
Toast.makeText(requireContext(), "Transação excluída.", Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
})
|
||||
.setNegativeButton("Não", null)
|
||||
.show();
|
||||
});
|
||||
rvTransacoes.setAdapter(transacaoAdapter);
|
||||
|
||||
carregarTransacoes();
|
||||
|
||||
return root;
|
||||
}
|
||||
|
||||
private void carregarTransacoes() {
|
||||
FirebaseUser currentUser = FirebaseAuth.getInstance().getCurrentUser();
|
||||
if (currentUser == null) return;
|
||||
|
||||
userId = currentUser.getUid();
|
||||
databaseReference = FirebaseDatabase.getInstance().getReference();
|
||||
|
||||
databaseReference.child("users").child(userId).child("transacoes").addValueEventListener(new ValueEventListener() {
|
||||
@Override
|
||||
public void onDataChange(@NonNull DataSnapshot snapshot) {
|
||||
transacoesList.clear();
|
||||
for (DataSnapshot ds : snapshot.getChildren()) {
|
||||
Transacao t = ds.getValue(Transacao.class);
|
||||
if (t != null) {
|
||||
t.setId(ds.getKey());
|
||||
transacoesList.add(t);
|
||||
}
|
||||
}
|
||||
transacaoAdapter.notifyDataSetChanged();
|
||||
|
||||
if (transacoesList.isEmpty()) {
|
||||
tvEmptyState.setVisibility(View.VISIBLE);
|
||||
rvTransacoes.setVisibility(View.GONE);
|
||||
} else {
|
||||
tvEmptyState.setVisibility(View.GONE);
|
||||
rvTransacoes.setVisibility(View.VISIBLE);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCancelled(@NonNull DatabaseError error) {
|
||||
Toast.makeText(requireContext(), "Erro ao carregar transações.", Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Cria e monta manualmente uma janela Modal (Pop-up) a fim do utilizador preencher
|
||||
|
||||
Reference in New Issue
Block a user