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