Loading repository data…
Loading repository data…
teecoleonard / repository
Aplicativo Android completo para gestão de contratos, clientes e equipamentos de locação, feito com Kotlin
A transparent discovery signal based on current public GitHub metadata.
This score does not audit code, security, maintainers, documentation quality, or suitability. Verify the repository and its current documentation before adoption.
Aplicativo Android nativo (100% Kotlin) para operar todo o ciclo de locação de equipamentos da ALG: prospecção, contratos, logística, devoluções, financeiro e analytics. Este README centraliza toda a documentação funcional e técnica do app.
| Etapa | Onde acontece | Persistência | O que é disparado |
|---|---|---|---|
| 1. Criar Cliente | ClientesFragment → CadastroClienteDialogFragment | ClienteRepository chama ApiService.createCliente() e sincroniza AppDatabase | Histórico do cliente passa a ser exibido em ClientDetailsFragment |
| 2. Criar Contrato | ContratosFragment → CadastroContratoDialogFragment + EquipamentoContratoDialogFragment | ContractRepository envia payload completo com cliente, equipamentos e período; Room guarda rascunho offline | API gera Contrato, EquipamentoContrato e devoluções pendentes atomizadas |
| 3. Coletar Assinaturas | SignatureCaptureFragment + PdfService | Arquivo da assinatura é convertido em base64, armazenado via /api/contratos/:numero/assinatura | status_assinatura e status_contrato passam a ASSINADO |
| 4. Gerar Devolução | DevolucoesFragment → DevolucaoDetailsDialogFragment | DevolucaoRepository obtém itens criados automaticamente no contrato; operador define quantidades recebidas | Atualiza Devolucao e status por item, alimentando dashboards de atraso |
| 5. Devolver Equipamento | Mesma tela de devolução, botão “Confirmar devolução” | EquipamentoContratoRepository ajusta estoque disponível | Se todos os itens forem devolvidos, StatusContrato sugere finalização |
| 6. Finalizar Contrato | AtualizarStatusBottomSheet acessível pelo card ou diálogo de detalhes | PATCH /api/contratos/:id/status via ContratoRepository | ContratosFragment move registro para aba “Arquivados” após 6 meses |
ui/*, viewmodel, data/repository): separa apresentação, regras de negócio e acesso a dados.data/api/ApiClient.kt, AuthInterceptor.kt) com headers dinâmicos (token + seleção de banco).data/db) para cache local dos widgets do dashboard, filtros recentes e relatórios offline.Loading/Success/Error modelados por utils/Resource.SessionManager + AuthRepository: refresh silencioso e logout forçado em 401.PdfService e PdfViewerFragment geram/visualizam contratos.ReportService produz relatórios financeiros em segundo plano.NotificationManager + DashboardViewModel exibem alertas de contratos vencidos.app/src/main/java/com/example/alg_gestao_02/
├── auth/ (LoginActivity, RegisterActivity, AuthRepository)
├── dashboard/ (DashboardFragment, DashboardViewModel, cards com métricas)
├── ui/
│ ├── cliente/ (CRUD completo + ClientDetailsFragment)
│ ├── contrato/ e contrato/adapter (cards, detalhes, assinatura, PDF)
│ ├── equipamento/ (cadastro, estoque, detalhes rápidos)
│ ├── devolucao/ (workflow de recebimento e confirmação)
│ ├── financial/ (Receita por cliente, Resumo mensal, filtros avançados)
│ └── common/ (BaseFragment, dialogs, tratamento de erros)
├── data/
│ ├── api/ (ApiService, interceptors, DTOs, integração ViaCEP)
│ ├── db/ (AppDatabase, DAOs de cache)
│ ├── models/ (contratos, devoluções, métricas, enums)
│ └── repository/ (fachadas assíncronas chamadas pelos ViewModels)
├── service/ (PdfService, ReportService)
├── manager/ (NotificationManager)
└── utils/ (CurrencyUtils, FilterManager, SessionManager, PdfUtils, etc.)
LoginViewModel/RegisterViewModel e validação de CPF/CNPJ (TextMaskUtils).SessionManager; tokens ficam em EncryptedSharedPreferences.AuthInterceptor injeta Authorization: Bearer <token> e trata código 401 para forçar logout seguro.DashboardFragment consome /api/dashboard/resumo e popula cards para receita, contratos ativos, equipamentos e devoluções. Os dados são armazenados em Room para fallback offline.FinancialFragment e ReceitaClientesFragment usam FinancialViewModel com filtros:
ResumoMensalClienteActivity mostra detalhamento e gera PDFs com ReportService.SignatureCaptureFragment captura a assinatura do cliente usando SignatureView, converte para base64 e envia para ContratoRepository.PdfService gera contratos em PDF, armazenando-os localmente com FileProvider para compartilhar.ContratosAdapter exibe badges de status (cores/ícones definidos em data/models/StatusContrato.kt) conforme a implementação descrita em STATUS_CONTRATO_UI_IMPLEMENTADO.md.AtualizarStatusBottomSheet valida transições (PENDENTE → ASSINADO → EM_ANDAMENTO → FINALIZADO) e sincroniza via API.DevolucoesFragment.DevolucaoRepository sincroniza devoluções e atualiza equipamentos vinculados, refletindo disponibilidade em EquipamentosFragment.api-sqldata/api/ApiService.kt usando Retrofit. Principais endpoints:
POST /api/auth/login, POST /api/auth/registerGET/POST /api/clientes, GET /api/clientes/:idGET/POST /api/contratos, POST /api/contratos/:id/arquivarGET/POST /api/devolucoes, POST /api/devolucoes/:id/finalizarGET /api/dashboard/resumo, GET /api/financial/receita-clientesX-Database quando o operador escolhe trabalhar em modo teste (útil para treinamentos). O middleware databaseContext da API seleciona o banco correto.Pré-requisitos
build.gradle.kts já configurado com compileSdk=34).Configurar endpoint
BuildConfig.API_BASE_URL e BuildConfig.PDF_BASE_URL (sem hardcode no Kotlin)..\gradlew.bat :app:assembleDebug `
-PALG_API_BASE_URL=http://10.0.2.2:13050/ `
-PALG_FATURAS_API_BASE_URL=http://10.0.2.2:13010/ `
-PALG_PDF_BASE_URL=http://10.0.2.2:13010/
80/443), compile com:
.\gradlew.bat :app:assembleDebug `
-PALG_API_BASE_URL=http://45.10.160.10/api-sql/ `
-PALG_FATURAS_API_BASE_URL=http://45.10.160.10/ `
-PALG_PDF_BASE_URL=http://45.10.160.10/
http://45.10.160.10:3050/ no app quando a API estiver somente por proxy.10.0.2.2 pelo IP da sua máquina na rede local.Build e testes
./gradlew clean assembleDebug
./gradlew test
./gradlew connectedAndroidTest
Observabilidade
LogAnalyzer concentra logs do app.ErrorHandler padroniza mensagens e fallback visual.ApiService (use ./gradlew test)../gradlew connectedAndroidTest).STATUS_CONTRATO_UI_IMPLEMENTADO.md e NOVO_SISTEMA_CONTRATOS.md.NOVO_SISTEMA_CONTRATOS.md: detalha abas, filtros, arquivamento e endpoints envolvidos.STATUS_CONTRATO_UI_IMPLEMENTADO.md: documentação visual do badge e fluxo de alteração de status.CHANGELOG.md: histórico de releases (1.0.0 → 1.1.0).Leonardo Henrique
📧 leonardo4q@gmail.com
🐙 @teecoleonard
💼 LinkedIn