--- name: App Entregas Flutter description: Detalhes do app Flutter gotech_entregas - entregas e O.S., API, modelos, bugs corrigidos type: project --- # App Flutter - GoTech Entregas ## Localizacao - Projeto: `D:\xampp\htdocs\PROJETOS FLUTTER\gotech_entregas\` - Package: gotech_entregas - API Base: `https://sistema.gotechbr.com.br/api` ## Arquitetura - **Auth**: Bearer token via `ApiTokenModel::validarToken()` (SHA256 hashed) - **ApiAuthFilter**: Seta `colaborador_id`, `id_usuario`, `nome_usuario` na session - **ID Mapping**: `usuarios.id` != `colaboradores.id` - usar `resolveColaboradorId()` no ApiEntregas - Jesiel: `usuarios.id=1`, `colaboradores.id=3` - `ApiAuthFilter` seta `session('colaborador_id')` da coluna `usuarios.colaborador_id` ## Arquivos Principais ### Flutter - `lib/services/api_service.dart` - Dio HTTP client, todos endpoints - `lib/models/entrega.dart` - Entrega + EntregaItem models - `lib/models/ordem_servico.dart` - OrdemServico model - `lib/screens/entregas_list_screen.dart` - Lista mercadorias (pendente + em_transito) - `lib/screens/entrega_detail_screen.dart` - Detalhe + coletar assinatura - `lib/screens/os_list_screen.dart` - Lista O.S. (aberta + agendada + em_andamento) - `lib/screens/os_detail_screen.dart` - Detalhe O.S. + atualizar + concluir - `lib/widgets/signature_pad.dart` - Canvas para assinatura ### Backend (Intranet) - `app/Controllers/ApiEntregas.php` - API completa (entregas + O.S.) - `resolveColaboradorId()` - mapeia usuarios.id -> colaboradores.id - `listar()` - GET /api/entregas (todas, sem filtro de entregador) - `detalhe($id)` - GET /api/entregas/:id - `iniciar($id)` - POST (status -> em_transito) - `confirmar($id)` - POST com assinatura_base64, recebedor_nome, etc - `listarOS()` - GET /api/ordens-servico (filtro tecnico_id = colaborador_id) - `detalheOS($id)` - GET /api/ordens-servico/:id (com itens, equipamentos, historico) - `iniciarOS($id)` - POST (aberta/agendada -> em_andamento) - `concluirOS($id)` - POST com assinatura_base64, laudo, solucao - `atualizarOS($id)` - POST observacao (registra historico) - `salvarAssinatura()` - helper: base64 -> PNG file em writable/uploads/ ## Status DB - **entregas.status** ENUM: `pendente`, `em_transito`, `entregue`, `cancelada` - **ordens_servico.status** ENUM: `aberta`, `agendada`, `em_andamento`, `aguardando_pecas`, `concluida`, `cancelada` ## Campos Importantes - **entregas**: `destinatario_nome` (quem deve receber), `recebedor_nome` (quem retirou de fato), `assinatura_path` (PNG salvo) - **ordens_servico**: `cliente_nome` (denormalizado), `cliente_nome_rel` (JOIN clientes), `assinatura_cliente` (path ou base64), `tecnico_id` (ref colaboradores.id) ## Bugs Corrigidos (2026-03-11) ### Bug Assinatura Nao Salva (CORRIGIDO) - **Causa**: Flutter enviava campo `'assinatura'` mas API esperava `'assinatura_base64'` - **Fix**: Alterado `api_service.dart` - `confirmarEntrega()` e `concluirOS()` agora enviam `'assinatura_base64'` ### Bug Mercadoria Nao Aparece no App (CORRIGIDO) - **Causa**: API `listar()` filtrava por `entregador_id = userId` mas campo era NULL - **Fix**: Removido filtro - todas entregas visiveis para todos usuarios logados ### Bug O.S. Nao Aparece no App (CORRIGIDO) - **Causa**: `tecnico_id` referencia `colaboradores.id` mas API usava `usuarios.id` - **Fix**: Adicionado `resolveColaboradorId()` que usa `session('colaborador_id')` do ApiAuthFilter ### Bug Status Mismatch O.S. (CORRIGIDO) - **Causa**: Flutter usava `em_execucao` mas DB tem `em_andamento` - **Fix**: Atualizado todos arquivos Flutter para usar `em_andamento` ### Bug Nome Recebedor Nao Aparece (CORRIGIDO) - **Causa**: Card da lista mostrava destinatario em texto pequeno cinza - **Fix**: Redesenhado card com container destacado "Recebedor: Nome" em azul com borda - Mesmo tratamento para O.S.: "Cliente: Nome" em destaque ## Rotas API (dentro do grupo 'api' com ApiAuthFilter) ``` GET /api/entregas -> ApiEntregas::listar GET /api/entregas/:id -> ApiEntregas::detalhe POST /api/entregas/:id/iniciar -> ApiEntregas::iniciar POST /api/entregas/:id/confirmar -> ApiEntregas::confirmar GET /api/ordens-servico -> ApiEntregas::listarOS GET /api/ordens-servico/:id -> ApiEntregas::detalheOS POST /api/ordens-servico/:id/iniciar -> ApiEntregas::iniciarOS POST /api/ordens-servico/:id/concluir -> ApiEntregas::concluirOS POST /api/ordens-servico/:id/atualizar -> ApiEntregas::atualizarOS ``` ## Intranet - View Entregas - `app/Views/entregas/index.php` - Redesenhado para match dashboard/demandas - Usa jQuery DataTables (NAO BS5 DataTables) - paginacao com `.paginate_button` - CSS: dash-btn, status-badge, ent-stat-card (Tailwind-inspired palette) - Modal headers: todos `#1e293b` (dark slate) - Assinatura exibida no modal detalhe via `` ## Deploy - Arquivos API ja deployados no servidor (2026-03-11) - Flutter APK: build release + adb install