diff options
Diffstat (limited to 'app/unused_apps/garden/models.py')
-rw-r--r-- | app/unused_apps/garden/models.py | 153 |
1 files changed, 153 insertions, 0 deletions
diff --git a/app/unused_apps/garden/models.py b/app/unused_apps/garden/models.py new file mode 100644 index 0000000..56e8c30 --- /dev/null +++ b/app/unused_apps/garden/models.py @@ -0,0 +1,153 @@ +import datetime + +from django.contrib.gis.db import models + +from utils.util import render_images, markdown_to_html + + +PLANT_FAMILY = ( + (0, 'Tomatoes'), + (1, 'Cucumbers'), + (2, 'Watermelons'), + (3, 'Pumkins'), + (4, 'Cantelope'), + (5, 'Kale'), + (6, 'Okra'), + (7, 'Collards'), + (8, 'Arugula'), + (9, 'Butter Lettuce'), + (10, 'Basil'), + (11, 'Lemongrass'), + (12, 'Thyme'), + (13, 'Mint'), +) + + +class Plant(models.Model): + """ + Model to hold Plant Definitions + """ + name = models.CharField(max_length=200) + family = models.IntegerField(choices=PLANT_FAMILY, default=0) + scientific_name = models.CharField(max_length=200, null=True, blank=True) + edible = models.BooleanField(default=False) + date_created = models.DateTimeField(default=datetime.datetime.now) + growth_time = models.PositiveIntegerField() + germination_time = models.PositiveIntegerField() + seperation = models.PositiveIntegerField() + notes = models.TextField(null=True, blank=True) + CONDITIONS = ( + (0, 'Direct Sun'), + (1, 'Part Sun'), + (2, 'Shade'), + ) + conditions = models.IntegerField(choices=CONDITIONS, default=0) + PLANT_TYPE= ( + (0, 'Vegetable'), + (1, 'Herb'), + (2, 'Berry'), + (3, 'Nut'), + ) + conditions = models.IntegerField(choices=PLANT_TYPE, default=0) + organic = models.BooleanField(default=True) + heirloom = models.BooleanField(default=True) + annual = models.BooleanField(default=True) + + class Meta: + ordering = ('-date_created',) + get_latest_by = 'date_created' + + def __str__(self): + return self.name + + +class Seed(models.Model): + plant = models.ForeignKey(Plant, on_delete=models.CASCADE) + brand = models.CharField(max_length=200) + date_created = models.DateTimeField(default=datetime.datetime.now) + estimated_growth_time = models.PositiveIntegerField() + estimated_germination_time = models.PositiveIntegerField() + organic = models.BooleanField(default=True) + notes = models.TextField(null=True, blank=True) + + class Meta: + ordering = ('-date_created',) + get_latest_by = 'date_created' + + def __str__(self): + return self.plant.name + + +class Planting(models.Model): + plant = models.ForeignKey(Plant, on_delete=models.CASCADE) + number_of_plants = models.PositiveIntegerField() + seed = models.ForeignKey(Seed, on_delete=models.CASCADE, null=True, blank=True) + START_AREA = ( + (0, 'Indoors'), + (1, 'Direct Sow'), + (2, 'Greenhouse'), + (2, 'Purchased Seedling'), + ) + seed_start_area = models.IntegerField(choices=START_AREA, default=0) + date_seed_started = models.DateField(null=True, blank=True) + date_seed_sprouted = models.DateField(null=True, blank=True) + date_hardened_off = models.DateField(null=True, blank=True) + date_planted = models.DateField() + GARDEN_PLOT = ( + (0, 'Far Plot Mound'), + (1, 'Far Plot ground'), + (2, 'Herb Plot ground'), + (2, 'Herb Plot bed'), + ) + garden_area = models.IntegerField(choices=GARDEN_PLOT, default=0) + OUTCOME = ( + (0, 'Unknown'), + (1, 'Success'), + (2, 'Moderate Success'), + (3, 'Fail'), + ) + outcome = models.IntegerField(choices=OUTCOME, default=0) + notes = models.TextField(null=True, blank=True) + + class Meta: + ordering = ('-date_seed_started',) + get_latest_by = 'date_seed_started' + + def __str__(self): + return self.plant.name + + @property + def get_previous_admin_url(self): + n = self.get_previous_by_pub_date() + return reverse('admin:%s_%s_change' %(self._meta.app_label, self._meta.model_name), args=[n.id] ) + + @property + def get_next_admin_url(self): + model = apps.get_model(app_label=self._meta.app_label, model_name=self._meta.model_name) + try: + return reverse('admin:%s_%s_change' %(self._meta.app_label, self._meta.model_name), args=[self.get_next_by_pub_date().pk] ) + except model.DoesNotExist: + return '' + + + @property + def family(self): + return self.plant.get_family_display() + + + def save(self, *args, **kwargs): + created = self.pk is None + if not created: + md = render_images(self.notes) + self.body_html = markdown_to_html(md) + super(Planting, self).save(*args, **kwargs) + + +class Guild(models.Model): + name = models.CharField(max_length=200, blank=True) + plant = models.ManyToManyField(Plant) + seperation = models.PositiveIntegerField() + notes = models.TextField(null=True, blank=True) + + def __str__(self): + return self.name |