from django.db import models from utils.base_model import BaseModel from apps.workspace.models import City as CityModel, Workspace as WorkspaceModel from apps.cuser.models import CuserRole as CuserRoleModel from django.core.exceptions import ValidationError from utils.validations.mobile import normalize_mobile # Create your models here. class ShiveAshenaei(BaseModel): name = models.CharField(max_length=15, null=False, blank=False) sys_ws = models.ForeignKey(WorkspaceModel, on_delete=models.CASCADE, null=False, blank=False) def __str__(self): return str(self.name) class ResponsibleGroup(BaseModel): name = models.CharField(max_length=20, null=False, blank=False) sys_ws = models.ForeignKey(WorkspaceModel, on_delete=models.CASCADE, null=False, blank=False) def __str__(self): return str(self.name) class CustomerResponsible(BaseModel): responsible_group = models.ForeignKey(ResponsibleGroup, on_delete=models.CASCADE, null=False, blank=False, related_name='customer_responsible') cuser_role = models.ForeignKey(CuserRoleModel, on_delete=models.CASCADE, null=False, blank=False) sys_ws = models.ForeignKey(WorkspaceModel, on_delete=models.CASCADE, null=False, blank=False) def __str__(self): return str(self.responsible_group) class CustomerGroupType(BaseModel): name = models.CharField(max_length=10, null=False, blank=False) sys_ws = models.ForeignKey(WorkspaceModel, on_delete=models.CASCADE, null=False, blank=False) def __str__(self): return str(self.name) class CustomerGroup(BaseModel): name = models.CharField(max_length=15, null=False, blank=False) group_type = models.ForeignKey(CustomerGroupType, on_delete=models.SET_NULL, null=True, blank=True) sys_ws = models.ForeignKey(WorkspaceModel, on_delete=models.CASCADE, null=False, blank=False) def __str__(self): return str(self.name) class Customer(BaseModel): name_family = models.CharField(max_length=100, null=False, blank=False) mobile = models.PositiveBigIntegerField(null=True, blank=True) phone = models.PositiveBigIntegerField(null=True, blank=True) address = models.CharField(max_length=100, null=True, blank=True) city = models.ForeignKey(CityModel, on_delete=models.SET_NULL, null=True, blank=True) shive_ashenaei = models.ForeignKey(ShiveAshenaei, on_delete=models.SET_NULL, null=True, blank=True) responsible_group = models.ForeignKey(ResponsibleGroup, on_delete=models.SET_NULL, null=True, blank=True) cuser_role = models.ForeignKey(CuserRoleModel, on_delete=models.SET_NULL, null=True, blank=True) sys_ws = models.ForeignKey(WorkspaceModel, on_delete=models.CASCADE, null=False, blank=False) class Meta: ordering = ['-created_at'] constraints = [ models.UniqueConstraint(fields=['sys_ws', 'mobile'], name='customer_workspace_mobile_unique'), ] def __str__(self): return str(self.name_family) def clean(self): super().clean() if self.mobile is not None: self.mobile = normalize_mobile(self.mobile) if type(self).objects.filter(sys_ws_id=self.sys_ws_id, mobile=self.mobile).exclude(pk=self.pk).exists(): raise ValidationError({"mobile": "مشتری با این شماره موبایل در این فضای کاری قبلاً ثبت شده است."}) if self.cuser_role and not self.cuser_role.role_type.role_name_en == 'workspace_customer': raise ValidationError("cuser_role type must be customer") if self.cuser_role and (self.cuser_role.sys_ws_id != self.sys_ws_id or not self.cuser_role.cuser_id or self.cuser_role.cuser.mobile != self.mobile): raise ValidationError({'cuser_role': 'حساب پنل باید متعلق به همین شماره موبایل و فضای کاری باشد.'}) class CustomerNote(BaseModel): customer = models.ForeignKey(Customer, on_delete=models.CASCADE, null=False, blank=False) cuser_role = models.ForeignKey(CuserRoleModel, on_delete=models.CASCADE, null=False, blank=False) desc = models.CharField(max_length=200, null=False, blank=False) sys_ws = models.ForeignKey(WorkspaceModel, on_delete=models.CASCADE, null=False, blank=False) class Meta: ordering = ['-created_at'] def __str__(self): return str(self.customer.name_family)