From 207499f2222de92c44a5b9862b19a68445d40605 Mon Sep 17 00:00:00 2001 From: phasefx Date: Wed, 17 Feb 2010 22:15:09 +0000 Subject: [PATCH] UI for Purchase Order related Events git-svn-id: svn://svn.open-ils.org/ILS/trunk@15568 dcc99617-32d9-48b4-a31d-7c20da2025e4 --- .../perlmods/OpenILS/Application/Acq/Financials.pm | 10 +- Open-ILS/web/js/ui/default/acq/po/events.js | 223 +++++++++++++++++++++ Open-ILS/web/opac/locale/en-US/lang.dtd | 2 + Open-ILS/web/templates/default/acq/po/events.tt2 | 58 ++++++ .../xul/staff_client/chrome/content/main/menu.js | 4 + .../chrome/content/main/menu_frame_menus.xul | 2 + .../chrome/locale/en-US/offline.properties | 1 + 7 files changed, 299 insertions(+), 1 deletion(-) create mode 100644 Open-ILS/web/js/ui/default/acq/po/events.js create mode 100644 Open-ILS/web/templates/default/acq/po/events.tt2 diff --git a/Open-ILS/src/perlmods/OpenILS/Application/Acq/Financials.pm b/Open-ILS/src/perlmods/OpenILS/Application/Acq/Financials.pm index c9cb25b6eb..7b07a9e298 100644 --- a/Open-ILS/src/perlmods/OpenILS/Application/Acq/Financials.pm +++ b/Open-ILS/src/perlmods/OpenILS/Application/Acq/Financials.pm @@ -1162,6 +1162,10 @@ sub po_events { (my $search_field = $self->api_name) =~ s/.*\.([_a-z]+)$/$1/; my $obj_type = 'acqpo'; + if ($search_field eq 'ordering_agency') { + $search_value = $U->get_org_descendants($search_value); + } + my $query = { "select"=>{"atev"=>["id"]}, "from"=>"atev", @@ -1183,7 +1187,8 @@ sub po_events { } }, "state"=>"pending" - } + }, + "order_by"=>[{"class"=>"atev", "field"=>"run_time", "direction"=>"desc"}] }; if (defined $options->{state}) { @@ -1194,6 +1199,9 @@ sub po_events { $query->{'where'}{'start_time'} = $options->{start_time}; } + if (defined $options->{order_by}) { + $query->{'order_by'} = $options->{order_by}; + } my $po_events = $e->json_query($query); my $flesh_fields = $options->{flesh_fields} || {}; diff --git a/Open-ILS/web/js/ui/default/acq/po/events.js b/Open-ILS/web/js/ui/default/acq/po/events.js new file mode 100644 index 0000000000..afb99e3361 --- /dev/null +++ b/Open-ILS/web/js/ui/default/acq/po/events.js @@ -0,0 +1,223 @@ +dojo.require('openils.widget.AutoGrid'); +dojo.require('fieldmapper.OrgUtils'); +dojo.require('openils.widget.OrgUnitFilteringSelect'); +dojo.require('dijit.form.DateTextBox'); +dojo.require('dojo.date.stamp'); + +var eventState; +var eventContextOrg; +var eventList; +var eventStartDateRange; +var eventEndDateRange; + +function eventInit() { + try { + buildStateSelector(); + buildOrgSelector(); + buildDatePickers(); + buildEventGrid(); + } catch(E) { + //dump('Error in acq/events.js, eventInit(): ' + E); + throw(E); + } +} + +function buildDatePickers() { + var today = new Date(); + var yesterday = new Date( today.getFullYear(), today.getMonth(), today.getDate() - 1); + eventStartDatePicker.constraints.max = today; + eventStartDatePicker.setValue( yesterday ); + eventStartDateRange = eventStartDatePicker.getValue(); + eventEndDatePicker.constraints.max = today; + eventEndDatePicker.setValue( today ); + eventEndDateRange = eventEndDatePicker.getValue(); + dojo.connect( + eventStartDatePicker, + 'onChange', + function() { + var new_date = arguments[0]; + if (new_date > eventEndDatePicker.getValue()) { + var swap = eventEndDatePicker.getValue(); + eventEndDatePicker.setValue( new_date ); + this.setValue( swap ); + } + eventStartDateRange = this.getValue(); + eventGrid.resetStore(); + buildEventGrid(); + } + ); + dojo.connect( + eventEndDatePicker, + 'onChange', + function() { + var new_date = arguments[0]; + if (new_date < eventStartDatePicker.getValue()) { + var swap = eventStartDatePicker.getValue(); + eventStartDatePicker.setValue( new_date ); + this.setValue( swap ); + } + eventEndDateRange = this.getValue(); + eventGrid.resetStore(); + buildEventGrid(); + } + ); + +} + +function buildStateSelector() { + try { + eventStateSelect.store = new dojo.data.ItemFileReadStore({ + data : { + identifier:"value", + label: "name", + items: [ + /* FIXME: I18N? */ + {name:"Pending", value:'pending'}, + {name:"Complete", value:'complete'}, + {name:"Error", value:'error'} + ] + } + }); + eventStateSelect.setValue('pending'); + dojo.connect( + eventStateSelect, + 'onChange', + function() { + try { + eventState = this.getValue(); + eventGrid.resetStore(); + buildEventGrid(); + } catch(E) { + //dump('Error in acq/events.js, eventInit, connect, onChange: ' + E); + throw(E); + } + } + ); + + } catch(E) { + //dump('Error in acq/events.js, buildStateSelector(): ' + E); + throw(E); + } +} + +function buildOrgSelector() { + try { + var connect = function() { + try { + dojo.connect( + eventContextOrgSelect, + 'onChange', + function() { + try { + eventContextOrg = this.getValue(); + eventGrid.resetStore(); + buildEventGrid(); + } catch(E) { + //dump('Error in acq/events.js, eventInit, connect, onChange: ' + E); + throw(E); + } + } + ); + } catch(E) { + //dump('Error in acq/events.js, eventInit, connect: ' + E); + throw(E); + } + }; + new openils.User().buildPermOrgSelector('STAFF_LOGIN', eventContextOrgSelect, null, connect); + + eventGrid.cancelSelected = function() { doSelected('open-ils.acq.purchase_order.event.cancel.batch') }; + eventGrid.resetSelected = function() { doSelected('open-ils.acq.purchase_order.event.reset.batch') }; + + } catch(E) { + //dump('Error in acq/events.js, buildOrgSelector(): ' + E); + throw(E); + } +} + +function doSelected(method) { + try { + var ids = []; + dojo.forEach( + eventGrid.getSelectedItems(), + function(item) { + ids.push( eventGrid.store.getValue(item,'id') ); + } + ); + fieldmapper.standardRequest( + [ 'open-ils.acq', method ], + { async: true, + params: [openils.User.authtoken, ids], + onresponse: function(r) { + try { + var result = openils.Util.readResponse(r); + if (typeof result.ilsevent != 'undefined') { throw(result); } + } catch(E) { + //dump('Error in acq/events.js, doSelected(), onresponse(): ' + E); + } + }, + onerror: function(r) { + try { + var result = openils.Util.readResponse(r); + throw(result); + } catch(E) { + //dump('Error in acq/events.js, doSelected(), onerror(): ' + E); + throw(E); + } + }, + oncomplete: function(r) { + try { + var result = openils.Util.readResponse(r); + eventGrid.resetStore(); + buildEventGrid(); + } catch(E) { + //dump('Error in acq/events.js, doSelected(), oncomplete(): ' + E); + throw(E); + } + } + } + ); + } catch(E) { + //dump('Error in acq/events.js, doSelected(): ' + E); + throw(E); + } +} + +function buildEventGrid() { + if(eventContextOrg == null) { + eventContextOrg = openils.User.user.ws_ou(); + } + if(eventState == null) { + eventState = 'pending'; + } + var filter = {"state":eventState, "order_by":[{"class":"atev", "field":"run_time", "direction":"desc"}]}; + if(eventStartDateRange != null) { + /* the dijit appears to always provide 00:00:00 for the timestamp component */ + var end_of_day = eventEndDateRange; end_of_day.setDate( end_of_day.getDate() + 1 ); + filter['start_time'] = { + 'between' : [ + dojo.date.stamp.toISOString( eventStartDateRange ), + dojo.date.stamp.toISOString( end_of_day ) + ] + } + } + fieldmapper.standardRequest( + ['open-ils.acq', 'open-ils.acq.purchase_order.events.ordering_agency'], + { async: true, + params: [openils.User.authtoken, eventContextOrg, filter], + onresponse: function(r) { + try { + if(eventObject = openils.Util.readResponse(r)) { + eventGrid.store.newItem(atev.toStoreItem(eventObject)); + } + } catch(E) { + //dump('Error in acq/events.js, buildEventGrid, onresponse: ' + E); + throw(E); + } + } + } + ); +} + +openils.Util.addOnLoad(eventInit); + + diff --git a/Open-ILS/web/opac/locale/en-US/lang.dtd b/Open-ILS/web/opac/locale/en-US/lang.dtd index 40a9adf1f5..0761614058 100644 --- a/Open-ILS/web/opac/locale/en-US/lang.dtd +++ b/Open-ILS/web/opac/locale/en-US/lang.dtd @@ -782,6 +782,8 @@ + + diff --git a/Open-ILS/web/templates/default/acq/po/events.tt2 b/Open-ILS/web/templates/default/acq/po/events.tt2 new file mode 100644 index 0000000000..b9befec7e3 --- /dev/null +++ b/Open-ILS/web/templates/default/acq/po/events.tt2 @@ -0,0 +1,58 @@ +[% WRAPPER default/base.tt2 %] + + + + +
+
+
PO Triggered Events
+
+ + +
+
+
+ + + + + + + + + + + + + + + + +
+ +
+
+ +[% END %] + + diff --git a/Open-ILS/xul/staff_client/chrome/content/main/menu.js b/Open-ILS/xul/staff_client/chrome/content/main/menu.js index e7ab12f676..35df5ca23c 100644 --- a/Open-ILS/xul/staff_client/chrome/content/main/menu.js +++ b/Open-ILS/xul/staff_client/chrome/content/main/menu.js @@ -667,6 +667,10 @@ main.menu.prototype = { ['oncommand'], function() { open_eg_web_page('acq/po/search', 'menu.cmd_acq_view_po.tab'); } ], + 'cmd_acq_view_po_events' : [ + ['oncommand'], + function() { open_eg_web_page('acq/po/events', 'menu.cmd_acq_view_po_events.tab'); } + ], 'cmd_acq_upload' : [ ['oncommand'], function() { open_eg_web_page('acq/picklist/upload', 'menu.cmd_acq_upload.tab'); } diff --git a/Open-ILS/xul/staff_client/chrome/content/main/menu_frame_menus.xul b/Open-ILS/xul/staff_client/chrome/content/main/menu_frame_menus.xul index f6b4c78ef0..ed49b55a87 100644 --- a/Open-ILS/xul/staff_client/chrome/content/main/menu_frame_menus.xul +++ b/Open-ILS/xul/staff_client/chrome/content/main/menu_frame_menus.xul @@ -79,6 +79,7 @@ + @@ -256,6 +257,7 @@ + diff --git a/Open-ILS/xul/staff_client/chrome/locale/en-US/offline.properties b/Open-ILS/xul/staff_client/chrome/locale/en-US/offline.properties index 4a573e1a15..2c1c455382 100644 --- a/Open-ILS/xul/staff_client/chrome/locale/en-US/offline.properties +++ b/Open-ILS/xul/staff_client/chrome/locale/en-US/offline.properties @@ -226,6 +226,7 @@ menu.cmd_acq_li_search.tab=Lineitem Search menu.cmd_acq_upload.tab=Load Order Record menu.cmd_acq_new_brief_record.tab=New Brief Record menu.cmd_acq_view_po.tab=Purchase Orders +menu.cmd_acq_view_po_events.tab=Purchase Order Events menu.cmd_acq_view_fund.tab=Funds menu.cmd_acq_view_funding_source.tab=Funding Sources menu.cmd_acq_view_provider.tab=Providers -- 2.11.0