# Instalar: Técnico, Clients/Technicians, Quotes/Invoices, MFA, Backups

Sem migrations novas desta vez — só código.

## 1. Ficheiros a copiar (substituem os que já existem)

```
app/Livewire/Admin/WorkOrderShow.php               → SUBSTITUI (check-in/conclusão/checklist)
resources/views/livewire/admin/work-order-show.blade.php → SUBSTITUI

app/Livewire/Admin/ClientIndex.php                  → novo
app/Livewire/Admin/TechnicianIndex.php               → novo
app/Livewire/Admin/QuoteIndex.php                    → novo
app/Livewire/Admin/InvoiceIndex.php                  → novo
app/Livewire/Admin/MfaSetup.php                      → novo

resources/views/livewire/admin/client-index.blade.php      → novo
resources/views/livewire/admin/technician-index.blade.php   → novo
resources/views/livewire/admin/quote-index.blade.php         → novo
resources/views/livewire/admin/invoice-index.blade.php        → novo
resources/views/livewire/admin/mfa-setup.blade.php             → novo

resources/views/layouts/app.blade.php               → SUBSTITUI (menu com todos os links novos)

routes/web.php                                       → SUBSTITUI
routes/console.php                                    → SUBSTITUI (agenda o backup)

app/Console/Commands/BackupDatabase.php               → novo
```

## 2. Limpar caches

```bash
cd ~/public_html/app.amimak.co.mz
php artisan config:clear
php artisan route:clear
php artisan view:clear
```

## 3. Testar o backup manualmente (antes de confiar no cron)

```bash
php artisan app:backup-database
ls -la storage/app/backups/
```

Deve criar um ficheiro `backup-AAAA-MM-DD_HHMMSS.sql.gz`. Se der erro
"mysqldump: command not found", confirma com o suporte da Whost o caminho
do `mysqldump` (normalmente já está no PATH em cPanel, mas confirma).

## 4. Confirmar o cron job do backup

O `routes/console.php` já agenda `app:backup-database` para as 03:00. Isto
só corre de facto se o cron do Laravel Scheduler estiver activo — confirma
que já tens isto no cPanel → Cron Jobs (se ainda não tens, ver
`docs/09-DEPLOY-CPANEL-AMIMAK.md`):

```
* * * * * cd /home/amimak/public_html/app.amimak.co.mz && php artisan schedule:run >> /dev/null 2>&1
```

## 5. Testar cada ecrã novo (como Admin)

- `/admin/work-orders/{id}` — se fores o técnico atribuído a uma WO
  `SCHEDULED`, deve aparecer o botão de Check-in (pede permissão de
  localização no browser). Depois de check-in, a WO passa a `IN_PROGRESS`
  e aparece o formulário de conclusão.
- `/admin/clients` — criar/editar clientes
- `/admin/technicians` — criar/editar técnicos internos
- `/admin/quotes` — aprovar/rejeitar orçamentos submetidos
- `/admin/invoices` — aprovar/marcar como paga
- `/admin/mfa` — configurar MFA (QR code gerado no browser via JS, não
  precisa de nenhuma extensão PHP de imagem)

## 6. Sobre o GitHub (pendente)

Continua por resolver — sempre que quiseres retomar: gera um **token
classic com scope `repo`** (confirma que marcaste a checkbox `repo`
completa) e corre:

```bash
git add -A
git commit -m "Ronda de funcionalidades: técnico, CRUD, quotes/invoices, MFA, backups"
git push -u origin main
```

Cola o token quando pedir a password (nunca aqui na conversa).
