Sistema completo para gerenciamento de agendamentos de veículos institucionais, desenvolvido para a Universidade Estadual do Piauí (UESPI).
Características • Pré-requisitos • Instalação • Uso • Documentação
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.
- ✅ Cadastro e autenticação com email institucional (
@*.uespi.brou@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
- 👥 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
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
- 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
- HTML5/CSS3 - Estrutura e estilização
- JavaScript - Interatividade
- Bootstrap (implícito) - Framework CSS responsivo
- openpyxl/xlsxwriter - Exportação Excel
- ReportLab - Geração de PDFs
- python-decouple - Gerenciamento de configurações
- whitenoise - Servir arquivos estáticos
- Docker & Docker Compose - Containerização
- Python 3.12+
- PostgreSQL 15+ ou SQLite3
- pip (gerenciador de pacotes Python)
- Docker 20.10+
- Docker Compose 2.0+
git clone https://github.com/HeitorLouzeiro/agendamento_veiculos.git
cd agendamento_veiculoschmod +x scripts/deploy-production.sh./scripts/deploy-production.shO script irá:
- ✅ Verificar instalação do Docker
- ✅ Criar arquivo
.envcom 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
http://localhost:8000
git clone https://github.com/HeitorLouzeiro/agendamento_veiculos.git
cd agendamento_veiculos# Linux/Mac
python3 -m venv venv
source venv/bin/activate
# Windows
python -m venv venv
venv\Scripts\activatepip install --upgrade pip
pip install -r requirements.txtcp .env.example .env # Se existir
# Ou crie manualmente o arquivo .envExemplo 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.brpython manage.py makemigrations
python manage.py migratepython manage.py createsuperuserpython manage.py collectstatic --noinputpython manage.py runserverhttp://localhost:8000
./scripts/deploy-production.shOpções disponíveis:
- Deploy completo - Configuração inicial completa
- Rebuild e restart - Reconstruir e reiniciar serviços
- Executar migrações - Aplicar migrações do banco
- Coletar arquivos estáticos - Atualizar static files
- Criar superusuário - Adicionar administrador
- Ver status - Verificar containers em execução
- Ver logs - Visualizar logs da aplicação
- Parar serviços - Desligar todos os containers
- Sair - Encerrar o menu
# 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# 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# 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 clearsessionsO sistema envia emails para ativação de conta e notificações. Veja EMAIL_CONFIG.md para instruções detalhadas.
EMAIL_BACKEND=django.core.mail.backends.console.EmailBackend
DEFAULT_FROM_EMAIL=noreply@uespi.brEMAIL_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.brNota: Para Gmail, gere uma "Senha de App" em: https://myaccount.google.com/apppasswords
IMPORTANTE: Antes de fazer deploy em produção:
- Altere a SECRET_KEY no arquivo
.env:
SECRET_KEY=gere-uma-chave-secreta-forte-e-unica-aqui- Desative o DEBUG:
DEBUG=False- Configure ALLOWED_HOSTS:
ALLOWED_HOSTS=seudominio.com,www.seudominio.com-
Use HTTPS em produção (configure proxy reverso como Nginx)
-
Configure backup automático do banco de dados
# Execute no shell Python
from django.core.management.utils import get_random_secret_key
print(get_random_secret_key())- Herda de
AbstractUserdo Django - Campos:
username,email,tipo_usuario(professor/administrador) - Email institucional obrigatório:
@*.uespi.brou@uespi.br - Ativação de conta via email
- Campos:
placa,modelo,marca,ano,cor,capacidade_passageiros - UUID como primary key
- Status ativo/inativo
- Campos:
nome,limite_km_mensal,descricao - Controle de quilometragem mensal por curso
- Relacionamentos:
curso,professor,veiculo - Campos:
data_inicio,data_fim,status,km_previsto - Status: Pendente, Aprovado, Reprovado
- Validações de conflito de horários
- 📖 Índice Completo - Navegação em toda documentação
- ⚡ Guia Rápido - Início em 5 minutos
- 📊 Visão Técnica - Overview do projeto
- ⌨️ Comandos - Referência de comandos
- 🤝 Contribuindo - Como contribuir
- 👋 Boas-vindas - Para novos usuários
- EMAIL_CONFIG.md - Configuração detalhada de email
Contribuições são bem-vindas! Para contribuir:
- Faça um Fork do projeto
- Crie uma branch para sua feature (
git checkout -b feature/AmazingFeature) - Commit suas mudanças (
git commit -m 'Add some AmazingFeature') - Push para a branch (
git push origin feature/AmazingFeature) - Abra um Pull Request
📖 Leia o guia completo: docs/CONTRIBUTING.md
- Siga a PEP 8 para Python
- Use nomes descritivos para variáveis e funções
- Comente código complexo
- Escreva testes para novas funcionalidades
# Linux/Mac
sudo lsof -i :8000
kill -9 <PID>
# Windows
netstat -ano | findstr :8000
taskkill /PID <PID> /Fchmod +x scripts/deploy-production.sh# 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># 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- ✨ 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
Heitor Louzeiro
- GitHub: @HeitorLouzeiro
- LinkedIn: Heitor Louzeiro
Este projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.
- Universidade Estadual do Piauí (UESPI)
- Comunidade Django
- Todos os contribuidores
⭐ Se este projeto foi útil, considere dar uma estrela!