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
data/lib/lib/util.rb
ADDED
@@ -0,0 +1,89 @@
|
|
1
|
+
module Gtk
|
2
|
+
class TextView
|
3
|
+
def text
|
4
|
+
buffer.text
|
5
|
+
end
|
6
|
+
|
7
|
+
def text=(str)
|
8
|
+
buffer.text = str
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
class String
|
14
|
+
|
15
|
+
def starts_with?(str)
|
16
|
+
self.index( str ) == 0
|
17
|
+
end
|
18
|
+
|
19
|
+
def ends_with?(str)
|
20
|
+
self.rindex( str ) == self.length - str.length
|
21
|
+
end
|
22
|
+
|
23
|
+
def to_c
|
24
|
+
self.to_f.to_c
|
25
|
+
end
|
26
|
+
|
27
|
+
def from_c
|
28
|
+
self.to_f.from_c
|
29
|
+
end
|
30
|
+
|
31
|
+
def smaller(l=75)
|
32
|
+
if self.size > l
|
33
|
+
self[0..l] + "..."
|
34
|
+
else
|
35
|
+
self
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
class Numeric
|
41
|
+
def to_c
|
42
|
+
(self.to_f * 100).round.to_i
|
43
|
+
end
|
44
|
+
|
45
|
+
def from_c
|
46
|
+
(self.to_f / 100)
|
47
|
+
end
|
48
|
+
|
49
|
+
def to_b
|
50
|
+
return (not (self.zero?))
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
class Hash
|
55
|
+
# File facets/hash/new.rb, line 44
|
56
|
+
def self.zipnew(keys,values) # or some better name
|
57
|
+
h = {}
|
58
|
+
keys.size.times{ |i| h[ keys[i] ] = values[i] }
|
59
|
+
h
|
60
|
+
end
|
61
|
+
# File facets/hash/keyize.rb, line 49
|
62
|
+
def normalize_keys!( &block )
|
63
|
+
keys.each{ |k|
|
64
|
+
nk = block[k]
|
65
|
+
self[nk]=delete(k) if nk
|
66
|
+
}
|
67
|
+
self
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
class Time
|
72
|
+
# bepaling van de week van het academiejaar
|
73
|
+
def week
|
74
|
+
t = start_werkjaar(Time.werkjaar)
|
75
|
+
return 1 + ((self - t) / (86400*7)).to_int
|
76
|
+
end
|
77
|
+
|
78
|
+
# we bepalen de start van het werkjaar (laatste ma van sept)
|
79
|
+
def self.start_werkjaar(jaar)
|
80
|
+
t = Time.mktime(jaar, 9, 30)
|
81
|
+
t = t - 86400 until t.wday == 1
|
82
|
+
t
|
83
|
+
end
|
84
|
+
|
85
|
+
def self.werkjaar
|
86
|
+
t = Time.now()
|
87
|
+
t > start_werkjaar(t.year) ? t.year : t.year - 1
|
88
|
+
end
|
89
|
+
end
|
@@ -0,0 +1,107 @@
|
|
1
|
+
module Ig3tool
|
2
|
+
|
3
|
+
class VendingMachineWindow < GladeHelper
|
4
|
+
MENU_PATH = ["Automaat"]
|
5
|
+
ICON = "cola.png"
|
6
|
+
|
7
|
+
BLIKJES = [
|
8
|
+
[ "Coca Cola", "5449000000996" ],
|
9
|
+
[ "Coca Cola Light", "5449000050205" ],
|
10
|
+
[ "Fanta Orange", "5449000011527" ],
|
11
|
+
[ "Fanta Lemon", "5449000006004" ],
|
12
|
+
[ "Minute Maid", "90494024" ],
|
13
|
+
[ "Minute Maid Tropical", "5449000018243" ],
|
14
|
+
[ "Nestea", "5449000027382" ],
|
15
|
+
[ "Coca Light Lemon", "5449000089229" ],
|
16
|
+
]
|
17
|
+
|
18
|
+
FLESJES = [
|
19
|
+
[ "Coca Cola", "54491472" ],
|
20
|
+
[ "Coca Cola Light", "54492387" ],
|
21
|
+
[ "Fanta Orange", "40822938" ],
|
22
|
+
[ "Fanta Lemon", "54492493" ],
|
23
|
+
[ "Sprite", "54491069" ],
|
24
|
+
[ "Fanta Pomelo", "42115731" ],
|
25
|
+
]
|
26
|
+
|
27
|
+
def initialize
|
28
|
+
super("vendingmachine.glade")
|
29
|
+
|
30
|
+
@notification = @glade.get_widget("notification")
|
31
|
+
|
32
|
+
@entries = [ ]
|
33
|
+
|
34
|
+
[[BLIKJES, @glade.get_widget("blikjes_table")],
|
35
|
+
[FLESJES, @glade.get_widget("flesjes_table")]].
|
36
|
+
each do |list, table|
|
37
|
+
table.resize(list.length, 2)
|
38
|
+
list.each_with_index do |(name, barcode), i|
|
39
|
+
label = Gtk::Label.new(name + ":")
|
40
|
+
label.set_alignment(0, 0.5)
|
41
|
+
table.attach(label, 0, 1, i, i + 1)
|
42
|
+
entry = Gtk::Entry.new
|
43
|
+
entry.name = barcode
|
44
|
+
entry.signal_connect("focus-out-event") { entry_focus_out(entry) }
|
45
|
+
table.attach(entry, 1, 2, i, i + 1)
|
46
|
+
@entries <<= entry
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
@debuggers = @glade.get_widget("debuggers")
|
51
|
+
make_debugger_combo(@debuggers)
|
52
|
+
|
53
|
+
@window.show_all
|
54
|
+
end
|
55
|
+
|
56
|
+
def entry_focus_out(entry)
|
57
|
+
# Clear notification
|
58
|
+
@notification.text = ""
|
59
|
+
# Controleer of het een nummer is
|
60
|
+
Ig3tool::number_eval_widget(entry)
|
61
|
+
false # Return false voor de event
|
62
|
+
end
|
63
|
+
|
64
|
+
def sell_clicked
|
65
|
+
if @debuggers.active_iter.nil?
|
66
|
+
_print_msg("Selecteer eerst uw naam uit de debugger-lijst!")
|
67
|
+
return
|
68
|
+
end
|
69
|
+
|
70
|
+
debugger = @debuggers.active_iter[0]
|
71
|
+
aantal = 0
|
72
|
+
items = {}
|
73
|
+
|
74
|
+
filled_entries = @entries.select {|x| !x.text.nil? and x.text.to_i > 0}
|
75
|
+
filled_entries.each do |entry|
|
76
|
+
items[entry.name] = entry.text.to_i
|
77
|
+
aantal += entry.text.to_i
|
78
|
+
end
|
79
|
+
|
80
|
+
if items.empty?
|
81
|
+
_print_msg("Minstens een element nodig om te verkopen!")
|
82
|
+
return
|
83
|
+
end
|
84
|
+
|
85
|
+
begin
|
86
|
+
total = $global['client'].product_restock!( :debugger => debugger.username,
|
87
|
+
:items => items)
|
88
|
+
rescue Exception => e
|
89
|
+
_print_msg "Fout: Verkopen: #{$!}"
|
90
|
+
else
|
91
|
+
_print_msg "#{aantal} items verkocht, voor EUR #{total.from_c}!"
|
92
|
+
end
|
93
|
+
|
94
|
+
# Maak alle velden leeg
|
95
|
+
@entries.each { |entry| entry.text = "" }
|
96
|
+
end
|
97
|
+
|
98
|
+
def _print_msg(msg)
|
99
|
+
@notification.text = msg
|
100
|
+
puts msg
|
101
|
+
end
|
102
|
+
|
103
|
+
end
|
104
|
+
|
105
|
+
register_window(VendingMachineWindow)
|
106
|
+
|
107
|
+
end
|
@@ -0,0 +1,453 @@
|
|
1
|
+
require 'time'
|
2
|
+
|
3
|
+
begin
|
4
|
+
require "amazon/search"
|
5
|
+
$global['amazon_loaded'] = true
|
6
|
+
rescue Exception => e
|
7
|
+
STDERR.puts "Ruby/Amazon kon niet geladen worden: " + e.to_s
|
8
|
+
end
|
9
|
+
|
10
|
+
|
11
|
+
|
12
|
+
module Ig3tool
|
13
|
+
|
14
|
+
class BibliotheekWindow < GladeHelper
|
15
|
+
include GetText
|
16
|
+
|
17
|
+
MENU_PATH = ["Bibliotheek", "Bibliotheek"]
|
18
|
+
ICON = "stock_book_xklein.png"
|
19
|
+
|
20
|
+
attr :glade
|
21
|
+
|
22
|
+
# def initialize(path_or_data, root = nil, domain = nil, localedir = nil, flag = GladeXML::FILE)
|
23
|
+
# bindtextdomain(domain, localedir, nil, "UTF-8")
|
24
|
+
# @glade = GladeXML.new(path_or_data, root, domain, localedir, flag) {|handler| method(handler)}
|
25
|
+
#
|
26
|
+
def initialize
|
27
|
+
|
28
|
+
super("bibliotheek.glade")
|
29
|
+
|
30
|
+
# @c = Client.new("infogroep.be")
|
31
|
+
@c = $global["client"]
|
32
|
+
|
33
|
+
@tabs = @glade.get_widget("tabs")
|
34
|
+
|
35
|
+
@books_isbn = @glade.get_widget("books_isbn")
|
36
|
+
@books_title = @glade.get_widget("books_title")
|
37
|
+
@books_author = @glade.get_widget("books_author")
|
38
|
+
@books_publisher = @glade.get_widget("books_publisher")
|
39
|
+
@books_year = @glade.get_widget("books_year")
|
40
|
+
@books_section = @glade.get_widget("books_section")
|
41
|
+
@books_copies = @glade.get_widget("books_copies")
|
42
|
+
|
43
|
+
@books_fields = {
|
44
|
+
"isbn" => @books_isbn,
|
45
|
+
"title" => @books_title,
|
46
|
+
"author" => @books_author,
|
47
|
+
"publisher" => @books_publisher,
|
48
|
+
"year" => @books_year,
|
49
|
+
"copies" => @books_copies
|
50
|
+
}
|
51
|
+
|
52
|
+
|
53
|
+
@books_notification = @glade.get_widget("books_notification")
|
54
|
+
|
55
|
+
@loan_memberid = @glade.get_widget("loan_memberid")
|
56
|
+
@loan_isbn = @glade.get_widget("loan_isbn")
|
57
|
+
@loan_title = @glade.get_widget("loan_title")
|
58
|
+
@loan_warranty = @glade.get_widget("loan_warranty")
|
59
|
+
@loan_notification = @glade.get_widget("loan_notification")
|
60
|
+
|
61
|
+
@loan_fields = {
|
62
|
+
"isbn" => @loan_isbn,
|
63
|
+
"warranty" => @loan_warranty,
|
64
|
+
"member" => @loan_memberid
|
65
|
+
}
|
66
|
+
|
67
|
+
@books_list = @glade.get_widget("books_list")
|
68
|
+
@loan_list = @glade.get_widget("loan_list")
|
69
|
+
@loan_list.model = @loan_list_store = Gtk::ListStore.new(Object, String, String, String, String, String)
|
70
|
+
ll = Gtk::CellRendererText.new
|
71
|
+
@loan_list.insert_column(-1, "loan date", ll) do |tvc, cell, m ,iter|
|
72
|
+
cell.text = Time.parse(iter[0].loan_date).strftime("%d/%m/%y")
|
73
|
+
end
|
74
|
+
@loan_list.insert_column(-1, "return on", ll) do |tvc, cell, m ,iter|
|
75
|
+
date = Time.parse(iter[0].return_date)
|
76
|
+
ll.foreground = "red" if date > Time.now
|
77
|
+
cell.text = date.strftime("%d/%m/%y")
|
78
|
+
ll.foreground = "black"
|
79
|
+
end
|
80
|
+
@loan_list.insert_column(-1, "memberid", ll) do |tvc, cell, m ,iter|
|
81
|
+
cell.text = iter[0].member_id
|
82
|
+
end
|
83
|
+
@loan_list.insert_column(-1, "isbn", ll) do |tvc, cell, m ,iter|
|
84
|
+
cell.text = iter[0].isbn
|
85
|
+
end
|
86
|
+
@loan_list.insert_column(-1, "warranty", ll) do |tvc, cell, m ,iter|
|
87
|
+
cell.text = iter[0].warranty
|
88
|
+
end
|
89
|
+
|
90
|
+
@books_list = @glade.get_widget("books_list")
|
91
|
+
@books_list.model = @books_list_store = Gtk::ListStore.new(Object, String)
|
92
|
+
bl = Gtk::CellRendererText.new
|
93
|
+
@books_list.insert_column(-1, "title", bl) do |tvc, cell, m ,iter|
|
94
|
+
cell.text = (iter[0].title.smaller(50) + " (#{iter[0].author})").smaller(62)
|
95
|
+
end
|
96
|
+
|
97
|
+
|
98
|
+
_update_sections
|
99
|
+
_update_books_list
|
100
|
+
_update_loan_list
|
101
|
+
|
102
|
+
|
103
|
+
end
|
104
|
+
|
105
|
+
def select_book(widget, path, column)
|
106
|
+
puts "-> select_book"
|
107
|
+
iter = widget.model.get_iter(path)
|
108
|
+
_show iter[0]
|
109
|
+
end
|
110
|
+
|
111
|
+
def select_loan(widget, path, column)
|
112
|
+
puts "-> select_loan"
|
113
|
+
iter = widget.model.get_iter(path)
|
114
|
+
@loan_isbn.text = iter[0].isbn
|
115
|
+
loan_isbn_set(nil)
|
116
|
+
@loan_memberid.text = iter[0].member_id
|
117
|
+
@loan_warranty.text = iter[0].warranty
|
118
|
+
end
|
119
|
+
|
120
|
+
|
121
|
+
def select_section()
|
122
|
+
puts "-> select_section"
|
123
|
+
#Thread.new do
|
124
|
+
# if @books_section.active_iter[0].nil?
|
125
|
+
# books = nil
|
126
|
+
# else
|
127
|
+
# books = @c.bib_lookup({"section" => @books_section.active_iter[0].name})
|
128
|
+
# end
|
129
|
+
# _update_books_list(books)
|
130
|
+
#end
|
131
|
+
end
|
132
|
+
|
133
|
+
def get_fields
|
134
|
+
puts "-> get_fields"
|
135
|
+
fields = {}
|
136
|
+
@books_fields.each do |k, f|
|
137
|
+
fields[k] = f.text unless f.text.strip.empty?
|
138
|
+
end
|
139
|
+
fields["section"] = @books_section.active_iter[0].name unless @books_section.active_iter[0].nil?
|
140
|
+
fields
|
141
|
+
end
|
142
|
+
|
143
|
+
def get_loan_fields
|
144
|
+
puts "-> get_loan_fields"
|
145
|
+
fields = {}
|
146
|
+
@loan_fields.each do |k, f|
|
147
|
+
fields[k] = f.text unless f.text.strip.empty?
|
148
|
+
end
|
149
|
+
fields
|
150
|
+
end
|
151
|
+
|
152
|
+
def books_save(widget)
|
153
|
+
puts "-> books_save"
|
154
|
+
begin
|
155
|
+
@c.bib_add!(get_fields)
|
156
|
+
_update_books_list
|
157
|
+
#books_clear
|
158
|
+
@books_notification.text = "changes saved to book!"
|
159
|
+
rescue Exception => e
|
160
|
+
puts e.backtrace
|
161
|
+
@books_notification.text = e.message.smaller
|
162
|
+
end
|
163
|
+
|
164
|
+
end
|
165
|
+
def loan_extend(widget)
|
166
|
+
puts "-> loan_extend"
|
167
|
+
begin
|
168
|
+
@c.bib_extend!(get_loan_fields)
|
169
|
+
_update_loan_list
|
170
|
+
loan_clear(nil)
|
171
|
+
@loan_notification.text = "the ig3tool imps extend the book for 3 weeks..."
|
172
|
+
rescue Exception => e
|
173
|
+
puts e.backtrace
|
174
|
+
@loan_notification.text = e.message.smaller
|
175
|
+
end
|
176
|
+
end
|
177
|
+
|
178
|
+
def hl_loan(a)
|
179
|
+
puts "hl_loan: NYI"
|
180
|
+
end
|
181
|
+
|
182
|
+
def loan_return(widget)
|
183
|
+
puts "-> loan_return"
|
184
|
+
begin
|
185
|
+
@c.bib_return!(get_loan_fields)
|
186
|
+
_update_loan_list
|
187
|
+
loan_clear(nil)
|
188
|
+
@loan_notification.text = "book returned to the ig3tool imps..."
|
189
|
+
rescue Exception => e
|
190
|
+
puts e.backtrace
|
191
|
+
@loan_notification.text = e.message.smaller
|
192
|
+
end
|
193
|
+
end
|
194
|
+
|
195
|
+
def books_delete(widget)
|
196
|
+
puts "-> books_delete"
|
197
|
+
begin
|
198
|
+
@c.bib_remove!(get_fields)
|
199
|
+
_update_books_list
|
200
|
+
reset_books_fields
|
201
|
+
@books_notification.text = "the ig3tool imps trashed the book..."
|
202
|
+
rescue Exception => e
|
203
|
+
puts e.backtrace
|
204
|
+
@loan_notification.text = e.message.smaller
|
205
|
+
end
|
206
|
+
end
|
207
|
+
|
208
|
+
def loan_refresh(widget)
|
209
|
+
puts "-> loan_refresh"
|
210
|
+
_update_loan_list
|
211
|
+
end
|
212
|
+
|
213
|
+
def books_refresh(widget)
|
214
|
+
puts "-> books_refresh"
|
215
|
+
_update_books_list
|
216
|
+
end
|
217
|
+
|
218
|
+
def tabfocus(widget, arg0, arg1)
|
219
|
+
puts "-> tabfocus"
|
220
|
+
if arg1 == 1
|
221
|
+
_update_loan_list
|
222
|
+
else
|
223
|
+
_update_books_list
|
224
|
+
end
|
225
|
+
end
|
226
|
+
|
227
|
+
def isbn_ins(a,b,c)
|
228
|
+
puts "-> isbn_ins"
|
229
|
+
reset_books_fields(false)
|
230
|
+
end
|
231
|
+
def isbn_del(a,b,c,d)
|
232
|
+
puts "-> isbn_del"
|
233
|
+
reset_books_fields(false)
|
234
|
+
end
|
235
|
+
def loan_isbn_ins(a,b,c,d)
|
236
|
+
puts "-> loan_isbn_ins"
|
237
|
+
@loan_title.text = ""
|
238
|
+
end
|
239
|
+
def loan_isbn_del(a,b,c)
|
240
|
+
puts "-> loan_isbn_del"
|
241
|
+
@loan_title.text = ""
|
242
|
+
end
|
243
|
+
|
244
|
+
def loan_isbn_set(widget)
|
245
|
+
puts "-> loan_isbn_set"
|
246
|
+
begin
|
247
|
+
book = @c.bib_info(@loan_isbn.text)
|
248
|
+
raise Exception, "the ig3tool imps found no such book..." if book.nil?
|
249
|
+
_show(book)
|
250
|
+
#@loan_title.text = book.title
|
251
|
+
rescue Exception => e
|
252
|
+
puts e.backtrace
|
253
|
+
@loan_notification.text = e.message.smaller
|
254
|
+
end
|
255
|
+
end
|
256
|
+
|
257
|
+
|
258
|
+
def books_find(widget)
|
259
|
+
puts "-> books_find"
|
260
|
+
puts "start find"
|
261
|
+
Thread.new do
|
262
|
+
begin
|
263
|
+
books = @c.bib_lookup(get_fields)
|
264
|
+
if books.size == 1
|
265
|
+
puts "find 1"
|
266
|
+
_show(books.first)
|
267
|
+
else
|
268
|
+
puts "find 2"
|
269
|
+
_update_books_list(books)
|
270
|
+
end
|
271
|
+
rescue Exception => e
|
272
|
+
puts e.backtrace
|
273
|
+
@books_notification.text = e.message.smaller
|
274
|
+
end
|
275
|
+
end
|
276
|
+
puts "end find"
|
277
|
+
end
|
278
|
+
|
279
|
+
def reset_books_fields(all=true)
|
280
|
+
puts "-> reset_books_fields"
|
281
|
+
@books_isbn.text = "" if all
|
282
|
+
@loan_isbn.text = ""
|
283
|
+
@books_title.text = ""
|
284
|
+
@loan_title.text = ""
|
285
|
+
@loan_memberid.text = ""
|
286
|
+
@books_author.text = ""
|
287
|
+
@books_publisher.text = ""
|
288
|
+
@books_year.text = ""
|
289
|
+
@books_copies.text = ""
|
290
|
+
@books_section.active = 0
|
291
|
+
@books_notification.text = ""
|
292
|
+
end
|
293
|
+
|
294
|
+
def books_clear(widget, all=true)
|
295
|
+
puts "-> books_clear"
|
296
|
+
reset_books_fields(all)
|
297
|
+
#_update_books_list
|
298
|
+
end
|
299
|
+
|
300
|
+
|
301
|
+
def loan_clear(widget, all=true)
|
302
|
+
puts "-> loan_clear"
|
303
|
+
@loan_isbn.text = ""
|
304
|
+
@loan_memberid.text = ""
|
305
|
+
@loan_warranty.text = "5"
|
306
|
+
@loan_notification.text = "" if all
|
307
|
+
@loan_title.text = ""
|
308
|
+
reset_books_fields
|
309
|
+
end
|
310
|
+
|
311
|
+
def loan_loan(widget)
|
312
|
+
puts "-> loan_loan"
|
313
|
+
@loan_notification.text = ""
|
314
|
+
begin
|
315
|
+
@c.bib_loan!(get_loan_fields)
|
316
|
+
_update_loan_list
|
317
|
+
loan_clear(nil)
|
318
|
+
rescue Exception => e
|
319
|
+
puts e.backtrace
|
320
|
+
@loan_notification.text = e.message.smaller(65)
|
321
|
+
end
|
322
|
+
end
|
323
|
+
|
324
|
+
def books_loan(widget)
|
325
|
+
@tabs.page = 1
|
326
|
+
end
|
327
|
+
|
328
|
+
|
329
|
+
|
330
|
+
|
331
|
+
|
332
|
+
private
|
333
|
+
|
334
|
+
|
335
|
+
|
336
|
+
def _lookup_amazon_isbn (isbn)
|
337
|
+
return false unless $global['amazon_loaded'] # Indien de amazon gem niet geladen is, return
|
338
|
+
return false unless _isbn?(true,isbn) # Indien strenge test faalt
|
339
|
+
|
340
|
+
if isbn.length == 13 # indien in de nieuwe vorm, maak er een oude van
|
341
|
+
isbn = isbn[3..11]
|
342
|
+
sum = 0
|
343
|
+
9.times {|i| sum += isbn[i].chr.to_i * (10 - i) }
|
344
|
+
controlecijfer = 11 - (sum % 11)
|
345
|
+
if controlecijfer != 10
|
346
|
+
isbn = isbn + controlecijfer.to_s
|
347
|
+
else
|
348
|
+
isbn = isbn + "X"
|
349
|
+
end
|
350
|
+
end
|
351
|
+
|
352
|
+
# You need a amazon-dev-token in client.rb
|
353
|
+
token = CONFIG['amazon-dev-token']
|
354
|
+
return unless $global['amazon_loaded'] and token.instance_of?(String) and not token.empty?
|
355
|
+
|
356
|
+
begin
|
357
|
+
req = Amazon::Search::Request.new(CONFIG["amazon-dev-token"],CONFIG["amazon-associates-id"])
|
358
|
+
res = req.asin_search(isbn)
|
359
|
+
prod = res.products
|
360
|
+
return if prod.length == 0
|
361
|
+
book = prod[0]
|
362
|
+
|
363
|
+
@books_title.text = book['product_name'].to_s.strip
|
364
|
+
@books_author.text = book['authors'].join(', ').strip if !book['authors'] and book['authors'].class == "Array" # opgelet, niets wegdoen!
|
365
|
+
@books_publisher.text = book['manufacturer'].to_s.strip
|
366
|
+
@books_year.text = book['release_date'].to_s.strip
|
367
|
+
rescue
|
368
|
+
puts e.backtrace
|
369
|
+
_print_msg "Fout: Lookup Amazon: #{$!}", "ISBN: #{isbn}"
|
370
|
+
end
|
371
|
+
end
|
372
|
+
|
373
|
+
def _show(book)
|
374
|
+
puts "-> _show"
|
375
|
+
@books_isbn.text = book["isbn"]
|
376
|
+
@loan_isbn.text = book["isbn"]
|
377
|
+
@books_title.text = book["title"]
|
378
|
+
@loan_title.text = book["title"]
|
379
|
+
@loan_notification.text = ""
|
380
|
+
@books_author.text = book["author"]
|
381
|
+
@books_publisher.text = book["publisher"]
|
382
|
+
@books_year.text = book["year"]
|
383
|
+
@books_copies.text = book["copies"]
|
384
|
+
_update_sections
|
385
|
+
sections = @c.bib_sections.collect{|b| b.name}
|
386
|
+
index = sections.index book.section
|
387
|
+
@books_section.active = index+1
|
388
|
+
end
|
389
|
+
|
390
|
+
def _update_books_list(books=nil, clear=true)
|
391
|
+
puts "-> _update_books_list"
|
392
|
+
@books_notification.text = "loading books..."
|
393
|
+
@books_list_store.clear if clear
|
394
|
+
Thread.new do
|
395
|
+
books = @c.bib_books if books.nil?
|
396
|
+
unless books.empty?
|
397
|
+
books.each do |b|
|
398
|
+
@books_list_store.append[0] = b
|
399
|
+
end
|
400
|
+
end
|
401
|
+
if books.empty?
|
402
|
+
@books_notification.text = "the ig3tool imps found no books..."
|
403
|
+
else
|
404
|
+
@books_notification.text = ""
|
405
|
+
end
|
406
|
+
end
|
407
|
+
|
408
|
+
end
|
409
|
+
|
410
|
+
def _update_loan_list(clear=true)
|
411
|
+
puts "-> _update_loan_list"
|
412
|
+
@loan_list_store.clear if clear
|
413
|
+
Thread.new do
|
414
|
+
loans = @c.bib_loans
|
415
|
+
loans.each do |b|
|
416
|
+
@loan_list_store.append[0] = b
|
417
|
+
end
|
418
|
+
end
|
419
|
+
|
420
|
+
end
|
421
|
+
|
422
|
+
|
423
|
+
def _update_sections
|
424
|
+
puts "-> _update_sections"
|
425
|
+
sections = @c.bib_sections
|
426
|
+
sections_model = Gtk::ListStore.new(Object, String)
|
427
|
+
|
428
|
+
empty = sections_model.append
|
429
|
+
empty[0] = nil
|
430
|
+
empty[1] = "ANY: Any section"
|
431
|
+
|
432
|
+
sections.each do |s|
|
433
|
+
row = sections_model.append
|
434
|
+
row[0] = s
|
435
|
+
row[1] = s.name + ": " + s.full_name
|
436
|
+
end
|
437
|
+
|
438
|
+
@books_section.model = sections_model
|
439
|
+
@books_section.active = 0
|
440
|
+
@books_section.clear
|
441
|
+
renderer = Gtk::CellRendererText.new
|
442
|
+
@books_section.pack_start(renderer, true)
|
443
|
+
@books_section.set_attributes(renderer, :text => 1)
|
444
|
+
end
|
445
|
+
|
446
|
+
|
447
|
+
|
448
|
+
end
|
449
|
+
|
450
|
+
register_window(BibliotheekWindow)
|
451
|
+
|
452
|
+
|
453
|
+
end
|