ig3tool 0.4.5 → 0.4.6

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,327 +0,0 @@
1
- module Ig3tool
2
-
3
- class MembersWindow < GladeHelper
4
- MENU_PATH = ["Leden"]
5
- ICON = "members_xklein.png"
6
- FIELDS = %w(first_name last_name email username rolnr address phone)
7
-
8
- def initialize
9
- super("members.glade")
10
-
11
- @people_view = _get_widget("people_view")
12
- @people_view.model = @people_store = Gtk::ListStore.new(Object, String)
13
- r = Gtk::CellRendererText.new
14
- @people_view.insert_column(-1, "Naam", r, :text => 1)
15
-
16
- past_view = _get_widget("past_view")
17
- past_view.model = Gtk::ListStore.new(String, String, String)
18
- past_view.insert_column(-1, "Jaar", r, :text => 0)
19
- past_view.insert_column(-1, "Status", r, :text => 1)
20
- past_view.insert_column(-1, "Lidnummer", r, :text => 2)
21
- past_view.columns.last.expand = true
22
-
23
- sg = Gtk::SizeGroup.new(Gtk::SizeGroup::BOTH)
24
-
25
- @glade.widget_names.grep(/^slabel/).each do |n|
26
- sg.add_widget(_get_widget(n))
27
- end
28
-
29
- @notification_label = _get_widget("notification_label")
30
-
31
- _get_widget("first_name").grab_focus
32
- statussen = $client.person_statussen
33
- make_status_combo(_get_widget("status"), statussen)
34
-
35
- Thread.new do
36
- _get_widget("query").active = 0 # triggers query_changed
37
- _get_widget("status").active = 0 # triggers status_changed
38
- end
39
-
40
- _create_people_rightclick_menu # Instantieer een rightclick menu
41
-
42
- @window.show
43
- end
44
-
45
- ## - Handlers (GUI) ----
46
- # Rechtermuisknop op een persoon in de lijst
47
- def people_button_press_event (widget, event)
48
- if event.kind_of? Gdk::EventButton and event.button == 3
49
- @people_view_menu.popup(nil, nil, event.button, event.time)
50
- end
51
- end
52
-
53
- # Bij dubbel klik op een naam in de lijst
54
- def people_view_row_activated (widget, path, column)
55
- iter = widget.model.get_iter(path)
56
- _show iter[0]
57
- end
58
-
59
- def new_clicked
60
- _clear
61
- end
62
-
63
- def ok_clicked
64
- _save
65
- end
66
-
67
- def delete_clicked
68
- _delete(@selected_person)
69
- end
70
-
71
- def query_changed
72
- _update_people
73
- end
74
-
75
- def entry_activate
76
- lookup_clicked
77
- end
78
-
79
- def focus_changed
80
- @notification_label.text = ""
81
- false
82
- end
83
-
84
- def lookup_clicked
85
- attrs = {}
86
-
87
- FIELDS.each do |k|
88
- v = _get_widget(k).text.strip
89
- attrs[k] = v unless v.nil? or v.empty?
90
- end
91
-
92
- begin
93
- people = $client.person_lookup(attrs)
94
- _set_people(people)
95
- rescue Exception => e
96
- _print_msg "Error: Lookup: #{$!}"
97
- end
98
- end
99
-
100
- def status_changed (status)
101
- sensitive = status.active > 0
102
- _get_widget("slabel_memberid").sensitive = sensitive
103
- _get_widget("memberid").sensitive = sensitive
104
- end
105
-
106
- def image_button_release_event
107
- dialog = Gtk::FileChooserDialog.new("Open File", nil, Gtk::FileChooser::ACTION_OPEN, nil, [Gtk::Stock::CANCEL, Gtk::Dialog::RESPONSE_CANCEL],[Gtk::Stock::OPEN, Gtk::Dialog::RESPONSE_ACCEPT])
108
- if dialog.run == Gtk::Dialog::RESPONSE_ACCEPT
109
- filename = dialog.filename
110
- _get_widget("image").set = filename
111
- # Upload filename naar server?
112
- # Blob?
113
- # lokaal saven in /usr/share?
114
- # TODO!
115
- end
116
- dialog.destroy
117
- end
118
-
119
- # Private
120
- private
121
- def _create_people_rightclick_menu
122
- # Creeer een menu
123
- @people_view_menu = Gtk::Menu.new
124
- people_view_menu_edit_item = Gtk::MenuItem.new("Edit")
125
- people_view_menu_delete_item = Gtk::MenuItem.new("Delete")
126
- people_view_menu_edit_item.signal_connect("activate") {
127
- # Show selected Persoon
128
- # Treeview heeft default Mode Gtk::SELECTION_SINGLE
129
- @people_view.selection.selected_each { |model, path, iter| _show(iter[0]) }
130
- }
131
-
132
- # Delete de geselecteerde persoon
133
- people_view_menu_delete_item.signal_connect("activate") {
134
- @people_view.selection.selected_each { |model, path, iter|
135
- _delete(iter[0],false)
136
- model.remove(iter) # Verwijder uit de lijst
137
- }
138
- }
139
-
140
- @people_view_menu.append(people_view_menu_edit_item)
141
- @people_view_menu.append(people_view_menu_delete_item)
142
- @people_view_menu.show_all
143
- end
144
-
145
- def _show (who)
146
- @selected_person = who
147
-
148
- begin
149
- FIELDS.each {|n| _get_widget(n).text = who.send(n.to_sym).to_s }
150
-
151
- ms = $client.person_memberships(who.username)
152
-
153
-
154
- if !ms.nil?
155
- ms.sort! {|a, b| b.year <=> a.year }
156
- if !ms.empty? and ms[0].year.to_i == Time.werkjaar
157
- _get_widget("status").active = statussen.index(ms[0].status)
158
- _get_widget("memberid").text = ms[0].barcode
159
- ms.shift
160
- else
161
- _get_widget("status").active = 0
162
- _get_widget("memberid").text = ""
163
- end
164
-
165
- end
166
-
167
- model = _get_widget("past_view").model
168
- model.clear
169
-
170
- ms.each do |m|
171
- row = model.append
172
- row[0] = m.year.to_s
173
- row[1] = m.status.to_s
174
- row[2] = m.barcode.to_s
175
- end
176
- rescue Exception => e
177
- _print_msg "Fout: Memberinfo: #{$!}"
178
- _clear
179
- end
180
-
181
- end
182
-
183
- def _delete(who, refresh = true)
184
- begin
185
- $client.person_remove!({ :username => who.username })
186
- _clear
187
- _update_people if refresh
188
- rescue Exception => e
189
- _print_msg "Error: Delete: #{$!}"
190
- else
191
- _print_msg "Person deleted!"
192
- end
193
- end
194
-
195
- def _clear
196
- @selected_person = nil
197
- (FIELDS + %w(memberid)).each {|n| _get_widget(n).text = "" }
198
- _get_widget("status").active = 0
199
- _get_widget("past_view").model.clear
200
- _get_widget("first_name").grab_focus
201
- end
202
-
203
-
204
- def _save
205
- data = {
206
- :last_name => _get_widget("last_name").text,
207
- :first_name => _get_widget("first_name").text,
208
- :rolnr => _get_widget("rolnr").text,
209
- :username => _get_widget("username").text,
210
- :email => _get_widget("email").text,
211
- :address => _get_widget("address").text,
212
- :phone => _get_widget("phone").text,
213
- :gsm => _get_widget("gsm").text,
214
- :status => _get_widget("status").active_iter[1],
215
- :memberid => _get_widget("memberid").text
216
- }
217
- if @selected_person.nil? or @selected_person.username != data[:username]
218
- # Indien hij nog niet bestaat, aanmaken in de database
219
- begin
220
- answer = $client.person_add! data
221
- @selected_person = $client.person_lookup("username" => data[:username])[0]
222
- iter = _insert_person(@selected_person)
223
- @people_view.selection.select_iter(iter)
224
- rescue Exception => e
225
- _print_msg "Fout: Toevoegen: #{$!}"
226
- else
227
- _print_msg "Persoon toegevoegd", answer
228
- end
229
-
230
- else
231
- # Anders-> zorg voor update via people.real_id
232
- begin
233
- answer = $client.person_update! data
234
- @selected_person = $client.person_lookup("username" => data[:username])[0]
235
- iter = _insert_person(@selected_person)
236
- @people_view.selection.select_iter(iter)
237
- rescue Exception => e
238
- _print_msg "Fout: Aanpassen: #{$!}"
239
- else
240
- _print_msg "Persoonsinformatie aangepast", answer
241
- end
242
- end
243
- end
244
-
245
- def _update_people(clear = true)
246
- case _get_widget("query").active
247
- when 1; sym = :person_debuggers
248
- when 2; sym = :person_honorarymembers
249
- when 3; sym = :person_members
250
- when 4; sym = :person_nonmembers
251
- else sym = :person_everybody
252
- end
253
-
254
- if clear
255
- @people_store.clear
256
- r = @people_store.append
257
- r[0] = nil
258
- r[1] = "Loading..."
259
- end
260
- people = $client.send(sym)
261
- _set_people(people)
262
- end
263
-
264
- def _set_people(people, clear = true)
265
- people.sort! do |a,b|
266
- x = a.last_name <=> b.last_name
267
- x == 0 ? a.first_name <=> b.first_name : x
268
- end
269
-
270
- @people_view.model = nil
271
- @people_store.clear if clear
272
-
273
- people.each do |p|
274
- row = @people_store.append
275
- row[0] = p
276
- row[1] = p.last_name + " " + p.first_name
277
- end
278
-
279
- @people_view.model = @people_store
280
- end
281
-
282
- def _print_msg (msg, extra_info = nil)
283
- puts msg
284
- puts " - #{extra_info}" if extra_info
285
- @notification_label.text = msg
286
- end
287
-
288
- def _insert_person(person)
289
- iter = @people_store.iter_first
290
- while iter[0].last_name <= person.last_name and iter.next!
291
- break if iter[0].username == person.username
292
- 1
293
- end
294
-
295
- p person
296
- if iter[0].username == person.username
297
- new = iter
298
- new[0] = person
299
- new[1] = "#{person.last_name} #{person.first_name}"
300
- @people_store.row_changed(new.path, new)
301
- puts "replaced #{new[1]}, (#{new.path})"
302
- else
303
- new = @people_store.insert_before(iter)
304
- new[0] = person
305
- new[1] = "#{person.last_name} #{person.first_name}"
306
- @people_store.row_changed(new.path, new)
307
- puts "inserted #{new[1]} before #{iter[1]}, (#{new.path})"
308
- end
309
-
310
- new
311
- end
312
-
313
- def _delete_person(person)
314
- iter = @people_store.iter_first
315
- while iter[0].last_name <= person.last_name and iter.next!
316
- if iter[0].username == person.username
317
- @people_store.remove(iter)
318
- break
319
- end
320
- end
321
- end
322
-
323
- end
324
-
325
- register_window(MembersWindow)
326
-
327
- end
@@ -1,329 +0,0 @@
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 = $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
- 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 = $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 = $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 = $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
- 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 !$client.print_userinfo([ username ])
216
- $client.print_addaccount!({ :username => username, :email => email })
217
- end
218
- answer = $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 = $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 = $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 = $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 = $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