X-Git-Url: https://git.mdrn.pl/redakcja.git/blobdiff_plain/2bde30d633af49f2d3d40305e30df68c04dc0786..945eac1969985192b4f628ec68ac3468643cb9cd:/src/isbn/models.py?ds=sidebyside diff --git a/src/isbn/models.py b/src/isbn/models.py index 14e973d8..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') @@ -142,7 +176,7 @@ class Isbn(models.Model): add_note = False if isbn.book is None: isbn.book = catalogue_book - elif isbn.book is not catalogue_book: + elif isbn.book != catalogue_book: add_note = True if not isbn.form: isbn.form = form