from django.db import models from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.generic import GenericForeignKey from django.db import models, IntegrityError, transaction from django.template.defaultfilters import slugify from django.utils.translation import ugettext_lazy as _, ugettext from directory.models import Place from taggit.managers import TaggableManager from django_extensions.db.models import TimeStampedModel from documents.managers import PublishedManager class Document(TimeStampedModel): ACCESS_CHOICES = ( ("public", "Public"), ("private", "Private"), ("organization", "Organization"), ) title = models.CharField(verbose_name=_("Title"), max_length=255) slug = models.SlugField(verbose_name=_("Slug"), unique=True, max_length=200) description = models.TextField(_("Description"), blank=True, null=True) source = models.CharField(_("Source"), max_length=100) access = models.CharField( _("Access"), max_length=12, choices=ACCESS_CHOICES, default="public" ) published = models.BooleanField(_("published"), default=False) published_on = models.DateTimeField(_("published on")) preview = models.ImageField( _("preview"), upload_to="documents/previews", blank=True, null=True ) doc_cloud_id = models.SlugField( max_length=80, editable=False, null=True, blank=True ) tags = TaggableManager() objects = models.Manager() published_objects = PublishedManager() def __unicode__(self): return self.title class Meta: verbose_name = _("Document") verbose_name_plural = _("Documents") @models.permalink def get_absolute_url(self): return ( "dc-document-detail", (), { "year": self.published_on.year, "month": self.published_on.strftime("%b").lower(), "day": self.published_on.day, "slug": self.slug, }, ) @property def display(self): return True class TextDocument(Document): content = models.TextField( _("content"), blank=True, null=True, help_text="If document is plaintext, insert it here.", ) class Meta: verbose_name = _("Text Document") verbose_name_plural = _("Text Documents") @models.permalink def get_absolute_url(self): return ( "dc-text-document-detail", (), { "year": self.published_on.year, "month": self.published_on.strftime("%b").lower(), "day": self.published_on.day, "slug": self.slug, }, ) class PDFDocument(Document): file = models.FileField(_("file"), upload_to="documents/pdf/%Y/%b/%d") class Meta: verbose_name = _("PDF Document") verbose_name_plural = _("PDF Documents") @models.permalink def get_absolute_url(self): return ( "dc-pdf-document-detail", (), { "year": self.published_on.year, "month": self.published_on.strftime("%b").lower(), "day": self.published_on.day, "slug": self.slug, }, ) class ExcelDocument(Document): file = models.FileField(_("file"), upload_to="documents/excel/%Y/%b/%d") class Meta: verbose_name = _("Excel Document") verbose_name_plural = _("Excel Documents") @models.permalink def get_absolute_url(self): return ( "dc-xcl-document-detail", (), { "year": self.published_on.year, "month": self.published_on.strftime("%b").lower(), "day": self.published_on.day, "slug": self.slug, }, ) class WordDocument(Document): file = models.FileField(_("file"), upload_to="documents/word/%Y/%b/%d") class Meta: verbose_name = _("Word Document") verbose_name_plural = _("Word Documents") @models.permalink def get_absolute_url(self): return ( "dc-word-document-detail", (), { "year": self.published_on.year, "month": self.published_on.strftime("%b").lower(), "day": self.published_on.day, "slug": self.slug, }, )