116 lines
5.2 KiB
Python
116 lines
5.2 KiB
Python
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
|
|
from django.utils import timezone
|
|
# Create your models here.
|
|
|
|
|
|
class MobileConflict(models.Model):
|
|
source_model = models.CharField(max_length=100)
|
|
record_id = models.PositiveBigIntegerField()
|
|
workspace_id = models.PositiveBigIntegerField(null=True, blank=True)
|
|
original_mobile = models.PositiveBigIntegerField(null=True, blank=True)
|
|
canonical_mobile = models.PositiveBigIntegerField()
|
|
snapshot = models.JSONField()
|
|
created_at = models.DateTimeField(default=timezone.now, editable=False)
|
|
|
|
class Meta:
|
|
ordering = ['-created_at', '-pk']
|
|
unique_together = (('source_model', 'record_id'),)
|
|
verbose_name = 'تعارض شماره قدیمی'
|
|
verbose_name_plural = 'تعارضهای شماره قدیمی'
|
|
|
|
def __str__(self):
|
|
return f'{self.source_model} #{self.record_id}: {self.original_mobile}'
|
|
|
|
|
|
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)
|