from django.db import models from apps.farms.models import Cycle, Flock class IotPanel(models.Model): panel_id = models.BigAutoField(primary_key=True) date = models.DateField() timestamp = models.DateTimeField(null=True, blank=True) wind_speed = models.FloatField(default=0.0) humidity = models.FloatField(default=0.0) water_total = models.FloatField(default=0.0) average_temperature = models.FloatField(default=0.0) experience_temperature = models.FloatField(default=0.0) flock = models.ForeignKey(Flock, on_delete=models.CASCADE, related_name="iot_panels") created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True) class Meta: db_table = "iot_panel" ordering = ["-date"] verbose_name = "IoT Panel" verbose_name_plural = "IoT Panels" constraints = [ models.UniqueConstraint(fields=["flock", "timestamp"], name="uniq_iot_panel_flock_timestamp") ] class AIInsight(models.Model): date = models.DateField() insight_text = models.TextField() alert = models.CharField(max_length=100) section = models.CharField(max_length=100) session = models.CharField(max_length=100) cycle = models.ForeignKey(Cycle, on_delete=models.CASCADE, related_name="ai_insights") created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True) class Meta: db_table = "ai_insight" ordering = ["-date"] class FeedSacks(models.Model): fs_id = models.BigAutoField(primary_key=True) date = models.DateField() in_today = models.IntegerField(default=0) out_today = models.IntegerField(default=0) in_total = models.IntegerField(default=0) out_total = models.IntegerField(default=0) feed_use_today = models.IntegerField(default=0) feed_use_total = models.IntegerField(default=0) cycle = models.ForeignKey(Cycle, on_delete=models.CASCADE, related_name="feed_sacks") created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True) class Meta: db_table = "feed_sacks" ordering = ["-date"] verbose_name_plural = "Feed sacks" constraints = [ models.UniqueConstraint(fields=["cycle", "date"], name="uniq_feed_sacks_cycle_date") ] class ChickenCounting(models.Model): cc_id = models.BigAutoField(primary_key=True) date = models.DateField() total_count = models.IntegerField(default=0) mortality_count = models.IntegerField(default=0) cycle = models.ForeignKey(Cycle, on_delete=models.CASCADE, related_name="chicken_countings") created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True) class Meta: db_table = "chicken_counting" ordering = ["-date"] constraints = [ models.UniqueConstraint(fields=["cycle", "date"], name="uniq_chicken_counting_cycle_date") ] class ChickenWeight(models.Model): cw_id = models.BigAutoField(primary_key=True) date = models.DateField() age = models.IntegerField() doc_weight = models.IntegerField() average_weight = models.FloatField() chicken_count = models.IntegerField() uniformity = models.FloatField() average_daily_gain = models.FloatField() cycle = models.ForeignKey(Cycle, on_delete=models.CASCADE, related_name="chicken_weights") created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True) class Meta: db_table = "chicken_weight" ordering = ["-date"] constraints = [ models.UniqueConstraint(fields=["cycle", "date"], name="uniq_cw_cycle_date") ] class ManualInput(models.Model): manual_id = models.BigAutoField(primary_key=True) date = models.DateField() age_manual = models.IntegerField(default=0) mortality_manual = models.IntegerField(default=0) mortality_manual_total = models.IntegerField(default=0) feed_in_manual = models.IntegerField(default=0) feed_use_manual = models.IntegerField(default=0) feed_in_manual_total = models.IntegerField(default=0) feed_use_manual_total = models.IntegerField(default=0) feed_out_manual = models.IntegerField(default=0) feed_out_manual_total = models.IntegerField(default=0) harvest_manual = models.IntegerField(default=0) harvest_manual_total = models.IntegerField(default=0) harvest_weight_manual = models.FloatField(default=0.0) harvest_weight_manual_total = models.FloatField(default=0.0) manual_weight = models.FloatField(default=0.0) average_harvest_day_manual = models.FloatField(default=0.0) average_harvest_weight_manual = models.FloatField(default=0.0) fcr_manual = models.FloatField(default=0.0) eef_manual = models.FloatField(default=0.0) cycle = models.ForeignKey(Cycle, on_delete=models.CASCADE, related_name="manual_inputs") created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True) class Meta: db_table = "manual_input" ordering = ["-date"] constraints = [ models.UniqueConstraint(fields=["cycle", "date"], name="uniq_manual_input_cycle_date") ] class KPI(models.Model): kpi_id = models.BigAutoField(primary_key=True) date = models.DateField() age = models.IntegerField(default=0) mortality = models.IntegerField(default=0) mortality_total = models.IntegerField(default=0) feed = models.IntegerField(default=0) feed_total = models.IntegerField(default=0) harvest = models.IntegerField(default=0) harvest_total = models.IntegerField(default=0) harvest_weight = models.FloatField(default=0.0) harvest_weight_total = models.FloatField(default=0.0) chicken_life = models.IntegerField(default=0) chicken_life_percentage = models.FloatField(default=0.0) iot_weight = models.FloatField(default=0.0) average_harvest_day = models.FloatField(default=0.0) average_harvest_weight = models.FloatField(default=0.0) fcr = models.FloatField(default=0.0) eef = models.FloatField(default=0.0) cycle = models.ForeignKey(Cycle, on_delete=models.CASCADE, related_name="kpis") cc = models.ForeignKey(ChickenCounting, on_delete=models.RESTRICT, related_name="kpis") cw = models.ForeignKey(ChickenWeight, on_delete=models.RESTRICT, related_name="kpis") fs = models.ForeignKey(FeedSacks, on_delete=models.RESTRICT, related_name="kpis") manual = models.ForeignKey(ManualInput, on_delete=models.RESTRICT, related_name="kpis") created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True) class Meta: db_table = "kpi" ordering = ["-date"] verbose_name_plural = "KPIs" constraints = [ models.UniqueConstraint(fields=["cycle", "date"], name="uniq_kpi_cycle_date") ]