Advertisement
Guest User

Untitled

a guest
Oct 18th, 2019
191
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.25 KB | None | 0 0
  1. from django.db import models
  2. from django.contrib.auth.models import User, Group
  3. from django.db.models.signals import pre_save, post_save, pre_delete
  4. from top.models import SmsTemplate, SmsSigniture
  5. from common.models import ClientSettings
  6. from common.notification import *
  7. from django.core.exceptions import ValidationError
  8.  
  9. class UnitType(models.Model):
  10. name = models.CharField(max_length=45)
  11.  
  12. def __unicode__(self):
  13. return self.name
  14.  
  15. class CampusParam(models.Model):
  16. description = models.TextField(blank=True, null=True)
  17.  
  18. def __unicode__(self):
  19. return "%s" % self.id
  20.  
  21. class BuildingParam(models.Model):
  22. yearbuild = models.CharField(max_length=64, blank=True, null=True)
  23. address = models.CharField(max_length=512, blank=True, null=True)
  24. buildingarea = models.CharField(max_length=64, blank=True, null=True)
  25. employeenumber = models.CharField(max_length=64, blank=True, null=True)
  26. refrigerationunits = models.CharField(max_length=64, blank=True, null=True)
  27. cookingfacility = models.CharField(max_length=64, blank=True, null=True)
  28. numberofrooms = models.CharField(max_length=64, blank=True, null=True)
  29. description = models.TextField(blank=True, null=True)
  30. energysystemintro = models.TextField(blank=True, null=True)
  31. report = models.FileField(upload_to="reports/", blank=True, null=True, default=None)
  32. GPSlocation = models.CharField(max_length=45, blank=True, null=True) # deprecated
  33. billingCycleStart = models.CharField(max_length=2, default="1")
  34.  
  35. def __unicode__(self):
  36. return "%s" % self.id
  37.  
  38. class MeterParam(models.Model):
  39. manufacturer = models.CharField(max_length=512, blank=True, null=True)
  40. modelname = models.CharField(max_length=512, blank=True, null=True)
  41. samplerate = models.CharField(max_length=64, blank=True, null=True)
  42. description = models.TextField(blank=True, null=True)
  43.  
  44. def __unicode__(self):
  45. return "%s" % self.id
  46.  
  47. class Category(models.Model):
  48. name = models.CharField(max_length=512, blank=True, null=True)
  49.  
  50. # class Meta:
  51. # verbose_name_plural="Categories"
  52.  
  53. def __unicode__(self):
  54. return self.name
  55.  
  56. class EnergyUnit(models.Model):
  57. parent = models.ForeignKey("self", blank=True, null=True)
  58. name = models.CharField(max_length=45, default=None)
  59. value = models.CharField(max_length=45, blank=True, null=True)
  60. influxKey = models.CharField(max_length=1024, blank=True, null=True)
  61. eventseries = models.CharField(max_length=1024, blank=True, null=True)
  62. type = models.ForeignKey(UnitType, default=None)
  63. GPSlocation = models.CharField(max_length=45, blank=True, null=True) # deprecated
  64. campus = models.ForeignKey("self", null=True, blank=True, related_name="camp",
  65. limit_choices_to={'type__name': "Campus"})
  66.  
  67. campusparam = models.OneToOneField(CampusParam, blank=True, null=True, on_delete=models.CASCADE)
  68. buildingparam = models.OneToOneField(BuildingParam, blank=True, null=True, on_delete=models.CASCADE)
  69. meterparam = models.OneToOneField(MeterParam, blank=True, null=True, on_delete=models.CASCADE)
  70. category = models.ForeignKey(Category, blank=True, null=True)
  71. invisible = models.BooleanField(default=False)
  72.  
  73. daily_optimizer_task = models.ForeignKey('optimizer.DailyOptimizerTask', blank=True, null=True, default=None)
  74. hourly_optimizer_task = models.ForeignKey('optimizer.HourlyOptimizerTask', blank=True, null=True, default=None)
  75. monitor_config = models.ForeignKey('optimizer.MonitoringConfig', blank=True, null=True, default=None)
  76.  
  77. def save(self, *args, **kwargs):
  78. if (self.campusparam and self.buildingparam) or (self.campusparam and self.meterparam) \
  79. or (self.buildingparam and self.meterparam):
  80. pass
  81. super(EnergyUnit, self).save(*args, **kwargs)
  82.  
  83. def __unicode__(self):
  84. display_name = self.name
  85. try:
  86. myparent = self.parent
  87. while myparent != None:
  88. display_name = myparent.name + " / " + display_name
  89. myparent = myparent.parent
  90. except:
  91. pass
  92.  
  93. return "%s" % display_name
  94.  
  95. def energy_unit_post_save(sender, instance, created, **kwargs):
  96. if created:
  97. type = instance.type
  98. if type.name == "Building":
  99. building = BuildingParam.objects.create()
  100. building.save()
  101. instance.buildingparam = building
  102.  
  103. # from optimizer.models import DailyOptimizerTask, HourlyOptimizerTask, MonitoringConfig
  104. # m_config = MonitoringConfig.objects.create()
  105. # m_config.save()
  106. # instance.monitor_config = m_config
  107. # new_daily_optimizer_task = DailyOptimizerTask.objects.create(eu_target_id=instance.pk)
  108. # new_daily_optimizer_task.save()
  109. # new_hourly_optimizer_task = HourlyOptimizerTask.objects.create(eu_target_id=instance.pk)
  110. # new_hourly_optimizer_task.save()
  111.  
  112. # instance.daily_optimizer_task = new_daily_optimizer_task
  113. # instance.hourly_optimizer_task = new_hourly_optimizer_task
  114.  
  115. if type.name == "Campus":
  116. campus = CampusParam.objects.create()
  117. campus.save()
  118. instance.campusparam = campus
  119. if type.name == "Meter":
  120. meter = MeterParam.objects.create()
  121. meter.save()
  122. instance.meterparam = meter
  123. # This energy unit should have same campus as its parent
  124. if instance.parent is not None:
  125. if instance.parent.campus is not None:
  126. instance.campus = instance.parent.campus
  127.  
  128. # influxdb series key is automatically generated
  129. instance.influxKey = "TS" + "%s" % (instance.id)
  130.  
  131. instance.save()
  132.  
  133. post_save.connect(energy_unit_post_save, sender=EnergyUnit)
  134.  
  135. def energy_unit_delete(sender, instance, **kwargs):
  136. try:
  137. instance.campusparam.delete()
  138. except:
  139. pass
  140. try:
  141. instance.buildingparam.delete()
  142. except:
  143. pass
  144. try:
  145. instance.meterparam.delete()
  146. except:
  147. pass
  148. try:
  149. instance.daily_optimizer_task.delete()
  150. except:
  151. pass
  152. try:
  153. instance.hourly_optimizer_task.delete()
  154. except:
  155. pass
  156.  
  157.  
  158. pre_delete.connect(energy_unit_delete, sender=EnergyUnit)
  159.  
  160.  
  161. class WeatherStation(models.Model):
  162. name = models.CharField(max_length=45, default=None)
  163. GPSlocation = models.CharField(max_length=45, default=None)
  164. url = models.CharField(max_length=45, default="ZSSS")
  165. unit = models.ForeignKey(EnergyUnit, related_name="unit", default=None)
  166.  
  167. def __unicode__(self):
  168. return "%s" % self.name
  169.  
  170.  
  171. class Segmentation(models.Model):
  172. name = models.CharField(max_length=45, blank=True, null=True)
  173.  
  174. def __unicode__(self):
  175. return "%s" % self.name
  176.  
  177.  
  178. class subSegment(models.Model):
  179. name = models.CharField(max_length=45, blank=True, default=None)
  180. parent = models.ForeignKey(Segmentation, related_name="parent")
  181.  
  182. def __unicode__(self):
  183. return "%s" % self.name
  184.  
  185.  
  186. class Appliance(models.Model):
  187. app_unit = models.ForeignKey(EnergyUnit, related_name="app_unit")
  188. outputSegment = models.ForeignKey(Segmentation, related_name="outputSegment")
  189. location = models.CharField(max_length=65, blank=True, null=True, default=None)
  190. subSegment = models.ForeignKey(subSegment, related_name="subSegment", blank=True, default=None, null=True)
  191.  
  192. # outputSegment=models.CharField(max_length=45,default=None)
  193. name = models.CharField(max_length=45, default=None)
  194.  
  195. def __unicode__(self):
  196. return "%s" % self.name
  197.  
  198.  
  199. class GroupHasCampus(models.Model):
  200. userGroup = models.ForeignKey(Group, related_name='energyUnit')
  201. campus = models.ManyToManyField(EnergyUnit, related_name="energyUnit", default=None,
  202. limit_choices_to={'type__name': "Campus"})
  203.  
  204. class Meta:
  205. verbose_name_plural = "GroupHasCampuses"
  206.  
  207. def __unicode__(self):
  208. return "%s" % (self.userGroup)
  209.  
  210.  
  211. class SmsLog(models.Model):
  212. user = models.ForeignKey(User, related_name='user', default=None)
  213. # msg=models.CharField(max_length=256,default=None)
  214. template = models.ForeignKey(SmsTemplate, related_name='template', default=None)
  215. signiture = models.ForeignKey(SmsSigniture, related_name='signiture', default=None)
  216. param = models.CharField(max_length=65, blank=True, null=True)
  217.  
  218. def __unicode__(self):
  219. return "%s" % self.signiture.sign
  220.  
  221. def clean(self):
  222. if self.id is None: # not new instance
  223. client = ClientSettings.objects.get(user=self.user.id)
  224. phone = client.phone
  225. signiture = self.signiture.sign
  226. tem_id = self.template.aliid
  227. if phone is None or signiture is None or tem_id is None:
  228. raise ValidationError("empty fields")
  229.  
  230. def save(self, *args, **kwargs):
  231. if self.id is None: # not new instance
  232. client = ClientSettings.objects.get(user=self.user.id)
  233. phone = client.phone
  234. signiture = self.signiture.sign
  235. tem_id = self.template.aliid
  236. try:
  237. sendSMS(signiture, self.param, phone, tem_id)
  238. except Exception, e:
  239. raise ValidationError("data is incorrect")
  240. super(SmsLog, self).save(*args, **kwargs)
  241. else:
  242. super(SmsLog, self).save(*args, **kwargs)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement