mvp
This commit is contained in:
+50
-10
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user