X-Git-Url: https://git.mdrn.pl/redakcja.git/blobdiff_plain/14f2c24a604e36cad62ba9f6f8d71bf500f8e35a..491078616e2129745f300c1f0357f5bac52e801d:/src/isbn/models.py?ds=sidebyside diff --git a/src/isbn/models.py b/src/isbn/models.py index 43d01bfc..5c9bb449 100644 --- a/src/isbn/models.py +++ b/src/isbn/models.py @@ -1,3 +1,4 @@ +from datetime import date from django.apps import apps from django.db import models from lxml import etree @@ -114,6 +115,39 @@ class Isbn(models.Model): def get_code(self, dashes=True): return self.pool.get_code(self.suffix, dashes=dashes) + @classmethod + def get_for_book(cls, book, form): + isbn = cls.objects.filter(book=book, form=form).first() + if isbn is None: + return cls.assign(book, form) + return isbn + + @classmethod + def assign(cls, book, form): + pool = IsbnPool.objects.filter(purpose=IsbnPool.PURPOSE_WL).first() + suffix = pool.isbn_set.aggregate(s=models.Max('suffix'))['s'] + 1 + assert suffix <= pool.suffix_to + return pool.isbn_set.create( + book=book, form=form, suffix=suffix, datestamp=date.today() + ) + + @classmethod + def formats_from_document(cls, document): + # This is a document + try: + meta = document.wldocument(librarian2=True).meta + except: + return [] + is_parent = len(meta.parts) + formats = [] + for form, config in FORMS: + if config.book and (not is_parent or config.parent): + formats.append(( + form, + getattr(meta, f'isbn_{form}') + )) + return formats + @classmethod def import_from_documents(cls): Book = apps.get_model('documents', 'Book')