summaryrefslogtreecommitdiff
path: root/app/planner/models.py
diff options
context:
space:
mode:
Diffstat (limited to 'app/planner/models.py')
-rw-r--r--app/planner/models.py108
1 files changed, 108 insertions, 0 deletions
diff --git a/app/planner/models.py b/app/planner/models.py
new file mode 100644
index 0000000..f5bb042
--- /dev/null
+++ b/app/planner/models.py
@@ -0,0 +1,108 @@
+import datetime
+import os
+
+from django.dispatch import receiver
+from django.contrib.gis.db import models
+from django.db.models.signals import post_save
+from django.contrib.contenttypes.fields import GenericRelation, GenericForeignKey
+from django.contrib.contenttypes.models import ContentType
+from django.contrib.sites.models import Site
+from django.urls import reverse
+from django.utils.functional import cached_property
+from django.apps import apps
+from django.conf import settings
+from django.contrib.sitemaps import Sitemap
+from django import forms
+
+from locations.models import Location
+from utils.util import render_images, render_products, parse_video, markdown_to_html, extract_main_image
+
+
+class Camp(models.Model):
+ name = models.CharField(max_length=200)
+ date_arrive = models.DateField('Arrival Date')
+ date_depart = models.DateField('Departure Date', blank=True, null=True)
+ distance_from_previous = models.FloatField(null=True, blank=True)
+ link = models.CharField(max_length=200, null=True, blank=True)
+ map_link = models.CharField(max_length=400, null=True, blank=True)
+ point = models.PointField(null=True, blank=True)
+ location = models.ForeignKey(Location, on_delete=models.CASCADE, null=True, blank=True)
+ notes = models.TextField(null=True, blank=True)
+ notes_html = models.TextField(null=True, blank=True)
+ price = models.FloatField(null=True, blank=True)
+ site_number = models.FloatField(null=True, blank=True)
+ has_water = models.BooleanField(default=True)
+ has_electric = models.BooleanField(default=True)
+ has_dump = models.BooleanField(default=True)
+ RATINGS = (
+ ('1', "1 Star"),
+ ('2', "2 Stars"),
+ ('3', "3 Stars"),
+ ('4', "4 Stars"),
+ ('5', "5 Stars"),
+ )
+ rating = models.CharField(max_length=1, choices=RATINGS, null=True, blank=True)
+
+ class Meta:
+ ordering = ('date_arrive',)
+ get_latest_by = 'date_arrive'
+
+ def __str__(self):
+ return self.name
+
+ def get_absolute_url(self):
+ if self.post_type == PostType.ESSAY:
+ return reverse('essays:detail', kwargs={"slug": self.slug})
+ if self.post_type == PostType.SRC:
+ return reverse('src:detail', kwargs={"slug": self.slug})
+ if self.post_type == PostType.FIELD_NOTE:
+ return reverse('fieldnote:detail', kwargs={"year": self.pub_date.year, "month": self.pub_date.strftime("%m"), "slug": self.slug})
+ if self.post_type == PostType.JRNL:
+ return reverse('jrnl:detail', kwargs={"year": self.pub_date.year, "month": self.pub_date.strftime("%m"), "slug": self.slug})
+ if self.post_type == PostType.RANGE:
+ return reverse('range:range-detail', kwargs={"issue": self.get_issue_str(), "slug": self.slug})
+ if self.post_type == PostType.FRIENDS:
+ return reverse('friends:friends-detail', kwargs={"issue": self.get_issue_str(), "slug": self.slug})
+
+ def comment_period_open(self):
+ return self.enable_comments and datetime.datetime.today() - datetime.timedelta(30) <= self.pub_date
+
+ def get_featured_image_thumb(self):
+ return self.featured_image.get_image_url_by_size("thumbnail")
+
+ def get_content_type(self):
+ return ContentType.objects.get(app_label="posts", model="post")
+
+ def get_issue_str(self):
+ issue = self.issue
+ if self.issue < 100:
+ issue = "0%s" % self.issue
+ if self.issue < 10:
+ issue = "00%s" % self.issue
+ return issue
+
+ @property
+ def get_previous_published(self):
+ return self.get_previous_by_date_arrive()
+
+ @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_published(self):
+ return self.get_next_by_date_arrive()
+
+ @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 ''
+
+ def save(self, *args, **kwargs):
+ created = self.pk is None
+ self.notes_html = markdown_to_html(self.notes)
+ super(Camp, self).save(*args, **kwargs)