123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186 |
- from datetime import *
- from dateutil import relativedelta
- from django.db import models
- from django.db.models import permalink
- from django.utils.translation import ugettext_lazy as _
- from django.core.urlresolvers import reverse
- from django.contrib.auth.models import User
- from django.contrib.localflavor.us.models import PhoneNumberField, USStateField
- from django_extensions.db.fields import AutoSlugField
- from django_extensions.db.models import TimeStampedModel, TitleSlugDescriptionModel
- from directory.models import Point, Person, Town, Place
- from marketplace.models import Business, Guide
- from newsroom.models import Story
- from darkroom.models import Photo, Gallery, Slideshow, Movie
- from documents.models import PDFDocument
- class Category(TitleSlugDescriptionModel):
- """Categories model."""
- graphic=models.ImageField(_('Graphic'), upload_to='visitors/category/')
- brief_description=models.CharField(_('Brief description'), max_length=255,
- blank=True, null=True)
- teaser_name=models.CharField(_('Teaser name'), max_length=100,
- blank=True, null=True)
- template_name = models.CharField(_('template name'), max_length=70,
- blank=True,
- help_text=_("Example: 'visitors/categories/shopping.html'. If this isn't provided, the system will use 'visitors/categories/default.html'."))
-
- class Meta:
- verbose_name = _('Category')
- verbose_name_plural = _('Categories')
- ordering=('title',)
-
- def __unicode__(self):
- return u'%s' % self.title
-
- def get_absolute_url(self):
- return reverse ('vs-category-index', args=[self.slug])
- class Feature(TimeStampedModel):
- name=models.CharField(_('name'), max_length=200)
- slug=models.SlugField(_('slug'), unique=True)
- description=models.CharField(_('description'), max_length=255, blank=True, null=True)
-
- class Meta:
- verbose_name=_('feature')
- verbose_name_plural=_('features')
- ordering=('name',)
-
- def __unicode__(self):
- return u'%s' % self.name
- class Attraction(TimeStampedModel):
- '''
- Base class for attractions
- '''
-
- name=models.CharField(_('name'), max_length=255)
- slug=AutoSlugField(_('slug'), editable=True,
- populate_from='name')
- published=models.BooleanField(_('Published'), default=False)
- pub_date=models.DateField(_('Publish date'))
- point=models.ForeignKey(Point, blank=True, null=True)
- town=models.ForeignKey(Town, blank=True, null=True,
- help_text="Point above will override this if attraction given a point.")
- place=models.ForeignKey(Place, blank=True, null=True,
- help_text='Use EITHER this or town or point fields.')
- owner=models.ForeignKey(Person, blank=True, null=True)
- brief_hours=models.CharField(_('brief hours'), blank=True, null=True,
- max_length=255)
- logo=models.ImageField(_('logo or photo'), upload_to="portal/logos/",
- blank=True)
- phone=PhoneNumberField(_('primary phone'), blank=True, null=True)
- url=models.URLField(_('url'), blank=True, verify_exists=False)
- brief_hours=models.CharField(_('brief hours'), blank=True, null=True,
- max_length=255)
- directions=models.CharField(_('directions'), blank=True, null=True,
- max_length=255)
- admission=models.CharField(_('Admission'), blank=True, null=True,
- max_length=100)
- description=models.TextField(_('description'), blank=True, null=True)
- features=models.ManyToManyField(Feature, blank=True, null=True)
- categories=models.ManyToManyField(Category)
- related_business=models.ForeignKey(Business, blank=True, null=True)
- class Meta:
- verbose_name=_('Attraction')
- verbose_name_plural=_('Attractions')
- ordering=('point__town', 'town', 'name')
- get_latest_by='created'
-
- def __unicode__(self):
- return u'%s' % self.name
-
- def get_absolute_url(self):
- return reverse('vs-attraction-detail', args=[self.slug])
- class Section(TimeStampedModel):
- '''
- Section model.
- A collection of attractions with a specific name that maps to a printed
- publication.
- Businesses may be selected using either whole categories of businesses, or
- by specifically specifying businesses to include, or a mix of both.
- '''
- title = models.CharField(_('Title'), max_length=255)
- slug=AutoSlugField(_('Slug'), editable=True,
- populate_from='title')
- published=models.BooleanField(_('Published'), default=False)
- pub_date=models.DateField(_('Publish date'))
- featured=models.BooleanField(_('Featured'), default=False)
- featured_on=models.DateTimeField(_('Featured on'), default=datetime.now(),
- blank=True, null=True)
- featured_until=models.DateTimeField(_('Featured until'),
- blank=True, null=True)
- logo=models.ImageField(_('Logo'), upload_to="marketplace/section/logos/",
- blank=True)
- logo_thumbnail=models.ImageField(_('Thumbnail of logo (optionl)'),
- upload_to="marketplace/section/logos/thumbnails/",
- blank=True, null=True,
- help_text='An optional thumbnail of the logo. If not used, a thumbnail will be generated from the logo.')
- tag_line=models.CharField(_('Tag line'), max_length=255,
- blank=True, null=True)
- brief_description=models.CharField(_('Brief description'), max_length=255,
- blank=True, null=True)
- description=models.TextField(_('Description'),blank=True,null=True)
- categories=models.ManyToManyField(Category, blank=True, null=True)
- businesses=models.ManyToManyField(Business, blank=True, null=True)
- attractions=models.ManyToManyField(Attraction, blank=True, null=True)
- template_name = models.CharField(_('template name'), max_length=70,
- blank=True,
- help_text=_("Example: 'visitors/sections/outdoor_handbook.html'. If this isn't provided, the system will use 'visitors/sections/default.html'."))
-
- class Meta:
- verbose_name=_('Section')
- verbose_name_plural=_('Sections')
- get_latest_by='featured_on'
-
- def __unicode__(self):
- return u'%s' % (self.title)
-
- def get_absolute_url(self):
- args=[self.slug]
- return reverse('vs-section-detail', args=args)
- class VisitorsEdition(TimeStampedModel):
- '''
- Visitors portal edition model.
- Similar to editions in the Newsroom application.
- '''
- title=models.CharField(_('Title'), max_length=100)
- brief_description=models.CharField(_('Brief description'), blank=True,
- null=True, max_length=255)
- featured_story=models.ForeignKey(Story, related_name='ve_featured_story', blank=True, null=True)
- featured_photo=models.ForeignKey(Photo, related_name='ve_featured_photo', blank=True, null=True)
- published_on=models.DateField(_('publish on'))
- published=models.BooleanField(_('published'), default=False)
- stories=models.ManyToManyField(Story, blank=True, null=True, help_text="Include the featured story in this list of all stories in this edition.")
- photos=models.ManyToManyField(Photo, blank=True, null=True, related_name="ve_photos")
- galleries=models.ManyToManyField(Gallery, blank=True, null=True, related_name="ve_galleries")
- movies=models.ManyToManyField(Movie, blank=True, null=True, related_name="ve_movies")
- slideshows=models.ManyToManyField(Slideshow, blank=True, null=True, related_name="ve_slideshows")
- pdfdocuments=models.ManyToManyField(PDFDocument, blank=True, null=True, related_name="ve_pdfdocs")
- guides=models.ManyToManyField(Guide, blank=True, null=True, related_name="ve_guides")
- sections=models.ManyToManyField(Section, blank=True, null=True, related_name="ve_sections")
-
- class Meta:
- verbose_name=_('Visitors edition')
- verbose_name_plural=_('Visitors editions')
- get_latest_by='published_on'
-
- def __unicode__(self):
- return u'Visitors edition - %s' % (self.published_on)
-
- def get_absolute_url(self):
- args=[self.slug]
- return reverse('vs-visitors-edition-detail', args=args)
|