ig3tool 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. data/bin/ig3tool +114 -0
  2. data/lib/glade/bib.glade +539 -0
  3. data/lib/glade/bibliotheek.glade +994 -0
  4. data/lib/glade/icons/cola.png +0 -0
  5. data/lib/glade/icons/emblem-money.png +0 -0
  6. data/lib/glade/icons/emblem-package.png +0 -0
  7. data/lib/glade/icons/emblem-penning.xpm +98 -0
  8. data/lib/glade/icons/emblem-people.png +0 -0
  9. data/lib/glade/icons/emblem-sales.png +0 -0
  10. data/lib/glade/icons/gdict.png +0 -0
  11. data/lib/glade/icons/members_klein.png +0 -0
  12. data/lib/glade/icons/members_xklein.png +0 -0
  13. data/lib/glade/icons/no.xpm +34 -0
  14. data/lib/glade/icons/stock_book.svg +338 -0
  15. data/lib/glade/icons/stock_book_klein.png +0 -0
  16. data/lib/glade/icons/stock_book_xklein.png +0 -0
  17. data/lib/glade/icons/stock_bookmark.svg +327 -0
  18. data/lib/glade/icons/stock_bookmark_klein.png +0 -0
  19. data/lib/glade/icons/stock_bookmark_xklein.png +0 -0
  20. data/lib/glade/icons/stock_print.png +0 -0
  21. data/lib/glade/interne.glade +228 -0
  22. data/lib/glade/loginwindow.glade +255 -0
  23. data/lib/glade/memberinfo.svg +411 -0
  24. data/lib/glade/memberinfo_klein.png +0 -0
  25. data/lib/glade/memberinfo_xklein.png +0 -0
  26. data/lib/glade/members.glade +596 -0
  27. data/lib/glade/members.svg +559 -0
  28. data/lib/glade/members_klein.png +0 -0
  29. data/lib/glade/members_xklein.png +0 -0
  30. data/lib/glade/penningtool.glade +731 -0
  31. data/lib/glade/people.glade +947 -0
  32. data/lib/glade/printen.glade +358 -0
  33. data/lib/glade/printer.png +0 -0
  34. data/lib/glade/printer_klein.png +0 -0
  35. data/lib/glade/printer_xklein.png +0 -0
  36. data/lib/glade/printerlog_klein.png +0 -0
  37. data/lib/glade/printerlog_xklein.png +0 -0
  38. data/lib/glade/printing.glade +841 -0
  39. data/lib/glade/products.glade +404 -0
  40. data/lib/glade/sales.glade +426 -0
  41. data/lib/glade/stock_book.svg +338 -0
  42. data/lib/glade/stock_book_klein.png +0 -0
  43. data/lib/glade/stock_book_xklein.png +0 -0
  44. data/lib/glade/stock_bookmark_klein.png +0 -0
  45. data/lib/glade/stock_bookmark_xklein.png +0 -0
  46. data/lib/glade/vendingmachine.glade +207 -0
  47. data/lib/lib/errors.rb +90 -0
  48. data/lib/lib/util.rb +89 -0
  49. data/lib/ui/automaatwindow.rb +107 -0
  50. data/lib/ui/bibliotheekwindow.rb +453 -0
  51. data/lib/ui/bibwindow.rb +537 -0
  52. data/lib/ui/gladehelper.rb +110 -0
  53. data/lib/ui/internewindow.rb +126 -0
  54. data/lib/ui/loginwindow.rb +60 -0
  55. data/lib/ui/memberswindow.rb +327 -0
  56. data/lib/ui/messagebox.rb +23 -0
  57. data/lib/ui/peoplewindow.rb +333 -0
  58. data/lib/ui/printenwindow.rb +329 -0
  59. data/lib/ui/printingwindow.rb +395 -0
  60. data/lib/ui/productswindow.rb +160 -0
  61. data/lib/ui/saleswindow.rb +207 -0
  62. data/lib/ui/toolwindow.rb +97 -0
  63. metadata +128 -0
@@ -0,0 +1,333 @@
1
+ require 'facets/string/partitions.rb'
2
+
3
+ module Ig3tool
4
+
5
+ class PeopleWindow < GladeHelper
6
+ include GetText
7
+
8
+ MENU_PATH = ["Leden"]
9
+ ICON = "members_xklein.png"
10
+ FIELDS = %w(firstname lastname email username rolnummer phone mobile)
11
+ ALLFIELDS = %w(firstname lastname email username rolnummer phone mobile address1 address2 barcode)
12
+
13
+
14
+ attr :glade
15
+
16
+ def initialize
17
+ super("people.glade")
18
+
19
+ @c = $global["client"]
20
+
21
+ @username = @glade.get_widget("username")
22
+ @firstname = @glade.get_widget("firstname")
23
+ @lastname = @glade.get_widget("lastname")
24
+ @barcode = @glade.get_widget("barcode")
25
+ @email = @glade.get_widget("email")
26
+ @notification = @glade.get_widget("notification")
27
+ @status = @glade.get_widget("status")
28
+ @mobile = @glade.get_widget("mobile")
29
+ @address1 = @glade.get_widget("address1")
30
+ @address2 = @glade.get_widget("address2")
31
+ @phone = @glade.get_widget("phone")
32
+ @rolnummer = @glade.get_widget("rolnummer")
33
+
34
+ @statussearch = @glade.get_widget("statussearch")
35
+
36
+ @people_view = _@glade.get_widget("names")
37
+ @people_view.model = @people_store = Gtk::ListStore.new(Object, String)
38
+ r = Gtk::CellRendererText.new
39
+ @people_view.insert_column(-1, "name", r, :text => 1)
40
+ @people_view.enable_search = true
41
+
42
+
43
+ @history = @glade.get_widget("history")
44
+ @history.model = @history_store = Gtk::ListStore.new(Object, String, String, String, String)
45
+ ll = Gtk::CellRendererText.new
46
+ @history.insert_column(-1, "year", ll) do |tvc, cell, m ,iter|
47
+ cell.text = iter[0].year
48
+ end
49
+ @history.insert_column(-1, "username", ll) do |tvc, cell, m ,iter|
50
+ cell.text = iter[0].username
51
+ end
52
+ @history.insert_column(-1, "status", ll) do |tvc, cell, m ,iter|
53
+ cell.text = iter[0].status
54
+ end
55
+ @history.insert_column(-1, "barcode", ll) do |tvc, cell, m ,iter|
56
+ cell.text = iter[0].barcode
57
+ end
58
+
59
+
60
+
61
+ @statussearch.active = 0
62
+
63
+ @statushash = {"non-member" => 0,
64
+ "member" => 1,
65
+ "debugger" => 2,
66
+ "honorary member" => 3,
67
+ "ex-debugger" => 4}
68
+ @statushashi = @statushash.invert
69
+
70
+ end
71
+
72
+ def delete(widget)
73
+ puts "delete() is not implemented yet."
74
+ end
75
+ def refreshhist(widget)
76
+ puts "refreshhist() is not implemented yet."
77
+ end
78
+ def smart_search(widget)
79
+ username = @username.text
80
+ if username.strip.empty?
81
+ @notification.text = "please fill in a username..."
82
+ else
83
+
84
+ p = @c.person_lookup("username", username)[0]
85
+ if p.nil?
86
+ @notification.text = "no user with username #{username} found..."
87
+ else
88
+ clear_all(nil)
89
+ _show(p)
90
+ end
91
+ end
92
+ end
93
+ def find_by_barcode(widget)
94
+ begin
95
+ barc = @barcode.text
96
+ clear_all(nil)
97
+ p = @c.person_member(barc)
98
+ _show(p)
99
+ rescue Exception => e
100
+ @notification.text = "no user with barcode #{barc} found..."
101
+ end
102
+ end
103
+ def clear(widget)
104
+ @statussearch.active = 0 if @statussearch.active == -1
105
+ #@statussearch.active = 0
106
+ # met of zonder if?
107
+ clear_all(nil)
108
+ end
109
+ def refresh(widget)
110
+ puts "refresh!"
111
+ _update_names(nil) unless @statussearch.active == -1
112
+ end
113
+ def log_row_activated(widget, arg0, arg1)
114
+ clear_most(nil)
115
+ end
116
+ def username_del(widget, arg0, arg1)
117
+ clear_most(nil)
118
+ end
119
+ def tabfocus(widget, arg0, arg1)
120
+ puts "tabfocus() is not implemented yet."
121
+ end
122
+
123
+ def save(widget)
124
+ attrs = {}
125
+
126
+ ALLFIELDS.each do |k|
127
+ #v = _get_widget(k).text.strip
128
+ v = @glade.get_widget(k).text.strip
129
+ fld = fix(k)
130
+ attrs[fld] = v unless v.nil? or v.empty?
131
+ end
132
+ if attrs["address1"] and attrs["address2"]
133
+ attrs["address"] = attrs["address1"] + ", " + attrs["address2"]
134
+ elsif attrs["address1"]
135
+ attrs["address"] = attrs["address1"]
136
+ elsif attrs["address2"]
137
+ attrs["address"] = attrs["address2"]
138
+ end
139
+ attrs.delete "address1"
140
+ attrs.delete "address2"
141
+
142
+ attrs["status"] = @statushashi[@status.active]
143
+
144
+ begin
145
+ @c.person_save!(attrs)
146
+ @notification.text = "Person succesfully saved, clearing the form..."
147
+ sleep 2
148
+ clear_all(nil)
149
+ _update_names
150
+ rescue Exception => e
151
+ @notification.text = "Error: Save: #{e.message}"
152
+ end
153
+ end
154
+
155
+ def fix(field)
156
+ case field
157
+ when "firstname"
158
+ "first_name"
159
+ when "lastname"
160
+ "last_name"
161
+ when "rolnummer"
162
+ "rolnr"
163
+ when "mobile"
164
+ "gsm"
165
+ else
166
+ field
167
+ end
168
+ end
169
+
170
+ def find(widget)
171
+ attrs = {}
172
+
173
+ FIELDS.each do |k|
174
+ #v = _get_widget(k).text.strip
175
+ v = @glade.get_widget(k).text.strip
176
+ fld = fix(k)
177
+ attrs[fld] = v unless v.nil? or v.empty?
178
+ end
179
+
180
+ begin
181
+ people = @c.person_lookup(attrs)
182
+ _show(people[0]) if people.size == 1
183
+ _update_names(people)
184
+ rescue Exception => e
185
+ @notification.text = "Error: Lookup: #{e.message}"
186
+ end
187
+
188
+ end
189
+
190
+
191
+ def notification_focus_in_event_cb(widget, arg0)
192
+ puts "notification_focus_in_event_cb() is not implemented yet."
193
+ end
194
+ def username_ins(widget, arg0, arg1, arg2)
195
+ puts "username_ins() is not implemented yet."
196
+ end
197
+ def select (widget, path, column)
198
+ iter = widget.model.get_iter(path)
199
+ puts "SELECT"
200
+ clear_all(nil)
201
+ _show iter[0]
202
+ end
203
+
204
+ def clear_all(widget, clearnotification=true)
205
+ @username.text = ""
206
+ clear_most(widget,clearnotification)
207
+ @people_view.grab_focus
208
+ end
209
+
210
+ def clear_most(widget, clearnotification=true)
211
+ @email.text = ""
212
+ @firstname.text = ""
213
+ @lastname.text = ""
214
+ @barcode.text = ""
215
+ @phone.text = ""
216
+ @rolnummer.text = ""
217
+ @mobile.text = ""
218
+ @address1.text = ""
219
+ @address2.text = ""
220
+ @notification.text = "" if clearnotification
221
+ #@statussearch.active = 0
222
+ @status.active = -1
223
+ @history_store.clear
224
+ end
225
+
226
+
227
+ private
228
+
229
+ def _update_hist(username, clear=true)
230
+ @history_store.clear if clear
231
+ Thread.new do
232
+ hist = @c.person_memberships(username)
233
+ hist.each do |m|
234
+ @history_store.append[0] = m
235
+ end
236
+ end
237
+ end
238
+
239
+
240
+ def _update_names(people=nil, clear=true)
241
+ @notification.text = "loading people..."
242
+ @people_store.clear if clear
243
+ Thread.new do
244
+ if people.nil?
245
+ case @statussearch.active
246
+ when -1
247
+ people = @c.person_everybody
248
+ when 0
249
+ people = @c.person_everybody
250
+ when 1
251
+ people = @c.person_debuggers
252
+ when 2
253
+ people = @c.person_members
254
+ when 3
255
+ people = @c.person_nonmembers
256
+ when 4
257
+ people = @c.person_honorarymembers
258
+ end
259
+ else
260
+ @statussearch.active = -1
261
+ end
262
+
263
+ people.sort! do |a,b|
264
+ x = a.last_name.capitalize <=> b.last_name.capitalize
265
+ x == 0 ? a.first_name <=> b.first_name : x
266
+ end
267
+
268
+ @people_view.model = nil
269
+ @people_store.clear if clear
270
+
271
+ people.each do |p|
272
+ row = @people_store.append
273
+ row[0] = p
274
+ row[1] = (p.last_name.capitalize + " " + p.first_name.capitalize).smaller(20)
275
+ end
276
+
277
+ @people_view.model = @people_store
278
+ @notification.text = ""
279
+ end
280
+ end
281
+
282
+
283
+ def _show(person)
284
+ puts "DEBUG: #{person.inspect}"
285
+ begin
286
+ @username.text = person["username"]
287
+ @email.text = person["email"]
288
+ @firstname.text = person["first_name"]
289
+ @lastname.text = person["last_name"]
290
+ @phone.text = person["phone"]
291
+ @rolnummer.text = person["rolnr"]
292
+ @mobile.text = person["gsm"]
293
+ addr = person["address"]
294
+ unless addr.nil? or addr.strip.empty?
295
+ addr.gsub!(/\n/, " , ")
296
+ addrm = addr.match(/(((\w|\.|\-|\/|\(|\))+\s+)+\d+\w{0,1}(\s+\w\s+){0,1})((\s+|\s*\,\s*)\d*(\s+(\w|\.|\-|\/|\(|\))+)+)/)
297
+ #if addrm.nil?
298
+ #addrm = addr.match(/((\w|\.|-|\s)+\s*\d*\s*(\w|\.|-)*)(\s+|\s*\,\s*)*(\d*\s*(\w|\.|-|\s)+)/)
299
+ #end
300
+ if not addrm.nil?
301
+ @address1.text = addrm[1].strip unless addrm[1].nil?
302
+ @address2.text = addrm[5].gsub(/\,/, "").strip unless addrm[5].nil?
303
+ elsif ((not addr.nil?) and (not addr.strip.empty?))
304
+ @address1.text = addr
305
+ end
306
+ end
307
+ @mobile.text = person["gsm"]
308
+ #@status.text = @c.person_status(username)
309
+ membership = @c.person_membership(person["username"])
310
+ @barcode.text = membership.barcode unless membership.nil?
311
+ status = @c.person_status(person["username"])
312
+ @status.active = @statushash[status]
313
+ _update_hist(person["username"])
314
+ @notification.text = "the ig3tool imps found #{person["username"]}..."
315
+ rescue Exception => e
316
+ #puts "user not found"
317
+ @notification.text = (e.class.to_s + " - " + e.message).smaller
318
+ puts e.inspect
319
+ @notification.text += "\n fill in the blanks to create a new user"
320
+ @email.text = @username.text.strip + "@vub.ac.be"
321
+ @firstname.grab_focus
322
+ end
323
+
324
+ end
325
+
326
+
327
+
328
+
329
+ end
330
+
331
+ register_window(PeopleWindow)
332
+
333
+ end
@@ -0,0 +1,329 @@
1
+ module Ig3tool
2
+
3
+ class PrintenWindow < GladeHelper
4
+ MENU_PATH = ["Printer", "Printen"]
5
+ ICON = "stock_print.png"
6
+
7
+ begin
8
+ @@have_amatch = require 'amatch'
9
+
10
+ def username_changed
11
+ @matcher = Amatch.new(@user_entry.text)
12
+ @credits_list.model.refilter
13
+ end
14
+ rescue LoadError => e
15
+ @@have_amatch = false
16
+
17
+ def username_changed
18
+ @credits_list.model.refilter
19
+ end
20
+ end
21
+
22
+ # Undo klasse
23
+ class PrintUndo
24
+ attr_writer :method, :username, :amount, :email, :jobid
25
+ def initialise
26
+ # Method can be :none, :adduser, :addcredit, :deluser, :refund
27
+ @method = :none
28
+ @username = ""
29
+ @amount = 0
30
+ @email = ""
31
+ @selection = false
32
+ end
33
+ end
34
+
35
+ def initialize ()
36
+ super("printen.glade")
37
+
38
+ @notification = @glade.get_widget("notification")
39
+
40
+ # PrintKrediet
41
+ @credits_list = @glade.get_widget("credits_list")
42
+ @user_entry = @glade.get_widget("user")
43
+ @refund = @glade.get_widget("refund")
44
+
45
+ # Username(PRIMARY), Email, Saldo, People_id
46
+ model = Gtk::ListStore.new(String)
47
+ renderer = Gtk::CellRendererText.new
48
+ @credits_list.insert_column(-1, "Gebruiker", renderer) { |tvc, cell, m, iter|
49
+ cell.text = iter[0].user
50
+ }
51
+ @credits_list.insert_column(-1, "Saldo", renderer) { |tvc, cell, m, iter|
52
+ cell.text = sprintf("%.2f", iter[0].saldo)
53
+ }
54
+ @credits_list.insert_column(-1, "Categorie", renderer) { |tvc, cell, m, iter|
55
+ cell.text = iter[0].price_category
56
+ }
57
+ @credits_list.insert_column(-1, "Email", renderer) { |tvc, cell, m, iter|
58
+ cell.text = iter[0].email
59
+ }
60
+
61
+ filteredmodel = Gtk::TreeModelFilter.new(model)
62
+ filteredmodel.set_visible_func do |model, iter|
63
+ is_user_visible(iter[0].user)
64
+ end
65
+ @credits_list.model = filteredmodel
66
+
67
+ _show_credits
68
+
69
+ @window.show_all
70
+
71
+ # PrintLog
72
+ @log_refund = @glade.get_widget("log_refund")
73
+ @log_list = @glade.get_widget("log_list")
74
+
75
+ # TODO - ADD JOBID IN DE LIJST VOOR REFUND!
76
+ @log_list.model = Gtk::ListStore.new(String, String, String, String, String, String)
77
+ # Meerdere selecteerbaar -> Grote refund indien nodig ;)
78
+ @log_list.selection.mode = Gtk::SELECTION_MULTIPLE
79
+ log_renderer = Gtk::CellRendererText.new
80
+ log_renderer2 = Gtk::CellRendererText.new
81
+ @log_list.insert_column(-1, "Uur", log_renderer) do |tvc, cell, m, iter|
82
+ cell.text = iter[0].time.strftime('%a %H:%M')
83
+ end
84
+ @log_list.insert_column(-1, "User", log_renderer) do |tvc, cell, m, iter|
85
+ cell.text = iter[0].user
86
+ end
87
+ @log_list.insert_column(-1, "Boodschap", log_renderer2) do |tvc, cell, m, iter|
88
+ cell.text = iter[0].message
89
+ cell.strikethrough = iter[0].refunded
90
+ end
91
+ _show_log
92
+
93
+ @window.show_all
94
+
95
+ @undo = PrintUndo.new
96
+
97
+ end
98
+
99
+ def is_user_visible(username)
100
+ username.include?(@user_entry.text) if @matcher.nil?
101
+ end
102
+
103
+ def show_user (username = nil)
104
+ return if username.nil? or username.empty?
105
+
106
+ begin
107
+ user = $global['client'].print_userinfo([ username ])
108
+
109
+ @glade.get_widget('user').text = username # Kan username of alias zijn waarop men zoekt
110
+ if user.nil?
111
+ @glade.get_widget('saldo').text = '0'
112
+ @glade.get_widget('email').text = "#{username}@vub.ac.be" # Klaarzetten om toe te voegen
113
+ @glade.get_widget('status').active = 0
114
+ @glade.get_widget('delta').grab_focus
115
+ else
116
+ @glade.get_widget('saldo').text = sprintf '%.2f', user.saldo
117
+ @glade.get_widget('email').text = user.email
118
+ @glade.get_widget('status').active = user.debugger? ? 1 : 0
119
+ @glade.get_widget('delta').grab_focus
120
+ end
121
+
122
+ rescue Exception => e
123
+ _print_msg "Fout: Userinfo: #{$!}"
124
+ end
125
+ end
126
+
127
+ def activate_user
128
+ show_user @glade.get_widget("user").text
129
+ end
130
+
131
+ def focus_changed
132
+ @notification.text = "" if @notification
133
+ false
134
+ end
135
+
136
+ def errors_changed
137
+ @credits_list.model.refilter
138
+ end
139
+
140
+ def list_row_activated (view, path, column)
141
+ show_user @credits_list.model.model.get_iter(path)[0].user
142
+ end
143
+
144
+ def delta_focus_out
145
+ Ig3tool::number_eval_widget(@glade.get_widget("delta"))
146
+ false
147
+ end
148
+
149
+ def undo_activate_cb
150
+ # @Undo.method toont de LAATST GEBRUIKTE ACTIE aan
151
+ case @undo.method
152
+ when :adduser
153
+ @undo.method = :none
154
+ begin
155
+ answer = $global['client'].print_delaccount!({ :username => @undo.username })
156
+ @undo.method = :deluser
157
+ rescue Exception => e
158
+ _print_msg "Fout: Undo: #{$!}"
159
+ else
160
+ _print_msg "Print Account #{@undo.username} werd verwijderd"
161
+ end
162
+ when :deluser
163
+ @undo.method = :none
164
+ begin
165
+ answer = $global['client'].print_addaccount!({ :username => @undo.username, :email => @undo.email, :amount => @undo.amount })
166
+ @undo.method = :adduser
167
+ rescue Exception => e
168
+ _print_msg "Fout: Undo: #{$!}"
169
+ else
170
+ _print_msg "Print Account #{@undo.username} heraangemaakt met #{@undo.amount} krediet(en)!"
171
+ end
172
+ when :addcredit
173
+ @undo.method = :none
174
+ begin
175
+ answer = $global['client'].print_addcredit!({ :username => @undo.username, :email => @undo.email, :amount => - @undo.amount })
176
+ @undo.method = :addcredit
177
+ @undo.amount = - @undo.amount
178
+ rescue Exception => e
179
+ _print_msg "Fout: Undo: #{$!}"
180
+ else
181
+ _print_msg "Print Account #{@undo.username} werd veranderd met #{@undo.amount} krediet(en)"
182
+ end
183
+ when :refund
184
+ @undo.method = :none
185
+ begin
186
+ _unrefund @undo.selection
187
+ rescue Exception => e
188
+ _print_msg "Fout: Undo: #{$!}"
189
+ else
190
+ _print_msg "Het terugbetalen van de Print Job (#{@undo.jobid}) van #{@undo.username} werd ongedaan gemaakt (#{@undo.amount} krediet(en))"
191
+ end
192
+ when :unrefund
193
+ @undo.method = :none
194
+ begin
195
+ _refund @undo.selection
196
+ rescue Exception => e
197
+ _print_msg "Fout: Undo: #{$!}"
198
+ else
199
+ _print_msg "Het terugbetalen van de Print Job (#{@undo.jobid}) van #{@undo.username} werd uitgevoerd (#{@undo.amount} krediet(en))"
200
+ end
201
+ end
202
+ end
203
+
204
+ def toepassen_activate_cb
205
+ delta = @glade.get_widget("delta")
206
+ Ig3tool::number_eval_widget(delta)
207
+ amount = delta.text.to_i
208
+ username = @glade.get_widget('user').text
209
+ email = @glade.get_widget('email').text
210
+
211
+ unless amount == 0
212
+ begin
213
+ # Indien de gebruiker nog niet bestaat, creeer automatisch een account wanneer er
214
+ # op 'toevoegen krediet' wordt geklikt
215
+ if !$global['client'].print_userinfo([ username ])
216
+ $global['client'].print_addaccount!({ :username => username, :email => email })
217
+ end
218
+ answer = $global['client'].print_addcredit!({ :username => username, :amount => amount })
219
+ _print_msg "#{@user_entry.text} Gets #{amount} Credits"
220
+ rescue Exception => e
221
+ _print_msg "Fout: Toepassen: #{$!}"
222
+ end
223
+ end
224
+ end
225
+
226
+ # PrintLog
227
+ def refresh_clicked
228
+ _show_credits
229
+ _show_log
230
+ end
231
+
232
+ def log_list_cursor_changed (view)
233
+ if selected = view.selection.selected
234
+ printlog = selected[0]
235
+ if @refund.sensitive = (printlog.message =~ /printed/)
236
+ if !printlog.refunded
237
+ @refund.label = "Terugbetalen"
238
+ else
239
+ @refund.label = "Toch betalen"
240
+ end
241
+ end
242
+ end
243
+ end
244
+
245
+ def refund_clicked
246
+ _refund_selection(@log_list.selection.select_all)
247
+ end
248
+
249
+ def log_list_row_activated (view, path, column)
250
+ printlog = @log_list.model.get_iter(path)[0]
251
+ show_user(printlog.user)
252
+ end
253
+
254
+ private
255
+
256
+ def _unrefund_selection(selection)
257
+ if !selection
258
+ _print_msg "Gelieve eerst een (of meerdere) Print Jobs te selecteren in de lijst"
259
+ else
260
+ selection.each { |model, path, iter| _unrefund(iter)}
261
+ _print_msg "Print Job(s) opnieuw betaald"
262
+ @undo.selection = selection
263
+ @undo.method = :unrefund
264
+ end
265
+ end
266
+
267
+ def _unrefund(selected)
268
+ begin
269
+ answer = $global['client'].print_unrefund!({ :jobid => selected.jobid }) # TODO-CHECK
270
+ @log_list.model.row_changed selection.path, selection # Zorgt voor row update appearance
271
+ @refund.label = "Terugbetalen"
272
+ rescue Exception => e
273
+ _print_msg "Fout: Unrefund: #{$!}"
274
+ end
275
+ end
276
+
277
+ def _refund_selection(selection)
278
+ if !selection
279
+ _print_msg "Gelieve eerst een (of meerdere) Print Jobs te selecteren in de lijst"
280
+ else
281
+ selection.each { |model, path, iter| _refund(iter) }
282
+ _print_msg "Print Job(s) terugbetaald"
283
+ @undo.selection = selection
284
+ @undo.method = :refund
285
+ end
286
+ end
287
+
288
+ def _refund(selected)
289
+ begin
290
+ answer = $global['client'].print_refund!({ :jobid => selected.jobid })
291
+ @log_list.model.row_changed selection.path, selection
292
+ @refund.label = "Toch betalen"
293
+ rescue Exception => e
294
+ _print_msg "Fout: Refund: #{$!}"
295
+ end
296
+ end
297
+
298
+ def _show_credits
299
+ @credits_list.model.model.clear
300
+ begin
301
+ # Haal alle printusers hun print-info op
302
+ answer = $global['client'].print_credits
303
+ answer.each { |l| @credits_list.model.model.append[0] = l }
304
+ rescue Exception => e
305
+ _print_msg "Fout: Credits: #{$!}"
306
+ end
307
+ end
308
+
309
+ def _show_log
310
+ @log_list.model.clear
311
+ begin
312
+ # Haal de laatste 50 Printjobs op
313
+ answer = $global['client'].print_log( [ 50 ] )
314
+ answer.each { |l| @log_list.model.append[0] = l }
315
+ rescue Exception => e
316
+ _print_msg "Fout: Log: #{$!}"
317
+ end
318
+ end
319
+
320
+ def _print_msg (msg)
321
+ puts msg
322
+ @notification.text = msg
323
+ end
324
+
325
+ end
326
+
327
+ register_window(PrintenWindow)
328
+
329
+ end