-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
18 changed files
with
821 additions
and
215 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
from django.contrib import admin | ||
|
||
from open_producten.logging.admin_tools import AuditLogInlineformset | ||
from open_producten.producten.models import Eigenaar | ||
|
||
|
||
class EigenaarInline(admin.TabularInline): | ||
formset = AuditLogInlineformset | ||
model = Eigenaar | ||
extra = 1 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
100 changes: 100 additions & 0 deletions
100
...pen_producten/producten/migrations/0005_remove_product_bsn_remove_product_kvk_eigenaar.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,100 @@ | ||
# Generated by Django 4.2.17 on 2025-03-05 16:43 | ||
|
||
import django.core.validators | ||
from django.db import migrations, models | ||
import django.db.models.deletion | ||
import open_producten.producten.models.validators | ||
import uuid | ||
|
||
|
||
class Migration(migrations.Migration): | ||
|
||
dependencies = [ | ||
("producten", "0004_product_frequentie_product_prijs"), | ||
] | ||
|
||
operations = [ | ||
migrations.RemoveField( | ||
model_name="product", | ||
name="bsn", | ||
), | ||
migrations.RemoveField( | ||
model_name="product", | ||
name="kvk", | ||
), | ||
migrations.CreateModel( | ||
name="Eigenaar", | ||
fields=[ | ||
( | ||
"id", | ||
models.UUIDField( | ||
default=uuid.uuid4, | ||
editable=False, | ||
primary_key=True, | ||
serialize=False, | ||
), | ||
), | ||
( | ||
"bsn_nummer", | ||
models.CharField( | ||
blank=True, | ||
help_text="De BSN van de product eigenaar, BSN van 8 karakters moet met een extra 0 beginnen.", | ||
null=True, | ||
validators=[ | ||
open_producten.producten.models.validators.validate_bsn | ||
], | ||
verbose_name="BSN nummer", | ||
), | ||
), | ||
( | ||
"kvk_nummer", | ||
models.CharField( | ||
blank=True, | ||
help_text="Het kvk nummer van de product eigenaar", | ||
max_length=8, | ||
null=True, | ||
validators=[ | ||
django.core.validators.MinLengthValidator(8), | ||
django.core.validators.RegexValidator("^[0-9]*$"), | ||
], | ||
verbose_name="KVK nummer", | ||
), | ||
), | ||
( | ||
"vestigingsnummer", | ||
models.CharField( | ||
blank=True, | ||
help_text="Een korte unieke aanduiding van een vestiging.", | ||
max_length=24, | ||
null=True, | ||
verbose_name="Vestigingsnummer", | ||
), | ||
), | ||
( | ||
"klantnummer", | ||
models.CharField( | ||
blank=True, | ||
help_text="Uniek identificerend nummer dat tijdens communicatie tussen mensen kan worden gebruikt om het specifieke klantcontact aan te duiden.", | ||
max_length=10, | ||
null=True, | ||
validators=[django.core.validators.validate_integer], | ||
verbose_name="Klantnummer", | ||
), | ||
), | ||
( | ||
"product", | ||
models.ForeignKey( | ||
help_text="De organisatie van het contact", | ||
on_delete=django.db.models.deletion.CASCADE, | ||
related_name="eigenaren", | ||
to="producten.product", | ||
verbose_name="product", | ||
), | ||
), | ||
], | ||
options={ | ||
"verbose_name": "Eigenaar", | ||
"verbose_name_plural": "Eigenaren", | ||
}, | ||
), | ||
] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,4 @@ | ||
from .eigenaar import Eigenaar | ||
from .product import Product | ||
|
||
__all__ = ["Product"] | ||
__all__ = ["Product", "Eigenaar"] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,101 @@ | ||
from django.core.exceptions import ValidationError | ||
from django.core.validators import MinLengthValidator, RegexValidator, validate_integer | ||
from django.db import models | ||
from django.utils.translation import gettext_lazy as _ | ||
|
||
from open_producten.producten.models.validators import validate_bsn | ||
from open_producten.utils.models import BaseModel | ||
|
||
from .product import Product | ||
|
||
|
||
class Eigenaar(BaseModel): | ||
|
||
product = models.ForeignKey( | ||
Product, | ||
verbose_name=_("product"), | ||
related_name="eigenaren", | ||
on_delete=models.CASCADE, | ||
help_text=_("De organisatie van het contact"), | ||
) | ||
|
||
bsn_nummer = models.CharField( | ||
_("BSN nummer"), | ||
help_text=_( | ||
"De BSN van de product eigenaar, BSN van 8 karakters moet met een extra 0 beginnen." | ||
), | ||
validators=[validate_bsn], | ||
null=True, | ||
blank=True, | ||
) | ||
|
||
kvk_nummer = models.CharField( | ||
_("KVK nummer"), | ||
help_text=_("Het kvk nummer van de product eigenaar"), | ||
max_length=8, | ||
validators=[MinLengthValidator(8), RegexValidator("^[0-9]*$")], | ||
null=True, | ||
blank=True, | ||
) | ||
|
||
vestigingsnummer = models.CharField( | ||
_("Vestigingsnummer"), | ||
max_length=24, | ||
null=True, | ||
blank=True, | ||
help_text=_("Een korte unieke aanduiding van een vestiging."), | ||
) | ||
|
||
klantnummer = models.CharField( | ||
_("Klantnummer"), | ||
help_text=_( | ||
"Uniek identificerend nummer dat tijdens communicatie tussen mensen kan " | ||
"worden gebruikt om het specifieke klantcontact aan te duiden." | ||
), | ||
validators=[validate_integer], | ||
max_length=10, | ||
null=True, | ||
blank=True, | ||
) | ||
|
||
def clean(self): | ||
validate_vestingsnummer_only_with_kvk(self.kvk_nummer, self.vestigingsnummer) | ||
validate_bsn_kvk_or_klant(self.bsn_nummer, self.kvk_nummer, self.klantnummer) | ||
|
||
def __str__(self): | ||
if self.bsn_nummer: | ||
return f"BSN {self.bsn_nummer}" | ||
|
||
if self.klantnummer: | ||
return f"klantnummer {self.klantnummer}" | ||
|
||
if self.kvk_nummer: | ||
return f"KVK {self.kvk_nummer}" + ( | ||
f" vestigingsnummer {self.vestigingsnummer}" | ||
if self.vestigingsnummer | ||
else "" | ||
) | ||
|
||
class Meta: | ||
verbose_name = _("Eigenaar") | ||
verbose_name_plural = _("Eigenaren") | ||
|
||
|
||
def validate_bsn_kvk_or_klant(bsn_nummer, kvk_nummer, klantnummer): | ||
if not bsn_nummer and not kvk_nummer and not klantnummer: | ||
raise ValidationError( | ||
_( | ||
"Een eigenaar moet een bsn, klantnummer, kvk nummer (met of zonder vestigingsnummer) of een combinatie hebben." | ||
) | ||
) | ||
|
||
|
||
def validate_vestingsnummer_only_with_kvk(kvk_nummer, vestigingsnummer): | ||
if vestigingsnummer and not kvk_nummer: | ||
raise ValidationError( | ||
{ | ||
"vestigingsnummer": _( | ||
"Een vestigingsnummer kan alleen in combinatie met een kvk nummer worden ingevuld." | ||
) | ||
} | ||
) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
from rest_framework import serializers | ||
|
||
from open_producten.producten.models import Eigenaar | ||
from open_producten.producten.serializers.validators import ( | ||
EigenaarIdentifierValidator, | ||
EigenaarVestigingsnummerValidator, | ||
) | ||
|
||
|
||
class EigenaarSerializer(serializers.ModelSerializer): | ||
id = serializers.UUIDField(required=False) | ||
|
||
class Meta: | ||
model = Eigenaar | ||
fields = ["id", "bsn_nummer", "kvk_nummer", "vestigingsnummer", "klantnummer"] | ||
validators = [ | ||
EigenaarIdentifierValidator(), | ||
EigenaarVestigingsnummerValidator(), | ||
] |
Oops, something went wrong.