Browse Source

Crea cuentas, apuntes y actualiza saldos

politica
Celestino Rey 1 year ago
parent
commit
aadfb3f355
12 changed files with 48 additions and 81 deletions
  1. +1
    -0
      Finanzas/finanzas/.gitignore
  2. +1
    -0
      Finanzas/finanzas/apuntes/.gitignore
  3. +1
    -1
      Finanzas/finanzas/apuntes/forms.py
  4. +11
    -2
      Finanzas/finanzas/apuntes/models.py
  5. +11
    -29
      Finanzas/finanzas/apuntes/views.py
  6. BIN
      Finanzas/finanzas/db.sqlite3
  7. +2
    -2
      Finanzas/finanzas/templates/_head.html
  8. +2
    -10
      Finanzas/finanzas/templates/apuntes/detalle_apunte.html
  9. +6
    -21
      Finanzas/finanzas/templates/apuntes/detalle_cuenta.html
  10. +1
    -1
      Finanzas/finanzas/templates/apuntes/form_cuenta.html
  11. +4
    -14
      Finanzas/finanzas/templates/apuntes/lista_apuntes.html
  12. +8
    -1
      Finanzas/finanzas/templates/apuntes/lista_cuentas.html

+ 1
- 0
Finanzas/finanzas/.gitignore View File

@ -0,0 +1 @@
db.sqlite3

+ 1
- 0
Finanzas/finanzas/apuntes/.gitignore View File

@ -0,0 +1 @@
migrations/

+ 1
- 1
Finanzas/finanzas/apuntes/forms.py View File

@ -14,7 +14,7 @@ class CuentaForm(forms.ModelForm):
widget=forms.TextInput(attrs={'class': 'form-control'}))
tipo = forms.ModelChoiceField(
queryset=Tipo.objects.all(),
widget=forms.TextInput(attrs={'class': 'form-control'}))
widget=forms.Select(attrs={'class': 'form-control'}))
class ApunteForm(forms.ModelForm):


+ 11
- 2
Finanzas/finanzas/apuntes/models.py View File

@ -3,14 +3,23 @@ from django.db import models
class Tipo(models.Model):
tipo = models.TextField(max_length=10)
def __str__(self):
return self.tipo
class Cuenta(models.Model):
nombre = models.TextField(max_length=20)
saldo_inicial = models.DecimalField(max_digits=10, decimal_places=2)
saldo_actual = models.DecimalField(max_digits=10, decimal_places=2)
saldo_inicial = models.DecimalField(max_digits=10, decimal_places=2, null=True, blank=True)
saldo_actual = models.DecimalField(max_digits=10, decimal_places=2, null=True, blank=True)
tipo = models.ForeignKey(Tipo, on_delete=models.CASCADE)
def __str__(self):
return self.nombre
class Apunte(models.Model):
fecha = models.DateField()
cta_origen = models.ForeignKey(Cuenta, on_delete=models.CASCADE, related_name='origen')
cta_destino = models.ForeignKey(Cuenta, on_delete=models.CASCADE, related_name='destino')
importe = models.DecimalField(max_digits=10, decimal_places=2)
def __str__(self):
return self.fecha

+ 11
- 29
Finanzas/finanzas/apuntes/views.py View File

@ -25,7 +25,7 @@ def lista_cuentas(request):
def detalle_cuenta(request, cuenta_id):
cuenta = get_object_or_404(Cuenta, pk=cuenta_id)
apuntes = Apunte.objects.filter(cuenta=cuenta_id)
apuntes = Apunte.objects.filter(cta_origen=cuenta_id)
return render(request, 'apuntes/detalle_cuenta.html', {'cuenta': cuenta, 'apuntes': apuntes})
@ -35,7 +35,11 @@ def nueva_cuenta(request):
if request.method == 'POST':
form = CuentaForm(request.POST, request.FILES)
if form.is_valid():
form.save()
instancia = form.save(commit=False)
instancia.saldo_actual = instancia.saldo_inicial
instancia.save()
return redirect('lista_cuentas')
else:
form = CuentaForm()
@ -78,7 +82,7 @@ def detalle_apunte(request, apunte_id):
@login_required
def nuevo_apunte(request):
cuentas = Cuenta.objects.all() # vamos a ver si hay vehículos dados de alta
cuentas = Cuenta.objects.all() # vamos a ver si hay cuentas dadas de alta
if cuentas:
if request.method == 'POST':
@ -86,33 +90,11 @@ def nuevo_apunte(request):
if form.is_valid():
instancia = form.save(commit=False)
aplica_descuento = form.cleaned_data['aplica_descuento']
if aplica_descuento:
instancia.descuento = float(instancia.importe) * 0.03
else:
instancia.descuento = 0.0
instancia.importe = float(instancia.importe) - instancia.descuento
if instancia.litros > 0:
instancia.precioxlitro = round(instancia.importe / float(instancia.litros), 2)
else:
instancia.precioxlitro = 0
# lee todos los apuntes del vehículo
# apuntes = Apunte.query.filter_by(cuenta_id=cuenta_id).all()
if Apunte.objects.filter(cuenta_id=instancia.cuenta):
apuntes = Apunte.objects.filter(cuenta_id=instancia.cuenta).order_by('-fecha')[0]
instancia.kmsrecorridos = instancia.kms - apuntes.kms
instancia.cta_origen.saldo_actual = instancia.cta_origen.saldo_actual - instancia.importe
instancia.cta_origen.save()
if instancia.kmsrecorridos > 0:
instancia.consumo = round(instancia.litros * 100 / instancia.kmsrecorridos, 2)
else:
instancia.kmsrecorridos = 0
instancia.consumo = 0
instancia.cta_destino.saldo_actual = instancia.cta_destino.saldo_actual + instancia.importe
instancia.cta_destino.save()
instancia.save()


BIN
Finanzas/finanzas/db.sqlite3 View File


+ 2
- 2
Finanzas/finanzas/templates/_head.html View File

@ -3,7 +3,7 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>Registro de vehículos y sus apuntes</title>
<title>Finanzas personales</title>
<!-- Meta -->
<meta charset="utf-8">
@ -20,4 +20,4 @@
<!-- App CSS -->
<link id="theme-style" rel="stylesheet" href="{% static 'css/portal.css' %}">
</head>
</head>

+ 2
- 10
Finanzas/finanzas/templates/apuntes/detalle_apunte.html View File

@ -10,19 +10,11 @@
<h4 class="notification-title mb-1">{{ apunte.fecha }}</h4>
<ul class="notification-meta list-inline mb-0">
<li class="list-inline-item"><a href="{% url 'detalle_cuenta' apunte.cuenta_id %}">{{ apunte.cuenta.matricula }}</a></li>
<li class="list-inline-item"><a href="{% url 'detalle_cuenta' apunte.cta_origen.id %}">{{ apunte.cta_origen.nombre }}</a></li>
<li class="list-inline-item">|</li>
<li class="list-inline-item">{{ apunte.kms }} kms</li>
<li class="list-inline-item">|</li>
<li class="list-inline-item">{{ apunte.litros }} litros</li>
<li class="list-inline-item"><a href="{% url 'detalle_cuenta' apunte.cta_destino.id %}">{{ apunte.cta_destino.nombre }}</a></li>
<li class="list-inline-item">|</li>
<li class="list-inline-item">{{ apunte.importe }} €</li>
<li class="list-inline-item">|</li>
<li class="list-inline-item">{{ apunte.kmsrecorridos }} kms. recorridos</li>
<li class="list-inline-item">|</li>
<li class="list-inline-item">{{ apunte.consumo }} litros/100 kms</li>
<li class="list-inline-item">|</li>
<li class="list-inline-item">{{ apunte.precioxlitro }} €/litros</li>
</ul>
</div><!--//col-->
</tr>


+ 6
- 21
Finanzas/finanzas/templates/apuntes/detalle_cuenta.html View File

@ -6,17 +6,10 @@
<div class="app-card-header px-4 py-3">
<div class="row g-3 align-items-center">
<div class="col-12 col-lg-auto text-center text-lg-start">
{% if cuenta.foto %}
<p><img src="{{ cuenta.foto.url }}" alt="{{ cuenta.matricula}}" style="width:200px;height:200px;"></p>
{% else %}
<p>No hay imágen disponible</p>
{% endif %}
</div>
<div class="col-12 col-lg-auto text-center text-lg-start">
<h4>{{ cuenta.matricula }}</h4>
<h4>{{ cuenta.nombre }}</h4>
<ul class="notification-meta list-inline mb-0">
<li class="list-inline-item">{{ cuenta.matricula }}</li>
<li class="list-inline-item">{{ cuenta.nombre }}</li>
</ul>
</div>
</div>
@ -28,26 +21,18 @@
<thead>
<tr>
<th class="cell">Fecha</th>
<th class="cell">Kilómetros</th>
<th class="cell">Litros</th>
<th class="cell">Origen</th>
<th class="cell">Destino</th>
<th class="cell">Importe</th>
<th class="cell">Descuento</th>
<th class="cell">Precio por litro</th>
<th class="cell">Kms recorridos</th>
<th class="cell">Consumo/100 kms</th>
</tr>
</thead>
<tbody>
{% for apunte in apuntes %}
<tr>
<td class="cell"><a href="{% url 'detalle_apunte' apunte.id %}">{{ apunte.fecha }}</a></td>
<td class="cell">{{ apunte.kms }}</td>
<td class="cell">{{ apunte.litros }}</td>
<td class="cell">{{ apunte.cta_origen }}</td>
<td class="cell">{{ apunte.cta_destino }}</td>
<td class="cell">{{ apunte.importe }}</td>
<td class="cell">{{ apunte.descuento }}</td>
<td class="cell">{{ apunte.precioxlitro }}</td>
<td class="cell">{{ apunte.kmsrecorridos }}</td>
<td class="cell">{{ apunte.consumo }}</td>
</tr>
{% endfor %}
</tbody>


+ 1
- 1
Finanzas/finanzas/templates/apuntes/form_cuenta.html View File

@ -3,7 +3,7 @@
{% block content %}
<div class="column is-4 is-offset-4">
<h3>{% if form.instance.pk %}Editar vehículo{% else %}Nuevo vehículo{% endif %}</h3>
<h3>{% if form.instance.pk %}Editar cuenta{% else %}Nueva cuenta{% endif %}</h3>
<div class="box">
<form method="POST" enctype="multipart/form-data">
{% csrf_token %}


+ 4
- 14
Finanzas/finanzas/templates/apuntes/lista_apuntes.html View File

@ -25,14 +25,9 @@
<thead>
<tr>
<th class="cell">Fecha</th>
<th class="cell">Cuenta</th>
<th class="cell">Kilómetros</th>
<th class="cell">Litros</th>
<th class="cell">Origen</th>
<th class="cell">Destino</th>
<th class="cell">Importe</th>
<th class="cell">Descuento</th>
<th class="cell">Precio por litro</th>
<th class="cell">Kms recorridos</th>
<th class="cell">Consumo/100 kms</th>
</tr>
</thead>
{% for apunte in apuntes %}
@ -40,14 +35,9 @@
<tbody>
<tr>
<td class="cell"><a href="{% url 'detalle_apunte' apunte.id %}">{{ apunte.fecha }}</a></td>
<td class="cell"><a href="{% url 'detalle_cuenta' apunte.cuenta.id %}">{{ apunte.cuenta.matricula }}</a></td>
<td class="cell">{{ apunte.kms }}</td>
<td class="cell">{{ apunte.litros }}</td>
<td class="cell"><a href="{% url 'detalle_cuenta' apunte.cta_origen.id %}">{{ apunte.cta_origen.nombre }}</a></td>
<td class="cell"><a href="{% url 'detalle_cuenta' apunte.cta_destino.id %}">{{ apunte.cta_destino.nombre }}</a></td>
<td class="cell">{{ apunte.importe }} €</td>
<td class="cell">{{ apunte.descuento }} €</td>
<td class="cell">{{ apunte.precioxlitro }} €</td>
<td class="cell">{{ apunte.kmsrecorridos }}</td>
<td class="cell">{{ apunte.consumo }}</td>
</tr>
</tbody>
{% endfor %}


+ 8
- 1
Finanzas/finanzas/templates/apuntes/lista_cuentas.html View File

@ -23,7 +23,14 @@
<div class="col-6 col-md-4 col-xl-3 col-xxl-2">
<div class="app-card app-card-doc shadow-sm h-100">
<div class="app-card-body p-3 has-card-actions">
<h4 class="app-doc-title truncate mb-0"><a href="{% url 'detalle_cuenta' cuenta.id %}">{{ cuenta.matricula}}</a></h4>
<h4 class="app-doc-title truncate mb-0"><a href="{% url 'detalle_cuenta' cuenta.id %}">{{ cuenta.nombre}}</a></h4>
<div class="app-doc-meta">
<ul class="list-unstyled mb-0">
<li><span class="text-muted">Saldo inicial: </span><a href="{% url 'detalle_cuenta' cuenta.id %}">{{ cuenta.saldo_inicial }}</a></li>
<li><span class="text-muted">Saldo actual: </span><a href="{% url 'detalle_cuenta' cuenta.id %}">{{ cuenta.saldo_actual }}</a></li>
</ul>
</div><!--//app-doc-meta-->
<div class="app-card-actions">
<div class="dropdown">


Loading…
Cancel
Save