Files
dashboard-cpsp/backend/apps/operations/models.py
T

202 lines
8.0 KiB
Python

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):
SOURCE_GENERATED = "generated"
SOURCE_CACHE = "cache"
SOURCE_LOCAL_FALLBACK = "local_fallback"
SOURCE_CHOICES = [
(SOURCE_GENERATED, "Generated"),
(SOURCE_CACHE, "Cache"),
(SOURCE_LOCAL_FALLBACK, "Local fallback"),
]
date = models.DateField()
insight_text = models.TextField()
alert = models.CharField(max_length=100, blank=True, default="")
cycle = models.ForeignKey(Cycle, on_delete=models.CASCADE, related_name="ai_insights")
kandang = models.ForeignKey(
"farms.Kandang",
on_delete=models.CASCADE,
related_name="ai_insights",
null=True,
blank=True,
)
topic = models.CharField(max_length=64, blank=True, default="", db_index=True)
report_type = models.CharField(max_length=32, blank=True, default="page", db_index=True)
report_period = models.CharField(max_length=64, blank=True, default="current", db_index=True)
source = models.CharField(
max_length=32,
choices=SOURCE_CHOICES,
default=SOURCE_GENERATED,
blank=True,
)
summary = models.TextField(blank=True, default="")
citations = models.TextField(blank=True, default="[]")
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
class Meta:
db_table = "ai_insight"
ordering = ["-date", "-created_at"]
constraints = [
models.UniqueConstraint(
fields=["cycle", "kandang", "topic", "report_type", "report_period"],
name="uniq_ai_insight_cache_scope",
)
]
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")
]