Skip to content

HeitorLouzeiro/agendamento_veiculos

Repository files navigation

🚗 Sistema de Agendamento de Veículos - UESPI

Python Django PostgreSQL Docker License

Sistema completo para gerenciamento de agendamentos de veículos institucionais, desenvolvido para a Universidade Estadual do Piauí (UESPI).

CaracterísticasPré-requisitosInstalaçãoUsoDocumentação


📋 Sobre o Projeto

O Sistema de Agendamento de Veículos é uma aplicação web desenvolvida em Django que permite o gerenciamento eficiente de veículos institucionais, possibilitando que professores agendem veículos para atividades acadêmicas, enquanto administradores controlam aprovações, disponibilidade e geram relatórios detalhados.

🎯 Funcionalidades Principais

Para Professores

  • ✅ Cadastro e autenticação com email institucional (@*.uespi.br ou @uespi.br)
  • 📅 Agendamento de veículos com seleção de data/hora
  • 📊 Visualização de agendamentos em calendário
  • 🔍 Acompanhamento de status (Pendente/Aprovado/Reprovado)
  • 📱 Ativação de conta via e-mail

Para Administradores

  • 👥 Gestão completa de usuários
  • 🚙 Cadastro e gerenciamento de veículos
  • 📚 Gestão de cursos e limites de quilometragem
  • ✔️ Aprovação/Reprovação de agendamentos
  • 📈 Relatórios detalhados (geral, por curso, por professor)
  • 📥 Exportação de dados em Excel e PDF
  • 📊 Dashboard com estatísticas em tempo real

🏗️ Arquitetura do Sistema

agendamento_veiculos/
├── 🐳 Docker Configuration
│   ├── docker-compose.yml      # Orquestração de containers
│   └── Dockerfile              # Imagem da aplicação
│
├── 📦 Apps Django
│   ├── agendamentos/           # Gestão de agendamentos
│   │   ├── views/             # Views organizadas por funcionalidade
│   │   └── exports/           # Exportação Excel/PDF
│   ├── veiculos/              # Gestão de veículos
│   ├── cursos/                # Gestão de cursos
│   ├── usuarios/              # Autenticação customizada
│   └── dashboard/             # Dashboard e estatísticas
│
├── 🎨 Frontend
│   ├── templates/             # Templates HTML
│   └── static/                # CSS, JS, imagens
│
├── 🔧 Scripts
│   └── deploy-production.sh   # Script automatizado de deploy
│
└── ⚙️ Configurações
    ├── manage.py              # CLI do Django
    ├── requirements.txt       # Dependências Python
    └── .env                   # Variáveis de ambiente

🛠️ Tecnologias Utilizadas

Backend

  • Python 3.12 - Linguagem de programação
  • Django 5.2.7 - Framework web
  • PostgreSQL 15 - Banco de dados relacional
  • Gunicorn - Servidor WSGI para produção

Frontend

  • HTML5/CSS3 - Estrutura e estilização
  • JavaScript - Interatividade
  • Bootstrap (implícito) - Framework CSS responsivo

Bibliotecas Python

  • openpyxl/xlsxwriter - Exportação Excel
  • ReportLab - Geração de PDFs
  • python-decouple - Gerenciamento de configurações
  • whitenoise - Servir arquivos estáticos

DevOps

  • Docker & Docker Compose - Containerização

📦 Pré-requisitos

Para Desenvolvimento Local (sem Docker)

  • Python 3.12+
  • PostgreSQL 15+ ou SQLite3
  • pip (gerenciador de pacotes Python)

Para Produção com Docker (Recomendado)


🚀 Instalação

🐳 Opção 1: Docker (Recomendado para Produção)

1. Clone o repositório

git clone https://github.com/HeitorLouzeiro/agendamento_veiculos.git
cd agendamento_veiculos

2. Torne o script de deploy executável

chmod +x scripts/deploy-production.sh

3. Execute o script de deploy completo

./scripts/deploy-production.sh

O script irá:

  • ✅ Verificar instalação do Docker
  • ✅ Criar arquivo .env com configurações padrão
  • ✅ Construir imagens Docker
  • ✅ Iniciar banco de dados PostgreSQL
  • ✅ Executar migrações do banco
  • ✅ Coletar arquivos estáticos
  • ✅ Oferecer criação de superusuário
  • ✅ Iniciar todos os serviços

4. Acesse a aplicação

http://localhost:8000

💻 Opção 2: Desenvolvimento Local (sem Docker)

1. Clone o repositório

git clone https://github.com/HeitorLouzeiro/agendamento_veiculos.git
cd agendamento_veiculos

2. Crie e ative o ambiente virtual

# Linux/Mac
python3 -m venv venv
source venv/bin/activate

# Windows
python -m venv venv
venv\Scripts\activate

3. Instale as dependências

pip install --upgrade pip
pip install -r requirements.txt

4. Configure as variáveis de ambiente

cp .env.example .env  # Se existir
# Ou crie manualmente o arquivo .env

Exemplo de .env para desenvolvimento:

DEBUG=True
SECRET_KEY=sua-chave-secreta-aqui
ALLOWED_HOSTS=localhost,127.0.0.1

# SQLite para desenvolvimento
DB_ENGINE=sqlite3

# Ou PostgreSQL
# DB_ENGINE=postgresql
# DB_NAME=agendamento_veiculos
# DB_USER=postgres
# DB_PASSWORD=postgres
# DB_HOST=localhost
# DB_PORT=5432

# Configurações regionais
LANGUAGE_CODE=pt-br
TIME_ZONE=America/Sao_Paulo

# Email (console para desenvolvimento)
EMAIL_BACKEND=django.core.mail.backends.console.EmailBackend
DEFAULT_FROM_EMAIL=noreply@uespi.br

5. Execute as migrações

python manage.py makemigrations
python manage.py migrate

6. Crie um superusuário

python manage.py createsuperuser

7. Colete arquivos estáticos

python manage.py collectstatic --noinput

8. Inicie o servidor de desenvolvimento

python manage.py runserver

9. Acesse a aplicação

http://localhost:8000

📖 Uso

🐳 Comandos Docker

Modo Interativo (Menu)

./scripts/deploy-production.sh

Opções disponíveis:

  1. Deploy completo - Configuração inicial completa
  2. Rebuild e restart - Reconstruir e reiniciar serviços
  3. Executar migrações - Aplicar migrações do banco
  4. Coletar arquivos estáticos - Atualizar static files
  5. Criar superusuário - Adicionar administrador
  6. Ver status - Verificar containers em execução
  7. Ver logs - Visualizar logs da aplicação
  8. Parar serviços - Desligar todos os containers
  9. Sair - Encerrar o menu

Modo Comando Direto

# Deploy completo
./scripts/deploy-production.sh deploy

# Reconstruir e reiniciar
./scripts/deploy-production.sh rebuild

# Executar migrações
./scripts/deploy-production.sh migrate

# Coletar arquivos estáticos
./scripts/deploy-production.sh static

# Criar superusuário
./scripts/deploy-production.sh superuser

# Ver status dos containers
./scripts/deploy-production.sh status

# Ver logs em tempo real
./scripts/deploy-production.sh logs

# Parar todos os serviços
./scripts/deploy-production.sh stop

Comandos Docker Compose Manuais

# Iniciar serviços em produção
docker-compose up -d

# Iniciar em modo desenvolvimento (com live reload)
docker-compose --profile dev up -d

# Ver logs
docker-compose logs -f web

# Parar serviços
docker-compose down

# Reconstruir imagens
docker-compose build --no-cache

# Executar comandos Django
docker-compose exec web python manage.py <comando>

# Acessar shell do Django
docker-compose exec web python manage.py shell

# Acessar bash do container
docker-compose exec web bash

# Backup do banco de dados
docker-compose exec db pg_dump -U postgres agendamento_veiculos > backup.sql

# Restaurar banco de dados
docker-compose exec -T db psql -U postgres agendamento_veiculos < backup.sql

💻 Comandos Desenvolvimento Local

# Ativar ambiente virtual
source venv/bin/activate  # Linux/Mac
venv\Scripts\activate     # Windows

# Iniciar servidor de desenvolvimento
python manage.py runserver

# Criar migrações
python manage.py makemigrations

# Aplicar migrações
python manage.py migrate

# Criar superusuário
python manage.py createsuperuser

# Coletar arquivos estáticos
python manage.py collectstatic

# Shell interativo do Django
python manage.py shell

# Verificar problemas no projeto
python manage.py check

# Limpar sessões expiradas
python manage.py clearsessions

📧 Configuração de Email

O sistema envia emails para ativação de conta e notificações. Veja EMAIL_CONFIG.md para instruções detalhadas.

Desenvolvimento (Console)

EMAIL_BACKEND=django.core.mail.backends.console.EmailBackend
DEFAULT_FROM_EMAIL=noreply@uespi.br

Produção (SMTP - Gmail)

EMAIL_BACKEND=django.core.mail.backends.smtp.EmailBackend
EMAIL_HOST=smtp.gmail.com
EMAIL_PORT=587
EMAIL_USE_TLS=True
EMAIL_HOST_USER=seu-email@gmail.com
EMAIL_HOST_PASSWORD=sua-senha-de-app-gmail
DEFAULT_FROM_EMAIL=noreply@uespi.br

Nota: Para Gmail, gere uma "Senha de App" em: https://myaccount.google.com/apppasswords


🔐 Segurança

Configurações de Produção

IMPORTANTE: Antes de fazer deploy em produção:

  1. Altere a SECRET_KEY no arquivo .env:
SECRET_KEY=gere-uma-chave-secreta-forte-e-unica-aqui
  1. Desative o DEBUG:
DEBUG=False
  1. Configure ALLOWED_HOSTS:
ALLOWED_HOSTS=seudominio.com,www.seudominio.com
  1. Use HTTPS em produção (configure proxy reverso como Nginx)

  2. Configure backup automático do banco de dados

Gerando SECRET_KEY Segura

# Execute no shell Python
from django.core.management.utils import get_random_secret_key
print(get_random_secret_key())

📊 Estrutura do Banco de Dados

Principais Models

Usuario (usuários/)

  • Herda de AbstractUser do Django
  • Campos: username, email, tipo_usuario (professor/administrador)
  • Email institucional obrigatório: @*.uespi.br ou @uespi.br
  • Ativação de conta via email

Veiculo (veiculos/)

  • Campos: placa, modelo, marca, ano, cor, capacidade_passageiros
  • UUID como primary key
  • Status ativo/inativo

Curso (cursos/)

  • Campos: nome, limite_km_mensal, descricao
  • Controle de quilometragem mensal por curso

Agendamento (agendamentos/)

  • Relacionamentos: curso, professor, veiculo
  • Campos: data_inicio, data_fim, status, km_previsto
  • Status: Pendente, Aprovado, Reprovado
  • Validações de conflito de horários

📚 Documentação Adicional

Documentos Principais

Configuração

Links Externos


🤝 Contribuindo

Contribuições são bem-vindas! Para contribuir:

  1. Faça um Fork do projeto
  2. Crie uma branch para sua feature (git checkout -b feature/AmazingFeature)
  3. Commit suas mudanças (git commit -m 'Add some AmazingFeature')
  4. Push para a branch (git push origin feature/AmazingFeature)
  5. Abra um Pull Request

📖 Leia o guia completo: docs/CONTRIBUTING.md

Padrões de Código

  • Siga a PEP 8 para Python
  • Use nomes descritivos para variáveis e funções
  • Comente código complexo
  • Escreva testes para novas funcionalidades

🐛 Solução de Problemas

Erro: "Port 8000 already in use"

# Linux/Mac
sudo lsof -i :8000
kill -9 <PID>

# Windows
netstat -ano | findstr :8000
taskkill /PID <PID> /F

Erro: "Permission denied" ao executar script

chmod +x scripts/deploy-production.sh

Erro de migração do banco

# Resetar migrações (CUIDADO: perda de dados)
docker-compose exec web python manage.py migrate --fake <app> zero
docker-compose exec web python manage.py migrate <app>

Container não inicia

# Ver logs detalhados
docker-compose logs web
docker-compose logs db

# Rebuild completo
docker-compose down -v
docker-compose build --no-cache
docker-compose up -d

📝 Changelog

[1.0.0] - 2025-10-31

  • ✨ Lançamento inicial do sistema
  • 🚀 Suporte completo a Docker
  • 📧 Sistema de ativação por email
  • 📊 Dashboard com estatísticas
  • 📥 Exportação Excel e PDF
  • 🔐 Autenticação customizada

👨‍💻 Autor

Heitor Louzeiro


📄 Licença

Este projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.


🙏 Agradecimentos

  • Universidade Estadual do Piauí (UESPI)
  • Comunidade Django
  • Todos os contribuidores

⭐ Se este projeto foi útil, considere dar uma estrela!

About

No description, website, or topics provided.

Resources

License

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors