Fix edition editing, add other identifiers

pull/1/head
eric 2013-04-13 10:59:11 -04:00
parent d977fd6338
commit 3c61e292d9
3 changed files with 74 additions and 18 deletions

View File

@ -16,7 +16,7 @@ from selectable.forms import AutoCompleteSelectWidget,AutoCompleteSelectField
from regluit.core.models import UserProfile, RightsHolder, Claim, Campaign, Premium, Ebook, Edition, PledgeExtra, Work, Press
from regluit.core.models import TWITTER, FACEBOOK, GRAVATAR
from regluit.core.lookups import OwnerLookup, WorkLookup
from regluit.core.lookups import OwnerLookup, WorkLookup, PublisherNameLookup
from regluit.utils.localdatetime import now
@ -27,10 +27,17 @@ logger = logging.getLogger(__name__)
class EditionForm(forms.ModelForm):
add_author = forms.CharField(max_length=500, required=False)
add_subject = forms.CharField(max_length=200, required=False)
isbn_13 = forms.RegexField(
publisher_name = AutoCompleteSelectField(
PublisherNameLookup,
label='Publisher Name',
widget=AutoCompleteSelectWidget(PublisherNameLookup),
required=False,
)
isbn = forms.RegexField(
label=_("ISBN"),
max_length=13,
regex=r'^97[89]\d\d\d\d\d\d\d\d\d\d$',
regex=r'^(97[89]\d\d\d\d\d\d\d\d\d\d|delete)$',
required = True,
help_text = _("13 digits, no dash."),
error_messages = {
@ -38,9 +45,39 @@ class EditionForm(forms.ModelForm):
'required': _("Yes, we need an ISBN."),
}
)
oclcnum = forms.RegexField(
goog = forms.RegexField(
label=_("Google Books ID"),
max_length=12,
regex=r'^([a-zA-Z0-9\-_]{12}|delete)$',
required = False,
help_text = _("12 alphanumeric characters, dash or underscore, case sensitive."),
error_messages = {
'invalid': _("This value must be 12 alphanumeric characters, dash or underscore."),
}
)
gdrd = forms.RegexField(
label=_("GoodReads ID"),
max_length=8,
regex=r'^(\d+|delete)$',
required = False,
help_text = _("1-8 digits."),
error_messages = {
'invalid': _("This value must be 1-8 digits."),
}
)
thng = forms.RegexField(
label=_("LibraryThing ID"),
max_length=8,
regex=r'(^\d+|delete)$',
required = False,
help_text = _("1-8 digits."),
error_messages = {
'invalid': _("This value must be 1-8 digits."),
}
)
oclc = forms.RegexField(
label=_("OCLCnum"),
regex=r'^\d\d\d\d\d\d\d\d\d*$',
regex=r'^(\d\d\d\d\d\d\d\d\d*|delete)$',
required = False,
help_text = _("8 or more digits."),
error_messages = {

View File

@ -4,6 +4,7 @@
<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.13/themes/ui-lightness/jquery-ui.css" type="text/css" media="screen">
{{ form.media.css }}
<script type="text/javascript" src="{{ jquery_ui_home }}" ></script>
{{ form.media.js }}
{% endblock %}
@ -20,6 +21,7 @@
{{ form.work }}
<div>
<p><b>Title</b>: {{ form.title.errors }}{{ form.title }}</p>
<p><b>Publisher</b>: {{ form.publisher_name.errors }}{{ form.publisher_name }}</p>
<p>
<b>Authors</b>:
@ -43,9 +45,14 @@
<input type="submit" name="add_author_submit" value="Add Author" id="submit_author"></p>
<p><b>Language</b>: {{ form.language.errors }}{{ form.language }}</p>
<p><b>ISBN-13</b>: {{ form.isbn_13.errors }}{{ form.isbn_13 }}</p>
<p><b>OCLC Number</b>: {{ form.oclcnum.errors }}{{ form.oclcnum }}</p>
<h4> Identifiers </h4>
{% if id_msg %} <span class="errorlist">{{ id_msg }} </span>{% endif %}
<p> Enter 'delete' to remove the identifier. </p>
<p><b>ISBN-13</b>: {{ form.isbn.errors }}{{ form.isbn }}</p>
<p><b>OCLC Number</b>: {{ form.oclc.errors }}{{ form.oclc }}</p>
<p><b>Google Books ID</b>: {{ form.goog.errors }}{{ form.goog }}</p>
<p><b>GoodReads ID</b>: {{ form.gdrd.errors }}{{ form.gdrd }}</p>
<p><b>LibraryThing ID</b>: {{ form.thng.errors }}{{ form.thng }}</p>
<p><b>Description</b>: <br />
{{ form.description.errors }}{{ form.description }}<br />

View File

@ -407,12 +407,20 @@ def new_edition(request, work_id, edition_id, by=None):
work.title=form.cleaned_data['title']
work.save()
# note: this is very powerful. it can steal an isbn from another edition/work, and it will wipe the changed isbn from the db
models.Identifier.set(type='isbn', value=form.cleaned_data['isbn_13'], edition=edition, work=work)
if form.cleaned_data['oclcnum']:
# note: this is very powerful.(same comment as for isbn) use with care!
models.Identifier.set(type='oclc', value=form.cleaned_data['oclcnum'], edition=edition, work=work)
id_msg=""
for id_type in ('isbn', 'oclc', 'goog', 'thng', 'gdrd'):
id_val = form.cleaned_data[id_type]
if id_val=='delete':
edition.identifiers.filter(type=id_type).delete()
elif id_val:
existing= models.Identifier.objects.filter(type=id_type, value=form.cleaned_data[id_type])
if existing.count() and existing[0].edition != edition:
return render(request, 'new_edition.html', {
'form': form, 'edition': edition,
'id_msg': "%s = %s already exists"%( id_type, id_val ),
})
else:
models.Identifier.set(type=id_type, value=id_val, edition=edition, work=work)
for author_name in edition.new_author_names:
try:
author= models.Author.objects.get(name=author_name)
@ -430,14 +438,18 @@ def new_edition(request, work_id, edition_id, by=None):
else:
form = EditionForm(instance=edition, initial={
'language':language,
'isbn_13':edition.isbn_13,
'oclcnum':edition.oclc,
'publisher_name':edition.publisher_name,
'isbn':edition.isbn_13,
'oclc':edition.oclc,
'description':description,
'title': title
'title': title,
'goog': edition.googlebooks_id,
'gdrd': edition.goodreads_id,
'thng': edition.librarything_id,
})
return render(request, 'new_edition.html', {
'form': form, 'edition': edition
'form': form, 'edition': edition,
})