[open-ils-commits] r13627 - trunk/Open-ILS/xul/staff_client/server/patron (phasefx)
svn at svn.open-ils.org
svn at svn.open-ils.org
Sun Jul 19 22:47:06 EDT 2009
Author: phasefx
Date: 2009-07-19 22:47:04 -0400 (Sun, 19 Jul 2009)
New Revision: 13627
Modified:
trunk/Open-ILS/xul/staff_client/server/patron/standing_penalties.js
Log:
This interface needs to change a bit, but I wanted to refactor the existing code first to make it more readable (did I succeed?)
Modified: trunk/Open-ILS/xul/staff_client/server/patron/standing_penalties.js
===================================================================
--- trunk/Open-ILS/xul/staff_client/server/patron/standing_penalties.js 2009-07-19 15:36:22 UTC (rev 13626)
+++ trunk/Open-ILS/xul/staff_client/server/patron/standing_penalties.js 2009-07-20 02:47:04 UTC (rev 13627)
@@ -1,5 +1,8 @@
+var list; var data; var error; var net; var rows;
+
function penalty_init() {
try {
+
commonStrings = document.getElementById('commonStrings');
patronStrings = document.getElementById('patronStrings');
@@ -12,36 +15,68 @@
JSAN.errorLevel = "die"; // none, warn, or die
JSAN.addRepository('..');
- JSAN.use('OpenILS.data'); var data = new OpenILS.data(); data.stash_retrieve();
+ JSAN.use('OpenILS.data'); data = new OpenILS.data(); data.stash_retrieve();
XML_HTTP_SERVER = data.server_unadorned;
- JSAN.use('util.error'); var error = new util.error();
- JSAN.use('util.network'); var net = new util.network();
- JSAN.use('patron.util'); JSAN.use('util.list'); JSAN.use('util.functional'); JSAN.use('util.widgets');
+ JSAN.use('util.error'); error = new util.error();
+ JSAN.use('util.network'); net = new util.network();
+ JSAN.use('patron.util');
+ JSAN.use('util.list');
+ JSAN.use('util.functional');
+ JSAN.use('util.widgets');
- var list = new util.list( 'ausp_list' );
+ init_list();
+ build_penalty_menu();
+ document.getElementById('cmd_remove_penalty').addEventListener('command', handle_remove_penalty, false);
+ document.getElementById('cmd_edit_penalty').addEventListener('command', handle_edit_penalty, false);
+ populate_list();
+
+ } catch(E) {
+ var err_prefix = 'standing_penalties.js -> penalty_init() : ';
+ if (error) error.standard_unexpected_error_alert(err_prefix,E); else alert(err_prefix + E);
+ }
+}
+
+function init_list() {
+ try {
+
+ list = new util.list( 'ausp_list' );
list.init(
{
'columns' : patron.util.ausp_columns({}),
'map_row_to_columns' : patron.util.std_map_row_to_columns(),
- 'retrieve_row' : function(params) {
- params.row_node.setAttribute('retrieve_id',params.row.my.ausp.id());
- params.on_retrieve(params.row);
- return params.row;
- },
- 'on_select' : function(ev) {
- var sel = list.retrieve_selection();
- var ids = util.functional.map_list( sel, function(o) { return JSON2js( o.getAttribute('retrieve_id') ); } );
- if (ids.length > 0) {
- document.getElementById('cmd_remove_penalty').setAttribute('disabled','false');
- } else {
- document.getElementById('cmd_remove_penalty').setAttribute('disabled','true');
- }
- }
+ 'retrieve_row' : retrieve_row,
+ 'on_select' : handle_selection
}
);
- var rows = [];
+ } catch(E) {
+ var err_prefix = 'standing_penalties.js -> init_list() : ';
+ if (error) error.standard_unexpected_error_alert(err_prefix,E); else alert(err_prefix + E);
+ }
+}
+
+function retrieve_row (params) { // callback function for fleshing rows in a list
+ params.row_node.setAttribute('retrieve_id',params.row.my.ausp.id());
+ params.on_retrieve(params.row);
+ return params.row;
+}
+
+function handle_selection (ev) { // handler for list row selection event
+ var sel = list.retrieve_selection();
+ var ids = util.functional.map_list( sel, function(o) { return JSON2js( o.getAttribute('retrieve_id') ); } );
+ if (ids.length > 0) {
+ document.getElementById('cmd_remove_penalty').setAttribute('disabled','false');
+ } else {
+ document.getElementById('cmd_remove_penalty').setAttribute('disabled','true');
+ }
+}
+
+function populate_list() {
+ try {
+
+ rows = [];
+ list.clear();
for (var i = 0; i < xulG.patron.standing_penalties().length; i++) {
var row_params = {
'row' : {
@@ -55,6 +90,15 @@
rows[ xulG.patron.standing_penalties()[i].id() ] = list.append( row_params );
};
+ } catch(E) {
+ var err_prefix = 'standing_penalties.js -> populate_list() : ';
+ if (error) error.standard_unexpected_error_alert(err_prefix,E); else alert(err_prefix + E);
+ }
+}
+
+function build_penalty_menu() {
+ try {
+
var csp_list = document.getElementById('csp_list');
util.widgets.remove_children(csp_list);
for (var i = 0; i < data.list.csp.length; i++) {
@@ -63,149 +107,178 @@
menuitem.setAttribute('label',data.list.csp[i].label());
menuitem.setAttribute('value',data.list.csp[i].id());
menuitem.setAttribute('id','csp_'+data.list.csp[i].id());
- if (util.functional.find_list( xulG.patron.standing_penalties(), function(o) { return o.standing_penalty().id() == data.list.csp[i].id(); } )) {
- menuitem.setAttribute('disabled','true');
- }
menuitem.addEventListener(
'command',
- function(ev) {
- var id = ev.target.getAttribute('value');
+ handle_menuitem,
+ false
+ );
+ }
+ }
- var note = window.prompt(patronStrings.getString('staff.patron.standing_penalty.note_prompt'),'',patronStrings.getString('staff.patron.standing_penalty.note_title'));
+ } catch(E) {
+ var err_prefix = 'standing_penalties.js -> build_penalty_menu() : ';
+ if (error) error.standard_unexpected_error_alert(err_prefix,E); else alert(err_prefix + E);
+ }
+}
- var penalty = new ausp();
- penalty.usr( xulG.patron.id() );
- penalty.isnew( 1 );
- penalty.standing_penalty( id );
- penalty.org_unit( ses('ws_ou') );
- penalty.note( note );
- net.simple_request(
- 'FM_AUSP_APPLY',
- [ ses(), penalty ],
- function(reqobj) {
- var req = reqobj.getResultObject();
- if (typeof req.ilsevent != 'undefined') {
- error.standard_unexpected_error_alert(patronStrings.getFormattedString('staff.patron.standing_penalty.apply_error',[data.hash.csp[id].name()]),req);
- } else {
- penalty.id(req);
- xulG.patron.standing_penalties( xulG.patron.standing_penalties().concat( penalty ) );
- var row_params = {
- 'row' : {
- 'my' : {
- 'ausp' : penalty,
- 'csp' : data.hash.csp[ penalty.standing_penalty() ],
- 'au' : xulG.patron,
- }
- }
- };
- rows[ req ] = list.append( row_params );
- ev.target.setAttribute('disabled','true');
- }
- if (xulG && typeof xulG.refresh == 'function') {
- xulG.refresh();
- }
- document.getElementById('progress').hidden = true;
- }
- );
+function handle_menuitem(ev) {
+ try {
- document.getElementById('progress').hidden = false;
- },
- false
+ var id = ev.target.getAttribute('value');
+
+ var note = window.prompt(
+ patronStrings.getString('staff.patron.standing_penalty.note_prompt'),
+ '',
+ patronStrings.getString('staff.patron.standing_penalty.note_title')
+ );
+
+ var penalty = new ausp();
+ penalty.usr( xulG.patron.id() );
+ penalty.isnew( 1 );
+ penalty.standing_penalty( id );
+ penalty.org_unit( ses('ws_ou') );
+ penalty.note( note );
+ net.simple_request(
+ 'FM_AUSP_APPLY',
+ [ ses(), penalty ],
+ generate_request_handler_for_penalty_apply( penalty, id )
+ );
+
+ document.getElementById('progress').hidden = false;
+
+ } catch(E) {
+ var err_prefix = 'standing_penalties.js -> handle_menuitem() : ';
+ if (error) error.standard_unexpected_error_alert(err_prefix,E); else alert(err_prefix + E);
+ }
+}
+
+function generate_request_handler_for_penalty_apply(penalty,id) {
+ return function(reqobj) {
+ try {
+
+ var req = reqobj.getResultObject();
+ if (typeof req.ilsevent != 'undefined') {
+ error.standard_unexpected_error_alert(
+ patronStrings.getFormattedString('staff.patron.standing_penalty.apply_error',[data.hash.csp[id].name()]),
+ req
);
+ } else {
+ penalty.id(req);
+ xulG.patron.standing_penalties( xulG.patron.standing_penalties().concat( penalty ) );
+ var row_params = {
+ 'row' : {
+ 'my' : {
+ 'ausp' : penalty,
+ 'csp' : data.hash.csp[ penalty.standing_penalty() ],
+ 'au' : xulG.patron,
+ }
+ }
+ };
+ rows[ req ] = list.append( row_params );
}
+ if (xulG && typeof xulG.refresh == 'function') {
+ xulG.refresh();
+ }
+ document.getElementById('progress').hidden = true;
+
+ } catch(E) {
+ var err_prefix = 'standing_penalties.js -> request_handler_for_penalty_apply() : ';
+ if (error) error.standard_unexpected_error_alert(err_prefix,E); else alert(err_prefix + E);
}
+ };
+}
+
+function handle_remove_penalty(ev) {
+ try {
+ var sel = list.retrieve_selection();
+ var ids = util.functional.map_list( sel, function(o) { return JSON2js( o.getAttribute('retrieve_id') ); } );
+ if (! ids.length > 0 ) return;
- document.getElementById('cmd_remove_penalty').addEventListener(
- 'command',
+ var funcs = [];
+ for (var i = 0; i < ids.length; i++) {
+ funcs.push( generate_penalty_remove_function(ids[i]) );
+ }
+ funcs.push(
function() {
- var sel = list.retrieve_selection();
- var ids = util.functional.map_list( sel, function(o) { return JSON2js( o.getAttribute('retrieve_id') ); } );
- if (ids.length > 0) {
- function gen_func(id) {
- return function() {
- try {
- var penalty = util.functional.find_list( xulG.patron.standing_penalties(), function(o) { return o.id() == id; } );
- penalty.isdeleted(1);
-
- var req = net.simple_request( 'FM_AUSP_REMOVE', [ ses(), penalty ] );
- if (typeof req.ilsevent != 'undefined' || String(req) != '1') {
- error.standard_unexpected_error_alert(patronStrings.getFormattedString('staff.patron.standing_penalty.remove_error',[id]),req);
- } else {
- var node = rows[ id ].my_node;
- var parentNode = node.parentNode;
- parentNode.removeChild( node );
- delete(rows[ id ]);
- var csp_id = typeof penalty.standing_penalty() == 'object' ? penalty.standing_penalty().id() : penalty.standing_penalty();
- document.getElementById('csp_'+csp_id).setAttribute('disabled','false');
- }
- } catch(E) {
- alert(E);
- }
- };
- }
-
- var funcs = [];
- for (var i = 0; i < ids.length; i++) {
- funcs.push( gen_func(ids[i]) );
- }
- funcs.push(
- function() {
- if (xulG && typeof xulG.refresh == 'function') {
- xulG.refresh();
- }
- document.getElementById('progress').hidden = true;
- }
- );
- document.getElementById('progress').hidden = false;
- JSAN.use('util.exec'); var exec = new util.exec();
- exec.chain(funcs);
+ if (xulG && typeof xulG.refresh == 'function') {
+ xulG.refresh();
}
- },
- false
+ document.getElementById('progress').hidden = true;
+ }
);
+ document.getElementById('progress').hidden = false;
+ JSAN.use('util.exec'); var exec = new util.exec();
+ exec.chain(funcs);
- document.getElementById('cmd_edit_penalty').addEventListener(
- 'command',
- function() {
- var sel = list.retrieve_selection();
- var ids = util.functional.map_list( sel, function(o) { return JSON2js( o.getAttribute('retrieve_id') ); } );
- if (ids.length > 0) {
- var note = window.prompt(
- patronStrings.getString( 'staff.patron.standing_penalty.note_prompt.' + (ids.length == 1 ? 'singular' : 'plural') ),
- '',
- patronStrings.getString( 'staff.patron.standing_penalty.note_prompt.title' )
- );
- if (note == null) { return; } /* cancel */
- for (var i = 0; i < ids.length; i++) {
- var penalty = util.functional.find_list( xulG.patron.standing_penalties(), function(o) { return o.id() == ids[i]; } );
- penalty.note( note ); /* this is for rendering, and propogates by reference to the object associated with the row in the GUI */
- }
- document.getElementById('progress').hidden = false;
- net.simple_request(
- 'FM_AUSP_UPDATE_NOTE', [ ses(), ids, note ],
- function(reqObj) {
- var req = reqObj.getResultObject();
- if (typeof req.ilsevent != 'undefined' || String(req) != '1') {
- error.standard_unexpected_error_alert(patronStrings.getString('staff.patron.standing_penalty.update_error'),req);
- } else {
- for (var i = 0; i < ids.length; i++) {
- list.refresh_row( rows[ ids[i] ] );
- }
- }
- if (xulG && typeof xulG.refresh == 'function') {
- xulG.refresh();
- }
- document.getElementById('progress').hidden = true;
+ } catch(E) {
+ var err_prefix = 'standing_penalties.js -> request_handler_for_penalty_apply() : ';
+ if (error) error.standard_unexpected_error_alert(err_prefix,E); else alert(err_prefix + E);
+ }
+}
+
+function generate_penalty_remove_function(id) {
+ return function() {
+ try {
+
+ var penalty = util.functional.find_list( xulG.patron.standing_penalties(), function(o) { return o.id() == id; } );
+ penalty.isdeleted(1);
+
+ var req = net.simple_request( 'FM_AUSP_REMOVE', [ ses(), penalty ] );
+ if (typeof req.ilsevent != 'undefined' || String(req) != '1') {
+ error.standard_unexpected_error_alert(patronStrings.getFormattedString('staff.patron.standing_penalty.remove_error',[id]),req);
+ } else {
+ var node = rows[ id ].my_node;
+ var parentNode = node.parentNode;
+ parentNode.removeChild( node );
+ delete(rows[ id ]);
+ }
+
+ } catch(E) {
+ var err_prefix = 'standing_penalties.js -> penalty_remove_function() : ';
+ if (error) error.standard_unexpected_error_alert(err_prefix,E); else alert(err_prefix + E);
+ }
+ };
+}
+
+function handle_edit_penalty(ev) {
+ try {
+
+ var sel = list.retrieve_selection();
+ var ids = util.functional.map_list( sel, function(o) { return JSON2js( o.getAttribute('retrieve_id') ); } );
+ if (ids.length > 0) {
+ var note = window.prompt(
+ patronStrings.getString( 'staff.patron.standing_penalty.note_prompt.' + (ids.length == 1 ? 'singular' : 'plural') ),
+ '',
+ patronStrings.getString( 'staff.patron.standing_penalty.note_prompt.title' )
+ );
+ if (note == null) { return; } /* cancel */
+ for (var i = 0; i < ids.length; i++) {
+ var penalty = util.functional.find_list( xulG.patron.standing_penalties(), function(o) { return o.id() == ids[i]; } );
+ penalty.note( note ); /* this is for rendering, and propogates by reference to the object associated with the row in the GUI */
+ }
+ document.getElementById('progress').hidden = false;
+ net.simple_request(
+ 'FM_AUSP_UPDATE_NOTE', [ ses(), ids, note ],
+ function(reqObj) {
+ var req = reqObj.getResultObject();
+ if (typeof req.ilsevent != 'undefined' || String(req) != '1') {
+ error.standard_unexpected_error_alert(patronStrings.getString('staff.patron.standing_penalty.update_error'),req);
+ } else {
+ for (var i = 0; i < ids.length; i++) {
+ list.refresh_row( rows[ ids[i] ] );
}
- );
+ }
+ if (xulG && typeof xulG.refresh == 'function') {
+ xulG.refresh();
+ }
+ document.getElementById('progress').hidden = true;
}
- },
- false
- );
+ );
+ }
-
} catch(E) {
- alert(E);
+ var err_prefix = 'standing_penalties.js -> handle_edit_penalty() : ';
+ if (error) error.standard_unexpected_error_alert(err_prefix,E); else alert(err_prefix + E);
}
}
More information about the open-ils-commits
mailing list