Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from django.db import models
- from django.forms import ValidationError
- from django.contrib.postgres.fields import ArrayField
- from django.utils.translation import ugettext_lazy as _
- # Create your models here.
- UNIQUE_ARRAY_FIELDS = ('services',)
- PROTOCOL = (
- (1, _("SSL")),
- (2, _("TSL"))
- )
- class ServiceManager(models.Manager):
- def prevent_duplicates_in_array_fields(self, model, array_field,template=None):
- def duplicate_check(_lookup_params):
- fields = self.model._meta.get_fields()
- for unique_field in UNIQUE_ARRAY_FIELDS:
- unique_field_index = [getattr(field, 'name', '') for field in fields]
- try:
- # template_index = unique_field_index.index('template')
- unique_field_index = unique_field_index.index(unique_field)
- except ValueError:
- continue
- all_items_in_db = [item for sublist in self.values_list(fields[unique_field_index].name).filter(**_lookup_params) for item in sublist]
- all_items_in_db = [item for sublist in all_items_in_db for item in sublist]
- if not set(array_field).isdisjoint(all_items_in_db):
- raise ValidationError('{} contains items already in the database'.format(array_field))
- lookup_params = {}
- lookup_params.update({'template_id':template.id})
- duplicate_check(lookup_params)
- class Branch(models.Model):
- enable = models.BooleanField(default=False)
- orc_id = models.IntegerField()
- unv_prof_id = models.IntegerField()
- low_max_waiting = models.IntegerField()
- other_max_waiting = models.IntegerField()
- template = models.ForeignKey('core.Template',on_delete=models.CASCADE)
- class ServiceGroup(models.Model):
- name = models.CharField('Name',max_length=50)
- class Services(models.Model):
- orc_id = models.IntegerField()
- service_group = models.ForeignKey('core.ServiceGroup',on_delete=models.CASCADE)
- class ServiceGroupOptions(models.Model):
- branch = models.ForeignKey('core.Branch',on_delete=models.CASCADE)
- user_count = models.IntegerField()
- other_group = models.IntegerField()
- low_group = models.IntegerField()
- def save(self,*args, **kwargs):
- if self.other_group+self.low_group>self.user_count:
- raise ValidationError
- return super().save(*args, **kwargs)
- class Template(models.Model):
- name = models.CharField('Name',max_length=50)
- class ServiceTemplate(models.Model):
- service_group = models.ForeignKey('ServiceGroup',on_delete=models.CASCADE)
- template = models.ForeignKey('Template',on_delete=models.CASCADE)
- services = ArrayField(models.IntegerField(),blank=True,null=True)
- objects = ServiceManager()
- def save(self, *args, **kwargs):
- self.full_clean()
- if not self.id and ServiceTemplate.objects.filter(template=self.template,service_group=self.service_group).last():
- pass
- else:
- st = ServiceTemplate.objects.filter(id=self.id).last()
- services = self.services.copy() if self.services else None
- if st:
- if services:
- for i in st.services:
- if i in self.services:
- services.remove(i)
- if services:
- ServiceTemplate.objects.prevent_duplicates_in_array_fields(self, services, template=self.template)
- super().save(*args, **kwargs)
- class QueuesProfile(models.Model):
- branch = models.ForeignKey('Branch', on_delete=models.CASCADE)
- queue_id = models.IntegerField()
- profile_id = models.IntegerField()
- class AllowedProfiles(models.Model):
- branch = models.ForeignKey("Branch",on_delete=models.CASCADE)
- profile_id = ArrayField(models.IntegerField(),blank=True,null=True)
- class Smpt(models.Model):
- sender_name = models.CharField(_('Sender name'), max_length=50)
- email = models.EmailField(_('email address'), max_length=255, db_index=True)
- server = models.CharField(_('Server'), max_length=50)
- username = models.CharField(_('Username'), max_length=50)
- port = models.PositiveSmallIntegerField(_('EMAIL_PORT'),default=587)
- password = models.CharField(_('Password'), max_length=100)
- protocol = models.PositiveIntegerField(_('Connection Protocol'), choices=PROTOCOL, default=1)
- def __str__(self):
- return "{}".format(self.email)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement