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');
93 dojo.addOnUnload( function (event) {
96 query : { ischanged : 1 },
97 onItem : function (item, req) { try { if (this.isItem( item )) window.dirtyStore.push( item ); } catch (e) { /* meh */ } },
101 if (dirtyStore.length > 0) {
102 var confirmation = confirm(
103 'There are unsaved modified Statuses! '+
104 'OK to save these changes, Cancel to abandon them.'
108 for (var i in window.dirtyStore) {
109 window.current_status = window.dirtyStore[i];
121 <div dojoType="dijit.layout.LayoutContainer" orientation="horizontal" style="margin-top: 5px;" layoutAlign="top">
122 <span>New Status:</span>
123 <div dojoType="dijit.form.TextBox" id="new_status_code" jsId="new_status_name" label="New Status Name"></div>
124 <button dojoType="dijit.form.Button" id="save_new_status_code" jsId="save_new_status_name" label="Add">
125 <script type="dojo/connect" event="onClick">
127 var new_name = new_status_name.getValue();
128 if (!new_name) return;
130 var new_fm_obj = new ccs().fromHash({
137 method : 'open-ils.permacrud.create.ccs',
139 params : [ ses, new_fm_obj ],
140 onerror : function (r) {
141 highlighter.red.play();
142 status_update( 'Problem calling method to create new Status' );
145 oncomplete : function (r) {
147 if ( res && res.content() ) {
148 var new_item_hash = res.content().toHash();
149 status_store.newItem( new_item_hash );
150 status_update( 'New ' + new_item_hash.name + ' status created' );
151 status_grid.model.sort(-2);
152 highlighter.green.play();
154 highlighter.red.play();
155 status_update( 'Problem creating new Status' );
165 <div dojoType="dijit.layout.ContentPane" style="width:100%; height:100%;" layoutAlign="client">
166 <div dojoType="dojox.grid.data.DojoData" id="status_data_model"jsId="status_data_model" store="status_store" query="{ 'id' : '*' }"></div>
167 <div id="status_grid" dojoType="dojox.Grid" jsId="status_grid">
168 <script type="dojo/connect" event="startup">
170 var status_grid_layout = [
179 editor : dojox.grid.editors.Dijit
181 { name : "Translation",
184 get : function (row) {
185 if (!window.status_rows) window.status_rows = [];
186 var r = window.status_data_model.getRow(row);
188 window.status_rows[row] = new ccs().fromHash(window.status_data_model.getRow(row));
190 'dojo.query(".status_grid_trans_cell_' + row + '").'+
191 'instantiate(openils.widget.TranslatorPopup,{field:"name",'+
192 'targetObject:"window.status_rows['+row+']",unique:"' + row + '"});'+
193 'status_grid.rowHeightChanged('+row+')',
196 var oldnode = dojo.byId('name_translation_' + row);
197 if (oldnode) dijit.byNode(oldnode).destroyRecursive();
198 return '<span class="status_grid_trans_cell_'+row+'"></span>';
205 editor : dojox.grid.editors.bool,
206 get : function (row) {
207 var r = window.status_data_model.getRow(row);
210 if (h == 't' || h === true) return true;
220 this.setStructure(status_grid_layout);
221 this.setModel(window.status_data_model);
226 <div dojoType="dijit.layout.ContentPane" orientation="horizontal" style="margin-bottom: 5px;" layoutAlign="bottom">
228 <button jsId="save_ccs_button" dojoType="dijit.form.Button" label="Save Changes" onClick="save_them_all()"></button>
230 <button jsId="delete_ccs_button" dojoType="dijit.form.Button" label="Delete Selected">
231 <script type="dojo/connect" event="onClick">
233 var selected_rows = status_grid.selection.getSelected();
235 var selected_items = [];
236 for (var i in selected_rows) {
238 status_grid.model.getRow( selected_rows[i] ).__dojo_data_item
242 status_grid.selection.clear();
244 for (var i in selected_items) {
245 current_status = selected_items[i];
247 if ( confirm('Are you sure you want to delete ' + status_store.getValue( current_status, 'name' ) + '?')) {
249 status_store.setValue( current_status, 'isdeleted', 1 );
251 var modified_ccs = new ccs().fromStoreItem( current_status );
252 modified_ccs.isdeleted( 1 );
255 method : 'open-ils.permacrud.delete.ccs',
257 params : [ ses, modified_ccs ],
258 onerror : function (r) {
259 highlighter.red.play();
260 status_update( 'Problem deleting ' + status_store.getValue( current_status, 'name' ) );
262 oncomplete : function (r) {
264 if ( res && res.content() ) {
266 var old_name = status_store.getValue( current_status, 'name' );
269 query : { id : status_store.getValue( current_status, 'id' ) },
270 onItem : function (item, req) { try { if (this.isItem( item )) this.deleteItem( item ); } catch (e) { /* meh */ } },
274 current_status = null;
276 highlighter.green.play();
277 status_update( old_name + ' deleted' );
279 highlighter.red.play();
280 status_update( 'Problem deleting ' + old_name );