falta so o chat
This commit is contained in:
136
docs/02_AgendaActivity.md
Normal file
136
docs/02_AgendaActivity.md
Normal file
@@ -0,0 +1,136 @@
|
||||
# 📅 AgendaActivity.java — Ecrã de Agenda
|
||||
|
||||
> **Ficheiro:** `app/src/main/java/com/example/medcuida/pro/AgendaActivity.java`
|
||||
> **Layout:** `activity_agenda.xml`
|
||||
> **Linhas de código:** 192
|
||||
|
||||
---
|
||||
|
||||
## Descrição Geral
|
||||
|
||||
A `AgendaActivity` é um **ecrã dedicado à gestão da agenda do médico**. Mostra um calendário interativo e, abaixo dele, a lista de consultas para o dia selecionado.
|
||||
|
||||
> ⚠️ Esta Activity funciona de forma **semelhante à tab Agenda do MainActivity**, mas é uma Activity separada, acessível a partir de outras partes da app.
|
||||
|
||||
---
|
||||
|
||||
## Inicialização (`onCreate`) — Linhas 36–93
|
||||
|
||||
### 1. Configuração dos Componentes (Linhas 43–48)
|
||||
```java
|
||||
CalendarView calendarView = findViewById(R.id.calendarView);
|
||||
recyclerAgenda = findViewById(R.id.recycler_agenda);
|
||||
textAgendaVazia = findViewById(R.id.text_agenda_vazia);
|
||||
```
|
||||
- `CalendarView` → Calendário nativo do Android
|
||||
- `RecyclerView` → Lista das consultas
|
||||
- `TextView` → Mensagem quando não há consultas
|
||||
|
||||
### 2. Bottom Navigation (Linhas 49–62)
|
||||
```java
|
||||
bottomNav.setSelectedItemId(R.id.nav_agenda);
|
||||
```
|
||||
- Marca a tab "Agenda" como ativa
|
||||
- Navegação para `MainActivity` (Pacientes) e `PerfilMedicoActivity` (Perfil)
|
||||
|
||||
### 3. Configuração do Adapter (Linhas 64–80)
|
||||
```java
|
||||
adapter = new ConsultaAdapter(
|
||||
new ConsultaAdapter.OnConsultaActionClickListener() {
|
||||
void onAceitarClick(Consulta consulta) { aceitarConsulta(consulta); }
|
||||
void onEliminarClick(Consulta consulta) { eliminarConsulta(consulta); }
|
||||
},
|
||||
consulta -> { /* abrir detalhes */ }
|
||||
);
|
||||
```
|
||||
- Implementa dois callbacks:
|
||||
- **Aceitar** → muda o status para `"aceite"`
|
||||
- **Eliminar** → remove a consulta do Firestore
|
||||
- Clique no item → abre `DetalhePacienteActivity`
|
||||
|
||||
### 4. Carregamento Inicial (Linhas 82–93)
|
||||
```java
|
||||
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy", Locale.getDefault());
|
||||
loadConsultasForDate(sdf.format(new Date()));
|
||||
```
|
||||
- Obtém o UID do médico autenticado
|
||||
- Carrega as consultas de **hoje**
|
||||
- Configura o listener do calendário para mudar de dia
|
||||
|
||||
---
|
||||
|
||||
## Carregamento de Consultas — Linhas 96–153
|
||||
|
||||
### `loadConsultasForDate(String dateStr)`
|
||||
|
||||
**Passo a passo:**
|
||||
|
||||
1. **Remove o listener anterior** para evitar fugas de memória
|
||||
2. **Escuta em tempo real** toda a coleção `consultas`
|
||||
3. Para cada documento:
|
||||
- Converte para `Consulta`
|
||||
- **Verifica se pertence ao médico:**
|
||||
```java
|
||||
Object med = c.getMedicos();
|
||||
if (med instanceof String) { ... }
|
||||
else if (med instanceof List) { ... }
|
||||
```
|
||||
- **Filtra por data** (suporta 3 formatos diferentes)
|
||||
- **Exclui consultas canceladas**
|
||||
4. Atualiza o adapter e mostra/esconde a mensagem "vazia"
|
||||
|
||||
---
|
||||
|
||||
## Ações nas Consultas — Linhas 155–171
|
||||
|
||||
### `aceitarConsulta(Consulta)`
|
||||
```java
|
||||
db.collection("consultas").document(consulta.getId())
|
||||
.update("status", "aceite")
|
||||
```
|
||||
- Atualiza o status para `"aceite"` no Firestore
|
||||
- Mostra toast de sucesso ou erro
|
||||
|
||||
### `eliminarConsulta(Consulta)`
|
||||
```java
|
||||
db.collection("consultas").document(consulta.getId())
|
||||
.delete()
|
||||
```
|
||||
- **Apaga permanentemente** a consulta do Firestore
|
||||
- Mostra toast de sucesso ou erro
|
||||
|
||||
---
|
||||
|
||||
## Métodos Auxiliares de Data — Linhas 173–190
|
||||
|
||||
### `convertToISODate(String ddMMyyyy)`
|
||||
| Entrada | Saída |
|
||||
|---|---|
|
||||
| `"22/04/2026"` | `"2026-04-22"` |
|
||||
|
||||
### `getAlternativeDate(String paddedDate)`
|
||||
| Entrada | Saída |
|
||||
|---|---|
|
||||
| `"01/04/2026"` | `"1/4/2026"` |
|
||||
|
||||
> Estes métodos existem porque os dados no Firestore podem ter formatos de data inconsistentes.
|
||||
|
||||
---
|
||||
|
||||
## Diagrama de Fluxo
|
||||
|
||||
```mermaid
|
||||
graph TD
|
||||
A[onCreate] --> B[Configurar CalendarView]
|
||||
A --> C[Configurar RecyclerView]
|
||||
A --> D[Carregar consultas de hoje]
|
||||
|
||||
B -->|Mudar data| E[loadConsultasForDate]
|
||||
E --> F{Consultas encontradas?}
|
||||
F -->|Sim| G[Mostrar lista]
|
||||
F -->|Não| H[Mostrar 'Sem consultas']
|
||||
|
||||
G -->|Aceitar| I[Atualizar status Firestore]
|
||||
G -->|Eliminar| J[Apagar do Firestore]
|
||||
G -->|Clicar| K[Abrir DetalhePaciente]
|
||||
```
|
||||
Reference in New Issue
Block a user