from django.db import models from apps.core.models import BaseModel from apps.authentication.models import Organization from django.contrib.postgres.fields import ArrayField class ProviderCompany(BaseModel): name_fa = models.CharField(max_length=250, null=True) name_en = models.CharField(max_length=250, null=True) activation = models.BooleanField(default=False) def __str__(self): return f'Payment Company: {self.name_fa}-{self.id}' def save(self, *args, **kwargs): return super(ProviderCompany, self).save(*args, **kwargs) class Device(BaseModel): acceptor = models.IntegerField(default=0) terminal = models.IntegerField(default=0) serial = models.TextField(null=True) password = models.CharField(max_length=25, null=True) multi_device = models.BooleanField(default=False) server_in = models.BooleanField(default=False) latitude = models.DecimalField(max_digits=20, decimal_places=10, null=True) longitude = models.DecimalField(max_digits=20, decimal_places=10, null=True) company = models.ForeignKey( ProviderCompany, on_delete=models.CASCADE, related_name='devices', null=True ) def __str__(self): return f'Device: {self.serial} - {self.id}' def save(self, *args, **kwargs): return super(Device, self).save(*args, **kwargs) class DeviceVersion(BaseModel): device = models.ForeignKey( Device, on_delete=models.CASCADE, related_name='devices_version', null=True ) company = models.ForeignKey( ProviderCompany, on_delete=models.CASCADE, related_name='devices_company', null=True ) name = models.CharField(max_length=250, null=True) code = models.IntegerField(default=0) description = models.TextField(null=True) enable = models.BooleanField(default=True) remove = models.BooleanField(default=False) def __str__(self): return f'Version: {self.name}-{self.device.serial}' def save(self, *args, **kwargs): return super(DeviceVersion, self).save(*args, **kwargs) class Sessions(BaseModel): device = models.ForeignKey( Device, on_delete=models.CASCADE, related_name='devices', null=True ) name = models.CharField(max_length=125, null=True) password = models.CharField(max_length=25, null=True) version = models.IntegerField(default=0) mac = models.CharField(max_length=50, null=True) ip = models.CharField(max_length=15, default='0.0.0.0') sdk = models.TextField(null=True) serial = models.TextField(null=True) latitude = models.DecimalField(max_digits=20, decimal_places=10, null=True) longitude = models.DecimalField(max_digits=20, decimal_places=10, null=True) def __str__(self): return f'Session: {self.name}-{self.version}-{self.id}' def save(self, *args, **kwargs): return super(Sessions, self).save(*args, **kwargs) class POSClient(BaseModel): name = models.CharField(max_length=255, null=True) client_type = models.CharField(max_length=25, choices=[ ('business', 'صنف'), ('person', 'شخص آزاد'), # noqa ('organization', 'سازمان') # noqa ]) is_organization = models.BooleanField(default=False) organization = models.OneToOneField( Organization, on_delete=models.CASCADE, related_name='client', null=True ) def __str__(self): return f'POSClient: {self.name}-{self.id}' def save(self, *args, **kwargs): return super(POSClient, self).save(*args, **kwargs) class POSClientAttribute(BaseModel): client_type = models.CharField(max_length=25, choices=[ ('business', 'صنف'), ('person', 'شخص آزاد'), # noqa ('organization', 'سازمان') # noqa ], null=True) key = models.CharField(max_length=100, null=True) label = models.CharField(max_length=255, null=True) field_type = models.CharField(max_length=20, choices=[ ('text', 'متن'), ('number', 'عدد'), ('date', 'تاریخ'), # noqa ('choice', 'چند کزینه ای'), # noqa ], null=True) required = models.BooleanField(default=False) choices = ArrayField(base_field=models.CharField(max_length=150), null=True) def __str__(self): return f'attribute: {self.key}-{self.field_type}' def save(self, *args, **kwargs): return super(POSClientAttribute, self).save(*args, **kwargs) class POSClientAttributeValue(BaseModel): client = models.ForeignKey( POSClient, on_delete=models.CASCADE, related_name='attribute_values', null=True ) attribute = models.ForeignKey( POSClientAttribute, on_delete=models.CASCADE, related_name='attribute_values', null=True ) value = models.TextField(null=True) def __str__(self): return f'Client Attribute: {self.client.name}-{self.attribute.key}' def save(self, *args, **kwargs): return super(POSClientAttributeValue, self).save(*args, **kwargs)