X-Git-Url: https://git.mdrn.pl/redakcja.git/blobdiff_plain/13f286427e0ceb7a6c442844c447c7c3d5495871..f769689fb6c21d76aa70f4113ba918e45b528576:/src/catalogue/models.py diff --git a/src/catalogue/models.py b/src/catalogue/models.py index 151a13e4..1aa145c8 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'), @@ -130,6 +139,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) @@ -294,6 +344,12 @@ class Book(WikidataModel): 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) @@ -314,6 +370,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') @@ -498,3 +557,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',)