This commit is contained in:
Nachou-u
2026-08-20 19:43:56 -04:00
parent 10b2270318
commit 08a26cbf2f
8 changed files with 413 additions and 80 deletions
+50 -10
View File
@@ -9,11 +9,13 @@ from django.utils import timezone
from datetime import date
from django.http import JsonResponse, HttpResponse
import json
import os
from .models import Expense, Project, Category, SystemSetting, UserProfile, AuditLog, ApprovalStatusEnum, CurrencyEnum, Vendor
from .models import Expense, Project, Category, SystemSetting, UserProfile, AuditLog, ApprovalStatusEnum, CurrencyEnum, Vendor, Document
from .forms import ExpenseForm, ProjectForm, SystemSettingForm, ResponsableForm, CategoryForm, VendorForm
from .decorators import role_required
from django.contrib.auth.models import User, Group
from .chile_regions import REGIONS_COMMUNES
def login_view(request):
if request.user.is_authenticated:
@@ -126,10 +128,11 @@ def expense_create(request):
expense.save()
receipt = request.FILES.get('receipt')
if receipt:
receipts = request.FILES.getlist('receipt')
if receipts:
from .models import Document
Document.objects.create(expense=expense, file=receipt, title=receipt.name, uploaded_by=request.user)
for f in receipts:
Document.objects.create(expense=expense, file=f, title=f.name, uploaded_by=request.user)
AuditLog.objects.create(
user=request.user,
@@ -142,7 +145,12 @@ def expense_create(request):
return redirect('expense_list')
else:
form = ExpenseForm()
return render(request, 'expenses/expense_form.html', {'form': form})
context = {
'form': form,
'regions_communes_json': json.dumps(REGIONS_COMMUNES)
}
return render(request, 'expenses/expense_form.html', context)
@login_required
@@ -172,11 +180,11 @@ def expense_edit(request, pk):
exp.save()
receipt = request.FILES.get('receipt')
if receipt:
receipts = request.FILES.getlist('receipt')
if receipts:
from .models import Document
# Optionally delete old receipt: Document.objects.filter(expense=exp).delete()
Document.objects.create(expense=exp, file=receipt, title=receipt.name, uploaded_by=request.user)
for f in receipts:
Document.objects.create(expense=exp, file=f, title=f.name, uploaded_by=request.user)
AuditLog.objects.create(
user=request.user,
@@ -192,7 +200,12 @@ def expense_edit(request, pk):
return redirect('expense_list')
else:
form = ExpenseForm(instance=expense)
return render(request, 'expenses/expense_form.html', {'form': form})
context = {
'form': form,
'regions_communes_json': json.dumps(REGIONS_COMMUNES)
}
return render(request, 'expenses/expense_form.html', context)
@login_required
@@ -592,3 +605,30 @@ def category_delete(request, pk):
category.delete()
messages.success(request, 'Categoría eliminada.')
return redirect('gestion_panel')
@login_required
def delete_document(request, pk):
if request.method == 'POST':
doc = get_object_or_404(Document, pk=pk)
# Permissions check
user_groups = request.user.groups.values_list('name', flat=True)
if not (request.user.is_superuser or 'Administrador' in user_groups or doc.expense.user == request.user):
return JsonResponse({'success': False, 'error': 'No tienes permisos para eliminar este documento.'}, status=403)
# Status check
if doc.expense.approval_status in [ApprovalStatusEnum.SOLICITADO_FINANZAS, ApprovalStatusEnum.LIBERADO_PAGADO]:
return JsonResponse({'success': False, 'error': 'No puedes eliminar evidencias de un gasto en finanzas o pagado.'}, status=400)
# Delete file
if doc.file:
try:
if os.path.exists(doc.file.path):
os.remove(doc.file.path)
except Exception:
pass
# Delete object
doc.delete()
return JsonResponse({'success': True})
return JsonResponse({'success': False, 'error': 'Método no permitido.'}, status=405)