bale group for orgs, and sms for each org

This commit is contained in:
javad committed 2026-09-13 20:47:47 +03:30
1 parent a18a68578f
commit 1ee83374fd
13 files changed
+262 -20

No files matched your search

+51
View File
@@ -1,5 +1,6 @@
from django.conf import settings
from django.contrib.auth.models import Permission
from django.core.exceptions import ValidationError
from django.db import models
from apps.core.models import PersianTextNormalizationMixin, TimeStampedModel
@@ -26,6 +27,15 @@ class OrganizationalUnit(PersianTextNormalizationMixin, TimeStampedModel):
help_text="اگر غیرفعال باشد، مشتریان نمی‌توانند مستقیماً برای این واحد تیکت ثبت کنند.",
)
show_in_customer_form = models.BooleanField(default=True, verbose_name="نمایش در فرم مشتری", help_text="در صورت خاموش بودن، واحد در فرم ثبت تیکت و جستجوی مشتری نمایش داده نمی‌شود.")
bale_chat_id = models.CharField(
max_length=100,
blank=True,
verbose_name="شناسه گروه بله",
help_text="شناسه chat_id گروه بله این واحد؛ در صورت خالی بودن، اعلان گروهی بله برای این واحد ارسال نمی‌شود.",
)
supervisor_mobile_1 = models.CharField(max_length=16, blank=True, verbose_name="شماره همراه سرپرست اول")
supervisor_mobile_2 = models.CharField(max_length=16, blank=True, verbose_name="شماره همراه سرپرست دوم")
supervisor_mobile_3 = models.CharField(max_length=16, blank=True, verbose_name="شماره همراه سرپرست سوم")
class Meta:
ordering = ["sort_order", "name", "pk"]
@@ -35,6 +45,47 @@ class OrganizationalUnit(PersianTextNormalizationMixin, TimeStampedModel):
def __str__(self):
return self.name
@property
def supervisor_mobiles(self):
"""Return configured supervisor mobiles once, in their configured order."""
return tuple(dict.fromkeys(filter(None, (
self.supervisor_mobile_1,
self.supervisor_mobile_2,
self.supervisor_mobile_3,
))))
def clean(self):
super().clean()
from apps.accounts.models import normalize_mobile
normalized = []
errors = {}
for field_name in ("supervisor_mobile_1", "supervisor_mobile_2", "supervisor_mobile_3"):
value = getattr(self, field_name, "").strip()
if not value:
setattr(self, field_name, "")
continue
try:
value = normalize_mobile(value)
except ValueError as exc:
errors[field_name] = str(exc)
continue
setattr(self, field_name, value)
if value in normalized:
errors[field_name] = "این شماره همراه قبلاً برای همین واحد وارد شده است."
normalized.append(value)
if errors:
raise ValidationError(errors)
def save(self, *args, **kwargs):
from apps.accounts.models import normalize_mobile
for field_name in ("supervisor_mobile_1", "supervisor_mobile_2", "supervisor_mobile_3"):
value = getattr(self, field_name, "").strip()
setattr(self, field_name, normalize_mobile(value) if value else "")
self.bale_chat_id = self.bale_chat_id.strip()
super().save(*args, **kwargs)
class UnitMembership(TimeStampedModel):
"""Dynamic per-user unit membership with optional extra permissions."""