Merge branch 'master' of git+ssh://yeti.esilibrary.com/home/evergreen/evergreen-equin...
authorBill Erickson <berick@esilibrary.com>
Tue, 25 Jan 2011 19:43:38 +0000 (14:43 -0500)
committerBill Erickson <berick@esilibrary.com>
Tue, 25 Jan 2011 19:43:38 +0000 (14:43 -0500)
36 files changed:
Open-ILS/src/extras/Makefile.install
Open-ILS/src/extras/import/parallel_pg_loader.pl
Open-ILS/src/extras/import/pg_loader.pl
Open-ILS/src/perlmods/OpenILS/Application/Serial.pm
Open-ILS/web/css/skin/default/serial.css
Open-ILS/web/js/dojo/openils/Util.js
Open-ILS/web/js/ui/default/serial/subscription/caption_and_pattern.js
Open-ILS/web/opac/locale/en-US/lang.dtd
Open-ILS/xul/staff_client/server/admin/printer_settings.html
Open-ILS/xul/staff_client/server/admin/printer_settings.js
Open-ILS/xul/staff_client/server/locale/en-US/serial.properties
Open-ILS/xul/staff_client/server/serial/batch_receive_overlay.xul
Open-ILS/xul/staff_client/server/serial/editor_base.js
Open-ILS/xul/staff_client/server/serial/manage_dists.js
Open-ILS/xul/staff_client/server/serial/manage_items.js
Open-ILS/xul/staff_client/server/serial/manage_items.xul
Open-ILS/xul/staff_client/server/serial/manage_subs.js
Open-ILS/xul/staff_client/server/serial/pattern_wizard.js
Open-ILS/xul/staff_client/server/serial/pattern_wizard.xul
Open-ILS/xul/staff_client/server/serial/pattern_wizard_overlay.xul
Open-ILS/xul/staff_client/server/serial/sbsum_editor.xul
Open-ILS/xul/staff_client/server/serial/scap_editor.js
Open-ILS/xul/staff_client/server/serial/scap_editor.xul
Open-ILS/xul/staff_client/server/serial/sdist2_editor.xul
Open-ILS/xul/staff_client/server/serial/sdist_editor.js
Open-ILS/xul/staff_client/server/serial/sdist_editor.xul
Open-ILS/xul/staff_client/server/serial/serctrl_main.xul
Open-ILS/xul/staff_client/server/serial/sisum_editor.xul
Open-ILS/xul/staff_client/server/serial/sitem_editor.xul
Open-ILS/xul/staff_client/server/serial/sssum_editor.xul
Open-ILS/xul/staff_client/server/serial/sstr_editor.xul
Open-ILS/xul/staff_client/server/serial/ssub_editor.xul
Open-ILS/xul/staff_client/server/skin/serial.css
README
build/i18n/Makefile
build/i18n/po/serial.properties/serial.properties.pot [new file with mode: 0644]

index 0157373..dfea90b 100644 (file)
@@ -17,7 +17,7 @@
 #      - or -
 #      make -f Makefile.install ubuntu-lucid
 #      - or -
-#      make -f Makefile.install fedora13
+#      make -f Makefile.install fedora14
 #      - or -
 #      make -f Makefile.install centos
 #      - or -
index 23e0405..43ddaa9 100755 (executable)
@@ -107,7 +107,7 @@ while ( my $rec = <> ) {
                        $d =~ s/\\/\\\\/gos;
                }
                if ($hint eq 'bre' and $fieldcache{$hint}{fields}[$x] eq 'quality') {
-                       $d = int($d);
+                       $d = int($d) if ($d ne '\N');
                }
                push @data, $d;
                $x++;
index 2e9eb75..cde91de 100755 (executable)
@@ -111,7 +111,7 @@ for my $h (@order) {
                                $d =~ s/\\/\\\\/gos;
                        }
                        if ($h eq 'bre' and $fieldcache{$h}{fields}[$x] eq 'quality') {
-                               $d = int($d);
+                               $d = int($d) if ($d ne '\N');
                        }
                        push @data, $d;
                        $x++;
index 0a94974..9612a7b 100644 (file)
@@ -1222,12 +1222,14 @@ sub unitize_items {
             $item->unit($unit_id);
         }
 
-        $found_unit_ids{$unit_id} = 1;
         $found_stream_ids{$stream_id} = 1;
 
-        # save the stream_id for this unit_id
-        # TODO: prevent items from different streams in same unit? (perhaps in interface)
-        $stream_ids_by_unit_id{$unit_id} = $stream_id;
+        if (defined($unit_id)) {
+            $found_unit_ids{$unit_id} = 1;
+            # save the stream_id for this unit_id
+            # TODO: prevent items from different streams in same unit? (perhaps in interface)
+            $stream_ids_by_unit_id{$unit_id} = $stream_id;
+        }
 
         my $evt = _update_sitem($editor, undef, $item);
         return $evt if $evt;
index 625ad67..b1b486e 100644 (file)
@@ -25,3 +25,4 @@
 .serial-holding-code tr { border: 0 !important; margin: 0 !important; }
 .serial-holding-code td { border: 0 !important; padding: 3px; margin: 0 !important; }
 .serial-holding-code td[colspan="2"] { text-align:center; }
+input[readonly] { color: #999; }
index faae916..3ea7d74 100644 (file)
@@ -289,6 +289,13 @@ if(!dojo._hasResource["openils.Util"]) {
     };
 
     /**
+     * Convenience function to trim leading and trailing whitespace at once.
+     */
+    openils.Util.trimString = function(s) {
+        return s.replace(/^\s*(.+)?\s*$/,"$1");
+    }
+
+    /**
      * Assume a space-separated interval string, with optional comma
      * E.g. "1 year, 2 days"  "3 days 6 hours"
      */
index ef7b507..5382de9 100644 (file)
@@ -28,6 +28,17 @@ function SCAPRow() {
             "[name='pattern_code'] button", this.element
         )[0];
         this.wizard_button.onclick = function() {
+            if (
+                openils.Util.trimString(
+                    self.controls.pattern_code.value
+                ).length &&
+                !confirm(
+                    "Are you sure you want to erase this pattern code\n" +
+                    "and create a new one via the Wizard?"  /* XXX i18n */
+                )
+            ) {
+                return;
+            }
             try {
                 netscape.security.PrivilegeManager.enablePrivilege(
                     "UniversalXPConnect"
@@ -35,7 +46,7 @@ function SCAPRow() {
                 window.openDialog(
                     xulG.url_prefix("/xul/server/serial/pattern_wizard.xul"),
                     "pattern_wizard",
-                    "scrollbars=yes,width=1024",
+                    "width=800",
                     function(value) {
                         self.controls.pattern_code.value = value;
                         self.controls.pattern_code.onchange();
@@ -74,6 +85,18 @@ function SCAPRow() {
             this.controls.create_date.innerHTML =
                 openils.Util.timeStamp(datum.create_date());
 
+            /* Once created, scap objects' pattern_code field is meant to
+             * be immutable.
+             *
+             * See http://list.georgialibraries.org/pipermail/open-ils-dev/2010-May/006079.html
+             *
+             * The DB trigger mentioned was never created to enforce this
+             * immutability at that level, but this should keep users from
+             * doing the wrong thing by mistake.
+             */
+            this.controls.pattern_code.readOnly = true;
+            this.wizard_button.disabled = true;
+
             this.has_changed(false);
         } else {
             this.datum = new scap();
@@ -334,7 +357,6 @@ function SCAPImporter() {
             );
             progress_dialog.hide();
         }
-
     };
 
     this.init.apply(this, arguments);
index 5a48c9d..af6af82 100644 (file)
 <!ENTITY staff.serial.mfhd_menu.add.label "Add MFHD Record">
 <!ENTITY staff.serial.mfhd_menu.edit.label "Edit MFHD Record">
 <!ENTITY staff.serial.mfhd_menu.delete.label "Delete MFHD Record">
-<!ENTITY staff.serial.scap_editor.pattern_wizard "Pattern Code Wizard">
+<!ENTITY staff.serial.scap_editor.pattern_wizard.label "Pattern Code Wizard">
 <!ENTITY staff.serial.scap_editor.pattern_wizard.accesskey "Z">
+<!ENTITY staff.serial.scap_editor.modify.label "Modify Caption and Pattern(s)">
 <!ENTITY staff.serial.scap_editor.modify.accesskey "M">
-<!ENTITY staff.serial.scap_editor.modify "Modify Caption and Pattern(s)">
-<!ENTITY staff.serial.scap_editor.modify.accesskey "M">
-<!ENTITY staff.serial.scap_editor.create "Create Caption and Pattern(s)">
+<!ENTITY staff.serial.scap_editor.create.label "Create Caption and Pattern(s)">
 <!ENTITY staff.serial.scap_editor.create.accesskey "C">
-<!ENTITY staff.serial.scap_editor.notes "Caption and Pattern Notes">
+<!ENTITY staff.serial.scap_editor.notes.label "Caption and Pattern Notes">
 <!ENTITY staff.serial.scap_editor.notes.accesskey "N">
-<!ENTITY staff.serial.sbsum_editor.modify "Modify Basic Summary">
+<!ENTITY staff.serial.sbsum_editor.modify.label "Modify Basic Summary">
 <!ENTITY staff.serial.sbsum_editor.modify.accesskey "M">
-<!ENTITY staff.serial.sisum_editor.modify "Modify Index Summary">
+<!ENTITY staff.serial.sisum_editor.modify.label "Modify Index Summary">
 <!ENTITY staff.serial.sisum_editor.modify.accesskey "M">
-<!ENTITY staff.serial.sssum_editor.modify "Modify Supplement Summary">
+<!ENTITY staff.serial.sssum_editor.modify.label "Modify Supplement Summary">
 <!ENTITY staff.serial.sssum_editor.modify.accesskey "M">
-<!ENTITY staff.serial.sdist_editor.modify "Modify Distribution(s)">
+<!ENTITY staff.serial.sdist_editor.modify.label "Modify Distribution(s)">
 <!ENTITY staff.serial.sdist_editor.modify.accesskey "M">
-<!ENTITY staff.serial.sdist_editor.create "Create Distribution(s)">
+<!ENTITY staff.serial.sdist_editor.create.label "Create Distribution(s)">
 <!ENTITY staff.serial.sdist_editor.create.accesskey "C">
-<!ENTITY staff.serial.sdist_editor.notes "Distribution Notes">
+<!ENTITY staff.serial.sdist_editor.notes.label "Distribution Notes">
 <!ENTITY staff.serial.sdist_editor.notes.accesskey "N">
 <!ENTITY staff.serial.serctrl_view.label "Serial Control View">
-<!ENTITY staff.serial.siss_editor.modify "Modify Issuance(s)">
+<!ENTITY staff.serial.siss_editor.modify.label "Modify Issuance(s)">
 <!ENTITY staff.serial.siss_editor.modify.accesskey "M">
-<!ENTITY staff.serial.siss_editor.create "Create Issuance(s)">
+<!ENTITY staff.serial.siss_editor.create.label "Create Issuance(s)">
 <!ENTITY staff.serial.siss_editor.create.accesskey "C">
-<!ENTITY staff.serial.siss_editor.notes "Issuance Notes">
+<!ENTITY staff.serial.siss_editor.notes.label "Issuance Notes">
 <!ENTITY staff.serial.siss_editor.notes.accesskey "N">
-<!ENTITY staff.serial.sitem_editor.modify "Modify Item(s)">
+<!ENTITY staff.serial.sitem_editor.modify.label "Modify Item(s)">
 <!ENTITY staff.serial.sitem_editor.modify.accesskey "M">
-<!ENTITY staff.serial.sitem_editor.create "Create Item(s)">
+<!ENTITY staff.serial.sitem_editor.create.label "Create Item(s)">
 <!ENTITY staff.serial.sitem_editor.create.accesskey "C">
-<!ENTITY staff.serial.sitem_editor.notes "Item Notes">
+<!ENTITY staff.serial.sitem_editor.notes.label "Item Notes">
 <!ENTITY staff.serial.sitem_editor.notes.accesskey "N">
-<!ENTITY staff.serial.sstr_editor.modify "Modify Stream(s)">
+<!ENTITY staff.serial.sstr_editor.modify.label "Modify Stream(s)">
 <!ENTITY staff.serial.sstr_editor.modify.accesskey "M">
-<!ENTITY staff.serial.sstr_editor.create "Create Stream(s)">
+<!ENTITY staff.serial.sstr_editor.create.label "Create Stream(s)">
 <!ENTITY staff.serial.sstr_editor.create.accesskey "C">
-<!ENTITY staff.serial.ssub_editor.modify "Modify Subscription(s)">
+<!ENTITY staff.serial.ssub_editor.modify.label "Modify Subscription(s)">
 <!ENTITY staff.serial.ssub_editor.modify.accesskey "M">
-<!ENTITY staff.serial.ssub_editor.create "Create Subscription(s)">
+<!ENTITY staff.serial.ssub_editor.create.label "Create Subscription(s)">
 <!ENTITY staff.serial.ssub_editor.create.accesskey "C">
-<!ENTITY staff.serial.ssub_editor.notes "Subscription Notes">
+<!ENTITY staff.serial.ssub_editor.notes.label "Subscription Notes">
 <!ENTITY staff.serial.ssub_editor.notes.accesskey "N">
 
 <!ENTITY staff.serial.batch_receive "Batch Receive">
-<!ENTITY staff.serial.batch_receive.bib_search_term "Enter an identifier for a bibliographic record:">
+<!ENTITY staff.serial.batch_receive.bib_search_term.label "Enter an identifier for a bibliographic record:">
 <!ENTITY staff.serial.batch_receive.bib_search_term.accesskey "B">
-<!ENTITY staff.serial.batch_receive.find_record "Find Record">
+<!ENTITY staff.serial.batch_receive.find_record.label "Find Record">
 <!ENTITY staff.serial.batch_receive.find_record.accesskey "F">
 <!ENTITY staff.serial.batch_receive.title "Title:">
 <!ENTITY staff.serial.batch_receive.author "Author:">
 <!ENTITY staff.serial.batch_receive.fulfilling_sub "Fulfilling Subscription:">
-<!ENTITY staff.serial.batch_receive.choose_sub "Choose a Subscription:">
+<!ENTITY staff.serial.batch_receive.choose_sub.label "Choose a Subscription:">
 <!ENTITY staff.serial.batch_receive.choose_sub.accesskey "S">
-<!ENTITY staff.serial.batch_receive.choose_issuance "Choose an Issuance:">
+<!ENTITY staff.serial.batch_receive.choose_issuance.label "Choose an Issuance:">
 <!ENTITY staff.serial.batch_receive.choose_issuance.accesskey "I">
-<!ENTITY staff.serial.batch_receive.next "Next">
+<!ENTITY staff.serial.batch_receive.next.label "Next">
 <!ENTITY staff.serial.batch_receive.next.accesskey "N">
 <!ENTITY staff.serial.batch_receive.issuance "Issuance:">
 <!ENTITY staff.serial.batch_receive.no_items "There are no items to receive for this subscription.">
 <!ENTITY staff.serial.batch_receive.receive "Receive?">
 <!ENTITY staff.serial.batch_receive.auto_generate "Auto-generate?">
 <!ENTITY staff.serial.batch_receive.recieve_selected "Receive Selected Items">
-<!ENTITY staff.serial.batch_receive.start_over "Start Over">
+<!ENTITY staff.serial.batch_receive.start_over.label "Start Over">
 <!ENTITY staff.serial.batch_receive.start_over.accesskey "O">
-<!ENTITY staff.serial.batch_receive.with_units "Create Units For Received Items">
+<!ENTITY staff.serial.batch_receive.with_units.label "Create Units For Received Items">
 <!ENTITY staff.serial.batch_receive.with_units.accesskey "U">
 
 <!ENTITY staff.survey.wizard.page1 "Initial Settings">
 <!ENTITY staff.server.admin.copy_locations.editor.help "Help">
 <!ENTITY staff.server.admin.copy_locations.editor.opac_visible "OPAC Visible">
 <!ENTITY staff.server.admin.copy_locations.editor.circulate "Circulate">
-<!ENTITY staff.server.admin.copy_locations.editor.create "Create">
 <!ENTITY staff.server.admin.copy_locations.editor.edit "Edit">
 <!ENTITY staff.server.admin.copy_locations.editor.delete "Delete">
 <!ENTITY staff.server.admin.copy_locations.editor.help.holdable "If a copy location is 'Holdable', copies in that location may have holds placed on them.">
 <!ENTITY staff.printing.normal_settings.header "Normal Settings">
 <!ENTITY staff.printing.advanced_settings.header "Advanced Settings">
 <!ENTITY staff.printing.advanced.mozilla_print "Use default print strategy (Mozilla Print)">
+<!ENTITY staff.printing.advanced.mozilla_print.print_silent "Print silently when using Mozilla Print">
 <!ENTITY staff.printing.advanced.dos_print "Use alternate print strategy (DOS LPT1 Print)">
 <!ENTITY staff.printing.advanced.custom_print "Use alternate print strategy (Custom/External Print)">
 <!ENTITY staff.printing.advanced.dos_print.warning.header "Note on DOS LPT1 Print">
index 3ab42ec..fdd0db3 100644 (file)
@@ -41,6 +41,9 @@
     <button onclick="try { g.printer_settings(); } catch(E) { alert(E); }">&staff.printing.set_default;</button>
     <button onclick="try { g.page_settings(); } catch(E) { alert(E); }">&staff.printing.page_settings;</button><br />
     <h1>&staff.printing.advanced_settings.header;</h1>
+    <form>
+        <input type='checkbox' id='print_silent' onclick='g.toggle_silent_print(event);'>&staff.printing.advanced.mozilla_print.print_silent;</input>
+    </form>
     <button onclick="try { g.set_print_strategy('webBrowserPrint'); } catch(E) { alert(E); }">&staff.printing.advanced.mozilla_print;</button>
     <button onclick="try { g.set_print_strategy('dos.print'); } catch(E) { alert(E); }">&staff.printing.advanced.dos_print;</button>
     <button onclick="try { g.set_print_strategy('custom.print'); } catch(E) { alert(E); }">&staff.printing.advanced.custom_print;</button>
index eb0b572..671360f 100644 (file)
@@ -13,6 +13,13 @@ function my_init() {
 
         g.prefs = Components.classes['@mozilla.org/preferences-service;1'].getService(Components.interfaces['nsIPrefBranch']);
 
+        var print_silent_pref = false;
+        if (g.prefs.prefHasUserValue('print.always_print_silent')) {
+            print_silent_pref = g.prefs.getBoolPref('print.always_print_silent');
+        }
+        var x = document.getElementById('print_silent');
+        x.checked = print_silent_pref;
+
         /*
         netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
         g.PSSVC = Components.classes["@mozilla.org/gfx/printsettings-service;1"].getService(Components.interfaces.nsIPrintSettingsService);
@@ -26,6 +33,13 @@ function my_init() {
     }
 }
 
+g.toggle_silent_print = function() {
+    var x = document.getElementById('print_silent');
+    netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
+    g.prefs.setBoolPref('print.always_print_silent', x.checked);
+    dump('Setting print.always_print_silent to ' + x.checked + '\n');
+}
+
 g.set_printer_context = function(context) {
     g.context = context || 'default';
     JSAN.use('util.print'); g.print = new util.print(g.context);
@@ -39,9 +53,15 @@ g.page_settings = function() {
 
 g.printer_settings = function() {
     netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
+    var print_silent_pref = false;
+    if (g.prefs.prefHasUserValue('print.always_print_silent')) {
+        print_silent_pref = g.prefs.getBoolPref('print.always_print_silent');
+    }
+    g.prefs.setBoolPref('print.always_print_silent', false);
     var w = get_contentWindow(document.getElementById('sample'));
     g.print.NSPrint(w ? w : window, false, {});
     g.print.save_settings();
+    g.prefs.setBoolPref('print.always_print_silent', print_silent_pref);
 }
 
 g.set_print_strategy = function(which) {
index aa1758d..4cec088 100644 (file)
@@ -2,55 +2,55 @@ staff.serial.editor_base.handle_update.error=serial update error:
 staff.serial.editor_base.handle_update.success=Save Successful
 staff.serial.sbsum_editor.count=1 summary
 staff.serial.sbsum_editor.count.plural=%1$s summaries
-staff.serial.sbsum_editor.modify=Modify Basic Summary
+staff.serial.sbsum_editor.modify.label=Modify Basic Summary
 staff.serial.sbsum_editor.modify.accesskey=M
 staff.serial.sisum_editor.count=1 summary
 staff.serial.sisum_editor.count.plural=%1$s summaries
-staff.serial.sisum_editor.modify=Modify Index Summary
+staff.serial.sisum_editor.modify.label=Modify Index Summary
 staff.serial.sisum_editor.modify.accesskey=M
 staff.serial.sssum_editor.count=1 summary
 staff.serial.sssum_editor.count.plural=%1$s summaries
-staff.serial.sssum_editor.modify=Modify Supplement Summary
+staff.serial.sssum_editor.modify.label=Modify Supplement Summary
 staff.serial.sssum_editor.modify.accesskey=M
 staff.serial.scap_editor.count=1 caption and pattern
 staff.serial.scap_editor.count.plural=%1$s caption and patterns
-staff.serial.scap_editor.create=Create Caption and Pattern(s)
+staff.serial.scap_editor.create.label=Create Caption and Pattern(s)
 staff.serial.scap_editor.create.accesskey=C
-staff.serial.scap_editor.modify=Modify Caption and Pattern(s)
+staff.serial.scap_editor.modify.label=Modify Caption and Pattern(s)
 staff.serial.scap_editor.modify.accesskey=M
 staff.serial.scap_editor.notes=Caption and Pattern Notes
 staff.serial.sdist_editor.count=1 distribution
 staff.serial.sdist_editor.count.plural=%1$s distributions
-staff.serial.sdist_editor.create=Create Distribution(s)
+staff.serial.sdist_editor.create.label=Create Distribution(s)
 staff.serial.sdist_editor.create.accesskey=C
-staff.serial.sdist_editor.modify=Modify Distribution(s)
+staff.serial.sdist_editor.modify.label=Modify Distribution(s)
 staff.serial.sdist_editor.modify.accesskey=M
 staff.serial.sdist_editor.notes=Distribution Notes
 staff.serial.siss_editor.count=1 issuance
 staff.serial.siss_editor.count.plural=%1$s issuances
-staff.serial.siss_editor.create=Create Issuance(s)
+staff.serial.siss_editor.create.label=Create Issuance(s)
 staff.serial.siss_editor.create.accesskey=C
-staff.serial.siss_editor.modify=Modify Issuance(s)
+staff.serial.siss_editor.modify.label=Modify Issuance(s)
 staff.serial.siss_editor.modify.accesskey=M
 staff.serial.siss_editor.notes=Issuance Notes
 staff.serial.sitem_editor.count=1 item
 staff.serial.sitem_editor.count.plural=%1$s items
-staff.serial.sitem_editor.create=Create Item(s)
+staff.serial.sitem_editor.create.label=Create Item(s)
 staff.serial.sitem_editor.create.accesskey=C
-staff.serial.sitem_editor.modify=Modify Item(s)
+staff.serial.sitem_editor.modify.label=Modify Item(s)
 staff.serial.sitem_editor.modify.accesskey=M
 staff.serial.sitem_editor.notes=Item Notes
 staff.serial.sstr_editor.count=1 stream
 staff.serial.sstr_editor.count.plural=%1$s streams
-staff.serial.sstr_editor.create=Create Stream(s)
+staff.serial.sstr_editor.create.label=Create Stream(s)
 staff.serial.sstr_editor.create.accesskey=C
-staff.serial.sstr_editor.modify=Modify Stream(s)
+staff.serial.sstr_editor.modify.label=Modify Stream(s)
 staff.serial.sstr_editor.modify.accesskey=M
 staff.serial.ssub_editor.count=1 subscription
 staff.serial.ssub_editor.count.plural=%1$s subscriptions
-staff.serial.ssub_editor.create=Create Subscription(s)
+staff.serial.ssub_editor.create.label=Create Subscription(s)
 staff.serial.ssub_editor.create.accesskey=C
-staff.serial.ssub_editor.modify=Modify Subscription(s)
+staff.serial.ssub_editor.modify.label=Modify Subscription(s)
 staff.serial.ssub_editor.modify.accesskey=M
 staff.serial.ssub_editor.notes=Subscription Notes
 staff.serial.manage_subs.add.error=error adding object in manage_subs.js:
@@ -107,3 +107,24 @@ pattern_wizard.weeks=Every.First.Second.Third.Fourth.Fifth.Third from last.Secon
 pattern_wizard.seasons=Spring Summer Autumn Winter
 pattern_wizard.week=week
 pattern_wizard.remove_sub_row=Remove sub-row
+serial.editor_base.unset=<Unset>
+serail.manage_dists.streams=Streams
+serial.manage_dists.stream_num=Stream : # %1$s
+serial.manage_dists.sbsum=Basic Summary
+serial.manage_dists.sssum=Supplement Summary
+serial.manage_dists.sisum=Index Summary
+serial.manage_dists.library_label=%1$s : %2$s
+serial.manage_dists.distributions=Distributions
+serial.common.default=Default
+serial.manage_subs.predict.alert=You must select a subscription before predicting issuances.
+serial.manage_subs.predict.prompt=How many items (per active pattern) would you like to predict?
+serial.manage_subs.predict.prompt.text=Number of Predicted Items
+serial.manage_subs.invalid_number=Invalid number entered!
+serial.manage_subs.predict_success=Successfully predicted %1$s issuance(s) for subscription # %2$s.
+serial.manage_subs.distributions=Distributions
+serial.manage_subs.issuances=Issuances
+serial.manage_subs.captions_patterns=Captions/Patterns
+serial.manage_subs.tree_location=Location
+serial.manage_subs.scap_id=Caption / Pattern : # %1$s
+serial.manage_subs.ssub_id=Subscription : # %1$s
+serial.manage_subs.subscriptions=Subscriptions
index 5130387..8df1e87 100644 (file)
                     <label
                         control="bib_search_term"
                         accesskey="&staff.serial.batch_receive.bib_search_term.accesskey;"
-                        value="&staff.serial.batch_receive.bib_search_term;" />
+                        value="&staff.serial.batch_receive.bib_search_term.label;" />
                     <textbox id="bib_search_term"
                         onkeypress="batch_receiver.bib_lookup(null, event);" />
                     <button id="bib_lookup_submit"
                         oncommand="batch_receiver.bib_lookup();"
-                        label="&staff.serial.batch_receive.find_record;"
+                        label="&staff.serial.batch_receive.find_record.label;"
                         accesskey="&staff.serial.batch_receive.find_record.accesskey;" />
                 </hbox>
             </vbox>
@@ -53,7 +53,7 @@
                     <box id="sub_chooser_here"></box>
                     <button
                         oncommand="batch_receiver.choose_issuance();"
-                        label="&staff.serial.batch_receive.next;"
+                        label="&staff.serial.batch_receive.next.label;"
                         accesskey="&staff.serial.batch_receive.next.accesskey;" />
                 </hbox>
             </vbox>
@@ -72,7 +72,7 @@
                     <box id="issuance_chooser_here"></box>
                     <button
                         oncommand="batch_receiver.load_entry_form();"
-                        label="&staff.serial.batch_receive.next;"
+                        label="&staff.serial.batch_receive.next.label;"
                         accesskey="&staff.serial.batch_receive.next.accesskey;" />
                 </hbox>
             </vbox>
 
         <hbox align="center">
             <button oncommand="batch_receiver.init();"
-                label="&staff.serial.batch_receive.start_over;"
+                label="&staff.serial.batch_receive.start_over.label;"
                 accesskey="&staff.serial.batch_receive.start_over.accesskey;" />
             <spacer flex="1" />
             <checkbox
                 id="batch_receive_with_units"
                 oils_persist="checked"
                 oncommand="batch_receiver.toggle_receive_with_units(event);"
-                label="&staff.serial.batch_receive.with_units;"
+                label="&staff.serial.batch_receive.with_units.label;"
                 accesskey="&staff.serial.batch_receive.with_units.accesskey;" />
         </hbox>
     </box>
index 13f1736..4108232 100644 (file)
@@ -1,5 +1,5 @@
 dump('entering serial/editor_base.js\n');
-// vim:noet:sw=4:ts=4:
+// vim:et:sw=4:ts=4:
 
 if (typeof serial == 'undefined') serial = {};
 
@@ -153,12 +153,12 @@ serial.editor_base = {
             if (obj[fm_type_plural].length > 0 && obj[fm_type_plural][0].isnew()) {
                 obj.mode = 'create';
                 if (obj.can_have_notes) $(obj.xul_id_prefix + '_notes').setAttribute('hidden','true');
-                $(obj.xul_id_prefix + '_save').setAttribute('label', $('serialStrings').getString('staff.serial.' + fm_type + '_editor.create'));
+                $(obj.xul_id_prefix + '_save').setAttribute('label', $('serialStrings').getString('staff.serial.' + fm_type + '_editor.create.label'));
                 $(obj.xul_id_prefix + '_save').setAttribute('accesskey', $('serialStrings').getString('staff.serial.' + fm_type + '_editor.create.accesskey'));
             } else if (obj.mode == 'create') { // switching from create to modify
                 obj.mode = 'modify';
                 if (obj.can_have_notes) $(obj.xul_id_prefix + '_notes').setAttribute('hidden','false');
-                $(obj.xul_id_prefix + '_save').setAttribute('label', $('serialStrings').getString('staff.serial.' + fm_type + '_editor.modify'));
+                $(obj.xul_id_prefix + '_save').setAttribute('label', $('serialStrings').getString('staff.serial.' + fm_type + '_editor.modify.label'));
                 $(obj.xul_id_prefix + '_save').setAttribute('accesskey', $('serialStrings').getString('staff.serial.' + fm_type + '_editor.modify.accesskey'));
             }
 /*else {
@@ -294,7 +294,7 @@ serial.editor_base = {
                         obj.editor_values[value_key] = value;
                     }
                     if (value == "") {
-                        value = "<Unset>";
+                        value = $('serialStrings').getString('serial.editor_base.unset');
                     }
                 } catch(E) { 
                     obj.error.sdump('D_ERROR','Attempted ' + cmd + '\n' +  E + '\n'); 
index 2adcd4a..e23bd05 100644 (file)
@@ -1,5 +1,5 @@
 dump('entering serial/manage_dists.js\n');
-// vim:noet:sw=4:ts=4:
+// vim:et:sw=4:ts=4:
 
 if (typeof serial == 'undefined') serial = {};
 serial.manage_dists = function (params) {
@@ -1106,7 +1106,7 @@ serial.manage_dists.prototype = {
             var sstr_group_node_data = {
                 'row' : {
                     'my' : {
-                        'label' : 'Streams',
+                        'label' : dojo.byId('serialStrings').getString('serial.manage_dists.streams'),
                     }
                 },
                 'retrieve_id' : 'sstr-group_' + sdist_tree.id(),
@@ -1185,11 +1185,20 @@ serial.manage_dists.prototype = {
                     'id' : 'tree_location',
                     'label' : 'Location',
                     'flex' : 1, 'primary' : true, 'hidden' : false, 
-                    'render' : function(my) { return my.label ? my.label : my.sstr ? 'Stream : #' + my.sstr.id() : my.sbsum ? 'Basic Summary' : my.sssum ? 'Supplement Summary' : my.sisum ? 'Index Summary' : my.sdist ? my.sdist.label() : my.aou ? my.aou.shortname() + " : " + my.aou.name() : "???"; },
+                    'render' : function(my) { 
+                        if (my.label) { return my.label; }
+                        if (my.sstr) { return $('serialStrings').getFormattedString('serial.manage_dists.stream_num', [my.sstr.id()]); }
+                        if (my.sbsum) { return $('serialStrings').getString('serial.manage_dists.sbsum'); }
+                        if (my.sssum) { return $('serialStrings').getString('serial.manage_dists.sssum'); }
+                        if (my.sisum) { return $('serialStrings').getString('serial.manage_dists.sisum'); }
+                        if (my.sdist) { return my.sdist.label(); }
+                        if (my.aou) { return $('serialStrings').getFormattedString('serial.manage_dists.stream_num', [my.aou.shortname(), my.aou.name()]); }
+                        return "???";
+                    },
                 },
                 {
                     'id' : 'distribution_count',
-                    'label' : 'Distributions',
+                    'label' : $('serialStrings').getString('serial.manage_dists.distributions'),
                     'flex' : 0, 'primary' : false, 'hidden' : false, 
                     'render' : function(my) { return my.distribution_count; },
                 }
index 120fc5d..e781237 100644 (file)
@@ -206,6 +206,36 @@ serial.manage_items.prototype = {
                             }
                         }
                     ],
+                    'cmd_reset_items' : [
+                        ['command'],
+                        function() {
+                            try {
+                                if (!obj.retrieve_ids || obj.retrieve_ids.length == 0) return;
+
+                                JSAN.use('util.functional');
+                                var list = util.functional.map_list(
+                                        obj.retrieve_ids,
+                                        function (o) {
+                                            return o.sitem_id;
+                                        }
+                                    );
+
+                                var robj = obj.network.request(
+                                            'open-ils.serial',
+                                            'open-ils.serial.reset_items',
+                                            [ ses(), list ]
+                                        );
+                                if (typeof robj.ilsevent != 'undefined') throw(robj);
+
+                                alert('Successfully reset '+robj.num_items+' item(s)');
+
+                                obj.refresh_list('main');
+                                obj.refresh_list('workarea');
+                            } catch(E) {
+                                obj.error.standard_unexpected_error_alert('staff.serial.manage_items.reset_items.error',E);
+                            }
+                        }
+                    ],
                     'cmd_delete_items' : [
                         ['command'],
                         function() {
index 94a8097..b218ff0 100644 (file)
@@ -41,6 +41,7 @@ vim:noet:sw=4:ts=4:
     <popupset>
         <popup id="serial_manage_items_popup">
             <menuitem command="cmd_edit_items" label="Edit Item Attributes" accesskey="&staff.cat.copy_browser.actions.cmd_edit_items.accesskey;"/>
+            <menuitem command="cmd_reset_items" label="Reset Item to Expected" />
             <menuitem command="cmd_delete_items" label="Delete Item" accesskey="&staff.cat.copy_browser.actions.cmd_delete_items.accesskey;"/>
         </popup>
     </popupset>
@@ -63,6 +64,7 @@ vim:noet:sw=4:ts=4:
                 <menu label="&staff.cat.copy_browser.holdings_maintenance.actions.label;" accesskey="&staff.cat.copy_browser.holdings_maintenance.actions.accesskey;">
                     <menupopup>
                         <menuitem command="cmd_edit_items" label="Edit Item Attributes" accesskey="&staff.cat.copy_browser.actions.cmd_edit_items.accesskey;"/>
+                        <menuitem command="cmd_reset_items" label="Reset Item to Expected" />
                         <menuitem command="cmd_delete_items" label="Delete Item" accesskey="&staff.cat.copy_browser.actions.cmd_delete_items.accesskey;"/>
                         <menuseparator/>
                         <menuitem command="cmd_refresh_list" label="&staff.cat.copy_browser.holdings_maintenance.cmd_refresh_list.label;" accesskey="&staff.cat.copy_browser.holdings_maintenance.cmd_refresh_list.accesskey;"/>
index 97cc07c..2ce4184 100644 (file)
@@ -1,5 +1,5 @@
 dump('entering serial/manage_subs.js\n');
-// vim:noet:sw=4:ts=4:
+// vim:et:sw=4:ts=4:
 
 if (typeof serial == 'undefined') serial = {};
 serial.manage_subs = function (params) {
@@ -289,7 +289,7 @@ serial.manage_subs.prototype = {
                                     var new_sdist = new sdist();
                                     new_sdist.subscription(list[0]);//TODO: add multiple at once support?
                                     new_sdist.holding_lib(obj.map_ssub['ssub_' + list[0]].owning_lib());//default to sub owning lib
-                                    new_sdist.label('Default');
+                                    new_sdist.label($('serialStrings').getString('serial.common.default'));
                                     new_sdist.isnew(1);
                                     var params = {};
                                     params.sdists = [new_sdist];
@@ -615,16 +615,16 @@ serial.manage_subs.prototype = {
                                 try {
                                     var list = obj.ids_from_sel_list('ssub');
                                     if (list.length == 0) {
-                                        alert('You must select a subscription before predicting issuances.'); //TODO: better error
+                                        alert($('serialStrings').getString('serial.manage_subs.predict.alert')); //TODO: better error
                                         return;
                                     }
 
-                                    var num_to_predict = prompt('How many items (per active pattern) would you like to predict?',
+                                    var num_to_predict = prompt($('serialStrings').getString('serial.manage_subs.predict.prompt'),
                                             '12',
-                                            'Number of Predicted Items');
+                                            $('serialStrings').getString('serial.manage_subs.predict.prompt.text'));
                                     num_to_predict = String( num_to_predict ).replace(/\D/g,'');
                                     if (num_to_predict == '') {
-                                        alert('Invalid number entered!'); //TODO: better error
+                                        alert($('serialStrings').getString('serial.manage_subs.invalid_number')); //TODO: better error
                                         return;
                                     }
 
@@ -634,7 +634,7 @@ serial.manage_subs.prototype = {
                                                 'open-ils.serial.make_predictions',
                                                 [ ses(), {"ssub_id":list[i], "num_to_predict":num_to_predict}]
                                         );
-                                        alert('Successfully predicted ' + robj.length + ' issuance(s) for subscription #' + list[i] + '.');
+                                        alert($('serialStrings').getFormattedString('serial.manage_subs.predict_success', [robj.length, list[i]]));
                                     }
 
                                     obj.refresh_list();
@@ -1438,7 +1438,7 @@ serial.manage_subs.prototype = {
             var sdist_group_node_data = {
                 'row' : {
                     'my' : {
-                        'label' : 'Distributions',
+                        'label' : $('serialStrings').getString('serial.manage_subs.distributions'),
                     }
                 },
                 'retrieve_id' : 'sdist-group_' + ssub_tree.id(),
@@ -1452,7 +1452,7 @@ serial.manage_subs.prototype = {
             var siss_group_node_data = {
                 'row' : {
                     'my' : {
-                        'label' : 'Issuances',
+                        'label' : $('serialStrings').getString('serial.manage_subs.issuances'),
                     }
                 },
                 'retrieve_id' : 'siss-group_' + ssub_tree.id(),
@@ -1466,7 +1466,7 @@ serial.manage_subs.prototype = {
             var scap_group_node_data = {
                 'row' : {
                     'my' : {
-                        'label' : 'Captions/Patterns',
+                        'label' : $('serialStrings').getString('serial.manage_subs.captions_patterns'),
                     }
                 },
                 'retrieve_id' : 'scap-group_' + ssub_tree.id(),
@@ -1536,13 +1536,22 @@ serial.manage_subs.prototype = {
             var columns = [
                 {
                     'id' : 'tree_location',
-                    'label' : 'Location',
+                    'label' : $('serialStrings').getString('serial.manage_subs.tree_location'),
                     'flex' : 1, 'primary' : true, 'hidden' : false, 
-                    'render' : function(my) { return my.sdist ? my.sdist.label() : my.siss ? my.siss.label() : my.scap ? 'C/P : #' + my.scap.id() : my.ssub ? 'Subscription : #' + my.ssub.id() : my.aou ? my.aou.shortname() + " : " + my.aou.name() : my.label ? my.label : "???"; },
+                    'render' : function(my) { 
+                        if (my.sdist) { return my.sdist.label(); }
+                        if (my.siss) { return my.siss.label(); }
+                        if (my.scap) { return $('serialStrings').getFormattedString('serial.manage_subs.scap_id', [my.scap.id()]); }
+                        if (my.ssub) { return $('serialStrings').getFormattedString('serial.manage_subs.ssub_id', [my.ssub.id()]); }
+                        if (my.aou) { return $('serialStrings').getFormattedString('serial.manage_dists.library_label', [my.aou.shortname(), my.aou.name()]); }
+                        if (my.label) { return my.label; }
+                        /* If all else fails... */
+                        return "???"; 
+                    },
                 },
                 {
                     'id' : 'subscription_count',
-                    'label' : 'Subscriptions',
+                    'label' : $('serialStrings').getString('serial.manage_subs.subscriptions'),
                     'flex' : 0, 'primary' : false, 'hidden' : false, 
                     'render' : function(my) { return my.subscription_count; },
                 },
index c7c4260..6874719 100644 (file)
@@ -49,24 +49,23 @@ function _menulist(values, labels, items_only) {
     }
 }
 
-function _date_validate(date_val, month_val) {
-    /* general purpose date validation irrespective of year */
-    date_val = date_val.trim();
-
-    if (!date_val.match(/^[0123]?\d$/))
-        return false;
-
-    date_val = Number(date_val); /* do NOT use parseInt */
-    month_val = Number(month_val);
-
-    if (date_val < 1) {
-        return false;
-    } else if (month_val == 2) {
-        return date_val <= 29;
-    } else if ([1,3,5,7,8,10,12].indexOf(month_val) != -1) {
-        return date_val <= 31;
+function _cap_number_textbox_value(node, max) {
+    if (node.value > max) node.value = max;
+    node.max = max;
+}
+
+function _cap_to_month(month, date_box) {
+    if (!date_box)
+        return;
+
+    if (month == "02") {
+        _cap_number_textbox_value(date_box, 29);
+    } else if (
+        ["09", "04", "06", "11"].indexOf(month) != -1
+    ) {
+        _cap_number_textbox_value(date_box, 30);
     } else {
-        return date_val <= 30;
+        _cap_number_textbox_value(date_box, 31);
     }
 }
 
@@ -91,17 +90,13 @@ function CalendarChangeRow() {
             }
         );
 
-        var date_month_selector = node_by_name("date_month", this.element);
-
         dojo.attr(
-            node_by_name("date_day", this.element), "onchange", function(ev) {
-                if (_date_validate(ev.target.value,date_month_selector.value)){
-                    return true;
-                } else {
-                    alert(S("bad_date_value"));
-                    ev.target.focus();
-                    return false;
-                }
+            node_by_name("date_month", this.element),
+            "oncommand",
+            function(ev){
+                _cap_to_month(
+                    ev.target.value, node_by_name("date_day", self.element)
+                );
             }
         );
 
@@ -291,9 +286,22 @@ function RegularityRow() {
                 );
             },
             "MM": function() {
-                return _menulist(
+                var mm = _menulist(
                     _chronstants.month.values, _chronstants.month.names
                 );
+                dojo.attr(
+                    mm, "oncommand", function(ev) {
+                        _cap_to_month(
+                            dojo.attr(ev.target, "value"),
+                            dojo.query(
+                                'textbox[type="number"]',
+                                ev.target.parentNode.parentNode.parentNode
+                                /* ev.target is the menuITEM node */
+                            )[0]
+                        );
+                    }
+                );
+                return mm;
             },
             "SS": function() {
                 return _menulist(
@@ -372,7 +380,7 @@ function RegularityEditor() {
 
         this.rows[id] = new RegularityRow(this.template, id, this);
 
-        dojo.place(this.rows[id].element, "y_row_before_this", "before");
+        dojo.place(this.rows[id].element, "y_rows_here", "last");
     };
 
     this.remove_row = function(id) {
@@ -384,10 +392,14 @@ function RegularityEditor() {
     };
 
     this.compile = function() {
-        return openils.Util.objectProperties(this.rows).sort().reduce(
-            function(a, b) { return a.concat(["y", self.rows[b].compile()]); },
-            []
-        );
+        if (!this.active) {
+            return [];
+        } else {
+            return openils.Util.objectProperties(this.rows).sort().reduce(
+                function(a, b){return a.concat(["y",self.rows[b].compile()]);},
+                []
+            );
+        }
     };
 
     this._init.apply(this, arguments);
@@ -822,6 +834,15 @@ function Wizard() {
         this.regularity_editor = new RegularityEditor();
 
         this.field_w = dojo.byId("hard_w");
+        dojo.attr(
+            dojo.byId("soft_w"), "onchange", function(ev) {
+                var use_regularity = dojo.byId("use_regularity");
+                if (ev.target.value && !use_regularity.checked) {
+                    use_regularity.checked = true;
+                    use_regularity.doCommand();
+                }
+            }
+        );
     };
 
     this.reset = function() {
index 4dcf3f9..7b0469b 100644 (file)
@@ -9,6 +9,7 @@
 <?xul-overlay href="/xul/server/serial/pattern_wizard_overlay.xul"?>
 
 <window id="pattern_wizard_win"
+    title="Pattern Code Wizard"
     onload="try{my_init();font_helper();persist_helper();}catch(E){alert(E);}"
     xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
 
index a28a40b..37ae936 100644 (file)
                                             <menupopup>
                                             </menupopup>
                                         </menulist>
-                                        <textbox name="date_day" size="3" />
+                                        <textbox name="date_day" size="3"
+                                            type="number" min="1" max="31" />
                                     </hbox>
                                 </hbox>
                                 <button icon="remove" name="remover" label="Remove" />
                             <row id="chron_row_headings">
                                 <label />
                                 <label value="Caption" />
-                                <label value="Display in holding field?" />
+                                <label value="Include this actual word in the caption?" />
                                 <label />
                             </row>
                             <row id="chron_row_template">
             <vbox id="wizard_step_regularity" class="hideme">
                 <checkbox id="use_regularity"
                     oncommand="wizard.regularity_editor.toggle(event);"
-                    label="Specify regularity information (extra, omitted,
-                        and/or combined issues)?" />
+                    label="Use specific regularity information (published,
+                        omitted, and/or combined issues)?" />
                 <vbox id="regularity_editor_here" class="hideme">
-                    <hbox id="regularity_template_y" align="top">
-                        <menulist name="poc">
-                            <menupopup>
-                                <menuitem disabled="true" label="---" />
-                                <menuitem value="p" label="Published" />
-                                <menuitem value="o" label="Omitted" />
-                                <menuitem value="c" label="Combined" />
-                            </menupopup>
-                        </menulist>
-                        <menulist name="type_and_code_pattern">
-                            <menupopup>
-                                <menuitem disabled="true" label="---" />
-                                <menuitem value="d:dd"
-                                    label="Day of the week" />
-                                <menuitem value="d:DD"
-                                    label="Day of the month" />
-                                <menuitem value="d:MMDD"
-                                    label="Date of the year" />
-                                <menuitem value="m:MM" label="Month" />
-                                <menuitem value="s:SS" label="Season" />
-                                <menuitem value="w:WWdd"
-                                    label="Weekday of the month" />
-                                <menuitem value="w:MMWWdd"
-                                    label="Weekday of specific month" />
-                                <menuitem value="w:MMWW"
-                                    label="Week of specific month" />
-                                <menuitem value="y:YYYY"
-                                    label="Span over two years" />
-                            </menupopup>
-                        </menulist>
-                        <vbox name="sub_rows_here"></vbox>
-                        <vbox align="top">
-                            <button label="Add sub-row" icon="add"
-                                disabled="true" name="add_sub_row" />
-                            <button label="Remove whole row"
-                                icon="remove" name="remove" />
-                        </vbox>
-                    </hbox>
+                    <grid>
+                        <columns>
+                            <column />
+                            <column />
+                            <column />
+                            <column />
+                        </columns>
+                        <rows id="y_rows_here">
+                            <row id="regularity_template_y" align="top">
+                                <menulist name="poc">
+                                    <menupopup>
+                                        <menuitem disabled="true" label="---" />
+                                        <menuitem value="p" label="Published" />
+                                        <menuitem value="o" label="Omitted" />
+                                        <menuitem value="c" label="Combined" />
+                                    </menupopup>
+                                </menulist>
+                                <menulist name="type_and_code_pattern">
+                                    <menupopup>
+                                        <menuitem disabled="true" label="---" />
+                                        <menuitem value="d:dd"
+                                            label="Day of the week" />
+                                        <menuitem value="d:DD"
+                                            label="Day of the month" />
+                                        <menuitem value="d:MMDD"
+                                            label="Date of the year" />
+                                        <menuitem value="m:MM" label="Month" />
+                                        <menuitem value="s:SS" label="Season" />
+                                        <menuitem value="w:WWdd"
+                                            label="Weekday of the month" />
+                                        <menuitem value="w:MMWWdd"
+                                            label="Weekday of specific month" />
+                                        <menuitem value="w:MMWW"
+                                            label="Week of specific month" />
+                                        <menuitem value="y:YYYY"
+                                            label="Span over two years" />
+                                    </menupopup>
+                                </menulist>
+                                <vbox name="sub_rows_here"></vbox>
+                                <vbox align="top">
+                                    <button label="Add sub-row" icon="add"
+                                        disabled="true" name="add_sub_row" />
+                                    <button label="Remove whole row"
+                                        icon="remove" name="remove" />
+                                </vbox>
+                            </row>
+                        </rows>
+                    </grid>
                     <hbox id="y_row_before_this" pack="center"
                         style="padding-top: 1ex;">
                         <button id="regularity_add_y"
index 9880c5d..46e881c 100644 (file)
@@ -22,7 +22,7 @@
 
                <hbox id="sbsum_editor_nav">
                        <spacer flex="1"/>
-                       <button id="sbsum_save" label="&staff.serial.sbsum_editor.modify;" hidden="true" accesskey="&staff.serial.sbsum_editor.modify.accesskey;" oncommand="g.manage_dists.sbsum_editor.save()" />
+                       <button id="sbsum_save" label="&staff.serial.sbsum_editor.modify.label;" hidden="true" accesskey="&staff.serial.sbsum_editor.modify.accesskey;" oncommand="g.manage_dists.sbsum_editor.save()" />
                        <!--<button id="cancel" label="&staff.cat.copy_editor.cancel.label;" accesskey="&staff.cat.copy_editor.cancel.accesskey;" oncommand="window.close();"/>-->
                </hbox>
 
index 1a54084..73c6021 100644 (file)
@@ -146,7 +146,7 @@ serial.scap_editor.prototype = {
         window.openDialog(
             xulG.url_prefix("/xul/server/serial/pattern_wizard.xul"),
             "pattern_wizard",
-            "scrollbars=yes", /* XXX FIXME: scrollbars aren't working. what to do? */
+            "width=800",
             onsubmit
         );
     },
index 2dd4b28..c1bd89b 100644 (file)
@@ -22,8 +22,8 @@
 
                <hbox id="scap_editor_nav">
                        <spacer flex="1"/>
-                       <button id="scap_pattern_wizard" label="&staff.serial.scap_editor.pattern_wizard;" accesskey="&staff.serial.scap_editor.pattern_wizard.accesskey;" oncommand="g.manage_subs.scap_editor.pattern_wizard();" />
-                       <button id="scap_save" label="&staff.serial.scap_editor.modify;" hidden="true" accesskey="&staff.serial.scap_editor.modify.accesskey;" oncommand="g.manage_subs.scap_editor.save()" />
+                       <button id="scap_pattern_wizard" label="&staff.serial.scap_editor.pattern_wizard.label;" accesskey="&staff.serial.scap_editor.pattern_wizard.accesskey;" oncommand="g.manage_subs.scap_editor.pattern_wizard();" />
+                       <button id="scap_save" label="&staff.serial.scap_editor.modify.label;" hidden="true" accesskey="&staff.serial.scap_editor.modify.accesskey;" oncommand="g.manage_subs.scap_editor.save()" />
                        <!--<button id="cancel" label="&staff.cat.copy_editor.cancel.label;" accesskey="&staff.cat.copy_editor.cancel.accesskey;" oncommand="window.close();"/>-->
                </hbox>
 
index 63672ad..8178da2 100644 (file)
@@ -32,8 +32,8 @@
 
                <hbox id="sdist2_editor_nav">
                        <spacer flex="1"/>
-                       <button id="sdist2_notes" label="&staff.serial.sdist_editor.notes;" accesskey="&staff.serial.sdist_editor.notes.accesskey;" oncommand="g.manage_dists.sdist_editor.notes()" />
-                       <button id="sdist2_save" label="&staff.serial.sdist_editor.modify;" hidden="true" accesskey="&staff.serial.ssub_editor.modify.accesskey;" oncommand="g.manage_dists.sdist_editor.save()" />
+                       <button id="sdist2_notes" label="&staff.serial.sdist_editor.notes.label;" accesskey="&staff.serial.sdist_editor.notes.accesskey;" oncommand="g.manage_dists.sdist_editor.notes()" />
+                       <button id="sdist2_save" label="&staff.serial.sdist_editor.modify.label;" hidden="true" accesskey="&staff.serial.ssub_editor.modify.accesskey;" oncommand="g.manage_dists.sdist_editor.save()" />
                        <!--<button id="cancel" label="&staff.cat.copy_editor.cancel.label;" accesskey="&staff.cat.copy_editor.cancel.accesskey;" oncommand="window.close();"/>-->
                </hbox>
 
index 95fd9a5..4dc7326 100644 (file)
@@ -109,8 +109,8 @@ serial.sdist_editor.prototype = {
 
     'render_call_number' : function(cn) {
         var obj = this;
-        if (cn === null) {
-            return "<Unset>";
+        if (cn == null) { // true for both 'null' AND undefined
+            return '';
         } else if (typeof cn != 'object') {
             return obj.acn_label_map[cn];
         } else {
@@ -120,8 +120,8 @@ serial.sdist_editor.prototype = {
 
     'render_unit_template' : function(ut) {
         var obj = this;
-        if (ut === null) {
-            return "<Unset>";
+        if (ut == null) { // true for both 'null' AND undefined
+            return '';
         } else if (typeof ut != 'object') {
             return obj.act_name_map[ut];
         } else {
@@ -132,8 +132,8 @@ serial.sdist_editor.prototype = {
     'render_record_entry' : function(sre) {
         var obj = this;
         var sre_id;
-        if (sre === null) {
-            return "<Unset>";
+        if (sre == null) { // true for both 'null' AND undefined
+            return '';
         } else if (typeof sre != 'object') {
             sre_id = sre;
         } else {
index 189442b..a7db7f5 100644 (file)
@@ -31,8 +31,8 @@
 
                <hbox id="sdist_editor_nav">
                        <spacer flex="1"/>
-                       <button id="sdist_notes" label="&staff.serial.sdist_editor.notes;" accesskey="&staff.serial.sdist_editor.notes.accesskey;" oncommand="g.manage_subs.sdist_editor.notes()" />
-                       <button id="sdist_save" label="&staff.serial.sdist_editor.modify;" hidden="true" accesskey="&staff.serial.ssub_editor.modify.accesskey;" oncommand="g.manage_subs.sdist_editor.save()" />
+                       <button id="sdist_notes" label="&staff.serial.sdist_editor.notes.label;" accesskey="&staff.serial.sdist_editor.notes.accesskey;" oncommand="g.manage_subs.sdist_editor.notes()" />
+                       <button id="sdist_save" label="&staff.serial.sdist_editor.modify.label;" hidden="true" accesskey="&staff.serial.ssub_editor.modify.accesskey;" oncommand="g.manage_subs.sdist_editor.save()" />
                        <!--<button id="cancel" label="&staff.cat.copy_editor.cancel.label;" accesskey="&staff.cat.copy_editor.cancel.accesskey;" oncommand="window.close();"/>-->
                </hbox>
 
index 0fe7d21..376f27c 100644 (file)
@@ -72,6 +72,7 @@ vim:noet:sw=4:ts=4:
                <command id="cmd_receive_items"/>
                <command id="cmd_refresh_list"/>
                <command id="cmd_replace_barcode"/>
+        <command id="cmd_reset_items"/>
         <command id="cmd_set_sunit" />
         <command id="cmd_set_other_sunit" />
         <command id="cmd_show_all_libs" />
index b34bd1b..4967790 100644 (file)
@@ -22,7 +22,7 @@
 
                <hbox id="sisum_editor_nav">
                        <spacer flex="1"/>
-                       <button id="sisum_save" label="&staff.serial.sisum_editor.modify;" hidden="true" accesskey="&staff.serial.sisum_editor.modify.accesskey;" oncommand="g.manage_dists.sisum_editor.save()" />
+                       <button id="sisum_save" label="&staff.serial.sisum_editor.modify.label;" hidden="true" accesskey="&staff.serial.sisum_editor.modify.accesskey;" oncommand="g.manage_dists.sisum_editor.save()" />
                        <!--<button id="cancel" label="&staff.cat.copy_editor.cancel.label;" accesskey="&staff.cat.copy_editor.cancel.accesskey;" oncommand="window.close();"/>-->
                </hbox>
 
index 15366f0..aa73163 100644 (file)
@@ -84,8 +84,8 @@
 
                <hbox id="nav">
                        <spacer flex="1"/>
-                       <button id="sitem_notes" label="&staff.serial.sitem_editor.notes;" accesskey="&staff.serial.sitem_editor.notes.accesskey;" oncommand="g.sitem_editor.notes();"/>
-                       <button id="sitem_save" label="&staff.serial.sitem_editor.modify;" hidden="true" accesskey="&staff.serial.sitem_editor.modify.accesskey;" oncommand="g.sitem_editor.save();"/>
+                       <button id="sitem_notes" label="&staff.serial.sitem_editor.notes.label;" accesskey="&staff.serial.sitem_editor.notes.accesskey;" oncommand="g.sitem_editor.notes();"/>
+                       <button id="sitem_save" label="&staff.serial.sitem_editor.modify.label;" hidden="true" accesskey="&staff.serial.sitem_editor.modify.accesskey;" oncommand="g.sitem_editor.save();"/>
                        <button id="sitem_cancel" label="&staff.cat.copy_editor.cancel.label;" accesskey="&staff.cat.copy_editor.cancel.accesskey;" oncommand="window.close();"/>
                </hbox>
 
index ed2aca0..3528c34 100644 (file)
@@ -22,7 +22,7 @@
 
                <hbox id="sssum_editor_nav">
                        <spacer flex="1"/>
-                       <button id="sssum_save" label="&staff.serial.sssum_editor.modify;" hidden="true" accesskey="&staff.serial.sssum_editor.modify.accesskey;" oncommand="g.manage_dists.sssum_editor.save()" />
+                       <button id="sssum_save" label="&staff.serial.sssum_editor.modify.label;" hidden="true" accesskey="&staff.serial.sssum_editor.modify.accesskey;" oncommand="g.manage_dists.sssum_editor.save()" />
                        <!--<button id="cancel" label="&staff.cat.copy_editor.cancel.label;" accesskey="&staff.cat.copy_editor.cancel.accesskey;" oncommand="window.close();"/>-->
                </hbox>
 
index 4973d6d..60548a1 100644 (file)
@@ -22,7 +22,7 @@
 
                <hbox id="sstr_editor_nav">
                        <spacer flex="1"/>
-                       <button id="sstr_save" label="&staff.serial.sstr_editor.modify;" hidden="true" accesskey="&staff.serial.sstr_editor.modify.accesskey;" oncommand="g.manage_dists.sstr_editor.save()" />
+                       <button id="sstr_save" label="&staff.serial.sstr_editor.modify.label;" hidden="true" accesskey="&staff.serial.sstr_editor.modify.accesskey;" oncommand="g.manage_dists.sstr_editor.save()" />
                        <!--<button id="cancel" label="&staff.cat.copy_editor.cancel.label;" accesskey="&staff.cat.copy_editor.cancel.accesskey;" oncommand="window.close();"/>-->
                </hbox>
 
index 4646428..10fabbc 100644 (file)
@@ -27,8 +27,8 @@
 
                <hbox id="nav">
                        <spacer flex="1"/>
-                       <button id="ssub_notes" label="&staff.serial.ssub_editor.notes;" accesskey="&staff.serial.ssub_editor.notes.accesskey;" oncommand="g.manage_subs.ssub_editor.notes()" />
-                       <button id="ssub_save" label="&staff.serial.ssub_editor.modify;" hidden="true" accesskey="&staff.serial.ssub_editor.modify.accesskey;" oncommand="g.manage_subs.ssub_editor.save()" />
+                       <button id="ssub_notes" label="&staff.serial.ssub_editor.notes.label;" accesskey="&staff.serial.ssub_editor.notes.accesskey;" oncommand="g.manage_subs.ssub_editor.notes()" />
+                       <button id="ssub_save" label="&staff.serial.ssub_editor.modify.label;" hidden="true" accesskey="&staff.serial.ssub_editor.modify.accesskey;" oncommand="g.manage_subs.ssub_editor.save()" />
                        <!--<button id="cancel" label="&staff.cat.copy_editor.cancel.label;" accesskey="&staff.cat.copy_editor.cancel.accesskey;" oncommand="window.close();"/>-->
                </hbox>
 
index 2ebfa2b..b96bc99 100644 (file)
@@ -21,3 +21,5 @@ checkbox:focus:not([label]) .checkbox-label-box {
 }
 .padded_bottom { padding-bottom: 10px; }
 description#print_routing_desc { margin: 0; padding: 0 1em; }
+#pattern_wizard_main > vbox { padding: 0.5em 0; }
+#pattern_wizard_main { overflow: auto; }
diff --git a/README b/README
index aa9d0d5..cc8edf4 100644 (file)
--- a/README
+++ b/README
@@ -5,7 +5,7 @@ Installing prerequisites:
 Evergreen has a number of prerequisite packages that must be installed
 before you can successfully configure, compile, and install Evergreen.
 
-1. Begin by installing the most recent version of OpenSRF (1.4.0 or later).
+1. Begin by installing the most recent version of OpenSRF (1.6.2 or later).
 You can download OpenSRF releases from
 http://evergreen-ils.org/downloads
 
@@ -15,7 +15,7 @@ installer.
 
 Issue the following commands as the root user to install prerequisites
 using the Makefile.install prerequisite installer, substituting
-"debian-etch", "debian-lenny", "fedora-13", "ubuntu-hardy", "ubuntu-lucid",
+"debian-etch", "debian-lenny", "fedora-14", "ubuntu-hardy", "ubuntu-lucid",
 "centos", or "rhel" for <osname> below:
 
 make -f Open-ILS/src/extras/Makefile.install <osname>
@@ -144,17 +144,20 @@ Once you have created the Evergreen database, you also need to create the
 database schema and configure your configuration files to point at the
 database server. Issue the following command as root from inside the Evergreen
 source directory, replacing <user>, <password>, <hostname>, <port>, and <dbname>
-with the appropriate values for your PostgreSQL database:
+with the appropriate values for your PostgreSQL database, and <admin-user> and
+<admin-pass> with the values you want for the default Evergreen administrator
+account:
 
 perl Open-ILS/src/support-scripts/eg_db_config.pl --update-config \
        --service all --create-schema --create-offline \
        --user <user> --password <password> --hostname <hostname> --port <port> \
-       --database <dbname>
+       --database <dbname> --admin-user <admin-user> --admin-pass <admin-pass>
 
 This will create the database schema and configure all of the services in
 your /openils/conf/opensrf.xml configuration file to point to that database.
 It also creates the configuration files required by the Evergreen cgi-bin
-administration scripts.
+administration scripts, and set the user name and password for the default
+Evergreen administrator account to your requested values.
 
 Developer instructions:
 ======================
index d2357b0..79d3945 100644 (file)
@@ -91,6 +91,7 @@ newpo:
        @pot2po $(PROGRESS) -i po/reports.js/reports.js.pot -o $(PO)/reports.js/$(LOCALE).po 
        @pot2po $(PROGRESS) -i po/reservation.js/reservation.js.pot -o $(PO)/reservation.js/$(LOCALE).po 
        @pot2po $(PROGRESS) -i po/selfcheck.js/selfcheck.js.pot -o $(PO)/selfcheck.js/$(LOCALE).po 
+       @pot2po $(PROGRESS) -i po/serial.properties/serial.properties.pot -o $(PO)/serial.properties/$(LOCALE).po 
        @pot2po $(PROGRESS) -i po/vandelay.dtd/vandelay.dtd.pot -o $(PO)/vandelay.dtd/$(LOCALE).po 
        @pot2po $(PROGRESS) -i po/AutoFieldWidget.js/AutoFieldWidget.js.pot -o $(PO)/AutoFieldWidget.js/$(LOCALE).po 
        @pot2po $(PROGRESS) -i po/TranslatorPopup.js/TranslatorPopup.js.pot -o $(PO)/TranslatorPopup.js/$(LOCALE).po 
@@ -135,6 +136,7 @@ updatepo: prep_output
        @pot2po $(PROGRESS) -i po/reports.js/reports.js.pot -o $(PO)/reports.js/$(LOCALE).po  -t $(PO)/reports.js/$(LOCALE).po 
        @pot2po $(PROGRESS) -i po/reservation.js/reservation.js.pot -o $(PO)/reservation.js/$(LOCALE).po  -t $(PO)/reservation.js/$(LOCALE).po 
        @pot2po $(PROGRESS) -i po/selfcheck.js/selfcheck.js.pot -o $(PO)/selfcheck.js/$(LOCALE).po  -t $(PO)/selfcheck.js/$(LOCALE).po 
+       @pot2po $(PROGRESS) -i po/serial.properties/serial.properties.pot -o $(PO)/serial.properties/$(LOCALE).po  -t $(PO)/serial.properties/$(LOCALE).po 
        @pot2po $(PROGRESS) -i po/vandelay.dtd/vandelay.dtd.pot -o $(PO)/vandelay.dtd/$(LOCALE).po  -t $(PO)/vandelay.dtd/$(LOCALE).po 
        @pot2po $(PROGRESS) -i po/AutoFieldWidget.js/AutoFieldWidget.js.pot -o $(PO)/AutoFieldWidget.js/$(LOCALE).po  -t $(PO)/AutoFieldWidget.js/$(LOCALE).po 
        @pot2po $(PROGRESS) -i po/TranslatorPopup.js/TranslatorPopup.js.pot -o $(PO)/TranslatorPopup.js/$(LOCALE).po  -t $(PO)/TranslatorPopup.js/$(LOCALE).po 
@@ -201,6 +203,7 @@ props2pot:
        @moz2po -P $(PROGRESS) -o $(PO)/common.properties/common.properties.pot -i $(SERVER_PROPSDIR)/en-US/common.properties 2>&1
        @moz2po -P $(PROGRESS) -o $(PO)/multiclass_search_help.html/multiclass_search_help.html.pot -i $(SERVER_PROPSDIR)/en-US/multiclass_search_help.html 2>&1
        @moz2po -P $(PROGRESS) -o $(PO)/patron.properties/patron.properties.pot -i $(SERVER_PROPSDIR)/en-US/patron.properties 2>&1
+       @moz2po -P $(PROGRESS) -o $(PO)/serial.properties/serial.properties.pot -i $(SERVER_PROPSDIR)/en-US/serial.properties 2>&1
 
 # There are some hacky things we need to do to make po2moz happy,
 # like ensure that the .po file has either ".dtd" or ".properties" in
@@ -230,6 +233,7 @@ po2props:
        @po2moz $(PROGRESS) -i $(PO)/common.properties/$(LOCALE).properties.po -o $(PROJECT)/$(LOCALE)/common.properties -t $(SERVER_PROPSDIR)/en-US/common.properties 2>&1
        @po2moz $(PROGRESS) -i $(PO)/multiclass_search_help.html/$(LOCALE).html.po -o $(PROJECT)/$(LOCALE)/multiclass_search_help.html -t $(SERVER_PROPSDIR)/en-US/multiclass_search_help.html 2>&1
        @po2moz $(PROGRESS) -i $(PO)/patron.properties/$(LOCALE).properties.po -o $(PROJECT)/$(LOCALE)/patron.properties -t $(SERVER_PROPSDIR)/en-US/patron.properties 2>&1
+       @po2moz $(PROGRESS) -i $(PO)/serial.properties/$(LOCALE).properties.po -o $(PROJECT)/$(LOCALE)/serial.properties -t $(SERVER_PROPSDIR)/en-US/serial.properties 2>&1
 
 sql2pot:
        @scripts/db-seed-i18n.py --pot $(SQLSRCDIR)/$(SQLSRCFILE) --output $(PO)/db.seed/$(SQLPOT)
@@ -276,6 +280,7 @@ install: updatepo project fmidl2fmidlent fmidlpo2entity-en
        cp $(PROJECT)/$(LOCALE)/lang.dtd $(DTDDIR)/$(LOCALE)/
        cp $(PROJECT)/$(LOCALE)/opac.dtd $(DTDDIR)/$(LOCALE)/
        cp $(PROJECT)/$(LOCALE)/reports.dtd $(DTDDIR)/$(LOCALE)/
+       cp $(PROJECT)/$(LOCALE)/serial.properties $(SERVER_PROPSDIR)/$(LOCALE)/.
        cp $(PROJECT)/$(LOCALE)/vandelay.dtd $(DTDDIR)/$(LOCALE)/
        cp $(PROJECT)/$(LOCALE)/$(FMIDLENTITY) $(DTDDIR)/$(LOCALE)/
        @scripts/merge_ils_events.py --master $(EVTSRC) --localization $(PROJECT)/$(LOCALE)/$(EVTXML) --output $(EVTSRC)
diff --git a/build/i18n/po/serial.properties/serial.properties.pot b/build/i18n/po/serial.properties/serial.properties.pot
new file mode 100644 (file)
index 0000000..953d3bc
--- /dev/null
@@ -0,0 +1,554 @@
+#. extracted from ../../Open-ILS/xul/staff_client/server/locale/en-US/serial.properties
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2011-01-25 01:09-0400\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Translate Toolkit 1.8.1\n"
+"X-Accelerator-Marker: &\n"
+
+#: staff.serial.editor_base.handle_update.error
+msgid "serial update error:"
+msgstr ""
+
+#: staff.serial.editor_base.handle_update.success
+msgid "Save Successful"
+msgstr ""
+
+#: staff.serial.sbsum_editor.count
+msgctxt "staff.serial.sbsum_editor.count"
+msgid "1 summary"
+msgstr ""
+
+#: staff.serial.sbsum_editor.count.plural
+msgctxt "staff.serial.sbsum_editor.count.plural"
+msgid "%1$s summaries"
+msgstr ""
+
+#: staff.serial.sbsum_editor.modify.label
+msgid "Modify Basic Summary"
+msgstr ""
+
+#: staff.serial.sbsum_editor.modify.accesskey
+msgctxt "staff.serial.sbsum_editor.modify.accesskey"
+msgid "M"
+msgstr ""
+
+#: staff.serial.sisum_editor.count
+msgctxt "staff.serial.sisum_editor.count"
+msgid "1 summary"
+msgstr ""
+
+#: staff.serial.sisum_editor.count.plural
+msgctxt "staff.serial.sisum_editor.count.plural"
+msgid "%1$s summaries"
+msgstr ""
+
+#: staff.serial.sisum_editor.modify.label
+msgid "Modify Index Summary"
+msgstr ""
+
+#: staff.serial.sisum_editor.modify.accesskey
+msgctxt "staff.serial.sisum_editor.modify.accesskey"
+msgid "M"
+msgstr ""
+
+#: staff.serial.sssum_editor.count
+msgctxt "staff.serial.sssum_editor.count"
+msgid "1 summary"
+msgstr ""
+
+#: staff.serial.sssum_editor.count.plural
+msgctxt "staff.serial.sssum_editor.count.plural"
+msgid "%1$s summaries"
+msgstr ""
+
+#: staff.serial.sssum_editor.modify.label
+msgid "Modify Supplement Summary"
+msgstr ""
+
+#: staff.serial.sssum_editor.modify.accesskey
+msgctxt "staff.serial.sssum_editor.modify.accesskey"
+msgid "M"
+msgstr ""
+
+#: staff.serial.scap_editor.count
+msgid "1 caption and pattern"
+msgstr ""
+
+#: staff.serial.scap_editor.count.plural
+msgid "%1$s caption and patterns"
+msgstr ""
+
+#: staff.serial.scap_editor.create.label
+msgid "Create Caption and Pattern(s)"
+msgstr ""
+
+#: staff.serial.scap_editor.create.accesskey
+msgctxt "staff.serial.scap_editor.create.accesskey"
+msgid "C"
+msgstr ""
+
+#: staff.serial.scap_editor.modify.label
+msgid "Modify Caption and Pattern(s)"
+msgstr ""
+
+#: staff.serial.scap_editor.modify.accesskey
+msgctxt "staff.serial.scap_editor.modify.accesskey"
+msgid "M"
+msgstr ""
+
+#: staff.serial.scap_editor.notes
+msgid "Caption and Pattern Notes"
+msgstr ""
+
+#: staff.serial.sdist_editor.count
+msgid "1 distribution"
+msgstr ""
+
+#: staff.serial.sdist_editor.count.plural
+msgid "%1$s distributions"
+msgstr ""
+
+#: staff.serial.sdist_editor.create.label
+msgid "Create Distribution(s)"
+msgstr ""
+
+#: staff.serial.sdist_editor.create.accesskey
+msgctxt "staff.serial.sdist_editor.create.accesskey"
+msgid "C"
+msgstr ""
+
+#: staff.serial.sdist_editor.modify.label
+msgid "Modify Distribution(s)"
+msgstr ""
+
+#: staff.serial.sdist_editor.modify.accesskey
+msgctxt "staff.serial.sdist_editor.modify.accesskey"
+msgid "M"
+msgstr ""
+
+#: staff.serial.sdist_editor.notes
+msgid "Distribution Notes"
+msgstr ""
+
+#: staff.serial.siss_editor.count
+msgid "1 issuance"
+msgstr ""
+
+#: staff.serial.siss_editor.count.plural
+msgid "%1$s issuances"
+msgstr ""
+
+#: staff.serial.siss_editor.create.label
+msgid "Create Issuance(s)"
+msgstr ""
+
+#: staff.serial.siss_editor.create.accesskey
+msgctxt "staff.serial.siss_editor.create.accesskey"
+msgid "C"
+msgstr ""
+
+#: staff.serial.siss_editor.modify.label
+msgid "Modify Issuance(s)"
+msgstr ""
+
+#: staff.serial.siss_editor.modify.accesskey
+msgctxt "staff.serial.siss_editor.modify.accesskey"
+msgid "M"
+msgstr ""
+
+#: staff.serial.siss_editor.notes
+msgid "Issuance Notes"
+msgstr ""
+
+#: staff.serial.sitem_editor.count
+msgid "1 item"
+msgstr ""
+
+#: staff.serial.sitem_editor.count.plural
+msgid "%1$s items"
+msgstr ""
+
+#: staff.serial.sitem_editor.create.label
+msgid "Create Item(s)"
+msgstr ""
+
+#: staff.serial.sitem_editor.create.accesskey
+msgctxt "staff.serial.sitem_editor.create.accesskey"
+msgid "C"
+msgstr ""
+
+#: staff.serial.sitem_editor.modify.label
+msgid "Modify Item(s)"
+msgstr ""
+
+#: staff.serial.sitem_editor.modify.accesskey
+msgctxt "staff.serial.sitem_editor.modify.accesskey"
+msgid "M"
+msgstr ""
+
+#: staff.serial.sitem_editor.notes
+msgid "Item Notes"
+msgstr ""
+
+#: staff.serial.sstr_editor.count
+msgid "1 stream"
+msgstr ""
+
+#: staff.serial.sstr_editor.count.plural
+msgid "%1$s streams"
+msgstr ""
+
+#: staff.serial.sstr_editor.create.label
+msgid "Create Stream(s)"
+msgstr ""
+
+#: staff.serial.sstr_editor.create.accesskey
+msgctxt "staff.serial.sstr_editor.create.accesskey"
+msgid "C"
+msgstr ""
+
+#: staff.serial.sstr_editor.modify.label
+msgid "Modify Stream(s)"
+msgstr ""
+
+#: staff.serial.sstr_editor.modify.accesskey
+msgctxt "staff.serial.sstr_editor.modify.accesskey"
+msgid "M"
+msgstr ""
+
+#: staff.serial.ssub_editor.count
+msgid "1 subscription"
+msgstr ""
+
+#: staff.serial.ssub_editor.count.plural
+msgid "%1$s subscriptions"
+msgstr ""
+
+#: staff.serial.ssub_editor.create.label
+msgid "Create Subscription(s)"
+msgstr ""
+
+#: staff.serial.ssub_editor.create.accesskey
+msgctxt "staff.serial.ssub_editor.create.accesskey"
+msgid "C"
+msgstr ""
+
+#: staff.serial.ssub_editor.modify.label
+msgid "Modify Subscription(s)"
+msgstr ""
+
+#: staff.serial.ssub_editor.modify.accesskey
+msgctxt "staff.serial.ssub_editor.modify.accesskey"
+msgid "M"
+msgstr ""
+
+#: staff.serial.ssub_editor.notes
+msgid "Subscription Notes"
+msgstr ""
+
+#: staff.serial.manage_subs.add.error
+msgid "error adding object in manage_subs.js:"
+msgstr ""
+
+#: staff.serial.manage_subs.delete.error
+msgid "error deleting object in manage_subs.js:"
+msgstr ""
+
+#: staff.serial.manage_subs.delete_scap.confirm
+msgid "Are you sure you would like to delete this caption and pattern?"
+msgstr ""
+
+#: staff.serial.manage_subs.delete_scap.confirm.plural
+msgid "Are you sure you would like to delete these %1$s caption and patterns?"
+msgstr ""
+
+#: staff.serial.manage_subs.delete_scap.title
+msgid "Delete Caption and Patterns?"
+msgstr ""
+
+#: staff.serial.manage_subs.delete_scap.override
+msgid ""
+"Override Delete Failure? Doing so will delete all attached issuances and "
+"items as well!"
+msgstr ""
+
+#: staff.serial.manage_subs.delete_sdist.confirm
+msgid "Are you sure you would like to delete this distribution?"
+msgstr ""
+
+#: staff.serial.manage_subs.delete_sdist.confirm.plural
+msgid "Are you sure you would like to delete these %1$s distributions?"
+msgstr ""
+
+#: staff.serial.manage_subs.delete_sdist.title
+msgid "Delete Distributions?"
+msgstr ""
+
+#: staff.serial.manage_subs.delete_sdist.override
+msgid "Override Delete Failure?"
+msgstr ""
+
+#: staff.serial.manage_subs.delete_siss.confirm
+msgid "Are you sure you would like to delete this issuance?"
+msgstr ""
+
+#: staff.serial.manage_subs.delete_siss.confirm.plural
+msgid "Are you sure you would like to delete these %1$s issuances?"
+msgstr ""
+
+#: staff.serial.manage_subs.delete_siss.title
+msgid "Delete Issuances?"
+msgstr ""
+
+#: staff.serial.manage_subs.delete_siss.override
+msgid ""
+"Override Delete Failure? Doing so will delete all attached items as well!"
+msgstr ""
+
+#: staff.serial.manage_subs.delete_ssub.confirm
+msgid "Are you sure you would like to delete this subscription?"
+msgstr ""
+
+#: staff.serial.manage_subs.delete_ssub.confirm.plural
+msgid "Are you sure you would like to delete these %1$s subscriptions?"
+msgstr ""
+
+#: staff.serial.manage_subs.delete_ssub.title
+msgid "Delete Subscriptions?"
+msgstr ""
+
+#: staff.serial.manage_subs.delete_ssub.override
+msgid "Override Delete Failure? Doing so will delete all related data as well!"
+msgstr ""
+
+#: batch_receive.bib_lookup.empty
+msgid "Enter a search term."
+msgstr ""
+
+#: batch_receive.bib_lookup.multiple
+msgid ""
+"Multiple matching records found. Please use a more specific identifier, or "
+"use the catalog to find the exact record you want."
+msgstr ""
+
+#: batch_receive.bib_lookup.not_found
+msgid "No matching records found with any subscriptions attached."
+msgstr ""
+
+#: batch_receive.issuance_lookup.error
+msgid "Problem retrieving issuances related to subscription."
+msgstr ""
+
+#: batch_receive.issuance_lookup.none
+msgid "There are no receivable issuances."
+msgstr ""
+
+#: batch_receive.item_lookup.none
+msgid "Could not retrieve receivable items for this issuance."
+msgstr ""
+
+#: batch_receive.autogen_barcodes.questionable
+msgid ""
+"There are already barcodes entered further down the list than the one you "
+"just entered.\n"
+"Fill the intervening fields with auto-generated barcodes?"
+msgstr ""
+
+#: batch_receive.autogen_barcodes.remove
+msgid "Clear the barcodes that have already been auto-generated?"
+msgstr ""
+
+#: batch_receive.none
+msgid "[None]"
+msgstr ""
+
+#: batch_receive.apply
+msgid "Apply"
+msgstr ""
+
+#: batch_receive.receive_time_note
+msgid "Receive-time Note"
+msgstr ""
+
+#: batch_receive.cn_for_lib
+msgid ""
+"Do you want to use this call number at %1$s?\n"
+"It doesn't exist there, and it will have to be created."
+msgstr ""
+
+#: batch_receive.missing_units
+msgid ""
+"You have not provided barcodes and call numbers for all of the selected "
+"items.  Choose OK to receive those items anyway, or choose Cancel to supply "
+"the missing information."
+msgstr ""
+
+#: batch_receive.missing_cn
+msgid ""
+"You cannot assign a barcode without selecting a call number. Please correct "
+"the non-conforming units."
+msgstr ""
+
+#: pattern_wizard.enumeration.a
+msgctxt "pattern_wizard.enumeration.a"
+msgid "First level"
+msgstr ""
+
+#: pattern_wizard.enumeration.b
+msgctxt "pattern_wizard.enumeration.b"
+msgid "Second level"
+msgstr ""
+
+#: pattern_wizard.enumeration.c
+msgctxt "pattern_wizard.enumeration.c"
+msgid "Third level"
+msgstr ""
+
+#: pattern_wizard.enumeration.d
+msgctxt "pattern_wizard.enumeration.d"
+msgid "Fourth level"
+msgstr ""
+
+#: pattern_wizard.enumeration.e
+msgid "Fifth level"
+msgstr ""
+
+#: pattern_wizard.enumeration.f
+msgid "Sixth level"
+msgstr ""
+
+#: pattern_wizard.enumeration.g
+msgid "First alternate"
+msgstr ""
+
+#: pattern_wizard.enumeration.h
+msgid "Second alternate"
+msgstr ""
+
+#: pattern_wizard.chronology.i
+msgctxt "pattern_wizard.chronology.i"
+msgid "First level"
+msgstr ""
+
+#: pattern_wizard.chronology.j
+msgctxt "pattern_wizard.chronology.j"
+msgid "Second level"
+msgstr ""
+
+#: pattern_wizard.chronology.k
+msgctxt "pattern_wizard.chronology.k"
+msgid "Third level"
+msgstr ""
+
+#: pattern_wizard.chronology.l
+msgctxt "pattern_wizard.chronology.l"
+msgid "Fourth level"
+msgstr ""
+
+#: pattern_wizard.chronology.m
+msgid "Alternative numbering scheme"
+msgstr ""
+
+#: pattern_wizard.not_removable_row
+msgid ""
+"You cannot remove this row because it's not at the end of the sequence.  "
+"Remove later rows first."
+msgstr ""
+
+#: pattern_wizard.bad_date_value
+msgid "That is not a valid day for that month."
+msgstr ""
+
+#: serial.editor_base.unset
+msgid "<Unset>"
+msgstr ""
+
+#: serail.manage_dists.streams
+msgid "Streams"
+msgstr ""
+
+#: serial.manage_dists.stream_num
+msgid "Stream : # %1$s"
+msgstr ""
+
+#: serial.manage_dists.sbsum
+msgid "Basic Summary"
+msgstr ""
+
+#: serial.manage_dists.sssum
+msgid "Supplement Summary"
+msgstr ""
+
+#: serial.manage_dists.sisum
+msgid "Index Summary"
+msgstr ""
+
+#: serial.manage_dists.library_label
+msgid "%1$s : %2$s"
+msgstr ""
+
+#: serial.manage_dists.distributions
+msgctxt "serial.manage_dists.distributions"
+msgid "Distributions"
+msgstr ""
+
+#: serial.common.default
+msgid "Default"
+msgstr ""
+
+#: serial.manage_subs.predict.alert
+msgid "You must select a subscription before predicting issuances."
+msgstr ""
+
+#: serial.manage_subs.predict.prompt
+msgid "How many items (per active pattern) would you like to predict?"
+msgstr ""
+
+#: serial.manage_subs.predict.prompt.text
+msgid "Number of Predicted Items"
+msgstr ""
+
+#: serial.manage_subs.invalid_number
+msgid "Invalid number entered!"
+msgstr ""
+
+#: serial.manage_subs.predict_success
+msgid "Successfully predicted %1$s issuance(s) for subscription # %2$s."
+msgstr ""
+
+#: serial.manage_subs.distributions
+msgctxt "serial.manage_subs.distributions"
+msgid "Distributions"
+msgstr ""
+
+#: serial.manage_subs.issuances
+msgid "Issuances"
+msgstr ""
+
+#: serial.manage_subs.captions_patterns
+msgid "Captions/Patterns"
+msgstr ""
+
+#: serial.manage_subs.tree_location
+msgid "Location"
+msgstr ""
+
+#: serial.manage_subs.scap_id
+msgid "Caption / Pattern : # %1$s"
+msgstr ""
+
+#: serial.manage_subs.ssub_id
+msgid "Subscription : # %1$s"
+msgstr ""
+
+#: serial.manage_subs.subscriptions
+msgid "Subscriptions"
+msgstr ""