]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/xul/staff_client/server/patron/standing_penalties.js
update functionality for notes on user standing penalties
[Evergreen.git] / Open-ILS / xul / staff_client / server / patron / standing_penalties.js
1 function penalty_init() {
2     try {
3         commonStrings = document.getElementById('commonStrings');
4         patronStrings = document.getElementById('patronStrings');
5
6         if (typeof JSAN == 'undefined') {
7             throw(
8                 commonStrings.getString('common.jsan.missing')
9             );
10         }
11
12         JSAN.errorLevel = "die"; // none, warn, or die
13         JSAN.addRepository('..');
14
15                 JSAN.use('OpenILS.data'); var data = new OpenILS.data(); data.stash_retrieve();
16         XML_HTTP_SERVER = data.server_unadorned;
17
18         JSAN.use('util.error'); var error = new util.error();
19         JSAN.use('util.network'); var net = new util.network();
20         JSAN.use('patron.util'); JSAN.use('util.list'); JSAN.use('util.functional'); JSAN.use('util.widgets');
21
22         var list = new util.list( 'ausp_list' );
23         list.init( 
24             {
25                 'columns' : patron.util.ausp_columns({}),
26                 'map_row_to_columns' : patron.util.std_map_row_to_columns(),
27                 'retrieve_row' : function(params) { 
28                     params.row_node.setAttribute('retrieve_id',params.row.my.ausp.id()); 
29                     params.on_retrieve(params.row); 
30                     return params.row; 
31                 },
32                 'on_select' : function(ev) {
33                     var sel = list.retrieve_selection();
34                     var ids = util.functional.map_list( sel, function(o) { return JSON2js( o.getAttribute('retrieve_id') ); } );
35                     if (ids.length > 0) {
36                         document.getElementById('cmd_remove_penalty').setAttribute('disabled','false');
37                     } else {
38                         document.getElementById('cmd_remove_penalty').setAttribute('disabled','true');
39                     }
40                 }
41             } 
42         );
43
44         var rows = [];
45         for (var i = 0; i < xulG.patron.standing_penalties().length; i++) {
46             var row_params = {
47                 'row' : {
48                     'my' : {
49                         'ausp' : xulG.patron.standing_penalties()[i],
50                         'csp' : xulG.patron.standing_penalties()[i].standing_penalty(),
51                         'au' : xulG.patron,
52                     }
53                 }
54             };
55             rows[ xulG.patron.standing_penalties()[i].id() ] = list.append( row_params );
56         };
57
58         var csp_list = document.getElementById('csp_list');
59         util.widgets.remove_children(csp_list);
60         for (var i = 0; i < data.list.csp.length; i++) {
61             if (data.list.csp[i].id() > 100) {
62                 var menuitem = document.createElement('menuitem'); csp_list.appendChild(menuitem);
63                 menuitem.setAttribute('label',data.list.csp[i].label());
64                 menuitem.setAttribute('value',data.list.csp[i].id());
65                 menuitem.setAttribute('id','csp_'+data.list.csp[i].id());
66                 if (util.functional.find_list( xulG.patron.standing_penalties(), function(o) { return o.standing_penalty().id() == data.list.csp[i].id(); } )) {
67                     menuitem.setAttribute('disabled','true');
68                 }
69                 menuitem.addEventListener(
70                     'command',
71                     function(ev) {
72                         var id = ev.target.getAttribute('value');
73
74                         var note = window.prompt(patronStrings.getString('staff.patron.standing_penalty.note_prompt'),'',patronStrings.getString('staff.patron.standing_penalty.note_title'));
75
76                         var penalty = new ausp();
77                         penalty.usr( xulG.patron.id() );
78                         penalty.isnew( 1 );
79                         penalty.standing_penalty( id );
80                         penalty.org_unit( ses('ws_ou') );
81                         penalty.note( note );
82                         net.simple_request(
83                             'FM_AUSP_APPLY', 
84                             [ ses(), penalty ],
85                             function(reqobj) {
86                                 var req = reqobj.getResultObject();
87                                 if (typeof req.ilsevent != 'undefined') {
88                                     error.standard_unexpected_error_alert(patronStrings.getFormattedString('staff.patron.standing_penalty.apply_error',[data.hash.csp[id].name()]),req);
89                                 } else {
90                                     penalty.id(req);
91                                     xulG.patron.standing_penalties( xulG.patron.standing_penalties().concat( penalty ) );
92                                     var row_params = {
93                                         'row' : {
94                                             'my' : {
95                                                 'ausp' : penalty,
96                                                 'csp' : data.hash.csp[ penalty.standing_penalty() ],
97                                                 'au' : xulG.patron,
98                                             }
99                                         }
100                                     };
101                                     rows[ req ] = list.append( row_params );
102                                     ev.target.setAttribute('disabled','true');
103                                 }
104                                 if (xulG && typeof xulG.refresh == 'function') {
105                                     xulG.refresh();
106                                 }
107                                 document.getElementById('progress').hidden = true;
108                             }
109                         );
110
111                         document.getElementById('progress').hidden = false;
112                     },
113                     false
114                 );
115             }
116         }
117
118
119         document.getElementById('cmd_remove_penalty').addEventListener(
120             'command',
121             function() {
122                 var sel = list.retrieve_selection();
123                 var ids = util.functional.map_list( sel, function(o) { return JSON2js( o.getAttribute('retrieve_id') ); } );
124                 if (ids.length > 0) {
125                     function gen_func(id) {
126                         return function() {
127                             try {
128                                 var penalty = util.functional.find_list( xulG.patron.standing_penalties(), function(o) { return o.id() == id; } );
129                                 penalty.isdeleted(1);
130
131                                 var req = net.simple_request( 'FM_AUSP_REMOVE', [ ses(), penalty ] );
132                                 if (typeof req.ilsevent != 'undefined' || String(req) != '1') {
133                                     error.standard_unexpected_error_alert(patronStrings.getFormattedString('staff.patron.standing_penalty.remove_error',[id]),req);
134                                 } else {
135                                     var node = rows[ id ].my_node;
136                                     var parentNode = node.parentNode;
137                                     parentNode.removeChild( node );
138                                     delete(rows[ id ]);
139                                     var csp_id = typeof penalty.standing_penalty() == 'object' ? penalty.standing_penalty().id() : penalty.standing_penalty();
140                                     document.getElementById('csp_'+csp_id).setAttribute('disabled','false');
141                                 }
142                             } catch(E) {
143                                 alert(E);
144                             }
145                         }; 
146                     }
147
148                     var funcs = [];
149                     for (var i = 0; i < ids.length; i++) {
150                         funcs.push( gen_func(ids[i]) );
151                     } 
152                     funcs.push(
153                         function() {
154                             if (xulG && typeof xulG.refresh == 'function') {
155                                 xulG.refresh();
156                             }
157                             document.getElementById('progress').hidden = true;
158                         }
159                     );
160                     document.getElementById('progress').hidden = false;
161                     JSAN.use('util.exec'); var exec = new util.exec();
162                     exec.chain(funcs);
163                 }
164             },
165             false
166         );
167
168         document.getElementById('cmd_edit_penalty').addEventListener(
169             'command',
170             function() {
171                 var sel = list.retrieve_selection();
172                 var ids = util.functional.map_list( sel, function(o) { return JSON2js( o.getAttribute('retrieve_id') ); } );
173                 if (ids.length > 0) {
174                     var note = window.prompt(
175                         patronStrings.getString( 'staff.patron.standing_penalty.note_prompt.' + (ids.length == 1 ? 'singular' : 'plural') ),
176                         '',
177                         patronStrings.getString( 'staff.patron.standing_penalty.note_prompt.title' )
178                     );
179                     if (note == null) { return; } /* cancel */
180                     for (var i = 0; i < ids.length; i++) {
181                         var penalty = util.functional.find_list( xulG.patron.standing_penalties(), function(o) { return o.id() == ids[i]; } );
182                         penalty.note( note ); /* this is for rendering, and propogates by reference to the object associated with the row in the GUI */
183                     } 
184                     document.getElementById('progress').hidden = false;
185                     net.simple_request( 
186                         'FM_AUSP_UPDATE_NOTE', [ ses(), ids, note ],
187                         function(reqObj) {
188                             var req = reqObj.getResultObject();
189                             if (typeof req.ilsevent != 'undefined' || String(req) != '1') {
190                                 error.standard_unexpected_error_alert(patronStrings.getString('staff.patron.standing_penalty.update_error'),req);
191                             } else {
192                                 for (var i = 0; i < ids.length; i++) {
193                                     list.refresh_row( rows[ ids[i] ] );
194                                 }
195                             }
196                             if (xulG && typeof xulG.refresh == 'function') {
197                                 xulG.refresh();
198                             }
199                             document.getElementById('progress').hidden = true;
200                         }
201                     );
202                 }
203             },
204             false
205         );
206
207
208     } catch(E) {
209         alert(E);
210     }
211 }