158 lines
5.1 KiB
Java
158 lines
5.1 KiB
Java
package com.example.pap_teste;
|
||
|
||
import android.os.Bundle;
|
||
import android.widget.ArrayAdapter;
|
||
import android.widget.Button;
|
||
import android.widget.EditText;
|
||
import android.widget.ListView;
|
||
import android.widget.Spinner;
|
||
import android.widget.TextView;
|
||
import android.widget.Toast;
|
||
|
||
import androidx.activity.EdgeToEdge;
|
||
import androidx.appcompat.app.AppCompatActivity;
|
||
import androidx.core.graphics.Insets;
|
||
import androidx.core.view.ViewCompat;
|
||
import androidx.core.view.WindowInsetsCompat;
|
||
|
||
import java.util.ArrayList;
|
||
import java.util.List;
|
||
|
||
public class GestaoStaffActivity extends AppCompatActivity {
|
||
|
||
private final List<StaffAssignment> staffAssignments = new ArrayList<>();
|
||
private ArrayAdapter<String> staffAdapter;
|
||
private ListView listStaffMesas;
|
||
private EditText inputNomeStaff;
|
||
private Spinner spinnerMesaStaff;
|
||
private TextView txtMensagemStaff;
|
||
|
||
@Override
|
||
protected void onCreate(Bundle savedInstanceState) {
|
||
super.onCreate(savedInstanceState);
|
||
EdgeToEdge.enable(this);
|
||
setContentView(R.layout.activity_gestao_staff);
|
||
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.gestaoStaffRoot), (v, insets) -> {
|
||
Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
|
||
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
|
||
return insets;
|
||
});
|
||
|
||
Button back = findViewById(R.id.btnVoltar);
|
||
if (back != null) {
|
||
back.setOnClickListener(v -> finish());
|
||
}
|
||
|
||
bindViews();
|
||
setupMesaSpinner();
|
||
setupList();
|
||
setupFormActions();
|
||
}
|
||
|
||
private void bindViews() {
|
||
listStaffMesas = findViewById(R.id.listStaffMesas);
|
||
inputNomeStaff = findViewById(R.id.inputNomeStaff);
|
||
spinnerMesaStaff = findViewById(R.id.spinnerMesaStaff);
|
||
txtMensagemStaff = findViewById(R.id.txtMensagemStaff);
|
||
}
|
||
|
||
/**
|
||
* Preenche o spinner com uma lista simples de mesas (1–20).
|
||
* Mais tarde isto pode ser ligado às mesas reais configuradas em "Gerir Mesas".
|
||
*/
|
||
private void setupMesaSpinner() {
|
||
ArrayAdapter<String> mesaAdapter = new ArrayAdapter<>(
|
||
this,
|
||
android.R.layout.simple_spinner_dropdown_item
|
||
);
|
||
|
||
for (int i = 1; i <= 20; i++) {
|
||
mesaAdapter.add(String.format("Mesa %02d", i));
|
||
}
|
||
|
||
spinnerMesaStaff.setAdapter(mesaAdapter);
|
||
}
|
||
|
||
private void setupList() {
|
||
staffAdapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_activated_1);
|
||
listStaffMesas.setAdapter(staffAdapter);
|
||
refreshList();
|
||
|
||
listStaffMesas.setOnItemClickListener((parent, view, position, id) -> {
|
||
StaffAssignment item = staffAssignments.get(position);
|
||
inputNomeStaff.setText(item.nome);
|
||
int index = Math.max(0, Math.min(spinnerMesaStaff.getCount() - 1, item.mesaNumero - 1));
|
||
spinnerMesaStaff.setSelection(index);
|
||
txtMensagemStaff.setText(String.format("A editar: %s (Mesa %02d)", item.nome, item.mesaNumero));
|
||
});
|
||
}
|
||
|
||
private void setupFormActions() {
|
||
Button btnAtribuir = findViewById(R.id.btnAtribuirStaff);
|
||
if (btnAtribuir != null) {
|
||
btnAtribuir.setOnClickListener(v -> guardarAtribuicao());
|
||
}
|
||
}
|
||
|
||
private void guardarAtribuicao() {
|
||
String nome = inputNomeStaff != null ? inputNomeStaff.getText().toString().trim() : "";
|
||
if (nome.isEmpty()) {
|
||
Toast.makeText(this, "Indique o nome do funcionário.", Toast.LENGTH_SHORT).show();
|
||
return;
|
||
}
|
||
|
||
if (spinnerMesaStaff == null || spinnerMesaStaff.getSelectedItem() == null) {
|
||
Toast.makeText(this, "Selecione uma mesa.", Toast.LENGTH_SHORT).show();
|
||
return;
|
||
}
|
||
|
||
int mesaNumero = spinnerMesaStaff.getSelectedItemPosition() + 1;
|
||
|
||
StaffAssignment existente = findByNome(nome);
|
||
if (existente == null) {
|
||
staffAssignments.add(new StaffAssignment(nome, mesaNumero));
|
||
txtMensagemStaff.setText(String.format("%s atribuído à mesa %02d.", nome, mesaNumero));
|
||
} else {
|
||
existente.mesaNumero = mesaNumero;
|
||
txtMensagemStaff.setText(String.format("Mesa de %s atualizada para %02d.", nome, mesaNumero));
|
||
}
|
||
|
||
refreshList();
|
||
}
|
||
|
||
private StaffAssignment findByNome(String nome) {
|
||
for (StaffAssignment item : staffAssignments) {
|
||
if (item.nome.equalsIgnoreCase(nome)) {
|
||
return item;
|
||
}
|
||
}
|
||
return null;
|
||
}
|
||
|
||
private void refreshList() {
|
||
if (staffAdapter == null) return;
|
||
|
||
staffAdapter.clear();
|
||
for (StaffAssignment item : staffAssignments) {
|
||
String resumo = String.format("%s • Mesa %02d", item.nome, item.mesaNumero);
|
||
staffAdapter.add(resumo);
|
||
}
|
||
staffAdapter.notifyDataSetChanged();
|
||
}
|
||
|
||
private static class StaffAssignment {
|
||
String nome;
|
||
int mesaNumero;
|
||
|
||
StaffAssignment(String nome, int mesaNumero) {
|
||
this.nome = nome;
|
||
this.mesaNumero = mesaNumero;
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
|
||
|
||
|