Add local database.
[powerproduction-test.git] / powerproduction / models.py
blobaafada07c4ab77667ffbebec8d4feae396bb9343
1 import logging
2 from django.db import models
3 from django.db.models import Q
5 # Log
6 log = logging.getLogger(__name__)
9 # Models
10 class Inverter(models.Model):
11 ref = models.CharField(max_length=100) # reference
13 def __str__(self):
14 return self.ref
17 class HourlyProduction(models.Model):
18 inverter = models.ForeignKey(Inverter, on_delete=models.CASCADE)
19 datetime = models.DateTimeField()
20 energy = models.IntegerField()
22 class Meta:
23 unique_together = (("inverter", "datetime"),)
25 def __str__(self):
26 return f'{self.energy} @ {self.inverter}, {self.datetime}'
28 def save(self, *args, **kwargs):
29 # First, compute the new daily production
30 qfilter = Q(datetime__date=self.datetime.date(),
31 inverter=self.inverter)
32 sum_prod = sum(HourlyProduction.objects.filter(qfilter)
33 .values_list('energy', flat=True))
35 # Select the daily production to be updated
36 qfilter = Q(date=self.datetime.date(), inverter=self.inverter)
37 try:
38 dp = DailyProduction.objects.get(qfilter)
39 dp.energy = sum_prod
40 dp.save()
41 log.debug(f"Update daily production of {dp}")
42 except DailyProduction.DoesNotExist:
43 pass
45 # Call the save method
46 super(HourlyProduction, self).save(*args, **kwargs)
49 class DailyProduction(models.Model):
50 inverter = models.ForeignKey(Inverter, on_delete=models.CASCADE)
51 date = models.DateField()
52 energy = models.IntegerField()
54 class Meta:
55 unique_together = (("inverter", "date"),)
57 def __str__(self):
58 return f'{self.energy} @ {self.inverter}, {self.date}'