2 # Copyright (C) 2008 Georgia Public Library Service / Equinox Software, Inc
3 # Mike Rylander <miker@esilibrary.com>
5 # This program is free software; you can redistribute it and/or
6 # modify it under the terms of the GNU General Public License
7 # as published by the Free Software Foundation; either version 2
8 # of the License, or (at your option) any later version.
10 # This program is distributed in the hope that it will be useful,
11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 # GNU General Public License for more details.
15 <html xmlns="http://www.w3.org/1999/xhtml">
17 <title>Confiy :: Global :: Config :: Copy Status</title>
19 <style type="text/css">
20 @import url("/js/dojo/dojox/grid/_grid/tundraGrid.css");
21 @import url("/js/dojo/dojo/resources/dojo.css");
22 @import url("/js/dojo/dijit/themes/tundra/tundra.css");
23 @import url("/js/dojo/dojox/widget/Toaster/Toaster.css");
30 margin: 0px 0px 0px 0px;
31 padding: 0px 0px 0px 0px;
47 <!-- The OpenSRF API writ JS -->
48 <script language='javascript' src='/opac/common/js/utils.js' type='text/javascript'></script>
49 <script language='javascript' src='/opac/common/js/Cookies.js' type='text/javascript'></script>
50 <script language='javascript' src='/opac/common/js/CGI.js' type='text/javascript'></script>
51 <script language='javascript' src='/opac/common/js/JSON_v1.js' type='text/javascript'></script>
53 <!-- Dojo goodness -->
54 <script type="text/javascript" src="../admin.js"></script>
55 <script type="text/javascript" src="/js/dojo/dojo/dojo.js"></script>
56 <script type="text/javascript" src="/js/dojo/dijit/dijit.js"></script>
58 <script type="text/javascript" src="copy_status.js"></script>
62 <body class="tundra" id='pagebody'>
64 <div dojoType="dijit.layout.LayoutContainer" id="grid_container" jsId="grid_container" orientation="vertical">
65 <script type="dojo/method">
66 window.highlighter= {};
67 window.highlighter.green = dojox.fx.highlight( { color : '#B4FFB4', node : 'grid_container', duration : 500 } );
68 window.highlighter.red = dojox.fx.highlight( { color : '#FF2018', node : 'grid_container', duration : 500 } );
70 window.dirtyStore = [];
73 method : 'open-ils.permacrud.search.ccs.atomic',
75 params : [ ses, { id : { "!=" : null } }, { order_by : { ccs : 'name' } } ],
76 onerror : function (r) { status_update('Problem fetching statuses') },
77 oncomplete : function (r) {
79 window._status_list = r.recv().content();
80 window._status_data = ccs.toStoreData( window._status_list, 'name' );
81 window.status_store = new dojo.data.ItemFileWriteStore({ data : window._status_data });
83 window.status_store.onSet = function (item, attr, o, n) {
84 if (attr == 'ischanged') return;
86 this.setValue( item, 'ischanged', 1);
88 if (attr == 'holdable' && typeof n != 'string')
89 this.setValue(item, 'holdable', n ? 't' : 'f');
91 if (attr == 'opac_visible' && typeof n != 'string')
92 this.setValue(item, 'opac_visible', n ? 't' : 'f');
96 dojo.addOnUnload( function (event) {
99 query : { ischanged : 1 },
100 onItem : function (item, req) { try { if (this.isItem( item )) window.dirtyStore.push( item ); } catch (e) { /* meh */ } },
104 if (dirtyStore.length > 0) {
105 var confirmation = confirm(
106 'There are unsaved modified Statuses! '+
107 'OK to save these changes, Cancel to abandon them.'
111 for (var i in window.dirtyStore) {
112 window.current_status = window.dirtyStore[i];
124 <div dojoType="dijit.layout.LayoutContainer" orientation="horizontal" style="margin-top: 5px;" layoutAlign="top">
125 <span>New Status:</span>
126 <div dojoType="dijit.form.TextBox" id="new_status_code" jsId="new_status_name" label="New Status Name"></div>
127 <button dojoType="dijit.form.Button" id="save_new_status_code" jsId="save_new_status_name" label="Add">
128 <script type="dojo/connect" event="onClick">
130 var new_name = new_status_name.getValue();
131 if (!new_name) return;
133 var new_fm_obj = new ccs().fromHash({
140 method : 'open-ils.permacrud.create.ccs',
142 params : [ ses, new_fm_obj ],
143 onerror : function (r) {
144 highlighter.red.play();
145 status_update( 'Problem calling method to create new Status' );
148 oncomplete : function (r) {
150 if ( res && res.content() ) {
151 var new_item_hash = res.content().toHash();
152 status_store.newItem( new_item_hash );
153 status_update( 'New ' + new_item_hash.name + ' status created' );
154 status_grid.model.sort(-2);
155 highlighter.green.play();
157 highlighter.red.play();
158 status_update( 'Problem creating new Status' );
168 <div dojoType="dijit.layout.ContentPane" style="width:100%; height:100%;" layoutAlign="client">
169 <div dojoType="dojox.grid.data.DojoData" id="status_data_model"jsId="status_data_model" store="status_store" query="{ 'id' : '*' }"></div>
170 <div id="status_grid" dojoType="dojox.Grid" jsId="status_grid">
171 <script type="dojo/connect" event="startup">
173 var status_grid_layout = [
182 editor : dojox.grid.editors.Dijit
184 { name : "Translation",
187 get : function (row) {
188 if (!window.status_rows) window.status_rows = [];
189 var r = window.status_data_model.getRow(row);
191 window.status_rows[row] = new ccs().fromHash(window.status_data_model.getRow(row));
193 'dojo.query(".status_grid_trans_cell_' + row + '").'+
194 'instantiate(openils.widget.TranslatorPopup,{field:"name",'+
195 'targetObject:"window.status_rows['+row+']"});'+
196 'status_grid.rowHeightChanged('+row+')',
199 var oldnode = dojo.byId('name_translation_' + row);
200 if (oldnode) dijit.byNode(oldnode).destroyRecursive();
201 return '<span class="status_grid_trans_cell_'+row+'"></span>';
208 editor : dojox.grid.editors.bool,
209 get : function (row) {
210 var r = window.status_data_model.getRow(row);
213 if (h == 't' || h === true) return true;
218 { name : "OPAC Visible",
219 field : "opac_visible",
220 editor : dojox.grid.editors.bool,
221 get : function (row) {
222 var r = window.status_data_model.getRow(row);
224 var h = r.opac_visible;
225 if (h == 't' || h === true) return true;
235 this.setStructure(status_grid_layout);
236 this.setModel(window.status_data_model);
241 <div dojoType="dijit.layout.ContentPane" orientation="horizontal" style="margin-bottom: 5px;" layoutAlign="bottom">
243 <button jsId="save_ccs_button" dojoType="dijit.form.Button" label="Save Changes" onClick="save_them_all()"></button>
245 <button jsId="delete_ccs_button" dojoType="dijit.form.Button" label="Delete Selected">
246 <script type="dojo/connect" event="onClick">
248 var selected_rows = status_grid.selection.getSelected();
250 var selected_items = [];
251 for (var i in selected_rows) {
253 status_grid.model.getRow( selected_rows[i] ).__dojo_data_item
257 status_grid.selection.clear();
259 for (var i in selected_items) {
260 current_status = selected_items[i];
262 if ( confirm('Are you sure you want to delete ' + status_store.getValue( current_status, 'name' ) + '?')) {
264 status_store.setValue( current_status, 'isdeleted', 1 );
266 var modified_ccs = new ccs().fromStoreItem( current_status );
267 modified_ccs.isdeleted( 1 );
270 method : 'open-ils.permacrud.delete.ccs',
272 params : [ ses, modified_ccs ],
273 onerror : function (r) {
274 highlighter.red.play();
275 status_update( 'Problem deleting ' + status_store.getValue( current_status, 'name' ) );
277 oncomplete : function (r) {
279 if ( res && res.content() ) {
281 var old_name = status_store.getValue( current_status, 'name' );
284 query : { id : status_store.getValue( current_status, 'id' ) },
285 onItem : function (item, req) { try { if (this.isItem( item )) this.deleteItem( item ); } catch (e) { /* meh */ } },
289 current_status = null;
291 highlighter.green.play();
292 status_update( old_name + ' deleted' );
294 highlighter.red.play();
295 status_update( 'Problem deleting ' + old_name );