Files
erp-efintel-2026-portainer/refactor_oop.py
T

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.")