Skip to content

marques823/helpdesk_old

Repository files navigation

Sistema Helpdesk

Sistema de gerenciamento de tickets de suporte desenvolvido em Django.

Requisitos do Sistema

  • Python 3.8+
  • Django 4.2+
  • PostgreSQL (recomendado) ou SQLite
  • pip (gerenciador de pacotes Python)

Estrutura do Projeto

helpdesk/
├── manage.py
├── requirements.txt
├── tickets/
│   ├── __init__.py
│   ├── admin.py
│   ├── apps.py
│   ├── models.py
│   ├── views.py
│   ├── urls.py
│   ├── forms.py
│   └── templates/
│       └── tickets/
│           ├── base.html
│           ├── home.html
│           ├── ticket_list.html
│           ├── ticket_detail.html
│           └── ticket_form.html
└── templates/
    └── admin/
        └── base_site.html

Instalação

  1. Clone o repositório:
git clone [URL_DO_REPOSITORIO]
cd helpdesk
  1. Crie um ambiente virtual e ative-o:
python -m venv venv
source venv/bin/activate  # Linux/Mac
venv\Scripts\activate     # Windows
  1. Instale as dependências:
pip install -r requirements.txt
  1. Configure o banco de dados:
python manage.py makemigrations
python manage.py migrate
  1. Crie um superusuário:
python manage.py createsuperuser
  1. Execute o servidor de desenvolvimento:
python manage.py runserver

Dependências (requirements.txt)

Django==4.2.7
django-crispy-forms==2.0
crispy-bootstrap5==2023.10
Pillow==10.1.0
python-dotenv==1.0.0
psycopg2-binary==2.9.9  # Para PostgreSQL

Configurações do Django (settings.py)

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'tickets.apps.TicketsConfig',
    'crispy_forms',
    'crispy_bootstrap5',
]

CRISPY_ALLOWED_TEMPLATE_PACKS = "bootstrap5"
CRISPY_TEMPLATE_PACK = "bootstrap5"

# Configurações de Email (opcional)
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'

Modelos (models.py)

Ticket

class Ticket(models.Model):
    STATUS_CHOICES = [
        ('open', 'Aberto'),
        ('in_progress', 'Em Andamento'),
        ('resolved', 'Resolvido'),
        ('closed', 'Fechado'),
    ]

    PRIORITY_CHOICES = [
        ('low', 'Baixa'),
        ('medium', 'Média'),
        ('high', 'Alta'),
        ('urgent', 'Urgente'),
    ]

    title = models.CharField(max_length=200)
    description = models.TextField()
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
    status = models.CharField(max_length=20, choices=STATUS_CHOICES, default='open')
    priority = models.CharField(max_length=20, choices=PRIORITY_CHOICES, default='medium')
    category = models.ForeignKey('Category', on_delete=models.CASCADE)
    created_by = models.ForeignKey(User, on_delete=models.CASCADE, related_name='created_tickets')
    assigned_to = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, blank=True, related_name='assigned_tickets')
    attachment = models.FileField(upload_to='tickets/', null=True, blank=True)

Category

class Category(models.Model):
    name = models.CharField(max_length=100)
    description = models.TextField(blank=True)
    created_at = models.DateTimeField(auto_now_add=True)

URLs (urls.py)

from django.urls import path
from . import views

app_name = 'tickets'

urlpatterns = [
    path('', views.home, name='home'),
    path('tickets/', views.ticket_list, name='ticket_list'),
    path('tickets/create/', views.ticket_create, name='ticket_create'),
    path('tickets/<int:pk>/', views.ticket_detail, name='ticket_detail'),
    path('tickets/<int:pk>/edit/', views.ticket_edit, name='ticket_edit'),
    path('tickets/<int:pk>/delete/', views.ticket_delete, name='ticket_delete'),
]

Views (views.py)

Lista de Tickets

def ticket_list(request):
    tickets = Ticket.objects.all().order_by('-created_at')
    return render(request, 'tickets/ticket_list.html', {'tickets': tickets})

Criação de Ticket

def ticket_create(request):
    if request.method == 'POST':
        form = TicketForm(request.POST, request.FILES)
        if form.is_valid():
            ticket = form.save(commit=False)
            ticket.created_by = request.user
            ticket.save()
            return redirect('tickets:ticket_detail', pk=ticket.pk)
    else:
        form = TicketForm()
    return render(request, 'tickets/ticket_form.html', {'form': form})

Templates

Base Template (base.html)

<!DOCTYPE html>
<html lang="pt-br">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>{% block title %}Sistema Helpdesk{% endblock %}</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
    <link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css" rel="stylesheet">
</head>
<body>
    <!-- Navigation -->
    <nav class="navbar navbar-expand-lg navbar-dark bg-primary">
        <!-- ... código da navegação ... -->
    </nav>

    <!-- Main Content -->
    <main class="container my-4">
        {% block content %}{% endblock %}
    </main>

    <!-- Footer -->
    <footer class="footer mt-auto py-3 bg-light">
        <!-- ... código do footer ... -->
    </footer>

    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>

Funcionalidades Principais

  1. Autenticação de Usuários

    • Login/Logout
    • Registro de usuários
    • Recuperação de senha
  2. Gerenciamento de Tickets

    • Criação de tickets
    • Listagem de tickets
    • Detalhes do ticket
    • Edição de tickets
    • Exclusão de tickets
    • Upload de anexos
  3. Categorização

    • Criação de categorias
    • Associação de tickets a categorias
    • Filtragem por categorias
  4. Sistema de Prioridades

    • Definição de prioridade para tickets
    • Filtragem por prioridade
    • Indicadores visuais de prioridade
  5. Painel Administrativo

    • Interface administrativa personalizada
    • Dashboard com estatísticas
    • Gerenciamento de usuários
    • Gerenciamento de categorias
  6. Notificações

    • Notificações por email
    • Atualizações de status
    • Atribuição de tickets

Segurança

  1. Autenticação

    • Login requerido para acessar o sistema
    • Proteção contra CSRF
    • Senhas criptografadas
  2. Autorização

    • Controle de acesso baseado em permissões
    • Diferentes níveis de usuário (admin, staff, usuário comum)
  3. Validação de Dados

    • Validação de formulários
    • Sanitização de entrada de dados
    • Proteção contra XSS

Personalização do Admin

O painel administrativo foi personalizado para corresponder ao design do site principal, incluindo:

  • Tema Bootstrap 5
  • Cards informativos
  • Estatísticas em tempo real
  • Interface responsiva
  • Ícones Font Awesome

Manutenção

  1. Backup

    • Backup regular do banco de dados
    • Backup de arquivos de mídia
    • Logs de sistema
  2. Monitoramento

    • Logs de erros
    • Monitoramento de performance
    • Alertas de sistema
  3. Atualizações

    • Atualização de dependências
    • Correções de segurança
    • Melhorias de performance

Suporte

Para suporte ou dúvidas, entre em contato através do email: [seu-email@exemplo.com]

Licença

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

About

Aplicativo para abertura de chamados

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published