## New Features - Email notifications for overdue and upcoming payments - User preferences page for notification settings - Daily scheduler to send alerts at user-configured time - Smart analysis: payable items, transfer suggestions between accounts ## Backend - Migration for user_preferences table - SendDuePaymentsAlert Artisan command - DuePaymentsAlert Mailable with HTML/text templates - UserPreferenceController with test-notification endpoint - Scheduler config for notify:due-payments command ## Frontend - Preferences.jsx page with notification toggle - API service for preferences - Route and menu link for settings - Translations (PT-BR, EN, ES) ## Server - Cron configured for Laravel scheduler Version: 1.44.5
91 lines
3.2 KiB
Markdown
91 lines
3.2 KiB
Markdown
# Implementação de Orçamentos por Subcategoria
|
|
|
|
## ✅ O que foi feito:
|
|
|
|
### 1. **Backend - Database**
|
|
- ✅ Migration criada: `2025_12_16_211102_add_subcategory_to_budgets_table.php`
|
|
- Adiciona coluna `subcategory_id`
|
|
- Atualiza unique constraint para incluir subcategoria
|
|
|
|
### 2. **Backend - Model**
|
|
- ✅ `Budget.php` atualizado:
|
|
- Adicionado `subcategory_id` ao fillable
|
|
- Nova relação `subcategory()`
|
|
- Lógica de `getSpentAmountAttribute()` atualizada para considerar subcategorias
|
|
|
|
### 3. **Backend - Controller**
|
|
- ✅ `BudgetController.php` atualizado:
|
|
- `index()`: carrega relação `subcategory`
|
|
- `store()`: valida e cria orçamentos com subcategoria
|
|
- `show()`: filtra transações por subcategoria quando aplicável
|
|
- `destroy()`: deleta considerando subcategoria
|
|
|
|
### 4. **Frontend**
|
|
- ✅ `Budgets.jsx` atualizado:
|
|
- Formulário com seleção de subcategoria (opcional)
|
|
- Exibição de subcategoria nos cards
|
|
- Se categoria tem subcategorias, mostra opção "Toda a categoria" + lista de subcategorias
|
|
|
|
### 5. **Traduções**
|
|
- ✅ Adicionado em PT-BR, ES, EN:
|
|
- `budgets.subcategory`: "Subcategoria"
|
|
- `budgets.allCategory`: "Toda a categoria" / "All category" / "Toda la categoría"
|
|
|
|
## 🚀 Como fazer Deploy:
|
|
|
|
### Backend:
|
|
```bash
|
|
cd /workspaces/webmoney
|
|
|
|
# 1. Enviar arquivos
|
|
sshpass -p 'Master9354' scp -o StrictHostKeyChecking=no \
|
|
backend/database/migrations/2025_12_16_211102_add_subcategory_to_budgets_table.php \
|
|
root@213.165.93.60:/var/www/webmoney/backend/database/migrations/
|
|
|
|
sshpass -p 'Master9354' scp -o StrictHostKeyChecking=no \
|
|
backend/app/Models/Budget.php \
|
|
root@213.165.93.60:/var/www/webmoney/backend/app/Models/
|
|
|
|
sshpass -p 'Master9354' scp -o StrictHostKeyChecking=no \
|
|
backend/app/Http/Controllers/Api/BudgetController.php \
|
|
root@213.165.93.60:/var/www/webmoney/backend/app/Http/Controllers/Api/
|
|
|
|
# 2. Executar migration
|
|
sshpass -p 'Master9354' ssh -o StrictHostKeyChecking=no root@213.165.93.60 \
|
|
"cd /var/www/webmoney/backend && php artisan migrate --force"
|
|
|
|
# 3. Limpar cache
|
|
sshpass -p 'Master9354' ssh -o StrictHostKeyChecking=no root@213.165.93.60 \
|
|
"cd /var/www/webmoney/backend && php artisan config:clear && php artisan cache:clear"
|
|
```
|
|
|
|
### Frontend:
|
|
```bash
|
|
cd /workspaces/webmoney/frontend && ./deploy.sh
|
|
```
|
|
|
|
## 📝 Como usar:
|
|
|
|
1. **Criar orçamento para categoria inteira** (comportamento existente):
|
|
- Selecionar categoria
|
|
- NÃO selecionar subcategoria (ou selecionar "Toda a categoria")
|
|
- Valor do orçamento
|
|
|
|
2. **Criar orçamento para subcategoria específica** (NOVO):
|
|
- Selecionar categoria
|
|
- Selecionar a subcategoria desejada
|
|
- Valor do orçamento
|
|
|
|
### Exemplo:
|
|
- Categoria: "Alimentação" - Orçamento R$ 1000 (todas as subcategorias)
|
|
- Ou
|
|
- Categoria: "Alimentação" → Subcategoria: "Restaurante" - Orçamento R$ 300 (apenas restaurante)
|
|
|
|
## 🔍 Características:
|
|
|
|
- ✅ Orçamento por categoria inclui automaticamente todas as subcategorias
|
|
- ✅ Orçamento por subcategoria é específico e não inclui outras subcategorias
|
|
- ✅ Pode ter orçamento geral E orçamentos específicos por subcategoria
|
|
- ✅ Propagação automática para 12 meses futuros funciona com subcategorias
|
|
- ✅ Unique constraint garante 1 orçamento por categoria/subcategoria/mês
|