Advertisement
DavudHaji

autoprofile models

Nov 28th, 2022
463
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.46 KB | Software | 0 0
  1. from django.db import models
  2. from django.forms import ValidationError
  3. from django.contrib.postgres.fields import ArrayField
  4. from django.utils.translation import ugettext_lazy as _
  5.  
  6. # Create your models here.
  7.  
  8. UNIQUE_ARRAY_FIELDS = ('services',)
  9. PROTOCOL = (
  10.     (1, _("SSL")),
  11.     (2, _("TSL"))
  12. )
  13.  
  14. class ServiceManager(models.Manager):
  15.    
  16.     def prevent_duplicates_in_array_fields(self, model, array_field,template=None):
  17.         def duplicate_check(_lookup_params):
  18.             fields = self.model._meta.get_fields()
  19.             for unique_field in UNIQUE_ARRAY_FIELDS:
  20.                 unique_field_index = [getattr(field, 'name', '') for field in fields]
  21.                 try:
  22.                     # template_index = unique_field_index.index('template')
  23.                     unique_field_index = unique_field_index.index(unique_field)
  24.                 except ValueError:
  25.                     continue
  26.             all_items_in_db = [item for sublist in self.values_list(fields[unique_field_index].name).filter(**_lookup_params) for item in sublist]
  27.             all_items_in_db = [item for sublist in all_items_in_db for item in sublist]
  28.             if not set(array_field).isdisjoint(all_items_in_db):
  29.                 raise ValidationError('{} contains items already in the database'.format(array_field))
  30.          
  31.         lookup_params = {}
  32.         lookup_params.update({'template_id':template.id})
  33.         duplicate_check(lookup_params)
  34.  
  35.  
  36. class Branch(models.Model):
  37.     enable = models.BooleanField(default=False)
  38.     orc_id = models.IntegerField()
  39.     unv_prof_id = models.IntegerField()
  40.     low_max_waiting = models.IntegerField()
  41.     other_max_waiting = models.IntegerField()
  42.     template = models.ForeignKey('core.Template',on_delete=models.CASCADE)
  43.  
  44.  
  45.  
  46. class ServiceGroup(models.Model):
  47.     name = models.CharField('Name',max_length=50)
  48.  
  49. class Services(models.Model):
  50.     orc_id = models.IntegerField()
  51.     service_group = models.ForeignKey('core.ServiceGroup',on_delete=models.CASCADE)
  52.  
  53.  
  54.  
  55. class ServiceGroupOptions(models.Model):
  56.     branch = models.ForeignKey('core.Branch',on_delete=models.CASCADE)
  57.     user_count = models.IntegerField()
  58.     other_group = models.IntegerField()
  59.     low_group = models.IntegerField()
  60.  
  61.     def save(self,*args, **kwargs):
  62.         if self.other_group+self.low_group>self.user_count:
  63.             raise ValidationError
  64.         return super().save(*args, **kwargs)
  65.  
  66.  
  67.  
  68. class Template(models.Model):
  69.     name = models.CharField('Name',max_length=50)
  70.  
  71.  
  72.  
  73. class ServiceTemplate(models.Model):
  74.     service_group = models.ForeignKey('ServiceGroup',on_delete=models.CASCADE)
  75.     template = models.ForeignKey('Template',on_delete=models.CASCADE)
  76.     services = ArrayField(models.IntegerField(),blank=True,null=True)
  77.     objects = ServiceManager()
  78.  
  79.     def save(self, *args, **kwargs):
  80.         self.full_clean()
  81.         if not self.id and ServiceTemplate.objects.filter(template=self.template,service_group=self.service_group).last():
  82.             pass
  83.         else:
  84.             st = ServiceTemplate.objects.filter(id=self.id).last()
  85.             services = self.services.copy() if self.services else None
  86.             if st:
  87.                 if services:
  88.                     for i in st.services:
  89.                         if i in self.services:
  90.                             services.remove(i)
  91.             if services:
  92.                 ServiceTemplate.objects.prevent_duplicates_in_array_fields(self, services, template=self.template)
  93.             super().save(*args, **kwargs)
  94.  
  95.  
  96.  
  97. class QueuesProfile(models.Model):
  98.     branch = models.ForeignKey('Branch', on_delete=models.CASCADE)
  99.     queue_id = models.IntegerField()
  100.     profile_id = models.IntegerField()
  101.  
  102. class AllowedProfiles(models.Model):
  103.     branch = models.ForeignKey("Branch",on_delete=models.CASCADE)
  104.     profile_id = ArrayField(models.IntegerField(),blank=True,null=True)
  105.  
  106.  
  107.  
  108. class Smpt(models.Model):
  109.     sender_name = models.CharField(_('Sender name'), max_length=50)
  110.     email = models.EmailField(_('email address'), max_length=255, db_index=True)
  111.     server = models.CharField(_('Server'), max_length=50)
  112.     username = models.CharField(_('Username'), max_length=50)
  113.     port = models.PositiveSmallIntegerField(_('EMAIL_PORT'),default=587)
  114.     password = models.CharField(_('Password'), max_length=100)
  115.     protocol = models.PositiveIntegerField(_('Connection Protocol'), choices=PROTOCOL, default=1)
  116.     def __str__(self):
  117.         return "{}".format(self.email)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement