Support for prefix and suffix additions to call numbers.
authorArt Rhyno <art632000@yahoo.ca>
Sat, 9 Jul 2011 03:15:47 +0000 (23:15 -0400)
committerArt Rhyno <art632000@yahoo.ca>
Sat, 9 Jul 2011 03:15:47 +0000 (23:15 -0400)
Signed-off-by: Art Rhyno <art632000@yahoo.ca>
conifer/libsystems/evergreen/opensrf.py
conifer/syrup/migrations/0018_auto__add_field_item_orig_prefix__add_field_item_orig_suffix__chg_fiel.py [new file with mode: 0644]
conifer/syrup/models.py
conifer/syrup/views/items.py
conifer/syrup/views/sites.py
conifer/templates/components/site.xhtml
conifer/templates/item/common_metadata.xhtml
docs/images/course_example.jpg [new file with mode: 0755]
docs/images/course_examples.jpg [new file with mode: 0755]
docs/images/course_menu.jpg [new file with mode: 0755]
docs/images/site_menu.jpg [new file with mode: 0755]

index 9db25da..cd5098b 100644 (file)
@@ -103,7 +103,11 @@ def ils_item_info(barcode):
    
                call_num = req.send()
                if call_num:
-                       return barcode_copy.circ_modifier(), barcode_copy.location().id(), call_num.label()
+                       print "req", call_num
+                       print "label", call_num.label()
+                       print "prefix", call_num.prefix()
+                       print "suffix", call_num.suffix()
+                       return barcode_copy.circ_modifier(), barcode_copy.location().id(), call_num.prefix(), call_num.label(), call_num.suffix()
     except:
             print "problem retrieving item info"
             print "*** print_exc:"
@@ -295,7 +299,7 @@ def ils_patron_lookup(name, is_staff=True, is_usrname=False, is_everyone=False):
     return out
 
 
-def ils_item_update(barcode, callno, modifier, location):
+def ils_item_update(barcode, prefix, callno, suffix, modifier, location):
     item_changed = False
     callno_changed = False
 
@@ -346,7 +350,9 @@ def ils_item_update(barcode, callno, modifier, location):
                
         # on to call number
         if authtoken and callno_changed:
+            call_num.prefix(prefix)
             call_num.label(callno)
+            call_num.suffix(suffix)
             call_num.ischanged(True)
 
             # volume.fleshed.batch.update expects an array of call number objects 
@@ -356,7 +362,7 @@ def ils_item_update(barcode, callno, modifier, location):
                 authtoken, acn, False, None)
                
             result = req.send()
-                   # print "callno result", result
+            # print "callno result", result
         
             #clean up session
             session_cleanup(authtoken)
diff --git a/conifer/syrup/migrations/0018_auto__add_field_item_orig_prefix__add_field_item_orig_suffix__chg_fiel.py b/conifer/syrup/migrations/0018_auto__add_field_item_orig_prefix__add_field_item_orig_suffix__chg_fiel.py
new file mode 100644 (file)
index 0000000..9a32a1f
--- /dev/null
@@ -0,0 +1,210 @@
+# encoding: utf-8
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+class Migration(SchemaMigration):
+
+    def forwards(self, orm):
+        
+        # Adding field 'Item.orig_prefix'
+        db.add_column('syrup_item', 'orig_prefix', self.gf('django.db.models.fields.CharField')(max_length=25, null=True, blank=True), keep_default=False)
+
+        # Adding field 'Item.orig_suffix'
+        db.add_column('syrup_item', 'orig_suffix', self.gf('django.db.models.fields.CharField')(max_length=25, null=True, blank=True), keep_default=False)
+
+        # Changing field 'Item.circ_modifier'
+        db.alter_column('syrup_item', 'circ_modifier', self.gf('django.db.models.fields.CharField')(max_length=50))
+
+
+    def backwards(self, orm):
+        
+        # Deleting field 'Item.orig_prefix'
+        db.delete_column('syrup_item', 'orig_prefix')
+
+        # Deleting field 'Item.orig_suffix'
+        db.delete_column('syrup_item', 'orig_suffix')
+
+        # Changing field 'Item.circ_modifier'
+        db.alter_column('syrup_item', 'circ_modifier', self.gf('django.db.models.fields.CharField')(max_length=10))
+
+
+    models = {
+        'auth.group': {
+            'Meta': {'object_name': 'Group'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
+            'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'blank': 'True'})
+        },
+        'auth.permission': {
+            'Meta': {'ordering': "('content_type__app_label', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
+            'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
+        },
+        'auth.user': {
+            'Meta': {'object_name': 'User'},
+            'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
+            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+            'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+            'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+            'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+            'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'blank': 'True'}),
+            'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
+        },
+        'contenttypes.contenttype': {
+            'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
+            'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
+        },
+        'syrup.config': {
+            'Meta': {'object_name': 'Config'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '256'}),
+            'value': ('django.db.models.fields.CharField', [], {'max_length': '8192'})
+        },
+        'syrup.course': {
+            'Meta': {'ordering': "['code']", 'object_name': 'Course'},
+            'code': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '64'}),
+            'coursenotes': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+            'department': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['syrup.Department']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'last_modified': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '1024'})
+        },
+        'syrup.declaration': {
+            'Meta': {'object_name': 'Declaration'},
+            'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'item': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['syrup.Item']"}),
+            'last_modified': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
+            'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
+        },
+        'syrup.department': {
+            'Meta': {'ordering': "['name']", 'object_name': 'Department'},
+            'active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+            'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'last_modified': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '256'}),
+            'service_desk': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['syrup.ServiceDesk']"})
+        },
+        'syrup.group': {
+            'Meta': {'ordering': "['site__course__code', 'site__course__name', 'external_id']", 'object_name': 'Group'},
+            'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+            'external_id': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'last_modified': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
+            'site': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['syrup.Site']"})
+        },
+        'syrup.item': {
+            'Meta': {'ordering': "['title', 'author', 'published']", 'object_name': 'Item'},
+            'author': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '8192', 'null': 'True', 'blank': 'True'}),
+            'barcode': ('django.db.models.fields.CharField', [], {'max_length': '14', 'null': 'True', 'blank': 'True'}),
+            'bib_id': ('django.db.models.fields.CharField', [], {'max_length': '256', 'null': 'True', 'blank': 'True'}),
+            'circ_desk': ('django.db.models.fields.CharField', [], {'default': "'821'", 'max_length': '5', 'blank': 'True'}),
+            'circ_modifier': ('django.db.models.fields.CharField', [], {'default': "'CIRC'", 'max_length': '50', 'blank': 'True'}),
+            'copyright_status': ('django.db.models.fields.CharField', [], {'default': "'UK'", 'max_length': '2'}),
+            'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+            'evergreen_update': ('django.db.models.fields.CharField', [], {'default': "'One'", 'max_length': '4', 'blank': 'True'}),
+            'fileobj': ('django.db.models.fields.files.FileField', [], {'default': 'None', 'max_length': '255', 'null': 'True', 'blank': 'True'}),
+            'fileobj_mimetype': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),
+            'fileobj_origname': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'isbn': ('django.db.models.fields.CharField', [], {'max_length': '17', 'null': 'True', 'blank': 'True'}),
+            'issue': ('django.db.models.fields.CharField', [], {'max_length': '64', 'null': 'True', 'blank': 'True'}),
+            'item_type': ('django.db.models.fields.CharField', [], {'max_length': '7'}),
+            'itemnotes': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'itemtype': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '1', 'null': 'True', 'blank': 'True'}),
+            'last_modified': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
+            'marcxml': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'orig_callno': ('django.db.models.fields.CharField', [], {'max_length': '64', 'null': 'True', 'blank': 'True'}),
+            'orig_prefix': ('django.db.models.fields.CharField', [], {'max_length': '25', 'null': 'True', 'blank': 'True'}),
+            'orig_suffix': ('django.db.models.fields.CharField', [], {'max_length': '25', 'null': 'True', 'blank': 'True'}),
+            'pages': ('django.db.models.fields.CharField', [], {'max_length': '64', 'null': 'True', 'blank': 'True'}),
+            'parent_heading': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['syrup.Item']", 'null': 'True', 'blank': 'True'}),
+            'published': ('django.db.models.fields.CharField', [], {'max_length': '64', 'null': 'True', 'blank': 'True'}),
+            'publisher': ('django.db.models.fields.CharField', [], {'max_length': '8192', 'null': 'True', 'blank': 'True'}),
+            'site': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['syrup.Site']"}),
+            'source_title': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '8192', 'null': 'True', 'blank': 'True'}),
+            'suppress_item': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'title': ('django.db.models.fields.CharField', [], {'max_length': '8192', 'db_index': 'True'}),
+            'url': ('django.db.models.fields.URLField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'}),
+            'volume': ('django.db.models.fields.CharField', [], {'max_length': '64', 'null': 'True', 'blank': 'True'})
+        },
+        'syrup.membership': {
+            'Meta': {'ordering': "['user__username', 'group__site__course__code', 'group__site__course__name', 'group__external_id']", 'unique_together': "(('group', 'user'),)", 'object_name': 'Membership'},
+            'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+            'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['syrup.Group']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'last_modified': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
+            'role': ('django.db.models.fields.CharField', [], {'default': "'STUDT'", 'max_length': '6'}),
+            'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
+        },
+        'syrup.servicedesk': {
+            'Meta': {'ordering': "['name']", 'object_name': 'ServiceDesk'},
+            'active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+            'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+            'external_id': ('django.db.models.fields.CharField', [], {'max_length': '256', 'null': 'True', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'last_modified': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'})
+        },
+        'syrup.site': {
+            'Meta': {'ordering': "['course__code', 'owner__last_name', '-start_term__start']", 'unique_together': "(('course', 'start_term', 'owner'),)", 'object_name': 'Site'},
+            'access': ('django.db.models.fields.CharField', [], {'default': "'ANON'", 'max_length': '5'}),
+            'course': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['syrup.Course']"}),
+            'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+            'end_term': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'end_term'", 'to': "orm['syrup.Term']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'last_modified': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
+            'owner': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}),
+            'service_desk': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['syrup.ServiceDesk']"}),
+            'sitenotes': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'start_term': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'start_term'", 'to': "orm['syrup.Term']"})
+        },
+        'syrup.term': {
+            'Meta': {'ordering': "['start', 'code']", 'object_name': 'Term'},
+            'code': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '64'}),
+            'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+            'finish': ('django.db.models.fields.DateField', [], {}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'last_modified': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '256'}),
+            'start': ('django.db.models.fields.DateField', [], {})
+        },
+        'syrup.userprofile': {
+            'Meta': {'ordering': "['user__username']", 'object_name': 'UserProfile'},
+            'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+            'external_memberships_checked': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'ils_userid': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True', 'blank': 'True'}),
+            'last_email_notice': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now', 'null': 'True', 'blank': 'True'}),
+            'last_modified': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
+            'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}),
+            'wants_email_notices': ('django.db.models.fields.BooleanField', [], {'default': 'False'})
+        },
+        'syrup.z3950target': {
+            'Meta': {'object_name': 'Z3950Target'},
+            'active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+            'database': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
+            'host': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'port': ('django.db.models.fields.IntegerField', [], {'default': '210'}),
+            'syntax': ('django.db.models.fields.CharField', [], {'default': "'USMARC'", 'max_length': '10'})
+        }
+    }
+
+    complete_apps = ['syrup']
index fdabe85..230cfd8 100644 (file)
@@ -676,7 +676,9 @@ class Item(BaseModel):
     #barcode
     barcode      = m.CharField(max_length=14, null=True, blank=True)
     #orig_callno: this is a copy of the call number associated with the barcode
+    orig_prefix  = m.CharField(max_length=25, null=True, blank=True)
     orig_callno  = m.CharField(max_length=64, null=True, blank=True)
+    orig_suffix  = m.CharField(max_length=25, null=True, blank=True)
 
     # Options for evergreen updates
     EVERGREEN_UPDATE_CHOICES = getattr(integration_class, 'UPDATE_CHOICES',
index 3fdecb1..cda02bc 100644 (file)
@@ -305,14 +305,16 @@ def item_add_cat_search(request, site_id, item_id):
         # TODO: the Leddy stuff here belongs in an integration-module function. [GF]
         # - no longer Leddy specific [AR]
 
+        eg_prefix   = ''
         eg_callno   = ''
+        eg_suffix   = ''
         eg_modifier = ''
         eg_location = ''
 
         #TODO: use python bindings for these interactions
         if bar_num and hasattr(settings, 'OPENSRF_STAFF_USERID'): # TODO: we need an explicit 'we do updates' flag
             barcode = bar_num
-            eg_modifier, eg_location, eg_callno = opensrf.ils_item_info(barcode)
+            eg_modifier, eg_location, eg_prefix, eg_callno, eg_suffix = opensrf.ils_item_info(barcode)
         if bibid:
             item = site.item_set.create(parent_heading=parent_item,
                                         title=dublin.get('dc:title','Untitled'),
@@ -323,7 +325,9 @@ def item_add_cat_search(request, site_id, item_id):
                                         barcode = barcode,
                                         circ_modifier = eg_modifier,
                                         circ_desk = eg_location,
+                                        orig_prefix = eg_prefix,
                                         orig_callno = eg_callno,
+                                        orig_suffix = eg_suffix,
                                         marcxml=raw_pickitem,
                                         **dct)
         else:
@@ -335,7 +339,9 @@ def item_add_cat_search(request, site_id, item_id):
                                         barcode = barcode,
                                         circ_modifier = eg_modifier,
                                         circ_desk = eg_location,
+                                        orig_prefix = eg_prefix,
                                         orig_callno = eg_callno,
+                                        orig_suffix = eg_suffix,
                                         marcxml=raw_pickitem,
                                         **dct)
         item.save()
@@ -382,12 +388,15 @@ def item_edit(request, site_id, item_id):
                 update_option = request.POST.get('update_option')
                 location_option = request.POST.get('location_option')
                 modifier_option = request.POST.get('modifier_option')
+                prefix_option = request.POST.get('orig_prefix')
                 callno_option = request.POST.get('orig_callno')
+                suffix_option = request.POST.get('orig_suffix')
                 suppress_option = request.POST.get('suppress_item')
                 update_status = True
 
                 if update_option == 'Cat':
-                    update_status = opensrf.ils_item_update(item.barcode, callno_option,
+                    update_status = opensrf.ils_item_update(item.barcode, prefix_option,
+                                                            callno_option, suffix_option,
                                                             modifier_option, location_option)
                     # we need to carry over suppress flag for instances where a call number
                     # is modified for a second copy - this might be a common workflow
@@ -401,7 +410,9 @@ def item_edit(request, site_id, item_id):
                 if update_status and update_option == 'One':
                     item.circ_desk = location_option
                     item.circ_modifier = modifier_option
+                    item.orig_prefix = prefix_option
                     item.orig_callno = callno_option
+                    item.orig_suffix = suffix_option
                     item.save()
 
                 if not update_status:
@@ -411,7 +422,9 @@ def item_edit(request, site_id, item_id):
                 if update_option == 'Zap':
                     item.evergreen_update = ''
                     item.barcode = ''
+                    item.orig_prefix = ''
                     item.orig_callno = ''
+                    item.orig_suffix = ''
                     item.circ_modifier = ''
                     item.circ_desk = ''
                     item.save()
index 2523a13..2efc4f4 100644 (file)
@@ -274,13 +274,15 @@ def _revert_parms(request, source_site):
             dct = dict((k,v) for k,v in item.__dict__.items() if not k.startswith('_'))
             dct['parent_heading_id'] = parent.id if parent else None
             barcode = dct['barcode']
+            orig_prefix = dct['orig_prefix']
             orig_call = dct['orig_callno']
+            orig_suffix = dct['orig_suffix']
             orig_desk = dct['circ_desk']
             orig_modifier = dct['circ_modifier']
 
             if barcode and orig_call and orig_desk and orig_modifier:
-                update_status = opensrf.ils_item_update(barcode, orig_call,
-                                    orig_modifier, orig_desk)
+                update_status = opensrf.ils_item_update(barcode, orig_prefix, orig_call,
+                                    orig_suffix, orig_modifier, orig_desk)
         if update_status:
             for sub in subitems:
                 revert_item(parent, sub)
index d346eab..90ccff6 100644 (file)
@@ -120,7 +120,9 @@ searchtext = _('search this site...')
                  <div py:if="edit and user.is_staff">
             <span><i>Source: </i></span>
                    <span py:if="item.circ_modifier">${item.circ_modifier}, </span>
+                   <span py:if="item.orig_prefix">${item.orig_prefix}, </span>
                    <span py:if="item.orig_callno">${item.orig_callno}, </span>
+                   <span py:if="item.orig_suffix">${item.orig_suffix}, </span>
                    <span py:if="item.circ_desk">desk - ${item.circ_desk}</span>
                  </div>
       </div>
index e32d33e..16b9edd 100644 (file)
@@ -80,11 +80,23 @@ if len(authors) < 2:
                </td>
                </tr>
                <tr>
+               <th>Call Number Prefix</th>
+               <td class="cat_opts">
+               <input type="text" name="orig_prefix" value="${item.orig_prefix}"/>
+               </td>
+               </tr>
+               <tr>
                <th>Call Number</th>
                <td class="cat_opts">
                <input type="text" name="orig_callno" value="${item.orig_callno}"/>
                </td>
                </tr>
+               <tr>
+               <th>Call Number Suffix</th>
+               <td class="cat_opts">
+               <input type="text" name="orig_suffix" value="${item.orig_suffix}"/>
+               </td>
+               </tr>
        </tbody>
        </table>
        </td>
diff --git a/docs/images/course_example.jpg b/docs/images/course_example.jpg
new file mode 100755 (executable)
index 0000000..4f8919c
Binary files /dev/null and b/docs/images/course_example.jpg differ
diff --git a/docs/images/course_examples.jpg b/docs/images/course_examples.jpg
new file mode 100755 (executable)
index 0000000..9117669
Binary files /dev/null and b/docs/images/course_examples.jpg differ
diff --git a/docs/images/course_menu.jpg b/docs/images/course_menu.jpg
new file mode 100755 (executable)
index 0000000..1a04186
Binary files /dev/null and b/docs/images/course_menu.jpg differ
diff --git a/docs/images/site_menu.jpg b/docs/images/site_menu.jpg
new file mode 100755 (executable)
index 0000000..373d36d
Binary files /dev/null and b/docs/images/site_menu.jpg differ