circ:
(cat chrome/content/evergreen/main/paged_tree_overlay.xul | sed s/paged_tree/checkin_items/g | sed s/PagedTree/CheckinItems/g > chrome/content/evergreen/circ/checkin_items_overlay.xul )
(cp chrome/locale/en-US/evergreen/paged_tree.dtd chrome/locale/en-US/evergreen/checkin_items.dtd)
+ (cat chrome/content/evergreen/main/paged_tree_overlay.xul | sed s/paged_tree/hold_capture_items/g | sed s/PagedTree/HoldCaptureItems/g > chrome/content/evergreen/circ/hold_capture_items_overlay.xul )
+ (cp chrome/locale/en-US/evergreen/paged_tree.dtd chrome/locale/en-US/evergreen/hold_capture_items.dtd)
evergreen.xpi: evergreen.jar
@echo
rm -f chrome/content/evergreen/patron/patron_checkout_items_overlay.xul chrome/locale/en-US/evergreen/patron_checkout_items.dtd
rm -f chrome/content/evergreen/patron/patron_holds_overlay.xul chrome/locale/en-US/evergreen/patron_holds.dtd
rm -f chrome/content/evergreen/circ/checkin_items_overlay.xul chrome/locale/en-US/evergreen/checkin_items.dtd
+ rm -f chrome/content/evergreen/circ/hold_capture_items_overlay.xul chrome/locale/en-US/evergreen/hold_capture_items.dtd
rm -f chrome/content/evergreen/conf/client_config.xml
rm -f chrome/content/evergreen/util/fieldmapper.js
rm -f chrome/content/evergreen/util/OrgTree.js
case 'PatronSearch' : patron_search_init(params); break;
case 'PatronDisplay' : patron_display_init(params); break;
case 'Checkin' : checkin_init(params); break;
+ case 'HoldCapture' : hold_capture_init(params); break;
}
} catch(E) { sdump('D_ERROR',js2JSON(E)+'\n'); }
case 'PatronSearch' : patron_search_exit(params); break;
case 'PatronDisplay' : patron_display_exit(params); break;
case 'Checkin' : checkin_exit(params); break;
+ case 'HoldCapture' : hold_capture_exit(params); break;
}
} catch(E) { sdump('D_ERROR',js2JSON(E)+'\n'); }
<script src="chrome://evergreen/content/circ/circ_utils.js" />
<script src="chrome://evergreen/content/circ/checkin.js" />
<script src="chrome://evergreen/content/circ/checkin_items.js" />
+ <script src="chrome://evergreen/content/circ/hold_capture.js" />
+ <script src="chrome://evergreen/content/circ/hold_capture_items.js" />
</apps>
</overlay>
// should be handled already
}
- tb.value = ''; tb.focus();
+ tb.value = '';
}
} catch(E) {
handle_error(E);
}
+ tb.select(); tb.focus();
}
tb.addEventListener(
}
}
-function capture_hold( barcode ) {
+function hold_capture_by_copy_barcode( barcode, retrieve_flag ) {
try {
- var ou_id = user_request(
+ var check = user_request(
'open-ils.circ',
'open-ils.circ.hold.capture_copy.barcode',
- [ mw.G.auth_ses[0], barcode ]
+ [ mw.G.auth_ses[0], barcode, retrieve_flag ]
)[0];
- return ou_id;
+ return check;
} catch(E) {
- handle_error(E);
+ handle_error(E, true);
return null;
}
}
switch(rv) {
case 0: /* capture */
try {
- var ou_id = capture_hold( barcode );
- check.text = 'Captured for Hold';
- check.route_to = mw.G.org_tree_hash[ ou_id ].shortname();
+ var check2 = hold_capture_by_copy_barcode( barcode );
+ if (check2) {
+ check.route_to = mw.G.org_tree_hash[ check2.route_to ].shortname();
+ }
} catch(E) {
sdump('D_ERROR',E + '\n');
}
return check;
} catch(E) {
- handle_error(E);
+ handle_error(E, true);
return null;
}
}
--- /dev/null
+sdump('D_TRACE','Loading hold_capture.js\n');
+
+function hold_capture_init(p) {
+ sdump('D_HOLD_CAPTURE',"TESTING: hold_capture.js: " + mw.G['main_test_variable'] + '\n');
+ sdump('D_CONSTRUCTOR',arg_dump(arguments));
+
+
+ // gives: p.clamshell, p.right_panel, p.left_panel, p.inner_left_clamshell, p.inner_top_panel, p.inner_bottom_panel
+ hold_capture_clamshell_init(p);
+
+ // gives: p.hold_capture_items, p.redraw_hold_capture_items
+ hold_capture_hold_capture_items_init(p);
+
+ p.refresh = function() {
+ }
+
+ p.retrieve_button = p.w.document.getElementById('PatronSearch_retrieve_button');
+ p.retrieve_button.addEventListener(
+ 'command',
+ function (ev) {
+ spawn_patron_display(
+ p.w.app_shell,'new_tab','main_tabbox',
+ {
+ 'patron' : retrieve_patron_by_id(
+ p._patron.id()
+ )
+ }
+ );
+ }
+ ,false
+ );
+
+
+ sdump('D_TRACE_EXIT',arg_dump(arguments));
+ return p;
+}
+
+function hold_capture_clamshell_init(p) {
+ p.clamshell = clam_shell_init( { 'w' : p.w, 'node' : p.clamshell_node, 'debug' : p.app } );
+ p.left_panel = p.clamshell.first_deck;
+ p.right_panel = p.clamshell.second_deck;
+}
+
+function hold_capture_hold_capture_items_init(p) {
+ p.hold_capture_items = hold_capture_items_init( { 'w' : p.w, 'node' : p.hold_capture_items_node, 'debug' : p.app } );
+
+ var hold_captures = [];
+ var tb = p.hold_capture_items_node.getElementsByAttribute('id','hold_capture_barcode_entry_textbox')[0];
+ var submit_button = p.hold_capture_items_node.getElementsByAttribute('id','hold_capture_submit_barcode_button')[0];
+
+ p.attempt_hold_capture = function(barcode) {
+ try {
+ //if (! is_barcode_valid(barcode) ) throw('Invalid Barcode');
+ var check = hold_capture_by_copy_barcode( barcode );
+ if (check) {
+ sdump('D_HOLD_CAPTURE','check = ' + check + '\n' + pretty_print( js2JSON( check ) ) + '\n');
+
+ check.status = 0;
+ check.text = 'Captured for Hold Request';
+
+ hold_captures.push( check );
+ p.hold_capture_items.add_hold_capture_items( [ hold_captures.length - 1 ] );
+
+ tb.value = '';
+ }
+ } catch(E) {
+ handle_error(E);
+ }
+ tb.select(); tb.focus();
+ }
+
+ tb.addEventListener(
+ 'keypress',
+ function(ev) {
+ if (ev.keyCode == 13 || ev.keyCode == 77 ) { p.attempt_hold_capture( tb.value ); }
+ },
+ false
+ );
+ submit_button.addEventListener(
+ 'command',
+ function(ev) {
+ p.attempt_hold_capture( tb.value );
+ },
+ false
+ );
+
+ p.redraw_hold_capture_items = function() {
+ p.hold_capture_items.clear_hold_capture_items();
+ for (var i = 0; i < hold_captures.length; i++) {
+ p.hold_capture_items.add_hold_capture_items( [ i ] );
+ }
+ }
+
+ p.hold_capture_items.register_hold_capture_items_select_callback(
+ function (ev) {
+ sdump('D_HOLD_CAPTURE','Firing hold_capture_items_select_callback\n');
+ var hold_capture_items = get_list_from_tree_selection( p.hold_capture_items.paged_tree.tree );
+ /* grab cover art for selected item? */
+ }
+ );
+ p.hold_capture_items.register_flesh_hold_capture_items_function(
+ function (treeitem) {
+ sdump('D_HOLD_CAPTURE','Firing flesh_hold_capture_items_function\n');
+ var record_id = treeitem.getAttribute('record_id');
+ p.hold_capture_items.map_hold_capture_items_to_cols( hold_captures[ record_id ], treeitem );
+ }
+ );
+ p.hold_capture_items.register_context_builder(
+ function (ev) {
+ sdump('D_HOLD_CAPTURE','Firing context_builder\n');
+ empty_widget(p.hold_capture_items.paged_tree.popup);
+ var hold_capture_items = get_list_from_tree_selection( p.hold_capture_items.paged_tree.tree );
+ var menuitem;
+
+ /*** COPY EDITOR ***/
+ menuitem = p.hold_capture_items.paged_tree.w.document.createElement('menuitem');
+ p.hold_capture_items.paged_tree.popup.appendChild( menuitem );
+ menuitem.setAttribute('label',getString('circ.context_edit'));
+ menuitem.addEventListener(
+ 'command',
+ function (ev) {
+ for (var i = 0; i < hold_capture_items.length; i++) {
+ var idx = hold_capture_items[i].getAttribute('record_id');
+ sdump('D_HOLD_CAPTURE','Firing copy edit context\n');
+ }
+ },
+ false
+ );
+
+ /*** OPAC ***/
+ menuitem = p.hold_capture_items.paged_tree.w.document.createElement('menuitem');
+ p.hold_capture_items.paged_tree.popup.appendChild( menuitem );
+ menuitem.setAttribute('label',getString('circ.context_opac'));
+ menuitem.addEventListener(
+ 'command',
+ function (ev) {
+ for (var i = 0; i < hold_capture_items.length; i++) {
+ var idx = hold_capture_items[i].getAttribute('record_id');
+ sdump('D_HOLD_CAPTURE','Firing opac context\n');
+ }
+ },
+ false
+ );
+
+ }
+ );
+}
+
+
--- /dev/null
+<?xml version="1.0"?>
+<!-- Clamlication: Evergreen Staff Client -->
+
+<!-- Localization -->
+<!DOCTYPE page SYSTEM "chrome://evergreen/locale/hold_capture.dtd">
+
+<page id="hold_capture_win"
+ orient="vertical" style="overflow: auto" width="800" height="500"
+ sizemode="maximized" persist="width height"
+ onload="try {
+ params.w = window;
+ params.app = 'HoldCapture';
+ params.clamshell_node = document.getElementById('ClamShell_main');
+ params.hold_capture_items_node = document.getElementById('HoldCaptureItems_main');
+ params.commandset_node = document.getElementById('universal_cmds');
+ mw.focus_widget( document, 'hold_capture_barcode_entry_textbox' );
+ mw.OpenILS_init(params);
+ } catch(E) {
+ alert('onload: ' + E);
+ }"
+ onunload="mw.OpenILS_exit(params);"
+ xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
+
+ <script>mw.sdump('D_TRACE','Loading hold_capture.xul\n');</script>
+
+ <!-- Stylesheets -->
+ <?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
+ <?xml-stylesheet href="chrome://evergreen/skin/evergreen.css" type="text/css"?>
+ <?xml-stylesheet href="chrome://evergreen/skin/hold_capture.css" type="text/css"?>
+
+ <!-- Overlays for this XUL file -->
+ <?xul-overlay href="chrome://evergreen/content/circ/hold_capture_overlay.xul"?>
+
+ <!-- XUL'ified abstraction for logic to attach to widgets -->
+ <commandset id="universal_cmds" />
+
+ <!-- Accelerator Keys (Accessor Keys are in DTD's) -->
+ <keyset id="HoldCapture_keys" />
+
+ <!-- Layout to be filled in by overlays and javascript -->
+ <box id="HoldCapture_main" />
+
+ <popupset id="universal_popupset" />
+
+</page>
+
--- /dev/null
+sdump('D_TRACE','Loading hold_capture_items.js\n');
+
+function hold_capture_items_init(p) {
+ sdump('D_HOLD_CAPTURE_ITEMS',"TESTING: hold_capture_items.js: " + mw.G['main_test_variable'] + '\n');
+ sdump('D_CONSTRUCTOR',arg_dump(arguments));
+
+ p.hold_capture_items_cols = checkin_cols();
+
+ p.paged_tree = paged_tree_init( { 'w' : p.w, 'node' : p.node, 'cols' : p.hold_capture_items_cols, 'hide_nav' : true, 'hits_per_page' : '9999', 'debug' : p.app } );
+ p.add_hold_capture_items = p.paged_tree.add_rows;
+ p.clear_hold_capture_items = p.paged_tree.clear_tree;
+
+ p.register_hold_capture_items_select_callback = function (f) {
+ sdump('D_HOLD_CAPTURE_ITEMS','p.register_hold_capture_items_select_callback(' + f + ')\n');
+ p.paged_tree.register_select_callback( f );
+ }
+
+ p.register_flesh_hold_capture_items_function = function (f) {
+ sdump('D_HOLD_CAPTURE_ITEMS','p.register_flesh_hold_capture_items_function(' + f + ')\n');
+ p.paged_tree.register_flesh_row_function( f );
+ }
+
+ p.register_context_builder = function (f) {
+ sdump('D_HOLD_CAPTURE_ITEMS','p.register_context_builder(' + f + ')\n');
+ p.paged_tree.register_context_builder( f );
+ }
+
+ p.map_hold_capture_items_to_cols = function (hold_capture_items, treeitem) {
+ sdump('D_HOLD_CAPTURE_ITEMS','p.map_hold_capture_items_to_cols( ' + hold_capture_items + ',' + treeitem + ')\n');
+ hold_capture_items_tree_map_hold_capture_items_to_cols(p, hold_capture_items, treeitem);
+ }
+
+ sdump('D_TRACE_EXIT',arg_dump(arguments));
+ return p;
+}
+
+function hold_capture_items_tree_map_hold_capture_items_to_cols(p, hold_capture_items, treeitem) {
+ sdump('D_HOLD_CAPTURE_ITEMS',arg_dump(arguments,{1:true}));
+ sdump('D_TRACE_ENTER',arg_dump(arguments));
+ var cols = new Array();
+ for (var i = 0; i < p.hold_capture_items_cols.length; i++) {
+ var hash = p.hold_capture_items_cols[i];
+ sdump('D_HOLD_CAPTURE_ITEMS','Considering ' + js2JSON(hash) + '\n');
+ var obj_string = 'hold_capture_items';
+ switch( hash.fm_class ) {
+ case 'acp' : obj_string = 'hold_capture_items.copy'; break;
+ case 'circ' : obj_string = 'hold_capture_items.circ'; break;
+ case 'mvr' : obj_string = 'hold_capture_items.record'; break;
+ }
+ var cmd = parse_render_string( obj_string, hash.fm_field_render );
+ sdump('D_HOLD_CAPTURE_ITEMS','cmd = ' + cmd + '\n');
+ var col = '';
+ try {
+ col = eval( cmd );
+ sdump('D_HOLD_CAPTURE_ITEMS','eval = ' + col + '\n');
+ } catch(E) {
+ sdump('D_ERROR',js2JSON(E) + '\n');
+ }
+ cols.push( col );
+ }
+ sdump('D_HOLD_CAPTURE_ITEMS','cols = ' + js2JSON(cols) + '\n');
+ p.paged_tree.map_cols_to_treeitem( cols, treeitem );
+ sdump('D_TRACE_EXIT',arg_dump(arguments));
+}
--- /dev/null
+<?xml version="1.0"?>
+<!DOCTYPE overlay SYSTEM "chrome://evergreen/locale/hold_capture.dtd">
+<overlay id="hold_capture_overlay"
+ xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
+
+ <script>mw.sdump('D_TRACE','Loading hold_capture_overlay.xul\n');</script>
+
+ <?xul-overlay href="chrome://evergreen/content/main/clam_shell_overlay.xul"?>
+ <?xul-overlay href="chrome://evergreen/content/circ/hold_capture_items_overlay.xul"?>
+ <?xul-overlay href="chrome://evergreen/content/patron/patron_display_status_overlay.xul"?>
+
+<commandset id="universal_cmds">
+
+ <command id="cmd_broken" oncommand="
+ alert('Not Yet Implemented'); "/>
+
+
+</commandset>
+
+<!-- main widget for hold_capture -->
+<box id="HoldCapture_main" flex="1" orient="vertical">
+ <groupbox id="HoldCapture_groupbox" orient="vertical" flex="1">
+ <box id="ClamShell_main" />
+ </groupbox>
+</box>
+
+<deck id="ClamShell_first_deck">
+ <box id="PatronDisplayStatus_main" />
+ <spacer id="csfds" flex="1" />
+</deck>
+
+<deck id="ClamShell_second_deck">
+ <groupbox id="cssdgb">
+ <caption id="cssdgbc" label="&circ.hold_capture.caption;"/>
+ <box id="HoldCaptureItems_main"/>
+ </groupbox>
+</deck>
+
+<hbox id="HoldCaptureItems_insert1">
+ <label id="hold_capture_scan_barcode_label" value="&circ.hold_capture.scan_label;" accesskey="&circ.hold_capture.scan_label.accesskey;" control="hold_capture_scan_textbox"/>
+ <textbox id="hold_capture_barcode_entry_textbox"/>
+ <button id="hold_capture_submit_barcode_button" label="&circ.hold_capture.submit_label;" accesskey="&circ.hold_capture.submit_label.accesskey;"/>
+</hbox>
+
+<hbox id="HoldCaptureItems_insert2" />
+<hbox id="HoldCaptureItems_insert3" />
+<hbox id="HoldCaptureItems_insert4" />
+
+<hbox id="PatronDisplayStatus_insert2">
+ <label id="PatronSearch_patron_name" class="patronNameMedium"
+ tooltiptext="&hold_capture_patron.name.label;"
+ value=" "
+ render="true" fm_class="au"
+ render_value="patron_get_full_name($$)" />
+</hbox>
+<hbox id="PatronDisplayStatus_insert4">
+ <button id="PatronSearch_retrieve_button"
+ disabled="true"
+ label="&hold_capture_patron.retrieve;"
+ accesskey="&hold_capture_patron.retrieve.accesskey;"/>
+</hbox>
+
+<hbox id="HoldCaptureItems_insert3">
+ <button id="hold_capture_print" label="&hold_capture.print_receipt_label;" accesskey="&hold_capture.print_receipt_label.accesskey;"/>
+ <button id="hold_capture_reprint" label="&hold_capture.reprint_receipt_label;" accesskey="&hold_capture.reprint_receipt_label.accesskey;"/>
+ <spacer id="cii3s" flex="1"/>
+ <checkbox id="hold_capture_auto" label="&hold_capture.auto_print_label;" accesskey="&hold_capture.auto_print_label.accesskey;"/>
+ <button id="hold_capture_done" label="&hold_capture.done_label;" accesskey="&hold_capture.done_label.accesskey;"/>
+</hbox>
+
+
+<!-- Accelerator Keys (Accessor Keys are in DTD's) -->
+<keyset id="HoldCapture_keys">
+</keyset>
+
+</overlay>
<menupopup id="main.menu.circ.popup">
<menuitem label="&main.menu.circ.checkout.label;" accesskey="&main.menu.circ.checkout.key;" command="cmd_circ_checkout"/>
<menuitem label="&main.menu.circ.checkin.label;" accesskey="&main.menu.circ.checkin.key;" command="cmd_circ_checkin"/>
- <menuitem label="&main.menu.circ.renew.label;" accesskey="&main.menu.circ.renew.key;" command="cmd_broken"/>
+ <menuitem label="&main.menu.circ.hold_capture.label;" accesskey="&main.menu.circ.hold_capture.key;" command="cmd_circ_hold_capture"/>
<!--
<menu id="special-circ-menu" label="&main.menu.circ.special.label;" accesskey="&main.menu.circ.special.key;" command="cmd_broken"/>
<menuseparator />
<command id="cmd_circ_checkin" oncommand="
mw.spawn_checkin(document,'replace_tab','main_tabbox',{}); "/>
+ <command id="cmd_circ_hold_capture" oncommand="
+ mw.spawn_hold_capture(document,'replace_tab','main_tabbox',{}); "/>
+
<command id="cmd_search_opac" oncommand="
mw.spawn_opac_navigator(document,'replace_tab','main_tabbox',{}); "/>
'D_CHECKIN' : true,
'D_CHECKIN_ITEMS' : false,
+ 'D_HOLD_CAPTURE' : true,
+ 'D_HOLD_CAPTURE_ITEMS' : true,
+
'D_CAT' : false,
'D_PATRON_UTILS' : false,
return spawn_interface(d,placement,place,chrome,getString('checkin_interface_label'),passthru_params,clone);
}
+function spawn_hold_capture(d,placement,place,passthru_params,clone) {
+ var chrome = 'chrome://evergreen/content/circ/hold_capture.xul';
+ return spawn_interface(d,placement,place,chrome,getString('hold_capture_interface_label'),passthru_params,clone);
+}
+
function spawn_opac_navigator(d,placement,place,passthru_params,clone) {
var chrome = 'chrome://evergreen/content/opac/opac.xul';
//var chrome = 'http://google.com/';
bills_interface_label=BILLS
checkout_interface_label=CHECK OUT
checkin_interface_label=CHECK IN
+hold_capture_interface_label=HOLD CAPTURE
copies_editor_interface_label=COPIES EDIT
copy_browser_interface_label=COPIES
display_patron_interface_label=DISPLAY PATRON
<!-- The Circulation menu on the Main Menubar -->
<!ENTITY main.menu.circ.checkout.label "Check Out"><!ENTITY main.menu.circ.checkout.key "O">
<!ENTITY main.menu.circ.checkin.label "Check In"><!ENTITY main.menu.circ.checkin.key "C">
+<!ENTITY main.menu.circ.hold_capture.label "Capture Holds"><!ENTITY main.menu.circ.hold_capture.key "H">
<!ENTITY main.menu.circ.renew.label "Renew"><!ENTITY main.menu.circ.renew.key "n">
<!ENTITY main.menu.circ.mark_used.label "Mark Used"><!ENTITY main.menu.circ.mark_used.key "U">
<!ENTITY main.menu.circ.copy_status.label "Display Item"><!ENTITY main.menu.circ.copy_status.key "I">
<!ENTITY circ.checkin.caption 'Check In'>
-<!ENTITY circ.checkin.scan_label 'Enter barcode:'>
-<!ENTITY circ.checkin.scan_label.accesskey 'E'>
+<!ENTITY circ.checkin.scan_label 'Enter Barcode:'>
+<!ENTITY circ.checkin.scan_label.accesskey 'b'>
<!ENTITY circ.checkin.submit_label 'Submit'>
<!ENTITY circ.checkin.submit_label.accesskey 'S'>
--- /dev/null
+<!ENTITY circ.hold_capture.caption 'Capture Hold'>
+<!ENTITY circ.hold_capture.scan_label 'Enter Barcode:'>
+<!ENTITY circ.hold_capture.scan_label.accesskey 'b'>
+<!ENTITY circ.hold_capture.submit_label 'Submit'>
+<!ENTITY circ.hold_capture.submit_label.accesskey 'S'>
+
+<!ENTITY hold_capture_patron.retrieve 'Retrieve Patron'>
+<!ENTITY hold_capture_patron.retrieve.accesskey 'R'>
+<!ENTITY hold_capture_patron.name.label 'Patron Name'>
+
+<!ENTITY hold_capture.print_receipt_label 'Print List'>
+<!ENTITY hold_capture.print_receipt_label.accesskey ''>
+<!ENTITY hold_capture.reprint_receipt_label 'Re-Print Last List'>
+<!ENTITY hold_capture.reprint_receipt_label.accesskey 'L'>
+<!ENTITY hold_capture.auto_print_label 'Auto-Print'>
+<!ENTITY hold_capture.auto_print_label.accesskey 'A'>
+<!ENTITY hold_capture.done_label 'Done'>
+<!ENTITY hold_capture.done_label.accesskey 'D'>
+
+
<!ENTITY patron_display.contact.caption 'Identity & Contact Info'>
<!ENTITY patron_display.checkout.scan_label 'Enter Barcode:'>
-<!ENTITY patron_display.checkout.scan_label.accesskey 'E'>
+<!ENTITY patron_display.checkout.scan_label.accesskey 'b'>
<!ENTITY patron_display.checkout.submit_label 'Submit'>
<!ENTITY patron_display.checkout.submit_label.accesskey 'S'>
<!ENTITY patron_display.checkout.print_receipt_label 'Print Receipt'>
--- /dev/null
+@namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
+@namespace html url("http://www.w3.org/TR/REC-html40");
+