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()
|
|
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 datos_por_tipo_cuenta(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/nuevo_grafico.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)
|