+from datetime import date
from django.apps import apps
from django.db import models
from lxml import etree
max_length=32, choices=[
(form, form)
for form, config in FORMS
- ], null=True, blank=True
+ ], blank=True
)
bn_data = models.TextField(blank=True)
wl_data = models.TextField(blank=True)
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')
isbn, created = pool.isbn_set.get_or_create(
suffix=suffix,
)
+ add_note = False
if isbn.book is None:
isbn.book = catalogue_book
- else:
- assert isbn.book is catalogue_book
- if isbn.form is None:
+ elif isbn.book != catalogue_book:
+ add_note = True
+ if not isbn.form:
isbn.form = form
- else:
- assert isbn.form == form
- isbn.save(update_fields=['book', 'form'])
+ elif isbn.form != form:
+ add_note = True
+ if add_note:
+ isbn.notes += '\n\n' + catalogue_book.slug + ' ' + form
+ isbn.save(update_fields=['book', 'form', 'notes'])