84 lines
3.1 KiB
Python
84 lines
3.1 KiB
Python
import re
|
|
|
|
def refactor_views():
|
|
with open('expenses/views.py', 'r', encoding='utf-8') as f:
|
|
content = f.read()
|
|
|
|
# Imports to add
|
|
imports = """from django.views.generic import ListView, CreateView, UpdateView, DeleteView
|
|
from django.contrib.auth.mixins import LoginRequiredMixin
|
|
from django.urls import reverse_lazy
|
|
from .mixins import RoleRequiredMixin
|
|
"""
|
|
if 'ListView' not in content:
|
|
content = content.replace("from django.shortcuts import render, redirect, get_object_or_404", imports + "\nfrom django.shortcuts import render, redirect, get_object_or_404")
|
|
|
|
# Replace expense_list
|
|
old_list_view = """@login_required
|
|
def expense_list(request):
|
|
expenses = Expense.objects.select_related('project', 'category', 'user').order_by('-date')
|
|
|
|
# Filtros
|
|
project_id = request.GET.get('project')
|
|
category_id = request.GET.get('category')
|
|
|
|
if project_id:
|
|
expenses = expenses.filter(project_id=project_id)
|
|
if category_id:
|
|
expenses = expenses.filter(category_id=category_id)
|
|
|
|
context = {
|
|
'expenses': expenses,
|
|
'projects': Project.objects.all(),
|
|
'categories': Category.objects.all(),
|
|
'selected_project': project_id,
|
|
'selected_category': category_id,
|
|
}
|
|
return render(request, 'expenses/expense_list.html', context)"""
|
|
|
|
new_list_view = """class ExpenseListView(LoginRequiredMixin, ListView):
|
|
model = Expense
|
|
template_name = 'expenses/expense_list.html'
|
|
context_object_name = 'expenses'
|
|
|
|
def get_queryset(self):
|
|
queryset = super().get_queryset().select_related('project', 'category', 'user').order_by('-date')
|
|
project_id = self.request.GET.get('project')
|
|
category_id = self.request.GET.get('category')
|
|
|
|
if project_id:
|
|
queryset = queryset.filter(project_id=project_id)
|
|
if category_id:
|
|
queryset = queryset.filter(category_id=category_id)
|
|
return queryset
|
|
|
|
def get_context_data(self, **kwargs):
|
|
context = super().get_context_data(**kwargs)
|
|
context['projects'] = Project.objects.all()
|
|
context['categories'] = Category.objects.all()
|
|
context['selected_project'] = self.request.GET.get('project')
|
|
context['selected_category'] = self.request.GET.get('category')
|
|
return context"""
|
|
|
|
content = content.replace(old_list_view, new_list_view)
|
|
|
|
with open('expenses/views.py', 'w', encoding='utf-8') as f:
|
|
f.write(content)
|
|
|
|
def refactor_urls():
|
|
with open('config/urls.py', 'r', encoding='utf-8') as f:
|
|
content = f.read()
|
|
|
|
# Check if expense_list is imported
|
|
if 'expense_list' in content:
|
|
content = content.replace('expense_list', 'ExpenseListView')
|
|
content = content.replace("path('gastos/', views.expense_list, name='expense_list')", "path('gastos/', views.ExpenseListView.as_view(), name='expense_list')")
|
|
|
|
with open('config/urls.py', 'w', encoding='utf-8') as f:
|
|
f.write(content)
|
|
|
|
if __name__ == '__main__':
|
|
refactor_views()
|
|
refactor_urls()
|
|
print("Refactorización a POO (CBV) completada para expense_list.")
|