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 import json @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() tipos = Tipo.objects.prefetch_related('cuenta_set').all() return render(request, 'apuntes/lista_cuentas.html', {'tipos': tipos, '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 grafico_de_bancos(request): debancos = Cuenta.objects.filter(tipo=Tipo.objects.get(tipo="Banco")) etiquetas = [] bancos = [] ahorro = [] for cuenta in debancos: etiqueta = f"{cuenta.nombre}" if etiqueta not in etiquetas: etiquetas.append(etiqueta) bancos.append(float(cuenta.saldo_actual)) ahorro.append(0) print("Etiqueta: ", etiquetas, " --- ", bancos) deahorro = Cuenta.objects.filter(tipo=Tipo.objects.get(tipo="Ahorro")) for cuenta in deahorro: etiqueta = f"{cuenta.nombre}" if etiqueta not in etiquetas: etiquetas.append(etiqueta) ahorro.append(float(cuenta.saldo_actual)) bancos.append(0) print("Etiqueta: ", etiquetas, " --- ", ahorro) context = { 'bancos': bancos, 'etiquetas_json': json.dumps(etiquetas), 'bancos_datos_json': json.dumps(bancos), 'ahorro_datos_json': json.dumps(ahorro), } print("Context: ", context['etiquetas_json']) return render(request, 'apuntes/grafico_de_bancos.html', context) @login_required def grafico_de_gastos(request): degastos = Cuenta.objects.filter(tipo=Tipo.objects.get(tipo="Gasto")) etiquetas = [] gastos = [] for cuenta in degastos: etiqueta = f"{cuenta.nombre}" if etiqueta not in etiquetas: etiquetas.append(etiqueta) gastos.append(float(cuenta.saldo_actual)) context = { 'gastos': gastos, 'etiquetas_json': json.dumps(etiquetas), 'gastos_datos_json': json.dumps(gastos), } return render(request, 'apuntes/grafico_de_gastos.html', context)