Skip to content

Commit 44edc95

Browse files
Fix COHIV-147; add fonts to docker image
1 parent 7c19932 commit 44edc95

6 files changed

Lines changed: 62 additions & 24 deletions

File tree

django/Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ ENV PYTHONDONTWRITEBYTECODE=1 \
3535
# Install runtime dependencies
3636
# mariadb-client-compat
3737
RUN apt-get update && \
38-
apt-get install -y --no-install-recommends xmlsec1 libreoffice-writer-nogui mariadb-client locales && \
38+
apt-get install -y --no-install-recommends xmlsec1 libreoffice-writer-nogui mariadb-client locales fonts-lato fonts-liberation && \
3939
apt-get clean && \
4040
rm -rf /var/lib/apt/lists/*
4141

django/geno/api_views.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,10 +69,12 @@ class RentalUnitViewSet(viewsets.ReadOnlyModelViewSet):
6969

7070
class ContractViewSet(viewsets.ReadOnlyModelViewSet):
7171
"""
72-
API endpoint that allows active contracts to be viewed.
72+
API endpoint that allows active contracts to be viewed (excluding subcontracts).
7373
"""
7474

75-
queryset = Contract.objects.filter(state__in=("unterzeichnet", "gekuendigt"))
75+
queryset = Contract.objects.filter(state__in=("unterzeichnet", "gekuendigt")).filter(
76+
main_contract=None
77+
)
7678
serializer_class = ContractSerializer
7779
# permission_classes = [permissions.IsAuthenticated]
7880

django/geno/billing.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ def create_invoices(
8383
elif download_only:
8484
contracts = Contract.objects.filter(id=download_only)
8585
else:
86-
contracts = Contract.objects.filter(state="unterzeichnet")
86+
contracts = Contract.objects.filter(state="unterzeichnet").filter(main_contract=None)
8787

8888
if building_ids:
8989
contracts = contracts.filter(rental_units__building__in=building_ids).distinct()

django/geno/models.py

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1524,27 +1524,29 @@ def list_rental_units(self, short=False, exclude_minor=False, as_list=False):
15241524

15251525
def get_object_actions(self):
15261526
actions = []
1527-
actions.append(
1528-
(
1529-
"/geno/invoice/download/contract/%s/" % (self.pk),
1530-
"Mietzinsrechnung herunterladen, aktueller Monat",
1531-
"Es wird nur das PDF erzeugt, nicht gebucht!",
1527+
if not self.main_contract:
1528+
# No invoices for sub-contracts
1529+
actions.append(
1530+
(
1531+
"/geno/invoice/download/contract/%s/" % (self.pk),
1532+
"Mietzinsrechnung herunterladen, aktueller Monat",
1533+
"Es wird nur das PDF erzeugt, nicht gebucht!",
1534+
)
15321535
)
1533-
)
1534-
actions.append(
1535-
(
1536-
"/geno/invoice/download/contract/%s/?date=last_month" % (self.pk),
1537-
"Mietzinsrechnung herunterladen, letzter Monat",
1538-
"Es wird nur das PDF erzeugt, nicht gebucht!",
1536+
actions.append(
1537+
(
1538+
"/geno/invoice/download/contract/%s/?date=last_month" % (self.pk),
1539+
"Mietzinsrechnung herunterladen, letzter Monat",
1540+
"Es wird nur das PDF erzeugt, nicht gebucht!",
1541+
)
15391542
)
1540-
)
1541-
actions.append(
1542-
(
1543-
"/geno/invoice/download/contract/%s/?date=next_month" % (self.pk),
1544-
"Mietzinsrechnung herunterladen, nächster Monat",
1545-
"Es wird nur das PDF erzeugt, nicht gebucht!",
1543+
actions.append(
1544+
(
1545+
"/geno/invoice/download/contract/%s/?date=next_month" % (self.pk),
1546+
"Mietzinsrechnung herunterladen, nächster Monat",
1547+
"Es wird nur das PDF erzeugt, nicht gebucht!",
1548+
)
15461549
)
1547-
)
15481550
for dt in DocumentType.objects.filter(active=True).filter(name__startswith="contract"):
15491551
actions.append(
15501552
(

django/geno/tests/test_api_views.py

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
11
import datetime
2+
import json
23
from unittest.mock import patch
34

5+
from django.contrib.auth import get_user_model
46
from django.http import FileResponse
57
from django.test import tag
6-
from rest_framework.test import APIRequestFactory
8+
from django.urls import reverse
9+
from rest_framework.test import APIRequestFactory, force_authenticate
710

811
import geno.tests.data as geno_testdata
912
from finance.accounting import Account, AccountingManager, AccountKey
10-
from geno.api_views import Akonto, QRBill
13+
from geno.api_views import Akonto, ContractViewSet, QRBill
1114
from geno.billing import get_income_account, get_receivables_account
1215
from geno.models import Contract, Invoice, InvoiceCategory
1316

@@ -319,3 +322,25 @@ def test_get_akonto_qrbill(self):
319322
],
320323
)
321324
pdf_file.file_to_stream.close()
325+
326+
327+
class ContractViewSetTest(GenoAdminTestCase):
328+
@classmethod
329+
def setUpTestData(cls):
330+
super().setUpTestData()
331+
geno_testdata.create_contracts(cls)
332+
User = get_user_model()
333+
cls.user = User.objects.get(username="superuser")
334+
335+
def test_subcontracts_are_excluded_in_api_view(self):
336+
Contract.objects.create(
337+
state="unterzeichnet", date=datetime.date(2020, 1, 1), main_contract=self.contracts[0]
338+
)
339+
factory = APIRequestFactory()
340+
view = ContractViewSet.as_view({"get": "list"})
341+
request = factory.get(reverse("contract-list"))
342+
force_authenticate(request, user=self.user)
343+
response = view(request)
344+
self.assertEqual(response.status_code, 200)
345+
data = json.loads(response.render().content)
346+
self.assertEqual(data["count"], 1)

django/geno/tests/test_billing.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,15 @@ def test_create_invoices_return_string(self, mock_monthly_invoices):
7373
self.assertEqual(mock_monthly_invoices.call_count, 1)
7474
self.assertEqual(ret, "String")
7575

76+
@patch("geno.billing.create_monthly_invoices", return_value=(2, [], [], []))
77+
def test_create_invoices_exclude_subcontracts(self, mock_monthly_invoices):
78+
Contract.objects.create(
79+
date=datetime.date(2001, 1, 1), state="unterzeichnet", main_contract=self.contracts[0]
80+
)
81+
ret = geno.billing.create_invoices()
82+
self.assertEqual(mock_monthly_invoices.call_count, 1)
83+
self.assertEqual(ret[-1]["info"], "2 Rechnungen für 1 Vertrag")
84+
7685
def test_create_invoices_empty_contract_count(self):
7786
messages = geno.billing.create_invoices(reference_date=datetime.date(2001, 6, 1))
7887
self.assertEqual(messages[-1]["info"], "3 Rechnungen für 1 Vertrag")

0 commit comments

Comments
 (0)