from django.contrib.auth.decorators import login_required from django.shortcuts import render, get_object_or_404, redirect from django.http import JsonResponse # Create your views here. from .models import Cuenta, Apunte, Tipo from .forms import CuentaForm, ApunteForm @login_required def principal(request): cuentas = Cuenta.objects.all() apuntes = Apunte.objects.all() tipos = Tipo.objects.prefetch_related('cuenta_set').all() return render(request, 'apuntes/index.html', {'tipos': tipos, 'cuentas': cuentas, 'apuntes': apuntes}) # Vistas para los cuentas @login_required def lista_cuentas(request): cuentas = Cuenta.objects.all() return render(request, 'apuntes/lista_cuentas.html', {'cuentas': cuentas}) @login_required def detalle_cuenta(request, cuenta_id): cuenta = get_object_or_404(Cuenta, pk=cuenta_id) apuntes = Apunte.objects.filter(cta_origen=cuenta_id) | Apunte.objects.filter(cta_destino=cuenta_id) return render(request, 'apuntes/detalle_cuenta.html', {'cuenta': cuenta, 'apuntes': apuntes}) @login_required def nueva_cuenta(request): if request.method == 'POST': form = CuentaForm(request.POST, request.FILES) if form.is_valid(): instancia = form.save(commit=False) instancia.saldo_actual = instancia.saldo_inicial instancia.save() return redirect('lista_cuentas') else: form = CuentaForm() return render(request, 'apuntes/form_cuenta.html', {'form': form}) @login_required def editar_cuenta(request, cuenta_id): cuenta = get_object_or_404(Cuenta, pk=cuenta_id) if request.method == 'POST': form = CuentaForm(request.POST, request.FILES, instance=cuenta) if form.is_valid(): form.save() return redirect('lista_cuentas') else: form = CuentaForm(instance=cuenta) return render(request, 'apuntes/form_cuenta.html', {'form': form}) @login_required def eliminar_cuenta(request, cuenta_id): cuenta = get_object_or_404(Cuenta, pk=cuenta_id) cuenta.delete() return redirect('lista_cuentas') # Vistas para los apuntes @login_required def lista_apuntes(request): apuntes = Apunte.objects.all() return render(request, 'apuntes/lista_apuntes.html', {'apuntes': apuntes}) @login_required def detalle_apunte(request, apunte_id): apunte = get_object_or_404(Apunte, pk=apunte_id) return render(request, 'apuntes/detalle_apunte.html', {'apunte': apunte}) @login_required def nuevo_apunte(request): cuentas = Cuenta.objects.all() # vamos a ver si hay cuentas dadas de alta if cuentas: if request.method == 'POST': form = ApunteForm(request.POST, request.FILES) if form.is_valid(): instancia = form.save(commit=False) instancia.cta_origen.saldo_actual = instancia.cta_origen.saldo_actual - instancia.importe instancia.cta_origen.save() instancia.cta_destino.saldo_actual = instancia.cta_destino.saldo_actual + instancia.importe instancia.cta_destino.save() instancia.save() return redirect('lista_apuntes') else: form = ApunteForm() return render(request, 'apuntes/form_apunte.html', {'form': form}) else: return render(request, 'apuntes/index.html') @login_required def editar_apunte(request, apunte_id): apunte = get_object_or_404(Apunte, pk=apunte_id) if request.method == 'POST': form = ApunteForm(request.POST, request.FILES, instance=apunte) if form.is_valid(): form.save() return redirect('lista_apuntes') else: form = ApunteForm(instance=apunte) return render(request, 'apuntes/form_apunte.html', {'form': form}) @login_required def eliminar_apunte(request, apunte_id): apunte = Apunte.objects.get(pk=apunte_id) apunte.delete() return redirect('lista_apuntes') @login_required def chart_data(request): datos = Cuenta.objects.all() etiquetas = [item.nombre for item in datos] valores = [item.saldo_actual for item in datos] chart_data = { 'label': 'Gráfico', 'labels': etiquetas, 'values': valores, 'chart_type': 'bar' # any chart type line, bar, ects } return JsonResponse(chart_data) def chart_view(request): return render(request, 'apuntes/chart.html')