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.
- data/bin/ig3tool +114 -0
- data/lib/glade/bib.glade +539 -0
- data/lib/glade/bibliotheek.glade +994 -0
- data/lib/glade/icons/cola.png +0 -0
- data/lib/glade/icons/emblem-money.png +0 -0
- data/lib/glade/icons/emblem-package.png +0 -0
- data/lib/glade/icons/emblem-penning.xpm +98 -0
- data/lib/glade/icons/emblem-people.png +0 -0
- data/lib/glade/icons/emblem-sales.png +0 -0
- data/lib/glade/icons/gdict.png +0 -0
- data/lib/glade/icons/members_klein.png +0 -0
- data/lib/glade/icons/members_xklein.png +0 -0
- data/lib/glade/icons/no.xpm +34 -0
- data/lib/glade/icons/stock_book.svg +338 -0
- data/lib/glade/icons/stock_book_klein.png +0 -0
- data/lib/glade/icons/stock_book_xklein.png +0 -0
- data/lib/glade/icons/stock_bookmark.svg +327 -0
- data/lib/glade/icons/stock_bookmark_klein.png +0 -0
- data/lib/glade/icons/stock_bookmark_xklein.png +0 -0
- data/lib/glade/icons/stock_print.png +0 -0
- data/lib/glade/interne.glade +228 -0
- data/lib/glade/loginwindow.glade +255 -0
- data/lib/glade/memberinfo.svg +411 -0
- data/lib/glade/memberinfo_klein.png +0 -0
- data/lib/glade/memberinfo_xklein.png +0 -0
- data/lib/glade/members.glade +596 -0
- data/lib/glade/members.svg +559 -0
- data/lib/glade/members_klein.png +0 -0
- data/lib/glade/members_xklein.png +0 -0
- data/lib/glade/penningtool.glade +731 -0
- data/lib/glade/people.glade +947 -0
- data/lib/glade/printen.glade +358 -0
- data/lib/glade/printer.png +0 -0
- data/lib/glade/printer_klein.png +0 -0
- data/lib/glade/printer_xklein.png +0 -0
- data/lib/glade/printerlog_klein.png +0 -0
- data/lib/glade/printerlog_xklein.png +0 -0
- data/lib/glade/printing.glade +841 -0
- data/lib/glade/products.glade +404 -0
- data/lib/glade/sales.glade +426 -0
- data/lib/glade/stock_book.svg +338 -0
- data/lib/glade/stock_book_klein.png +0 -0
- data/lib/glade/stock_book_xklein.png +0 -0
- data/lib/glade/stock_bookmark_klein.png +0 -0
- data/lib/glade/stock_bookmark_xklein.png +0 -0
- data/lib/glade/vendingmachine.glade +207 -0
- data/lib/lib/errors.rb +90 -0
- data/lib/lib/util.rb +89 -0
- data/lib/ui/automaatwindow.rb +107 -0
- data/lib/ui/bibliotheekwindow.rb +453 -0
- data/lib/ui/bibwindow.rb +537 -0
- data/lib/ui/gladehelper.rb +110 -0
- data/lib/ui/internewindow.rb +126 -0
- data/lib/ui/loginwindow.rb +60 -0
- data/lib/ui/memberswindow.rb +327 -0
- data/lib/ui/messagebox.rb +23 -0
- data/lib/ui/peoplewindow.rb +333 -0
- data/lib/ui/printenwindow.rb +329 -0
- data/lib/ui/printingwindow.rb +395 -0
- data/lib/ui/productswindow.rb +160 -0
- data/lib/ui/saleswindow.rb +207 -0
- data/lib/ui/toolwindow.rb +97 -0
- 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
|