ig3tool 0.4.5 → 0.4.6

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.
@@ -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