57 lines
1.9 KiB
Python
57 lines
1.9 KiB
Python
from django.db import models
|
|
from django.core.exceptions import ValidationError
|
|
from django.utils.translation import gettext_lazy as _
|
|
|
|
from api.core.models.trackable_model import TrackableModel
|
|
|
|
|
|
class ProspectContactMethod(TrackableModel):
|
|
prospect = models.ForeignKey(
|
|
"Prospect",
|
|
verbose_name=_("prospect"),
|
|
null=True,
|
|
blank=True,
|
|
on_delete=models.PROTECT,
|
|
)
|
|
contact_person = models.ForeignKey(
|
|
"ContactPerson",
|
|
verbose_name=_("contact"),
|
|
null=True,
|
|
blank=True,
|
|
on_delete=models.PROTECT,
|
|
)
|
|
contact_method = models.ForeignKey(
|
|
"ContactMethod", verbose_name=_("moyen de contact"), on_delete=models.PROTECT
|
|
)
|
|
label = models.CharField(verbose_name=_("label"), max_length=100, blank=True)
|
|
value = models.CharField(verbose_name=_("valeur"), max_length=255)
|
|
preferred = models.BooleanField(default=False)
|
|
|
|
def clean(self):
|
|
super().clean()
|
|
if bool(self.prospect) == bool(self.contact_person):
|
|
raise ValidationError(
|
|
_("Renseigne soit un prospect soit un contact (exactement un).")
|
|
)
|
|
|
|
def save(self, *args, **kwargs):
|
|
"""Validation before saving"""
|
|
self.full_clean()
|
|
super().save(*args, **kwargs)
|
|
|
|
class Meta:
|
|
verbose_name = _("Moyen de contact")
|
|
verbose_name_plural = _("Moyens de contact")
|
|
constraints = [
|
|
models.CheckConstraint(
|
|
name="%(app_label)s_%(class)s_exactly_one_owner",
|
|
condition=(
|
|
models.Q(prospect__isnull=False, contact_person__isnull=True)
|
|
| models.Q(prospect__isnull=True, contact_person__isnull=False)
|
|
),
|
|
violation_error_message=_(
|
|
"Un moyen de contact doit être lié soit à un prospect, soit à un contact, mais pas les deux."
|
|
),
|
|
),
|
|
]
|