X-Git-Url: https://git.mdrn.pl/redakcja.git/blobdiff_plain/cf5dddce80a2b4fe4d5f8c87cc709050c0efb36e..573b9004c7bc2a6a2b29335155b4ff55d142c6b6:/src/catalogue/models.py?ds=inline diff --git a/src/catalogue/models.py b/src/catalogue/models.py index 8bcf4e00..d2befb90 100644 --- a/src/catalogue/models.py +++ b/src/catalogue/models.py @@ -30,10 +30,15 @@ class Author(WikidataModel): gender = models.CharField(_("gender"), max_length=255, blank=True) nationality = models.CharField(_("nationality"), max_length=255, blank=True) + year_of_birth = models.SmallIntegerField(_("year of birth"), null=True, blank=True) year_of_birth_inexact = models.BooleanField(_("inexact"), default=False) year_of_birth_range = models.SmallIntegerField(_("year of birth, range end"), null=True, blank=True) date_of_birth = models.DateField(_("date_of_birth"), null=True, blank=True) + century_of_birth = models.SmallIntegerField( + _("century of birth"), null=True, blank=True, + help_text=_('Set if year unknown. Negative for BC.') + ) place_of_birth = models.ForeignKey( 'Place', models.PROTECT, null=True, blank=True, verbose_name=_('place of birth'), @@ -43,6 +48,10 @@ class Author(WikidataModel): year_of_death_inexact = models.BooleanField(_("inexact"), default=False) year_of_death_range = models.SmallIntegerField(_("year of death, range end"), null=True, blank=True) date_of_death = models.DateField(_("date_of_death"), null=True, blank=True) + century_of_death = models.SmallIntegerField( + _("century of death"), null=True, blank=True, + help_text=_('Set if year unknown. Negative for BC.') + ) place_of_death = models.ForeignKey( 'Place', models.PROTECT, null=True, blank=True, verbose_name=_('place of death'), @@ -76,6 +85,8 @@ class Author(WikidataModel): ) collections = models.ManyToManyField("Collection", blank=True, verbose_name=_("collections")) + woblink = models.IntegerField(null=True, blank=True) + class Meta: verbose_name = _('author') verbose_name_plural = _('authors') @@ -130,6 +141,47 @@ class Author(WikidataModel): ) return t + def century_description(self, number): + n = abs(number) + letters = '' + while n > 10: + letters += 'X' + n -= 10 + if n == 9: + letters += 'IX' + n = 0 + elif n >= 5: + letters += 'V' + n -= 5 + if n == 4: + letters += 'IV' + n = 0 + letters += 'I' * n + letters += ' w.' + if number < 0: + letters += ' p.n.e.' + return letters + + def birth_century_description(self): + return self.century_description(self.century_of_birth) + + def death_century_description(self): + return self.century_description(self.century_of_death) + + def year_description(self, number): + n = abs(number) + letters = str(n) + letters += ' r.' + if number < 0: + letters += ' p.n.e.' + return letters + + def year_of_birth_description(self): + return self.year_description(self.year_of_birth) + def year_of_death_description(self): + return self.year_description(self.year_of_death) + + class NotableBook(OrderableModel): author = models.ForeignKey(Author, models.CASCADE) book = models.ForeignKey('Book', models.CASCADE) @@ -288,6 +340,18 @@ class Book(WikidataModel): def translators_last_names(self): return ', '.join(a.last_name for a in self.translators.all()) + def document_book__project(self): + b = self.document_books.first() + if b is None: return '' + if b.project is None: return '' + return b.project.name + + def audience(self): + try: + return self.document_books.first().wldocument().book_info.audience or '' + except: + return '' + def get_estimated_costs(self): return { work_type: work_type.calculate(self) @@ -308,6 +372,9 @@ class Book(WikidataModel): if pbr is not None and pbr.timestamp.date() > cutoff: months = (this_month - pbr.timestamp.date()).days / 365 * 12 + if not months: + return + stats = self.bookmonthlystats_set.filter(date__gte=cutoff).aggregate( views_page=models.Sum('views_page'), views_reader=models.Sum('views_reader') @@ -492,3 +559,14 @@ class BookMonthlyStats(models.Model): defaults={which: views} ) book.update_monthly_stats() + + +class Thema(models.Model): + code = models.CharField(max_length=128, unique=True) + name = models.CharField(max_length=1024) + description = models.TextField(blank=True) + usable = models.BooleanField() + hidden = models.BooleanField(default=False) + + class Meta: + ordering = ('code',)