Skip to content

Commit e5525cd

Browse files
committed
🎨 [#103] made number_generator to util func
1 parent 7d10fe5 commit e5525cd

File tree

7 files changed

+53
-51
lines changed

7 files changed

+53
-51
lines changed

src/openklant/components/klantinteracties/api/tests/test_internetaken.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,8 @@ def test_create_internetaak(self):
9494
response_data = response.json()
9595
self.assertEqual(
9696
response_data["detail"],
97-
"Nummer mag maximaal 10 characters bevatten.",
97+
"Er kon niet automatisch een opvolgend nummer worden gegenereerd. "
98+
"Het maximaal aantal tekens is bereikt.",
9899
)
99100

100101
def test_update_internetaak(self):

src/openklant/components/klantinteracties/api/tests/test_klantcontacten.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,8 @@ def test_create_klantcontact(self):
113113
response_data = response.json()
114114
self.assertEqual(
115115
response_data["detail"],
116-
"Nummer mag maximaal 10 characters bevatten.",
116+
"Er kon niet automatisch een opvolgend nummer worden gegenereerd. "
117+
"Het maximaal aantal tekens is bereikt.",
117118
)
118119

119120
def test_create_klantcontact_with_reverse_lookup_fields(self):

src/openklant/components/klantinteracties/api/tests/test_partijen.py

+20-19
Original file line numberDiff line numberDiff line change
@@ -125,24 +125,6 @@ def test_create_partij(self):
125125
},
126126
)
127127

128-
with self.subTest("voorkeurs_adres_must_be_given_digitaal_adres_validation"):
129-
data["nummer"] = "1298329192"
130-
data["voorkeursDigitaalAdres"] = {"uuid": str(digitaal_adres2.uuid)}
131-
response = self.client.post(list_url, data)
132-
133-
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
134-
response_data = response.json()
135-
self.assertEqual(
136-
response_data["invalidParams"],
137-
[
138-
{
139-
"name": "voorkeursDigitaalAdres",
140-
"code": "invalid",
141-
"reason": "Het voorkeurs adres moet een gelinkte digitaal adres zijn.",
142-
}
143-
],
144-
)
145-
146128
with self.subTest("create_partij_without_foreignkey_relations"):
147129
data["nummer"] = "1298329192"
148130
data["digitaleAdressen"] = []
@@ -224,7 +206,26 @@ def test_create_partij(self):
224206
response_data = response.json()
225207
self.assertEqual(
226208
response_data["detail"],
227-
"Nummer mag maximaal 10 characters bevatten.",
209+
"Er kon niet automatisch een opvolgend nummer worden gegenereerd. "
210+
"Het maximaal aantal tekens is bereikt.",
211+
)
212+
213+
with self.subTest("voorkeurs_adres_must_be_given_digitaal_adres_validation"):
214+
data["nummer"] = "1298329194"
215+
data["voorkeursDigitaalAdres"] = {"uuid": str(digitaal_adres2.uuid)}
216+
response = self.client.post(list_url, data)
217+
218+
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
219+
response_data = response.json()
220+
self.assertEqual(
221+
response_data["invalidParams"],
222+
[
223+
{
224+
"name": "voorkeursDigitaalAdres",
225+
"code": "invalid",
226+
"reason": "Het voorkeurs adres moet een gelinkte digitaal adres zijn.",
227+
}
228+
],
228229
)
229230

230231
def test_create_persoon(self):

src/openklant/components/klantinteracties/models/internetaken.py

+2-10
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
from django.db import models
55
from django.utils.translation import gettext_lazy as _
66

7-
from vng_api_common.exceptions import Conflict
7+
from openklant.components.utils.number_generator import number_generator
88

99
from .actoren import Actor
1010
from .constants import Taakstatus
@@ -77,13 +77,5 @@ class Meta:
7777
verbose_name_plural = _("interne taken")
7878

7979
def save(self, *args, **kwargs):
80-
if not self.nummer:
81-
max_nummer = (
82-
int(InterneTaak.objects.aggregate(models.Max("nummer"))["nummer__max"])
83-
or 0
84-
)
85-
self.nummer = str(max_nummer + 1).rjust(10, "0")
86-
if len(self.nummer) > 10:
87-
raise Conflict(_("Nummer mag maximaal 10 characters bevatten."))
88-
80+
number_generator(self, InterneTaak)
8981
return super().save(*args, **kwargs)

src/openklant/components/klantinteracties/models/klantcontacten.py

+2-11
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,8 @@
55
from django.utils import timezone
66
from django.utils.translation import gettext_lazy as _
77

8-
from vng_api_common.exceptions import Conflict
9-
108
from openklant.components.utils.mixins import APIMixin
9+
from openklant.components.utils.number_generator import number_generator
1110

1211
from .actoren import Actor
1312
from .constants import Klantcontrol
@@ -105,15 +104,7 @@ class Meta:
105104
verbose_name_plural = _("klantcontacten")
106105

107106
def save(self, *args, **kwargs):
108-
if not self.nummer:
109-
max_nummer = (
110-
int(Klantcontact.objects.aggregate(models.Max("nummer"))["nummer__max"])
111-
or 0
112-
)
113-
self.nummer = str(max_nummer + 1).rjust(10, "0")
114-
if len(self.nummer) > 10:
115-
raise Conflict(_("Nummer mag maximaal 10 characters bevatten."))
116-
107+
number_generator(self, Klantcontact)
117108
return super().save(*args, **kwargs)
118109

119110
def __str__(self):

src/openklant/components/klantinteracties/models/partijen.py

+2-9
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@
66
from django.utils.translation import gettext_lazy as _
77

88
from vng_api_common.descriptors import GegevensGroepType
9-
from vng_api_common.exceptions import Conflict
109

1110
from openklant.components.utils.mixins import APIMixin
11+
from openklant.components.utils.number_generator import number_generator
1212

1313
from .constants import SoortPartij
1414
from .mixins import BezoekadresMixin, ContactnaamMixin, CorrespondentieadresMixin
@@ -102,14 +102,7 @@ def clean(self):
102102
)
103103

104104
def save(self, *args, **kwargs):
105-
if not self.nummer:
106-
max_nummer = (
107-
int(Partij.objects.aggregate(models.Max("nummer"))["nummer__max"]) or 0
108-
)
109-
self.nummer = str(max_nummer + 1).rjust(10, "0")
110-
if len(self.nummer) > 10:
111-
raise Conflict(_("Nummer mag maximaal 10 characters bevatten."))
112-
105+
number_generator(self, Partij)
113106
return super().save(*args, **kwargs)
114107

115108

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
from django.db.models import BigIntegerField, Max, Model
2+
from django.db.models.functions import Cast
3+
from django.utils.translation import gettext_lazy as _
4+
5+
from vng_api_common.exceptions import Conflict
6+
7+
8+
def number_generator(self, model: Model) -> None:
9+
if not self.nummer:
10+
max_nummer = (
11+
model.objects.annotate(
12+
nummer_int=Cast("nummer", output_field=BigIntegerField())
13+
).aggregate(Max("nummer_int"))["nummer_int__max"]
14+
or 0
15+
)
16+
self.nummer = str(max_nummer + 1).rjust(10, "0")
17+
if len(self.nummer) > 10:
18+
raise Conflict(
19+
_(
20+
"Er kon niet automatisch een opvolgend nummer worden gegenereerd. "
21+
"Het maximaal aantal tekens is bereikt."
22+
)
23+
)

0 commit comments

Comments
 (0)