This commit is contained in:
2026-04-14 15:28:45 +01:00
parent a921553f2b
commit fa9ba84d5c
5 changed files with 123 additions and 7 deletions

View File

@@ -164,10 +164,11 @@ public class NovaReservaActivity extends AppCompatActivity {
private void saveReservation() {
android.widget.EditText etPartySize = findViewById(R.id.etPartySize);
int partySize = 0;
int val = 0;
try {
partySize = Integer.parseInt(etPartySize.getText().toString());
val = Integer.parseInt(etPartySize.getText().toString());
} catch (Exception e) {}
final int partySize = val;
if (selectedDate == null || selectedTime == null || partySize == 0) {
android.widget.Toast.makeText(this, "Por favor, selecione data, hora e número de pessoas.",
@@ -175,6 +176,86 @@ public class NovaReservaActivity extends AppCompatActivity {
return;
}
String restEmail = selectedRestaurant.getEmail();
com.google.firebase.database.DatabaseReference mesasRef = com.google.firebase.database.FirebaseDatabase.getInstance().getReference("Mesas");
mesasRef.addListenerForSingleValueEvent(new com.google.firebase.database.ValueEventListener() {
@Override
public void onDataChange(@androidx.annotation.NonNull com.google.firebase.database.DataSnapshot snapshot) {
int totalMesas = 0;
for (com.google.firebase.database.DataSnapshot ds : snapshot.getChildren()) {
com.example.pap_teste.models.Mesa m = ds.getValue(com.example.pap_teste.models.Mesa.class);
if (m != null && restEmail.equals(m.getRestauranteEmail())) {
totalMesas++;
}
}
if (totalMesas == 0) {
proceedWithReservation(partySize);
return;
}
checkReservationsAndSave(totalMesas, partySize);
}
@Override
public void onCancelled(@androidx.annotation.NonNull com.google.firebase.database.DatabaseError error) {
proceedWithReservation(partySize);
}
});
}
private void checkReservationsAndSave(int totalMesas, final int partySize) {
String restEmail = selectedRestaurant.getEmail();
com.google.firebase.database.DatabaseReference reservasRef = com.google.firebase.database.FirebaseDatabase.getInstance().getReference("reservas");
reservasRef.orderByChild("restauranteEmail").equalTo(restEmail).addListenerForSingleValueEvent(new com.google.firebase.database.ValueEventListener() {
@Override
public void onDataChange(@androidx.annotation.NonNull com.google.firebase.database.DataSnapshot snapshot) {
int ocupadas = 0;
java.util.Map<String, Integer> ocupacaoPorHora = new java.util.HashMap<>();
for (com.google.firebase.database.DataSnapshot ds : snapshot.getChildren()) {
com.example.pap_teste.models.Reserva r = ds.getValue(com.example.pap_teste.models.Reserva.class);
if (r != null && selectedDate.equals(r.getData()) && !"Cancelada".equals(r.getEstado()) && !"Recusada".equals(r.getEstado())) {
int count = ocupacaoPorHora.getOrDefault(r.getHora(), 0) + 1;
ocupacaoPorHora.put(r.getHora(), count);
if (selectedTime.equals(r.getHora())) {
ocupadas++;
}
}
}
if (ocupadas >= totalMesas) {
String sugestao = "";
String[] horasComuns = {"12:00", "12:30", "13:00", "13:30", "14:00", "19:00", "19:30", "20:00", "20:30", "21:00", "21:30", "22:00"};
for (String h : horasComuns) {
if (ocupacaoPorHora.getOrDefault(h, 0) < totalMesas && !h.equals(selectedTime)) {
sugestao = h;
break; // Encontramos a primeira sugestão livre
}
}
String msg = "Não há mesas disponíveis para as " + selectedTime + ".";
if (!sugestao.isEmpty()) {
msg += " Sugestão: tente reservar para as " + sugestao + ".";
} else {
msg += " Tente para outro dia.";
}
android.widget.Toast.makeText(NovaReservaActivity.this, msg, android.widget.Toast.LENGTH_LONG).show();
} else {
proceedWithReservation(partySize);
}
}
@Override
public void onCancelled(@androidx.annotation.NonNull com.google.firebase.database.DatabaseError error) {
proceedWithReservation(partySize);
}
});
}
private void proceedWithReservation(int partySize) {
String userEmail = com.google.firebase.auth.FirebaseAuth.getInstance().getCurrentUser() != null
? com.google.firebase.auth.FirebaseAuth.getInstance().getCurrentUser().getEmail()
: "cliente@teste.com";
@@ -196,11 +277,11 @@ public class NovaReservaActivity extends AppCompatActivity {
ref.child(id).setValue(reserva).addOnCompleteListener(task -> {
if (task.isSuccessful()) {
android.widget.Toast
.makeText(this, "Reserva solicitada com sucesso!", android.widget.Toast.LENGTH_SHORT)
.makeText(NovaReservaActivity.this, "Reserva solicitada com sucesso!", android.widget.Toast.LENGTH_SHORT)
.show();
finish();
} else {
android.widget.Toast.makeText(this, "Erro ao salvar reserva.", android.widget.Toast.LENGTH_SHORT)
android.widget.Toast.makeText(NovaReservaActivity.this, "Erro ao salvar reserva.", android.widget.Toast.LENGTH_SHORT)
.show();
}
});