diff --git a/schoolapps/fibu/models.py b/schoolapps/fibu/models.py index 4dba09ba4ded93838d5e36ccea9c33eb77fde453..0cfab05a8c482df1ce6a5a4e6b19d1686ab186fd 100644 --- a/schoolapps/fibu/models.py +++ b/schoolapps/fibu/models.py @@ -42,9 +42,12 @@ class Costcenter(models.Model): class Account(models.Model): # Buchungskonten, z.B. Fachschaften, Sekretariat, Schulleiter, Kopieren, Tafelnutzung - name = models.CharField(max_length=20, default='') - costcenter = models.ForeignKey(to=Costcenter, on_delete=models.CASCADE, default='') - budget = models.DecimalField(max_digits=9, decimal_places=2, default=0.00) + name = models.CharField(max_length=20, default='') + costcenter = models.ForeignKey(to=Costcenter, on_delete=models.CASCADE, default='') + budget = models.DecimalField(max_digits=9, decimal_places=2, default=0.00) + saldo = models.DecimalField(max_digits=9, decimal_places=2, default=0.00) + rest = models.DecimalField(max_digits=9, decimal_places=2, default=0.00) + def __str__(self): return "%s: %s" % (self.costcenter, self.name) diff --git a/schoolapps/fibu/templates/fibu/account/final.html b/schoolapps/fibu/templates/fibu/account/final.html new file mode 100755 index 0000000000000000000000000000000000000000..e882c4a73c038888319a4b563f2b38ffb04b9745 --- /dev/null +++ b/schoolapps/fibu/templates/fibu/account/final.html @@ -0,0 +1,34 @@ +{% include 'partials/header.html' %} +{% load material_form %} + +<main> + + {% block content %} + + <h4>Schlussrechnung</h4> + + <div class="collection"> + {% for costcenter, accounts in costcenter_accounts.items %} + <h5 class="collection-item">{{ costcenter }}</h5> + + <div class="collection"> + <div class="collection-item row"> + <span class="col s4 m4 ">Buchungskonto</span> + <span class="col s2 m2 right-align">zugeteiltes Budget</span> + <span class="col s2 m2 right-align">bisherige Ausgaben</span> + <span class="col s2 m2 right-align">verfügbare Reste</span> + </div> + {% for account in accounts %} + <div class="collection-item row"> + <span class="col s4 m4">{{ account.name }}</span> + <span class="col s2 m2 right-align">{{ account.budget }}</span> + <span class="col s2 m2 right-align">{{ account.saldo }}</span> + <span class="col s2 m2 right-align">{{ account.rest }}</span> + </div> + {% endfor %} + </div> + {% endfor %} + </div> + {% endblock %} +</main> +{% include 'partials/footer.html' %} diff --git a/schoolapps/fibu/urls.py b/schoolapps/fibu/urls.py index 99f66ef49245e378fecf2df574c873aaf098a71e..2322c06c464a5a94539ba385e7f07bc754c21897 100755 --- a/schoolapps/fibu/urls.py +++ b/schoolapps/fibu/urls.py @@ -12,6 +12,7 @@ urlpatterns = [ path('costcenter/edit/<int:id>', views.costcenter_edit, name='costcenter_edit'), path('account', views.account, name='account'), path('account/edit/<int:id>', views.account_edit, name='account_edit'), + path('account/final', views.final_account, name='final_account'), # path('make_booking', views.make_booking, name='fibu_make_booking'), # path('edit/<int:id>', views.edit, name='booking_edit'), ] diff --git a/schoolapps/fibu/views.py b/schoolapps/fibu/views.py index 2497fc07709ccce283555e35af9c01d8f325e45c..c0b6634db03b6961ab4d04c55440c631d41de94d 100644 --- a/schoolapps/fibu/views.py +++ b/schoolapps/fibu/views.py @@ -1,4 +1,5 @@ from django.contrib.auth.decorators import login_required, permission_required +from django.db.models import Sum from django.urls import reverse from django.shortcuts import render, redirect, get_object_or_404 from .models import Booking, Costcenter, Account @@ -257,3 +258,25 @@ def account_edit(request, id): context = {'form': form} return render(request, template, context) + +@login_required +#@permission_required('fibu.view_booking') +def final_account(request): + costcenterlist = Costcenter.objects.filter() + costcenter_accounts = {} + account_rests = {} + for costcenter in costcenterlist: + accounts = Account.objects.filter(costcenter=costcenter) + # update saldo + for account in accounts: + saldo = Booking.objects.filter(account=account).aggregate(Sum('amount')) + saldo = saldo['amount__sum'] + rest = account.budget - saldo + try: + Account.objects.filter(id=account.id).update(saldo=saldo, rest=rest) + except: + Account.objects.filter(id=account.id).update(saldo=0, rest=0) + + costcenter_accounts[costcenter.name] = list(Account.objects.filter(costcenter=costcenter)) + context = {'costcenter_accounts': costcenter_accounts, 'account_rests': account_rests} + return render(request, 'fibu/account/final.html', context) diff --git a/schoolapps/templates/partials/header.html b/schoolapps/templates/partials/header.html index 96d3dc838b6e3f54c283fee018bb100e191f1a9c..40b053fbf8bdf81eaa855724fbe8708481af8a97 100755 --- a/schoolapps/templates/partials/header.html +++ b/schoolapps/templates/partials/header.html @@ -196,6 +196,9 @@ <li class="url-account"> <a href="{% url 'account' %}"><i class="material-icons">done</i>Buchungskonten</a> </li> + <li class="url-accountindex"> + <a href="{% url 'final_account' %}"><i class="material-icons">done</i>Schlussrechnung</a> + </li> </ul> </div> </li>