Esempio n. 1
0
class Ressource(models.Model):
    """Model for representing a ressource"""
    album = models.ForeignKey(Album)
    related = models.ManyToManyField("self", blank=True)
    name = models.CharField(_('name'), max_length=250)

    description = models.TextField(_('description'), blank=True)

    image = FileBrowseField(_('image'),
                            max_length=255,
                            null=True,
                            blank=True,
                            default=None,
                            help_text=_("Mainly used as a thumbnails"))

    file_type = models.IntegerField(
        _('file type'),
        choices=settings.PORTICUS_RESSOURCE_FILETYPE_CHOICES,
        default=settings.PORTICUS_RESSOURCE_FILETYPE_DEFAULT)
    file = FileBrowseField(
        _('file'),
        max_length=255,
        null=True,
        blank=True,
        default=None,
        help_text=_(
            "Mainly used for original size image or a file to download"))
    file_url = models.URLField(
        _('file url'),
        blank=True,
        help_text=
        _("Same meaning that 'file' attribute but for an external file to use instead"
          ))

    publish = models.BooleanField(_('published'),
                                  choices=PUBLISHED_CHOICES,
                                  default=True)

    priority = models.IntegerField(_('display priority'), default=100)

    creation_date = models.DateTimeField(_('creation date'), editable=False)

    slug = models.SlugField(_('slug'), max_length=100)

    tags = TagField(_('tags'))

    objects = models.Manager()
    published = RessourcePublishedManager()

    def __unicode__(self):
        return self.name

    def get_tags(self):
        return Tag.objects.get_for_object(self)

    def get_file_kind(self):
        return dict(settings.PORTICUS_RESSOURCE_FILETYPES)[self.file_type]

    @property
    def get_file(self):
        """
        Main method to get the attached file without to search with file object and file_url
        """
        fileobject = None
        if self.file:
            fileobject = self.file.url

        try:
            return self.file_url or fileobject
        except ValueError, AttributeError:
            return None
Esempio n. 2
0
class Product(BaseModel):
    slug = models.SlugField(max_length=25, unique=True)
    title = models.CharField(max_length=255, verbose_name=_(u'Title'))
    #~ base content
    short_description = models.TextField(blank=True,
                                         verbose_name=_(u'Short description'))
    description = models.TextField(blank=True,
                                   verbose_name=_(u'Long description'))
    upc = models.CharField(null=True,
                           max_length=30,
                           verbose_name=_(u'Universal Product Code'))
    navimage = FileBrowseField("Navigation image",
                               max_length=200,
                               extensions=[".jpg", "png"],
                               null=True)
    #~ external keys
    brand = models.ForeignKey(Brand,
                              blank=True,
                              null=True,
                              on_delete=models.PROTECT,
                              verbose_name=_(u'Brand'))
    category = TreeForeignKey(Category,
                              related_name="products",
                              verbose_name=_(u'Category'))
    #~ prices
    price = models.FloatField(null=True, blank=True, verbose_name=_(u'Price'))
    available = models.BooleanField(default=True, verbose_name=_(u'Available'))
    #~ extra info
    extra = JSONField(blank=True, verbose_name=_(u'Extra infos'))
    status = models.CharField(max_length=20,
                              verbose_name=_(u'Status'),
                              choices=STATUSES,
                              default=STATUSES[1][0])
    content_type = models.CharField(max_length=100,
                                    default="product",
                                    editable=False)
    url = models.CharField(max_length=255, null=True, blank=True)

    class Meta:
        verbose_name = _(u'Product')
        verbose_name_plural = _(u'Products')
        order_with_respect_to = 'category'

    def __str__(self):
        return self.title

    def get_absolute_url(self):
        index = reverse("category-index")
        url = index + "product/" + self.slug + "/"
        return url

    def update_routes(self):
        call_command('build_products_routes', verbosity=0)
        return

    def save(self, *args, **kwargs):
        self.url = self.get_absolute_url()
        self.update_routes()
        super(Product, self).save(*args, **kwargs)
        return

    def delete(self, *args, **kwargs):
        super(Product, self).delete(*args, **kwargs)
        self.update_routes()
        return
Esempio n. 3
0
class FeaturedImage(models.Model):
    #image       = models.ImageField  (upload_to = 'images/customers/')
    #image2      = FilerImageField    (null=True, blank=True)
    image = FileBrowseField(max_length=200,
                            directory="images/",
                            extensions=[".jpg", ".jpeg", ".png",
                                        ".gif"])  #, blank=True, null=True)
    link = models.CharField(
        max_length=100,
        help_text="Product or page to link to - relative links OK")
    title = models.CharField(max_length=100,
                             blank=True,
                             help_text="Mouseover title - optional")
    caption = models.CharField(
        max_length=100,
        blank=True,
        help_text=
        "Image / Slide caption - optional, shown across bottom of image, such as <h2>My Caption</h2>"
    )
    #html_overlay = models.TextField  (blank=True,         help_text="HTML / Text overlay over image - optional")
    product = models.ForeignKey(
        Product,
        null=True,
        blank=True,
        help_text=
        'Product the featured image is talking about, optional, can use caption instead'
    )
    sortorder = models.IntegerField(
        default=100, help_text="Default order the slideshow is shown in")

    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)
    published = models.BooleanField(default=True)

    objects = PublishedManager()

    def __unicode__(self):
        return self.caption or self.title or self.image.url

    class Meta:
        ordering = ["sortorder"]

    def as_img(self):
        if trace: print self
        kw = dict(
            src=self.image.url,
            #d='#featured_%s' % self.id,
            alt=self.caption,
            title=self.title,
            data_link=self.link,
        )
        kw['data-link'] = kw.pop('data_link')

        return mark_safe(tags.img(**kw))

        # return mark_safe ('<img src="%s" alt="%s" title="%s" data-link="%s"/>' % (self.image.url, self.caption, self.title, self.link))
        # tagstream / TagGen?

    def as_caption(self):
        rslt = tags.span(self.caption,
                         cls='orbit-caption',
                         d='featured_caption_%s' %
                         self.id) if self.caption else ''

        return mark_safe(rslt)

    def as_content(self):
        kw = dict(cls='content', d='#featured_%s' % self.id)

        if self.caption:
            kw['data-caption'] = '#featured_caption_%s' % self.id

        rslt = tags.div(tags.a(self.as_img(), href=self.link), **kw)

        return mark_safe(rslt)
Esempio n. 4
0
class Club(models.Model):
    name = models.CharField(max_length=50)
    logo = FileBrowseField(max_length=500,
                           default="base/team_placeholder.png",
                           directory="/")
    founded = models.CharField(max_length=4,
                               blank=True,
                               help_text="Year in YYYY format")
    website = models.URLField(blank=True)
    facebook = models.URLField(blank=True)
    instagram = models.URLField(blank=True)
    # If Venue is deleted -> disallow and protect the club. Has to
    # delete the Venue first.
    venue = models.ForeignKey("Venue",
                              on_delete=models.PROTECT,
                              blank=True,
                              null=True)

    lat = models.DecimalField(max_digits=22,
                              decimal_places=16,
                              blank=True,
                              null=True)
    lng = models.DecimalField(max_digits=22,
                              decimal_places=16,
                              blank=True,
                              null=True)

    token = models.CharField(max_length=6, default=generate_uuidv4)

    @property
    def home_matches(self):
        return Match.objects.filter(home_team=self)

    @property
    def away_matches(self):
        return Match.objects.filter(away_team=self)

    @property
    def matches_won(self):
        as_home = self.home_matches.filter(
            home_touchdowns__gt=models.F("away_touchdowns")).count()
        as_away = self.away_matches.filter(
            away_touchdowns__gt=models.F("home_touchdowns")).count()
        return as_home + as_away

    @property
    def matches_lost(self):
        as_home = self.home_matches.filter(
            away_touchdowns__gt=models.F("home_touchdowns")).count()
        as_away = self.away_matches.filter(
            home_touchdowns__gt=models.F("away_touchdowns")).count()
        return as_home + as_away

    @property
    def matches_tied(self):
        as_home = self.home_matches.filter(
            away_touchdowns=models.F("home_touchdowns")).count()
        as_away = self.away_matches.filter(
            home_touchdowns=models.F("away_touchdowns")).count()
        return as_home + as_away

    @property
    def form(self):
        return 1

    @property
    def avg_touchdowns_scored(self):
        as_home_agg = self.home_matches.aggregate(
            avg_td=Coalesce(Avg("home_touchdowns"), V(0)))
        as_away_agg = self.away_matches.aggregate(
            avg_td=Coalesce(Avg("away_touchdowns"), V(0)))
        return round(as_home_agg["avg_td"] + as_away_agg["avg_td"], 2)

    @property
    def avg_touchdowns_conceded(self):
        as_home_agg = self.home_matches.aggregate(
            avg_td=Coalesce(Avg("away_touchdowns"), V(0)))
        as_away_agg = self.away_matches.aggregate(
            avg_td=Coalesce(Avg("home_touchdowns"), V(0)))
        return round(as_home_agg["avg_td"] + as_away_agg["avg_td"], 2)

    def __str__(self):
        return self.name

    class Meta:
        ordering = ['name']
Esempio n. 5
0
class Account(AbstractUser):
    RELATIONSHIP_CHOICES = (
        ('O', 'Other'),
        ('A', 'Accounting'),
        ('AA', 'Airlines/Aviation'),
        ('ADR', 'Alternative Dispute Resolution'),
    )
    INDUSTRY_CHOICES = (
        ('S', 'Single'),
        ('O', 'Other'),
        ('A', 'Analyst'),
        ('BA', 'Business Analyst'),
        ('BTA', 'Business Technology Analyst'),
        ('S', 'Student'),
        ('F', "Founder/Co-Founder"),
    )
    FUNCTION_CHOICES = (
        ('A', 'Accounting'),
        ('B', 'Business'),
        ('M', 'Married'),
        ('D', 'Divorced'),
        ('W', 'Widowed'),
        ('C', "It's complicated"),
    )
    active = models.BooleanField()
    date_of_birth = models.DateField(blank=True, null=True)
    marital_status = models.CharField(max_length=1,
                                      default='S',
                                      choices=RELATIONSHIP_CHOICES)
    kids = models.IntegerField(default=0)

    dp = FileBrowseField("Image",
                         max_length=200,
                         extensions=[".jpg", ".png", ".gif"],
                         blank=True,
                         null=True)

    educations = models.ManyToManyField('accounts.Organization',
                                        through='Education',
                                        related_name='mi_education')
    experiences = models.ManyToManyField('accounts.Organization',
                                         through='Experience',
                                         related_name='mi_experience')

    activities = TaggableManager(through='TaggedActivity')
    awards = TaggableManager(through='TaggedAward')
    certifications = TaggableManager(through='TaggedCertification')
    interests = TaggableManager(through='TaggedInterest')
    languages = TaggableManager(through='TaggedLanguage')
    skills = TaggableManager(through='TaggedSkill')

    origin_country = models.CharField(max_length=50, blank=True, null=True)
    origin_city = models.CharField(max_length=50, blank=True, null=True)
    current_country = models.CharField(max_length=50, blank=True, null=True)
    current_city = models.CharField(max_length=50, blank=True, null=True)

    industry = models.CharField(max_length=4,
                                default='O',
                                choices=INDUSTRY_CHOICES)
    function = models.CharField(max_length=4,
                                default='O',
                                choices=FUNCTION_CHOICES)
    objective = models.TextField(
        default="Put your educational or career goal here!")
    headline = models.TextField(default="Tell us a little bit about yourself!")
    unread = models.IntegerField(blank=True, null=True)

    supporters = models.ManyToManyField('self',
                                        through='Supporter',
                                        symmetrical=False,
                                        blank=True,
                                        null=True)
    purchases = models.ManyToManyField('campaigns.Campaign',
                                       through='transactions.Transaction',
                                       related_name='purchase',
                                       blank=True,
                                       null=True)

    def __unicode__(self):
        return u'%s' % (self.first_name + ' ' + self.last_name)
Esempio n. 6
0
class Event(CoreModel):
    """
    Evento
    """
    EVENT_IMAGE_PATH = "eventos/evento/"

    event_active = models.CharField(verbose_name=_(u"Ativar Evento"),
                                    max_length=1,
                                    choices=CHOICE_ACTIVE,
                                    default=ACTIVE,
                                    blank=False)
    event_title_menu = models.CharField(
        verbose_name=_(u"Título do Evento para o Menu"),
        max_length=255,
        blank=False,
        null=False,
        help_text=
        _(u"Título que vai no link à esquerda no Menu do Topo. Máximo 255 caracteres. Ex: Congresso"
          ))
    event_description_short = models.CharField(
        verbose_name=_(u"Descrição curta"),
        max_length=255,
        blank=False,
        null=False,
        help_text=
        _(u"Descrição curta para Buscadores e Redes sociais. Ex: Congresso Escoteiro Regional 2015"
          ))
    event_url = models.SlugField(
        verbose_name=_(u"Nome da URL do Evento"),
        unique=True,
        max_length=255,
        blank=False,
        null=False,
        help_text=_(u"Nome do link, ex: congresso-2015"))
    event_logo = FileBrowseField(
        verbose_name=_(u"Cabeçalho Logo"),
        directory=EVENT_IMAGE_PATH,
        max_length=200,
        blank=True,
        null=True,
        help_text=
        _(u"Para não distorcer e manter a responsividade, envie uma imagem com resolução de 300x300px."
          ))
    event_title = RichTextField(verbose_name=_(u"Cabeçalho Título"),
                                blank=True,
                                config_name='description')
    event_image_background = FileBrowseField(
        verbose_name=_(u"Cabeçalho Imagem de Fundo"),
        directory=EVENT_IMAGE_PATH,
        max_length=200,
        blank=True,
        null=True,
        help_text=
        _(u"Para não distorcer, envie uma imagem com resolução máxima de 2362x591px."
          ))
    event_social_image = FileBrowseField(
        verbose_name=_(u"Imagem para Redes Sociais"),
        directory=EVENT_IMAGE_PATH,
        max_length=200,
        blank=True,
        null=True,
        help_text=
        _(u"Imagem para exibir em links de Redes Sociais, como Facebook. Para imagem retangular envie em 600x315, para imagem quadrada envie em 200x200. Ou formatos maiores sempre mantendo a proporção."
          ))
    information_active = models.CharField(
        verbose_name=_(u"Exibir Bloco Informações"),
        max_length=1,
        choices=CHOICE_ACTIVE,
        default=ACTIVE,
        blank=False)
    information_title = RichTextField(verbose_name=_(u"Informações Título"),
                                      config_name='title',
                                      null=True,
                                      blank=True)
    information_text = RichTextField(verbose_name=_(u"Informações Texto"),
                                     config_name='description',
                                     null=True,
                                     blank=True)

    local_active = models.CharField(verbose_name=_(u"Exibir Bloco Local"),
                                    max_length=1,
                                    choices=CHOICE_ACTIVE,
                                    default=ACTIVE,
                                    blank=False)
    local_maps_name = models.CharField(
        verbose_name=_(u"Local no Maps"),
        max_length=500,
        blank=True,
        help_text=_(u"Nome do Local no Google Maps."))
    local_title = RichTextField(verbose_name=_(u"Local Título"),
                                config_name='title',
                                null=True,
                                blank=True)
    local_text = RichTextField(verbose_name=_(u"Local Texto"),
                               blank=True,
                               config_name='description')

    observation_active = models.CharField(
        verbose_name=_(u"Exibir Bloco Observações"),
        max_length=1,
        choices=CHOICE_ACTIVE,
        default=ACTIVE,
        blank=False)
    observation_title = RichTextField(verbose_name=_(u"Observações Título"),
                                      config_name='title',
                                      null=True,
                                      blank=True)
    observation_text = RichTextField(verbose_name=_(u"Observações Texto"),
                                     blank=True,
                                     config_name='description')

    list_events_active = models.CharField(
        verbose_name=_(u"Ativar Lista de Eventos"),
        max_length=1,
        choices=CHOICE_ACTIVE,
        default=ACTIVE,
        blank=False)
    list_events_title = RichTextField(
        verbose_name=_(u"Lista de Eventos Título"),
        config_name='title',
        null=True,
        blank=True)
    list_programations_active = models.CharField(
        verbose_name=_(u"Ativar Lista de Programações"),
        max_length=1,
        choices=CHOICE_ACTIVE,
        default=ACTIVE,
        blank=False)
    list_programations_title = RichTextField(
        verbose_name=_(u"Lista de Programações Título"),
        config_name='title',
        null=True,
        blank=True)

    class Meta:
        ordering = ["event_active"]
        db_table = "event_homepage"
        verbose_name = _(u"Evento")
        verbose_name_plural = _(u"Eventos")

    def __unicode__(self):
        text = strip_tags(self.event_title)
        if len(text) > 50:
            text = "%s..." % text[0:50]
        else:
            text = "%s" % text
        return mark_safe(text)

    def get_text(valor):
        return mark_safe(strip_tags(valor))

    def get_absolute_url(self):
        """
        URL absoluta do Evento
        """
        return reverse('events:event-homepage', args=(self.event_url, ))

    def get_url_preview(self):
        return reverse('events:event-preview', args=(self.event_url, ))

    def get_link_preview(self):
        return '<a href="%s" target="_blank">%s</a>' % (reverse(
            'events:event-preview',
            args=(self.event_url, )), unicode(_(u"Pré-visualizar")))

    def duplicate_save(self):
        obj_new = deepcopy(self)
        obj_new.id = None
        obj_new.event_title += "Cópia de %s" % (obj_new.event_title)
        obj_new.homepage_active = INACTIVE
        obj_new.save()
        return obj_new

    def is_information_active(self):
        if self.information_active == ACTIVE:
            return True
        else:
            return False

    def is_local_active(self):
        if self.local_active == ACTIVE:
            return True
        else:
            return False

    def is_observation_active(self):
        if self.observation_active == ACTIVE:
            return True
        else:
            return False

    def is_list_programations_active(self):
        if self.list_programations_active == ACTIVE:
            return True
        else:
            return False

    def get_event_logo(self):
        """
            retorna o caminho do logo do evento para montar a URL
        """
        if self.event_logo:
            return "%s/%s" % (settings.MEDIA_URL, self.event_logo)
        else:
            return False

    def get_event_image_background(self):
        if self.event_image_background:
            return "%s/%s" % (settings.MEDIA_URL, self.event_image_background)
        else:
            return os.path.join(settings.STATIC_URL, 'campotec', 'img',
                                'header.jpg')

    def get_event_social_image(self):
        """
            retorna o caminho do logo do evento para montar a URL
        """
        if self.event_logo:
            return "%s/%s" % (settings.MEDIA_URL, self.event_social_image)
        else:
            return ''

    def get_programation_list(self):
        """
        Busca apenas as programacoes ATIVAS do evento
        """
        return self.eventprogramation_set.filter(
            active=ACTIVE).order_by('date_time')
Esempio n. 7
0
class BannerHome(models.Model):

    SECAO_CHOICES = (('banner_principal', 'Banner principal'),
                     ('banner_729x90', 'Banner  729x90'), ('banner_729x90_1',
                                                           'Banner  729x90 2'),
                     ('banner_337x280', 'Banner 337x280'), ('banner_300x400',
                                                            'Banner 300x400'),
                     ('banner_729x90_footer', 'Banner 729x90 footer'))

    URL_EXTERNA = (
        ('sim', 'sim'),
        ('nao', 'não'),
    )

    secretaria = models.CharField(verbose_name='secretaria',
                                  max_length=60,
                                  choices=SECRETARIA_CHOICES,
                                  default='administracao')
    titulo = models.CharField(verbose_name='Titulo', max_length=250)
    slug = models.SlugField(verbose_name='URL (slug)',
                            unique=True,
                            max_length=250)
    texto = models.TextField(blank=True, null=True)
    publicacao = models.DateTimeField(verbose_name='publicação',
                                      auto_now_add=True)
    banner = FileBrowseField(
        verbose_name="banner",
        max_length=80,
        directory="videos/",
        blank=True,
        null=True,
        help_text="utilize o tamanho do banner de acordo com a seção")
    status = models.CharField(verbose_name='status',
                              max_length=11,
                              choices=STATUS_CHOICES,
                              default='rascunho')
    url_externa = models.CharField(verbose_name='url externa?',
                                   max_length=3,
                                   choices=URL_EXTERNA,
                                   default='nao')
    secao = models.CharField(verbose_name='seção',
                             choices=SECAO_CHOICES,
                             max_length=20)
    url = models.URLField(verbose_name='URL', blank=True, null=True)

    objects = models.Manager()
    publicado = Gerenciador()

    def get_absolute_url(self):
        return reverse("home:banner_detalhe", kwargs={"slug": self.slug})

    def save(self, *args, **kwargs):
        if self.slug == '':
            self.slug = slugify(self.titulo)
        super(BannerHome, self).save(*args, **kwargs)

    class Meta:
        db_table = 'tb_home_banner'
        verbose_name = 'Banner da home'
        verbose_name_plural = 'Banners da home'
        ordering = ['-publicacao']
        get_latest_by = 'publicacao'

    def __str__(self):
        return self.titulo
Esempio n. 8
0
 def test_model_field(self):
     f = FileBrowseField()
     self.assertEqual(f.db_parameters(connection)['type'], 'varchar(200)')
Esempio n. 9
0
class SliderPhoto(models.Model):
    """
        Store sliders photos
    """
    slider = models.ForeignKey(Slider)

    if IS_FILEBROWSER:
        image = FileBrowseField("Image",
                                max_length=255,
                                extensions=('.jpg', '.png'),
                                null=True,
                                blank=True)
    else:
        image = models.ImageField(upload_to='sliders/%Y/%m/%d',
                                  null=True,
                                  blank=True)

    video = models.CharField(_('Video'), max_length=255, null=True, blank=True)

    title = models.CharField(_('Title'), max_length=255, null=True, blank=True)
    description = models.TextField(_('Description'), null=True, blank=True)
    links_to = models.CharField(_('Links To'),
                                null=True,
                                blank=True,
                                max_length=255)

    content_type = models.ForeignKey(
        ContentType,
        null=True,
        blank=True,
        limit_choices_to=consts.SLIDE_CONTENT_TYPES,
        related_name='content_type')
    object_id = models.IntegerField(_('Object ID'), null=True, blank=True)
    content_object = generic.GenericForeignKey('content_type', 'object_id')

    is_active = models.BooleanField(_('Is active'), default=True)
    active_from = models.DateTimeField(null=True, blank=True)
    active_to = models.DateTimeField(null=True, blank=True)
    order = models.IntegerField(_('Order'), default=0)
    css_class = models.CharField(_('Css class'),
                                 null=True,
                                 blank=True,
                                 choices=consts.SLIDE_CSS_CLASSES,
                                 max_length=50)

    objects = SliderPhotoManager()

    class Meta:
        verbose_name = _('Slider photo')
        verbose_name_plural = _('Slider photos')
        ordering = ('order', )

    def __unicode__(self):
        return self.get_title()

    def get_title(self):
        return self.title or self.get_from_content_object('title')

    def get_image(self):
        return self.image or self.get_from_content_object('image')

    def get_video(self):
        return self.video or self.get_from_content_object('video')

    def get_description(self):
        return self.description or self.get_from_content_object('description')

    def get_absolute_url(self):
        if self.links_to:
            return self.links_to
        if self.content_object:
            return self.content_object.get_absolute_url()
        return '#'

    def get_from_content_object(self, field):
        if self.content_type:
            mapping_key = '%s.%s' % self.content_type.natural_key()
            mapping = consts.SLIDE_FIELDS_MAPPING.get(mapping_key)
            if mapping:
                field = mapping[field]
            return getattr(self.content_object, field, None)
        else:
            return getattr(self, field)
Esempio n. 10
0
class Cursos(AuditableModel, SlugModel):
    relacion = models.ForeignKey(
        "self",
        related_name="cursos_relacionados",
        null=True,
        blank=True,
        help_text='los cursos que tengan este campo vació apareceran \
         por defecto. los demas cursos deberan ser relacionados con su respectivo \
         representante')
    categoria = models.ForeignKey(CursosCategorias)
    # rubro = models.ManyToManyField(Rubros, blank=True)
    # idiomas = models.ManyToManyField(Idiomas, blank=True)
    rubro = ChainedManyToManyField(Rubros,
                                   chained_field="categoria",
                                   chained_model_field="categoria")
    idiomas = ChainedManyToManyField(Idiomas,
                                     chained_field="categoria",
                                     chained_model_field="categoria")
    posicion = models.PositiveIntegerField("Posición", default=1)
    nombre = models.CharField('Nombre', max_length=256)
    nombre_complex = models.CharField(
        'Nombre',
        max_length=256,
        help_text='encierre el texto a resaltar con < >')
    img = FileBrowseField('Imágen de Curso',
                          max_length=200,
                          directory='cursos/',
                          extensions=['.jpg', '.png'])
    #Categorización
    de_interes = models.BooleanField("Curso de interes", default=False)
    nuevo = models.BooleanField("Nuevo", default=False)
    online = models.BooleanField("Online", default=False)
    classroom = models.BooleanField("Classroom", default=False)
    webcast = models.BooleanField("Live WebCast", default=False)

    #Información
    inicio = models.DateField("Fecha de inicio", default=date.today)
    descript = RichTextField(config_name='small', verbose_name='Descripción')
    yt_img_usage = models.BooleanField(
        "Usar miniatura del Youtube como imagen de curso", default=False)

    video = models.URLField("Video de Youtube", max_length=1024, blank=True)
    video_id = models.CharField("Video de Youtube",
                                max_length=1024,
                                blank=True)

    vimeo = models.URLField("Video de Vimeo", max_length=1024, blank=True)
    vimeo_id = models.CharField("ID de Vimeo",
                                max_length=50,
                                blank=True,
                                null=True)

    archivo = models.FileField('Brochure',
                               upload_to='brochures/%Y/%m/%d/',
                               blank=True)
    fechas = models.CharField("Fechas", max_length=256)
    horarios = models.CharField("Horarios", max_length=256)
    lugar = models.CharField("Lugar", max_length=256)
    inversion = models.CharField("Inversión", max_length=256)
    #Meotodología y Docentes
    mt_show = models.BooleanField("Mostrar Metodología", default=True)
    mt_titulo = models.CharField("Título de Metodología",
                                 max_length=64,
                                 help_text='NUESTRA &lt;METODOLOGIA&gt;',
                                 blank=True)
    mt_descript = RichTextField(config_name='small',
                                verbose_name='Meotodología',
                                blank=True)
    dc_titulo = models.CharField("Título de Docentes",
                                 max_length=64,
                                 help_text='NUESTROS &lt;DOCENTES&gt;',
                                 blank=True)
    dc_descript = RichTextField(config_name='small',
                                verbose_name='Docentes',
                                blank=True)
    #Inversión
    iv_show = models.BooleanField("Mostrar inversión", default=True)
    iv_descript = RichTextField(config_name='small',
                                verbose_name='Descripción de Inversión',
                                blank=True)
    iv_tabla = RichTextField(config_name='default',
                             verbose_name='Tabla de Inversión',
                             blank=True,
                             default=tabla_def)
    iv_descript_pie = RichTextField(config_name='small',
                                    verbose_name='Pie de tabla de Inversión',
                                    blank=True)
    #Demo
    dm_show = models.BooleanField("Mostrar Demo", default=True)
    dm_titulo = models.CharField("Título",
                                 max_length=64,
                                 help_text='COURSE &lt;DEMO QUIZ&gt;',
                                 blank=True)
    dm_descript = RichTextField(config_name='small',
                                verbose_name='Descripción de Demo',
                                blank=True)
    dm_video = models.URLField("Video de Youtube", max_length=1024, blank=True)
    dm_video_id = models.CharField("ID Video de Youtube",
                                   max_length=1024,
                                   blank=True)

    #PayInfo
    cod = models.CharField("Codigo de curso", max_length=32, blank=True)
    # precio = models.PositiveIntegerField("Precio de curso", default=69)
    precio = models.DecimalField("Precio",
                                 max_digits=6,
                                 decimal_places=2,
                                 default=69)
    token = models.CharField('Token', blank=True, max_length=32)

    class Meta:
        verbose_name = u'curso'
        verbose_name_plural = u'Cursos'
        ordering = ['posicion']

    def getImg(self):
        if self.yt_img_usage and self.video_id:
            return 'https://img.youtube.com/vi/{0}/hqdefault.jpg'.format(
                self.video_id, )
        elif self.img:
            return self.img.url
        else:
            return ''

    def getDemoImg(self):
        if self.dm_video and self.dm_video_id:
            return 'https://img.youtube.com/vi/{0}/hqdefault.jpg'.format(
                self.video_id, )
        elif self.img:
            return self.img.url
        else:
            return ''

    def getModalidad(self):
        response = ''
        if self.online:
            response += ' Online'
        if self.classroom:
            response += ' Classroom'
        if self.webcast:
            response += ' Live WebCast'

        return response

    def getIdiomas(self):
        arr = []
        for row in self.idiomas.all():
            arr.append(row.nombre)
        return ', '.join(arr, )

    def getRubros(self):
        arr = []
        for row in self.rubro.all():
            arr.append(row.nombre)

        return ', '.join(arr, )

    def save(self, *args, **kwargs):
        import re
        if self.video:
            self.video_id = wYoutubeGetID(self.video_id, self.video)
            print self.video_id
        else:
            self.video_id = ''

        if self.dm_video:
            self.dm_video_id = wYoutubeGetID(self.dm_video_id, self.dm_video)
            print self.dm_video_id
        else:
            self.dm_video_id = ''
        if not self.cod:
            self.cod = str(uuid4())[:8]

        if not self.token:
            self.token = str(uuid4())[:20]

        if self.vimeo:
            self.vimeo_id = re.search(
                r'^(https://)?(www\.)?(vimeo\.com/)?(\d+)',
                self.vimeo).group(4)
        else:
            self.vimeo_id = ''

        super(Cursos, self).save(*args, **kwargs)

    def getContenidos(self):
        return Contenidos.objects.active().filter(
            curso=self).order_by('posicion')

    def getBeneficios(self):
        return Beneficios.objects.active().filter(
            curso=self).order_by('posicion')

    def getProfesores(self):
        return Profesores.objects.active().filter(
            cursos=self).order_by('posicion')

    def __unicode__(self):
        return u'{0}'.format(self.nombre, )
Esempio n. 11
0
class Event(models.Model):
    fb_image = FileBrowseField("Immagine", max_length=200, directory="events/",
        extensions=[".jpg", ".png", ".jpeg", ".gif", ".tif", ".tiff"],
        null=True, blank=True)
    carousel = StreamField(model_list=[ LandscapeGallery, ],
        null=True, blank=True, verbose_name="Galleria",
        help_text="Una sola galleria, per favore, larghezza minima immagini 2048px")
    title = models.CharField('Titolo',
        help_text="Il titolo dell'evento",
        max_length = 50)
    slug = models.SlugField(max_length=50, editable=False, null=True)
    date = models.DateTimeField('Quando', default = now)
    last_updated = models.DateTimeField(editable=False, null=True)
    location = models.ForeignKey(Location, on_delete=models.SET_NULL,
        null = True, verbose_name = 'Dove', )
    intro = models.CharField('Introduzione',
        default = 'Un altro appuntamento con RP!', max_length = 100)
    stream = StreamField(model_list=[ IndexedParagraph, CaptionedImage,
        Gallery, DownloadableFile, LinkableList, BoxedText, ],
        verbose_name="Lancio")
    upgrade_stream = StreamField(model_list=[ EventUpgrade, IndexedParagraph,
        DownloadableFile, ],
        verbose_name="Aggiornamenti")
    chron_stream = StreamField(model_list=[ IndexedParagraph, CaptionedImage,
        Gallery, DownloadableFile, LinkableList, BoxedText],
        verbose_name="Cronaca")
    restr_stream = StreamField(model_list=[ IndexedParagraph, CaptionedImage,
        Gallery, DownloadableFile, LinkableList, BoxedText],
        verbose_name="Area riservata",
        help_text="Inserisci qui materiale riservato ai soci",)
    manager = models.ForeignKey(User, on_delete=models.SET_NULL,
        blank= True, null=True, verbose_name = 'Responsabile')
    tags = TaggableManager(verbose_name="Categorie",
        help_text="Lista di categorie separate da virgole",
        through=None, blank=True)
    notice = models.CharField(max_length = 4, choices = NOTICE,
        blank = True, null = True, verbose_name = 'Notifica via email',
        help_text = """Non invia in automatico, per farlo seleziona l'Evento
            dalla Lista degli Eventi, imposta l'azione 'Invia notifica' e fai
            clic su 'Vai'.
            """)

    def get_badge_color(self):
        if self.date.date() > datetime.today().date():
            return 'success'
        elif self.date.date() < datetime.today().date():
            return 'secondary'
        else:
            return 'warning'

    def get_image(self):
        if self.fb_image:
            return self.fb_image
        elif self.location.fb_image:
            return self.location.fb_image
        return

    def get_tags(self):
        return list(self.tags.names())

    def get_upgrades(self):
        return EventUpgrade.objects.filter(event_id=self.id)

    def get_chronicle(self):
        if self.date.date() < datetime.today().date():
            return True
        return False

    def get_uploads(self):
        return UserUpload.objects.filter(event_id=self.id)

    def get_path(self):
        return '/calendario/' + self.date.strftime("%Y/%m/%d") + '/' + self.slug

    def save(self, *args, **kwargs):
        if not self.slug:
            self.slug = generate_unique_slug(Event, self.title)
        if not self.notice:
            self.notice = 'SPAM'
        self.last_updated = now()
        super(Event, self).save(*args, **kwargs)
        #update parent_type end parent_id in IndexedParagraph streamblocks
        type = ContentType.objects.get(app_label='pagine', model='event').id
        id = self.id
        stream_list = self.stream.from_json()
        update_indexed_paragraphs(stream_list, type, id)
        stream_list = self.upgrade_stream.from_json()
        update_indexed_paragraphs(stream_list, type, id)
        stream_list = self.chron_stream.from_json()
        update_indexed_paragraphs(stream_list, type, id)
        stream_list = self.restr_stream.from_json()
        update_indexed_paragraphs(stream_list, type, id)

    def __str__(self):
        return self.title

    class Meta:
        verbose_name = 'Evento'
        verbose_name_plural = 'Eventi'
        ordering = ('-date', )
Esempio n. 12
0
class SoundcloudTrack(models.Model):
    """
        Soundcloud track model - all these fields have been lifted as is from
        http://developers.soundcloud.com/docs/api/reference#tracks and then amended
        to a suitable django model with a quick bit of multiline editing in
        SublimeText.

        Note that the resources returned from the current Soundcloud python API
        do not have all fields so where they dont exist they've been removed and
        left out of the model definition & syncing.
    """

    id = models.IntegerField(primary_key=True)
    artwork_url = models.URLField(max_length=255, blank=True)
    bpm = models.CharField(max_length=255, blank=True)
    comment_count = models.IntegerField(max_length=255, blank=True, null=True)
    commentable = models.BooleanField(default=True)
    created_at = models.DateTimeField(max_length=255, blank=True, null=True)
    description = models.TextField(blank=True)
    download_count = models.IntegerField(max_length=255, blank=True, null=True)
    download_url = models.URLField(max_length=255, blank=True)
    downloadable = models.BooleanField(default=True)
    duration = models.CharField(max_length=255, blank=True)
    embeddable_by = models.CharField(max_length=255, blank=True)
    favoritings_count = models.IntegerField(max_length=255,
                                            blank=True,
                                            null=True)
    genre = models.CharField(max_length=255, blank=True)
    isrc = models.CharField(max_length=255, blank=True)
    key_signature = models.CharField(max_length=255, blank=True)
    label_id = models.IntegerField(max_length=255, blank=True, null=True)
    label_name = models.CharField(max_length=255, blank=True)
    license = models.CharField(max_length=255, blank=True)
    original_content_size = models.IntegerField(max_length=255,
                                                blank=True,
                                                null=True)
    original_format = models.CharField(max_length=255, blank=True)
    permalink = models.CharField(max_length=255, blank=True)
    permalink_url = models.URLField(max_length=255, blank=True)
    playback_count = models.IntegerField(max_length=255, blank=True, null=True)
    purchase_url = models.URLField(max_length=255, blank=True)
    release = models.CharField(max_length=255, blank=True)
    release_day = models.CharField(max_length=255, blank=True)
    release_month = models.CharField(max_length=255, blank=True)
    release_year = models.CharField(max_length=255, blank=True)
    sharing = models.CharField(max_length=255, blank=True)
    state = models.CharField(max_length=255, blank=True)
    stream_url = models.URLField(max_length=255, blank=True)
    streamable = models.BooleanField(default=True)
    tag_list = models.CharField(max_length=255, blank=True)
    title = models.CharField(max_length=255, blank=True)
    track_type = models.CharField(max_length=255, blank=True)
    uri = models.CharField(max_length=255, blank=True)
    user_id = models.IntegerField(max_length=255, blank=True, null=True)
    user_name = models.CharField(max_length=255, blank=True)
    user_permalink = models.CharField(max_length=255, blank=True)
    user_permalink_url = models.URLField(max_length=255, blank=True)
    user_uri = models.URLField(max_length=255, blank=True)
    user_avatar = models.CharField(max_length=255, blank=True)
    user_favorite = models.CharField(max_length=255, blank=True)
    video_url = models.URLField(max_length=255, blank=True)
    waveform_url = models.URLField(max_length=255, blank=True)

    # Add an image field that we will be using to populate with a cached
    # filebrowser bound image
    image = FileBrowseField(directory='soundcloud/',
                            format='image',
                            max_length=5096,
                            blank=True,
                            null=True)

    # And add in our usual other timestamps we use
    modified_at = models.DateTimeField(null=True, blank=True)
    modified_at.help_text = 'Last modification time for this track (sync-side)'
    synced_at = models.DateTimeField(null=True, blank=True)
    synced_at.help_text = 'The last time a sync was ran against this track'

    # Custom managers
    top = MostPlayedManager()
    recent = MostRecentManager()

    class Meta:
        ordering = ('-created_at', )

    @property
    def body(self):
        if self.custom_description != '':
            return self.custom_description

        return self.description

    def __unicode__(self):
        return '%s (%s)' % (self.title, self.id)

    def get_absolute_url(self):
        return reverse('soundcloud:detail', kwargs={'slug': self.permalink})
Esempio n. 13
0
class Invoice(models.Model):
    author = models.ForeignKey(Author, on_delete=models.CASCADE)
    invoice_num = models.IntegerField(default=0)
    # Fields whose default values are taken from Author
    identification = models.CharField(max_length=20,
                                      blank=True,
                                      help_text="SA ID, passport or some form "
                                      "of official identification")
    dob = models.DateField(blank=True,
                           null=True,
                           verbose_name="date of birth",
                           help_text="Required by SARS")
    address = models.TextField(blank=True, help_text="Required by SARS")
    bank_name = models.CharField(max_length=20, blank=True)
    bank_account_number = models.CharField(max_length=20,
                                           verbose_name="account",
                                           blank=True)
    bank_account_type = models.CharField(max_length=20,
                                         verbose_name="account type",
                                         default="CURRENT")
    bank_branch_name = models.CharField(max_length=20,
                                        blank=True,
                                        verbose_name="branch name",
                                        help_text="Unnecessary for Capitec, "
                                        "FNB, Standard, Nedbank and Absa")
    bank_branch_code = models.CharField(max_length=20,
                                        blank=True,
                                        verbose_name="branch code",
                                        help_text="Unnecessary for Capitec, "
                                        "FNB, Standard, Nedbank and Absa")
    swift_code = models.CharField(max_length=12,
                                  blank=True,
                                  help_text="Only relevant for banks "
                                  "outside SA")
    iban = models.CharField(max_length=34,
                            blank=True,
                            help_text="Only relevant for banks outside SA")
    tax_no = models.CharField(max_length=50,
                              blank=True,
                              verbose_name="tax number",
                              help_text="Necessary for SARS.")
    tax_percent = models.DecimalField(max_digits=2,
                                      decimal_places=0,
                                      default=25,
                                      verbose_name="PAYE %",
                                      help_text="Unless you have "
                                      "a tax directive "
                                      "we have to deduct 25% PAYE")
    vat = models.DecimalField(max_digits=2,
                              decimal_places=0,
                              default=0,
                              verbose_name="VAT %",
                              help_text="If you are VAT registered "
                              "set this to 15 else leave at 0")
    level = models.CharField(max_length=15,
                             choices=LEVEL_CHOICES,
                             default='standard')
    ####
    # paid = models.BooleanField(default=False)
    amount_paid = models.DecimalField(max_digits=8,
                                      decimal_places=2,
                                      default=0.00,
                                      verbose_name="amount")
    tax_paid = models.DecimalField(max_digits=8,
                                   decimal_places=2,
                                   default=0.00)
    vat_paid = models.DecimalField(max_digits=8,
                                   decimal_places=2,
                                   default=0.00)
    invoice = FileBrowseField(max_length=200,
                              directory="commissions/invoices/",
                              blank=True,
                              extensions=EXTENSIONS)
    proof = FileBrowseField(max_length=200,
                            directory="commissions/proofs/",
                            blank=True,
                            extensions=EXTENSIONS)
    status = models.CharField(max_length=2,
                              choices=INVOICE_STATUS_CHOICES,
                              default="-")
    notes = models.TextField(blank=True)
    query = models.TextField(blank=True,
                             max_length=3000,
                             help_text="Explain your query "
                             "here if you have one")
    date_time_reporter_approved = models.DateTimeField(null=True,
                                                       blank=True,
                                                       editable=False)
    date_time_editor_approved = models.DateTimeField(null=True,
                                                     blank=True,
                                                     editable=False)
    date_time_processed = models.DateTimeField(null=True,
                                               blank=True,
                                               editable=False)
    date_notified_payment = models.DateTimeField(null=True,
                                                 blank=True,
                                                 editable=False)
    our_reference = models.CharField(max_length=20, blank=True)
    their_reference = models.CharField(max_length=20, blank=True)
    created = models.DateTimeField(auto_now_add=True, editable=False)
    modified = models.DateTimeField(auto_now=True, editable=False)

    def calc_payment(self):
        commissions = Commission.objects.for_authors().\
                      filter(invoice=self)
        total_uncorrected = Decimal(0.00)
        total_paid = Decimal(0.00)
        total_tax = Decimal(0.00)
        total_vat = Decimal(0.00)
        for commission in commissions:
            (due, vat, tax, uncorrected) = commission.calc_payment()
            total_paid = total_paid + due
            total_vat = total_vat + vat
            total_tax = total_tax + tax
            total_uncorrected = total_uncorrected + uncorrected
        self.amount_paid = total_paid
        self.vat_paid = total_vat
        self.tax_paid = total_tax
        return (
            self.amount_paid,
            self.vat_paid,
            self.tax_paid,
            total_uncorrected,
        )

    def quick_calc_payment(self):
        if self.status >= "4":
            return (self.amount_paid, self.vat_paid, self.tax_paid,
                    self.amount_paid - self.vat_paid + self.tax_paid)
        else:
            return self.calc_payment()

    def __str__(self):
        return str(self.author.pk) + "-" + str(self.invoice_num) + " - " + \
            str(self.author) + " - " + self.get_status_display()

    def get_absolute_url(self):
        return reverse('payments:invoice.detail',
                       args=[self.author.pk, self.invoice_num])

    def short_string(self):
        return str(self.author.pk) + "-" + str(self.invoice_num)

    def save(self, *args, **kwargs):
        if self.status == "2":  # Reporter has approved
            if self.date_time_reporter_approved is None:
                self.date_time_reporter_approved = timezone.now()
        if self.status == "3":  # Editor has approved
            if self.date_time_editor_approved is None:
                self.date_time_editor_approved = timezone.now()
        if self.status == "4":  # Invoice has been paid
            if self.date_time_processed is None:
                self.date_time_processed = timezone.now()
        self.calc_payment()
        super(Invoice, self).save(*args, **kwargs)
        set_corresponding_vals(self, self.author)
        self.author.save()

    @staticmethod
    def create_invoice(author):
        max_invoice = Invoice.objects.filter(author=author).\
                  aggregate(Max('invoice_num'))
        if max_invoice["invoice_num__max"] is None:
            invoice_num = 1
        else:
            invoice_num = max_invoice["invoice_num__max"] + 1
        invoice = Invoice()
        invoice.author = author
        invoice.invoice_num = invoice_num
        set_corresponding_vals(author, invoice)
        invoice.save()
        return invoice

    @staticmethod
    def get_open_invoice_for_author(author):
        invoices = Invoice.objects.filter(author=author).\
                                   filter(status__lte="0")
        if len(invoices) == 0:
            invoice = Invoice.create_invoice(author)
        else:
            invoice = invoices[0]
            if invoice.status == "0":
                invoice.status = "-"
                invoice.save()
        return invoice

    class Meta:
        ordering = [
            'status',
            '-modified',
        ]
        unique_together = [
            'author',
            'invoice_num',
        ]
Esempio n. 14
0
File: models.py Progetto: eedeep/efo
class MagazineIssue(models.Model):
    """
    A Magazine Issue
    """
    magazine = models.ForeignKey(Magazine)

    issue_name = models.CharField(blank=True, null=True, max_length=255)

    slug = models.SlugField(blank=False,
                            editable=False,
                            max_length=250,
                            null=False,
                            unique=True)

    issue_date = models.DateField(blank=True, editable=False, null=True)

    issue_number = models.PositiveIntegerField(blank=True, null=True)

    issue_volume = models.PositiveIntegerField(blank=True, null=True)

    issue_month = models.CharField(blank=True,
                                   choices=MONTHS,
                                   max_length=100,
                                   null=True)

    issue_year = models.CharField(blank=True,
                                  choices=YEARS,
                                  max_length=10,
                                  null=True)

    cover_image = FileBrowseField("Issue cover",
                                  blank=True,
                                  directory="covers",
                                  max_length=250,
                                  null=True)

    class Meta:
        order_with_respect_to = 'magazine'
        ordering = [
            'magazine',
            '-issue_year',
            '-issue_number',
        ]

        # unique_together = [ 'issue_year', issue_name]

    def __unicode__(self):
        display_name_fields = [
            self.magazine.title, self.issue_name, self.issue_month,
            self._next_month, self.issue_year
        ]
        display_name_values = []

        for display_name_field in display_name_fields:
            if display_name_field:
                display_name_values.append(display_name_field)
        return u'%s' % (' '.join(display_name_values))

    @property
    def _next_month(self):
        if self.magazine.is_bimonthly:
            try:
                index = MONTHS.index((self.issue_month, self.issue_month))
            except:
                return None
            else:
                if index == (len(MONTHS) - 1):
                    return MONTHS[0][0]
                else:
                    return MONTHS[index + 1][0]
        else:
            return None

    @property
    def _display_month(self):
        if self._next_month:
            return u'%s/%s' % (self.issue_month, self._next_month)
        else:
            self.issue_month

    def save(self, *args, **kwargs):
        if not self.id:
            if self.issue_name:
                sluggable_string = self.issue_name
            else:
                sluggable_fields = [
                    self.magazine.title, self.issue_month, self._next_month,
                    self.issue_year, self.issue_number
                ]
                sluggable_string_values = []
                for sluggable_field in sluggable_fields:
                    if sluggable_field:
                        sluggable_string_values.append(sluggable_field)

                sluggable_string = ' '.join(sluggable_string_values)

            self.slug = SlugifyUniquely(sluggable_string, self.__class__)
        super(MagazineIssue, self).save(*args, **kwargs)

    @models.permalink
    def get_absolute_url(self):
        return (str(self.content_type()) + '_view', (), {
            'issue_slug': self.slug,
            'magazine_slug': self.magazine.slug
        })

    def content_type(self):
        return u'magazine_issue'

    def cover_image_exists(self):
        if self.cover_image and os.path.exists(
                os.path.join(settings.MEDIA_ROOT,
                             self.cover_image.path_relative)):
            return True
        return False

    def placeholder_image_url(self):
        return settings.MAGAZINE_COVER_PLACEHOLDER_IMAGE_PATH

    def is_from_the_archive(self):
        if self.archivearticle_set.all().count() > 0:
            return True
        return False

    def issue_display_name(self):
        if self.issue_name:
            return u'%s' % (self.issue_name)
        else:
            display_name_fields = [self._display_month, self.issue_year]
            display_name_values = []

            for display_name_field in display_name_fields:
                if display_name_field:
                    display_name_values.append(display_name_field)

        return u'%s' % (' '.join(display_name_values))
Esempio n. 15
0
class Album(MPTTModel):
    """Model representing an album"""
    gallery = models.ForeignKey(Gallery)

    parent = TreeForeignKey('self',
                            null=True,
                            blank=True,
                            related_name='children')

    name = models.CharField(_('name'), max_length=250)

    description = models.TextField(_('description'), blank=True)

    image = FileBrowseField(_('image'),
                            max_length=255,
                            null=True,
                            blank=True,
                            default=None)

    template_name = models.CharField(
        _('template'),
        max_length=255,
        help_text=_('Template used to render the album'),
        choices=settings.PORTICUS_ALBUM_TEMPLATE_CHOICES,
        default=settings.PORTICUS_ALBUM_TEMPLATE_DEFAULT)

    publish = models.BooleanField(_('published'),
                                  choices=PUBLISHED_CHOICES,
                                  default=True)

    priority = models.IntegerField(_('display priority'), default=100)

    creation_date = models.DateTimeField(_('creation date'), editable=False)

    slug = models.SlugField(_('slug'), unique=True, max_length=100)

    def __unicode__(self):
        return self.name

    objects = TreeManager()
    published = AlbumPublishedManager()

    #@models.permalink
    #def get_absolute_url(self):
    #return ('porticus:album-detail', (self.gallery.slug, self.slug,))

    def get_tags(self):
        """
        Return a queryset of tags used from album's ressources
        """
        return Tag.objects.get_for_object(self)

    def get_published_children(self):
        """
        Return all ressources for the album and all its children
        """
        return self.get_children().filter(publish=True)

    def get_published_descendants(self):
        """
        Return all ressources for the album and its direct descendants
        """
        return self.get_descendants().filter(publish=True)

    def get_published_ressources(self):
        """
        Return all ressources for the album
        """
        return self.ressource_set.filter(publish=True).order_by(
            'priority', 'name')

    def save(self, *args, **kwargs):
        """
        Fill 'creation_date' attribute on first create
        """
        if self.creation_date is None:
            self.creation_date = tz_now()

        super(Album, self).save(*args, **kwargs)

    class Meta:
        verbose_name = _('album')
        verbose_name_plural = _('albums')

    class MPTTMeta:
        order_insertion_by = ['gallery', 'priority', 'name']
Esempio n. 16
0
class Image(models.Model):
    title = models.CharField(max_length=200)
    slug = models.SlugField(unique=True)
    file = FileBrowseField(max_length=200, directory="images/", format='image', 
                           blank=True, null=True)
    preferred_size = models.CharField(max_length=1, choices=SIZES,
                        blank=True,
                        help_text=_('In some cases setting this can help HTML '
                                    'writers display the image display.'))
    caption = models.CharField(max_length=200, blank=True)
    url = models.URLField(blank=True, verify_exists=False,
                verbose_name=('URL'),
                help_text=_('URL for image to link to, usually the source.'))
    description = EnhancedTextField(blank=True, default="\W")
    credits = generic.GenericRelation(OrderedCredit, verbose_name=_('Credit',), 
                                      blank=True, null=True)
    copyright = models.ForeignKey(Copyright, blank=True, null=True)
    tags = generic.GenericRelation(TaggedItem, verbose_name=_('tags'), 
                                      blank=True, null=True) 
    last_modified = models.DateTimeField(auto_now=True, editable=False)
    date_added = models.DateTimeField(auto_now_add=True, editable=False)
             
    def image_thumbnail(self):
        if self.file and self.file.filetype == "Image":
            return '<img src="%s" />' % self.file.url_thumbnail
        else:        
            return ""

    image_thumbnail.allow_tags = True
    image_thumbnail.short_description = "Thumbnail"

    def _get_unique_slug(self):
        '''Makes slug unique, if it is not already, and returns it as a string.
        '''
        slug_unique = False
        counter = 1
        slug = self.slug
        
        while not slug_unique: 
            if self.id:
                images = Image.objects.filter(slug=slug).\
                    exclude(pk=self.id)
            else:                
                images = Image.objects.filter(slug=slug)
            if len(images) == 0:
                slug_unique = True
            else:
                slug = self.slug + "-" + unicode(counter)
                counter += 1
        return slug
        
    def get_credits(self):
        return credit_list(self.credits)

    def describe(self):
        if unicode(self.description).strip():
            return self.description
        else:
            return self.caption

    @models.permalink
    def get_absolute_url(self):
        return ('image_view', [str(self.id)])

    def __unicode__(self):
        return self.title
    
    class Meta:
        verbose_name = _('image')
        verbose_name_plural = _('images')
        ordering = ['-last_modified']
Esempio n. 17
0
class config(models.Model):
    ENABLED=(
        (1,"启用"),
    )
    enabled=models.IntegerField(unique=True,choices=ENABLED,blank=True,verbose_name="启用该设置")

    # 生产环境的域名(形如:http://*****,末尾不加/)
    domainName=models.CharField(max_length=99,verbose_name="域名")
    articlesPerPage=models.PositiveSmallIntegerField(verbose_name="首页每页显示的博客数",default=9)
    commentVerify=models.BooleanField(verbose_name="新评论是否默认隐藏",default=True)
    musicAutoPlay=models.BooleanField(default=False,verbose_name="背景音乐自动播放")
    qrCodeImage=FileBrowseField(max_length=99,blank=True,verbose_name="QR码URL")

    brand=models.CharField(max_length=19,blank=True,verbose_name="博客名")
    subBrand=models.CharField(max_length=99,blank=True,verbose_name="副博客名")

    ownerName=models.CharField(max_length=19,verbose_name="博主名")
    ownerBriefSelfIntro=models.CharField(max_length=999,blank=True,verbose_name="博主简介")
    ownerIcon=FileBrowseField(max_length=99,blank=True,verbose_name="博主头像")
    ownerSelfIntro=models.ForeignKey("flatPage",related_name="self_intro",verbose_name="自我介绍")

    ownerGithub=models.URLField(max_length=999,blank=True,verbose_name="GitHub")
    ownerGoogle=models.URLField(max_length=999,blank=True,verbose_name="Google")
    ownerTwitter=models.URLField(max_length=999,blank=True,verbose_name="Twitter")
    ownerWeibo=models.URLField(max_length=999,blank=True,verbose_name="微博")
    ownerWeiboBox=models.TextField(max_length=9999,blank=True,verbose_name="微博展示台")
    ownerEmail=models.EmailField(max_length=99,blank=True,verbose_name="邮箱")

    def __str__(self):
        return "【设置%s】"%(self.id,)

    def getOwnerIcon(self):
        '''
        get the owner's icon
        if there's an icon in config,use it; otherwise generate from gravatar
        '''
        import hashlib
        from urllib import parse
        if self.ownerIcon:return self.ownerIcon
        if self.ownerEmail:
            return "http://www.gravatar.com/avatar/"+ \
                   hashlib.md5(self.ownerEmail.lower().encode("utf-8")).hexdigest()+ \
                   "?"+ \
                   parse.urlencode({
                       "d":"http://www.gravatar.com/avatar/",
                       "size":"32"
                   })
        return ""

    def getSafeOwnerEmail(self):
        '''
        return a 'safe' email address
        '''
        if not self.ownerEmail:return ""
        return self.ownerEmail.replace("@",random.choice(["(#)","($)","(&)","(*)","(a)"]))

    def getBrand(self):
        '''获取正确的博客名'''
        if self.brand:return self.brand
        return self.ownerName+"的博客"

    class Meta:
        verbose_name="设置"
        verbose_name_plural=verbose_name
Esempio n. 18
0
class Invoice(models.Model):
    author = models.ForeignKey(Author, on_delete=models.CASCADE)
    invoice_num = models.IntegerField(default=0)

    # Fields whose default values are taken from Author
    identification = models.CharField(max_length=20,
                                      blank=True,
                                      help_text="SA ID, passport or some form "
                                      "of official identification")
    dob = models.DateField(blank=True,
                           null=True,
                           verbose_name="date of birth",
                           help_text="Required by SARS")
    invoicing_company = models.CharField(
        blank=True,
        max_length=100,
        help_text="Leave blank unless you invoice through a company")
    address = models.TextField(blank=True, help_text="Required by SARS")
    bank_name = models.CharField(max_length=20, blank=True)
    bank_account_number = models.CharField(max_length=20,
                                           verbose_name="account",
                                           blank=True)
    bank_account_type = models.CharField(max_length=20,
                                         verbose_name="account type",
                                         default="CURRENT")
    bank_branch_name = models.CharField(max_length=20,
                                        blank=True,
                                        verbose_name="branch name",
                                        help_text="Unnecessary for Capitec, "
                                        "FNB, Standard, Nedbank and Absa")
    bank_branch_code = models.CharField(max_length=20,
                                        blank=True,
                                        verbose_name="branch code",
                                        help_text="Unnecessary for Capitec, "
                                        "FNB, Standard, Nedbank and Absa")

    swift_code = models.CharField(max_length=12,
                                  blank=True,
                                  help_text="Only relevant for banks "
                                  "outside SA")
    iban = models.CharField(max_length=34,
                            blank=True,
                            help_text="Only relevant for banks outside SA")
    tax_no = models.CharField(max_length=50,
                              blank=True,
                              verbose_name="tax number",
                              help_text="Necessary for SARS.")
    tax_percent = models.DecimalField(max_digits=2,
                                      decimal_places=0,
                                      default=25,
                                      verbose_name="PAYE %",
                                      help_text="Unless you have "
                                      "a tax directive "
                                      "we have to deduct 25% PAYE")
    vat = models.DecimalField(max_digits=2,
                              decimal_places=0,
                              default=0,
                              verbose_name="VAT %",
                              help_text="If you are VAT registered "
                              "set this to 15 else leave at 0")
    level = models.CharField(max_length=15,
                             choices=LEVEL_CHOICES,
                             default='standard')
    ####
    # paid = models.BooleanField(default=False)
    amount_paid = models.DecimalField(max_digits=10,
                                      decimal_places=4,
                                      default=0.00,
                                      verbose_name="amount")
    tax_paid = models.DecimalField(max_digits=10,
                                   decimal_places=4,
                                   default=0.00)
    vat_paid = models.DecimalField(max_digits=10,
                                   decimal_places=4,
                                   default=0.00)
    invoice = FileBrowseField(max_length=200,
                              directory="commissions/invoices/",
                              blank=True,
                              extensions=EXTENSIONS)
    proof = FileBrowseField(max_length=200,
                            directory="commissions/proofs/",
                            blank=True,
                            extensions=EXTENSIONS)
    status = models.CharField(max_length=2,
                              choices=INVOICE_STATUS_CHOICES,
                              default="-")
    notes = models.TextField(blank=True)
    query = models.TextField(blank=True,
                             max_length=3000,
                             help_text="Explain your query "
                             "here if you have one")
    additional_emails = models.CharField(
        max_length=200,
        blank=True,
        help_text="Additional emails to notify "
        "separated by commas")
    date_time_reporter_approved = models.DateTimeField(null=True,
                                                       blank=True,
                                                       editable=False)
    date_time_editor_approved = models.DateTimeField(null=True,
                                                     blank=True,
                                                     editable=False)
    date_time_processed = models.DateTimeField(null=True,
                                               blank=True,
                                               editable=False)
    date_notified_payment = models.DateTimeField(null=True,
                                                 blank=True,
                                                 editable=False)

    # Requisition print fields
    requisition = models.BooleanField(default=False)
    requisition_number = models.CharField(blank=True, max_length=12)
    payment_method = models.CharField(blank=True, default="EFT", max_length=12)
    description = models.CharField(blank=True, max_length=200)
    fund = models.ForeignKey(Fund,
                             blank=True,
                             null=True,
                             on_delete=models.CASCADE)
    vouchers_attached = models.BooleanField(default=True)
    prepared_by = models.CharField(max_length=100, blank=True)
    approved_by = models.CharField(max_length=100, blank=True)
    authorised_by = models.CharField(max_length=100, blank=True)

    created = models.DateTimeField(auto_now_add=True, editable=False)
    modified = models.DateTimeField(auto_now=True, editable=False)

    def calc_payment(self):
        commissions = Commission.objects.for_authors().\
                      filter(invoice=self)
        total_uncorrected = Decimal(0.0000)
        total_paid = Decimal(0.0000)
        total_tax = Decimal(0.0000)
        total_vat = Decimal(0.0000)
        for commission in commissions:
            (due, vat, tax, uncorrected) = commission.calc_payment()
            total_paid = total_paid + due
            total_vat = total_vat + vat
            total_tax = total_tax + tax
            total_uncorrected = total_uncorrected + uncorrected
        self.amount_paid = total_paid
        self.vat_paid = total_vat
        self.tax_paid = total_tax
        return (
            self.amount_paid,
            self.vat_paid,
            self.tax_paid,
            total_uncorrected,
        )

    def quick_calc_payment(self):
        if self.status >= "4":
            return (self.amount_paid, self.vat_paid, self.tax_paid,
                    self.amount_paid - self.vat_paid + self.tax_paid)
        else:
            return self.calc_payment()

    def __str__(self):
        return str(self.author.pk) + "-" + str(self.invoice_num) + " - " + \
            str(self.author) + " - " + self.get_status_display()

    def get_absolute_url(self):
        return reverse('payments:invoice.detail',
                       args=[self.author.pk, self.invoice_num])

    def short_string(self):
        return str(self.author.pk) + "-" + str(self.invoice_num)

    def process_splits(self):
        commissions = self.commission_set.filter(split=True)
        if len(commissions) > 0:
            new_invoice = Invoice.create_invoice(self.author)
            for commission in commissions:
                commission.split = False
                commission.invoice = new_invoice
                commission.save()

    def invoice_type(self):
        if self.author.freelancer == "f":
            return "invoice"
        elif self.author.freelancer == "c":
            return "requisition"
        else:
            return "payment"

    def accepted_commissions(self):
        return self.commission_set.filter(fund__isnull=False).filter(
            deleted=False)

    def save(self, *args, **kwargs):
        try:
            with transaction.atomic():
                if self.status == "2":  # Reporter has approved
                    if self.date_time_reporter_approved is None:
                        self.date_time_reporter_approved = timezone.now()
                if self.status == "3":  # Editor has approved
                    if self.date_time_editor_approved is None:
                        self.date_time_editor_approved = timezone.now()
                if self.status == "4":  # Invoice has been paid
                    if self.date_time_processed is None:
                        self.date_time_processed = timezone.now()
                self.calc_payment()
                super(Invoice, self).save(*args, **kwargs)
                set_corresponding_vals(self, self.author)
                self.author.save()
                self.process_splits()
        except Exception as e:
            msg = "Error saving invoice: " + str(e)
            # messages.add_message(request, messages.ERROR, msg)
            print(msg)
            logger.error(msg)

    @staticmethod
    def create_invoice(author, description=None):
        max_invoice = Invoice.objects.filter(author=author).\
                  aggregate(Max('invoice_num'))
        if max_invoice["invoice_num__max"] is None:
            invoice_num = 1
        else:
            invoice_num = max_invoice["invoice_num__max"] + 1
        invoice = Invoice()
        invoice.author = author
        invoice.invoice_num = invoice_num
        if description:
            invoice.description = description
        set_corresponding_vals(author, invoice)
        invoice.save()
        return invoice

    @staticmethod
    def get_open_invoice_for_author(author):
        invoices = Invoice.objects.filter(author=author).\
                                   filter(status__lte="0")
        if len(invoices) == 0:
            invoice = Invoice.create_invoice(author)
        else:
            invoice = invoices[0]
            if invoice.status == "0":
                invoice.status = "-"
                invoice.save()
        return invoice

    @staticmethod
    def merge_invoices(from_invoice, to_invoice):
        for commission in from_invoice.commission_set.all():
            commission.invoice = to_invoice
            commission.save()
            from_invoice.status = "5"
        from_invoice.save()

    class Meta:
        ordering = [
            'status',
            '-modified',
        ]
        unique_together = [
            'author',
            'invoice_num',
        ]
Esempio n. 19
0
class VideoYoutube(models.Model):
    URL_EXTERNA = (
        ('sim', 'sim'),
        ('nao', 'não'),
    )

    SECAO_CHOICES = (
        ('vid_destaque', 'Destaque'),
        ('vid_videos_2', 'Videos secão 2'),
    )

    secretaria = models.CharField(verbose_name='secretaria',
                                  max_length=60,
                                  choices=SECRETARIA_CHOICES,
                                  default='administracao')
    titulo = models.CharField(verbose_name='Titulo', max_length=250)
    slug = models.SlugField(verbose_name='URL (slug)',
                            unique=True,
                            max_length=250)
    url = models.URLField(verbose_name='url do video',
                          max_length=80,
                          null=True,
                          blank=True)
    publicacao = models.DateTimeField(verbose_name='publicação',
                                      auto_now_add=True)
    imagem = FileBrowseField(verbose_name="image de destaque",
                             max_length=80,
                             directory="videos/",
                             blank=True,
                             null=True,
                             help_text="200x160. Imagem para video do youtube")
    secao = models.CharField(verbose_name='seção',
                             choices=SECAO_CHOICES,
                             max_length=20)
    status = models.CharField(verbose_name='status',
                              max_length=11,
                              choices=STATUS_CHOICES,
                              default='rascunho')
    embed = EmbedVideoField(verbose_name='embed', blank=True, null=True)
    url_externa = models.CharField(verbose_name='url externa?',
                                   max_length=3,
                                   choices=URL_EXTERNA,
                                   default='nao')
    objects = models.Manager()
    publicado = Gerenciador()

    class Meta:
        db_table = "tb_video_youtube"
        verbose_name = "Video Youtube"
        verbose_name_plural = "Videos Youtube"
        ordering = ['-publicacao']
        get_latest_by = 'publicacao'

    def get_absolute_url(self):
        return reverse("home:video_detalhe", kwargs={"slug": self.slug})

    def save(self, *args, **kwargs):
        if self.slug == '':
            self.slug = slugify(self.titulo)
        super(VideoYoutube, self).save(*args, **kwargs)

    def __str__(self):
        return self.titulo
Esempio n. 20
0
class TemplateSet(models.Model):
    organisationname = models.CharField(
        verbose_name=_("Name of the Organisation"), max_length=200)
    title = models.CharField(verbose_name=_("Title"), max_length=100)
    invoiceXSLFile = models.ForeignKey(XSLFile,
                                       verbose_name=_("XSL File for Invoice"),
                                       related_name="db_reltemplateinvoice")
    quoteXSLFile = models.ForeignKey(XSLFile,
                                     verbose_name=_("XSL File for Quote"),
                                     related_name="db_reltemplatequote")
    purchaseconfirmationXSLFile = models.ForeignKey(
        XSLFile,
        verbose_name=_("XSL File for Purchaseorder"),
        related_name="db_reltemplatepurchaseorder")
    deilveryorderXSLFile = models.ForeignKey(
        XSLFile,
        verbose_name=_("XSL File for Deilvery Order"),
        related_name="db_reltemplatedeliveryorder")
    profitLossStatementXSLFile = models.ForeignKey(
        XSLFile,
        verbose_name=_("XSL File for Profit Loss Statement"),
        related_name="db_reltemplateprofitlossstatement")
    balancesheetXSLFile = models.ForeignKey(
        XSLFile,
        verbose_name=_("XSL File for Balancesheet"),
        related_name="db_reltemplatebalancesheet")
    logo = FileBrowseField(verbose_name=_("Logo for the PDF generation"),
                           blank=True,
                           null=True,
                           max_length=200)
    bankingaccountref = models.CharField(
        max_length=60,
        verbose_name=_("Reference to Banking Account"),
        blank=True,
        null=True)
    addresser = models.CharField(max_length=200,
                                 verbose_name=_("Addresser"),
                                 blank=True,
                                 null=True)
    fopConfigurationFile = FileBrowseField(
        verbose_name=_("FOP Configuration File"),
        blank=True,
        null=True,
        max_length=200)
    footerTextsalesorders = models.TextField(
        verbose_name=_("Footer Text On Salesorders"), blank=True, null=True)
    headerTextsalesorders = models.TextField(
        verbose_name=_("Header Text On Salesorders"), blank=True, null=True)
    headerTextpurchaseorders = models.TextField(
        verbose_name=_("Header Text On Purchaseorders"), blank=True, null=True)
    footerTextpurchaseorders = models.TextField(
        verbose_name=_("Footer Text On Purchaseorders"), blank=True, null=True)
    pagefooterleft = models.CharField(max_length=40,
                                      verbose_name=_("Page Footer Left"),
                                      blank=True,
                                      null=True)
    pagefootermiddle = models.CharField(max_length=40,
                                        verbose_name=_("Page Footer Middle"),
                                        blank=True,
                                        null=True)

    class Meta:
        app_label = "djangoUserExtension"
        #app_label_koalix = _('Djang User Extention')
        verbose_name = _('Templateset')
        verbose_name_plural = _('Templatesets')

    def __unicode__(self):
        return str(self.id) + ' ' + self.title
Esempio n. 21
0
class Noticia(models.Model):

    SECAO_CHOICES = (
        ('ultimas_noticias', 'Últimas noticias'),
        ('not_destaque_1', 'Destaque 1'),
        ('not_destaque_2', 'Destaque 2'),
        ('not_secretarias', 'Secretarias'),
        ('not_antigas1', 'Antigas seção 1'),
        ('not_antigas2', 'Antigas seção 2'),
        ('not_antigas3', 'Antigas seção 3'),
        ('veja_tambem', 'Veja também'),
    )

    secretaria = models.CharField(verbose_name='secretaria',
                                  max_length=60,
                                  choices=SECRETARIA_CHOICES,
                                  default='administracao')
    titulo = models.CharField(verbose_name='título', max_length=250)
    slug = models.SlugField(verbose_name='URL (slug)',
                            unique=True,
                            max_length=250)
    legenda = models.CharField(verbose_name='legenda imagem')
    secao = models.CharField(verbose_name='seção',
                             choices=SECAO_CHOICES,
                             max_length=20)
    resumo = models.CharField(verbose_name='resumo',
                              max_length=140,
                              blank=True)
    conteudo = models.TextField(verbose_name='texto', blank=True)
    publicacao = models.DateTimeField(verbose_name='publicação',
                                      default=timezone.now)
    status = models.CharField(verbose_name='status',
                              max_length=11,
                              choices=STATUS_CHOICES,
                              default='rascunho')
    imagem = FileBrowseField(verbose_name='image de destaque',
                             max_length=80,
                             directory="noticias/",
                             blank=True,
                             null=True)
    legenda = models.CharField(verbose_name='legenda imagem',
                               max_length=80,
                               blank=True,
                               null=True)
    author = models.CharField(verbose_name='author',
                              max_length=60,
                              blank=True,
                              null=True)

    objects = models.Manager()
    publicado = Gerenciador()

    class Meta:
        db_table = "tb_noticia"
        verbose_name = "Noticia"
        verbose_name_plural = "Noticias"
        ordering = ['-publicacao']
        get_latest_by = '-publicacao'

    def get_absolute_url(self):
        return reverse("home:noticia_detalhe", kwargs={"slug": self.slug})

    def save(self, *args, **kwargs):
        if self.slug == '':
            self.slug = slugify(self.titulo)
        super(Noticia, self).save(*args, **kwargs)

    def __str__(self):
        return self.titulo
Esempio n. 22
0
class Picture(models.Model):
    picture = FileBrowseField(max_length=500)
    # If Gallery is deleted -> delete the pictures as well
    in_gallery = models.ForeignKey("Gallery", on_delete=models.CASCADE)