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,207 @@
1
+ module Ig3tool
2
+
3
+ class SalesWindow < GladeHelper
4
+ MENU_PATH = ["Sales", "Sales"]
5
+ ICON = "emblem-sales.png"
6
+
7
+ def initialize
8
+ super("sales.glade")
9
+ make_debugger_combo(_get_widget("debugger"), @window)
10
+ @status = "non member"
11
+ @target = nil
12
+
13
+ # init items
14
+ @items = _get_widget("list")
15
+ @items.model = Gtk::ListStore.new(Integer, String, Float, Object)
16
+ r = Gtk::CellRendererText.new
17
+ @items.insert_column(-1, "Aantal", r, :text => 0)
18
+ @items.insert_column(-1, "Product", r, :text => 1)
19
+ @items.insert_column(-1, "Prijs", r, :text => 2)
20
+
21
+ @window.show
22
+ end
23
+
24
+ def smartzap_activate
25
+ value = _get_widget("smartzap").text
26
+ value.strip!
27
+ _get_widget("smartzap").text = ""
28
+
29
+ case value
30
+ when "non member"
31
+ @target = nil
32
+ @status = "non member"
33
+ return
34
+
35
+ when "kaching"
36
+ _kaching
37
+ @items.model.clear
38
+ return
39
+
40
+ when "scribble"
41
+ _scribble
42
+ @items.model.clear
43
+ return
44
+
45
+ # is het een debugger?
46
+ when /^[a-z]/
47
+ wanted = {"username", value, "status", "debugger"}
48
+ pers = $global["client"].person_lookup(wanted)
49
+
50
+ unless pers.empty?
51
+ pers = pers.first
52
+
53
+ @target = pers.username
54
+ @status = "debugger"
55
+
56
+ _get_widget("debugger").model.each do |m, p, i|
57
+ if i[1] == @target
58
+ _get_widget("debugger").active_iter = i
59
+ break
60
+ end
61
+ end
62
+ end
63
+ return
64
+ end
65
+
66
+ # is het een member?
67
+ begin
68
+ memb = $global["client"].membership_lookup(value)
69
+
70
+ @target = memb.barcode
71
+ @status = "member"
72
+ return
73
+ rescue Exception => e
74
+ end
75
+
76
+ # is het een product?
77
+ begin
78
+ prod = $global["client"].product_lookup(value)
79
+ qty = _get_widget("count").text.to_i
80
+ _add_product(prod, qty)
81
+ return
82
+ end
83
+ # het is een vliegtuig!
84
+ end
85
+
86
+ def delete_clicked
87
+ sel = @items.selection.selected
88
+ @items.model.remove(sel) if sel
89
+ end
90
+
91
+ def price_entries_changed
92
+ paid = _get_widget("paid").text.to_f
93
+ total = _get_widget("total").text.to_f
94
+
95
+ change = paid - total
96
+ change = 0 if change < 0
97
+
98
+ _get_widget("change").text = sprintf("%.2f", change)
99
+ end
100
+
101
+ def scribble_clicked
102
+ _scribble
103
+ end
104
+
105
+ def clear_clicked
106
+ @items.model.clear
107
+ _update_total
108
+ end
109
+
110
+ alias_method :count_activate, :smartzap_activate
111
+
112
+ private
113
+ def _get_items
114
+ products = []
115
+ @items.model.each do |model, path, row|
116
+ products.push([row[3].barcode,row[0]])
117
+ end
118
+ products
119
+ end
120
+
121
+ def _scribble
122
+ unless @status == "debugger"
123
+ warn "not a debugger"
124
+ return
125
+ end
126
+
127
+ items = _get_items
128
+
129
+ return if items.empty?
130
+ params = { "debugger" => @target,
131
+ "items" => items }
132
+
133
+ begin
134
+ $global["client"].scribble! params
135
+ clear_clicked
136
+ # XXX make sound
137
+ rescue Exception => e
138
+ puts "Error: #{$!}"
139
+ end
140
+ end
141
+
142
+ def _kaching
143
+ items = _get_items
144
+
145
+ params = { "debugger" => "dharnie", # XXX get username
146
+ "items" => items,
147
+ "status" => @status }
148
+
149
+ begin
150
+ $global["client"].kaching! params
151
+ clear_clicked
152
+ # XXX make sound
153
+ rescue Exception => e
154
+ puts "Error: #{$!}"
155
+ end
156
+ end
157
+
158
+ def _add_product(prod, qty)
159
+ qty = qty.to_i
160
+ return if qty < 1
161
+
162
+ # zoek eerst naar een bestaande entry voor prod
163
+ found = nil
164
+ @items.model.each do |model, path, row|
165
+ found = row if row[3].barcode == prod.barcode
166
+ end
167
+
168
+ if found
169
+ oldqty = found[0]
170
+ found[0] += qty
171
+ found[2] = found[2] * (oldqty+qty)/oldqty
172
+ else
173
+ row = @items.model.append
174
+ row[0] = qty
175
+ row[1] = prod.name
176
+ row[2] = qty * prod.send(_price).to_f / 100
177
+ row[3] = prod
178
+ end
179
+
180
+ _get_widget("count").text = "1"
181
+ _update_total
182
+ end
183
+
184
+ def _price
185
+ case @status
186
+ when "debugger"
187
+ :dprice
188
+
189
+ when "member"
190
+ :mprice
191
+
192
+ else
193
+ :nmprice
194
+ end
195
+ end
196
+
197
+ def _update_total
198
+ total = 0.0
199
+ @items.model.each { |m, p, r| total += r[2].to_f }
200
+ _get_widget("total").text = sprintf "%.2f", total
201
+ end
202
+
203
+ end
204
+
205
+ register_window(SalesWindow)
206
+
207
+ end
@@ -0,0 +1,97 @@
1
+ module Ig3tool
2
+
3
+ require 'pathname'
4
+
5
+ # Hoofdmenu (altijd on top)
6
+ # Zorgt voor dynamische uitbreidingsmogelijkheden van de ig3tool
7
+
8
+ class ToolWindow
9
+
10
+ @@windows = {}
11
+
12
+ ICON_BASEPATH = Pathname.new(__FILE__).parent.parent + "glade/icons"
13
+
14
+ def initialize (klasses)
15
+ window = Gtk::Window.new
16
+ window.title = "Ig3tool"
17
+ window.type_hint = Gdk::Window::TYPE_HINT_UTILITY
18
+ #window.keep_above = true
19
+ window.move(0,0)
20
+
21
+ bigbox = Gtk::VBox.new(true)
22
+ bigbox.border_width = 6
23
+ bigbox.spacing = 12
24
+ window.add(bigbox)
25
+
26
+
27
+ klasses.each do |klass|
28
+ name = klass::MENU_PATH.last
29
+ icon = (klass::ICON || "no.xpm")
30
+ button = create_button(name, icon.to_s)
31
+ button.signal_connect("clicked") do
32
+ @@windows[klass] ||= klass.new
33
+ @@windows[klass].show
34
+ @@windows[klass].present
35
+ end
36
+ bigbox.add(button)
37
+ end
38
+
39
+ window.signal_connect("delete-event") do
40
+ not ask_to_quit(window)
41
+ end
42
+ window.signal_connect("destroy") do
43
+ Gtk::main_quit
44
+ end
45
+
46
+ bigbox.show_all
47
+ size = window.size_request
48
+ size[0] += 24
49
+ size[1] += klasses.length * 12
50
+ window.set_default_size(*size)
51
+ window.show_all
52
+ end
53
+
54
+ private
55
+
56
+ def create_button (label, icon = nil)
57
+ if not icon
58
+ return Gtk::Button.new(label)
59
+ end
60
+
61
+ i = Gtk::Image.new((ICON_BASEPATH + icon).to_s)
62
+ l = Gtk::Label.new(label)
63
+ l.set_alignment(0, 0.5)
64
+
65
+ h = Gtk::HBox.new(false, 6)
66
+ h.pack_start(i, false, false)
67
+ h.pack_start(l, false, false)
68
+
69
+ a = Gtk::Alignment.new(0.5, 0.5, 0, 0)
70
+ a.add(h)
71
+
72
+ b = Gtk::Button.new
73
+ b.add(a)
74
+ return b
75
+ end
76
+
77
+ def ask_to_quit (window)
78
+ dialog = Gtk::MessageDialog.new(window, 0,
79
+ Gtk::MessageDialog::QUESTION,
80
+ Gtk::MessageDialog::BUTTONS_NONE,
81
+ "De ig3tool (met alle venstertjes) afsluiten?")
82
+ dialog.add_buttons(
83
+ [ Gtk::Stock::CANCEL, Gtk::Dialog::RESPONSE_CANCEL ],
84
+ [ Gtk::Stock::QUIT, Gtk::Dialog::RESPONSE_OK ])
85
+ dialog.move(169,0)
86
+ dialog.default_response = Gtk::Dialog::RESPONSE_OK
87
+ quit = dialog.run == Gtk::Dialog::RESPONSE_OK
88
+ dialog.destroy
89
+ return quit
90
+ end
91
+
92
+ def self.remove_window (klass)
93
+ @@windows.delete klass
94
+ end
95
+ end
96
+
97
+ end
metadata ADDED
@@ -0,0 +1,128 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ig3tool
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Kevin Pinte
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2008-03-05 00:00:00 +01:00
13
+ default_executable: ig3tool
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: ig3client
17
+ version_requirement:
18
+ version_requirements: !ruby/object:Gem::Requirement
19
+ requirements:
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 0.1.0
23
+ version:
24
+ description:
25
+ email: igtool@infogroep.be
26
+ executables:
27
+ - ig3tool
28
+ extensions: []
29
+
30
+ extra_rdoc_files: []
31
+
32
+ files:
33
+ - lib/glade
34
+ - lib/lib
35
+ - lib/ui
36
+ - bin/ig3tool
37
+ - lib/glade/bib.glade
38
+ - lib/glade/bibliotheek.glade
39
+ - lib/glade/icons
40
+ - lib/glade/icons/cola.png
41
+ - lib/glade/icons/emblem-money.png
42
+ - lib/glade/icons/emblem-package.png
43
+ - lib/glade/icons/emblem-penning.xpm
44
+ - lib/glade/icons/emblem-people.png
45
+ - lib/glade/icons/emblem-sales.png
46
+ - lib/glade/icons/gdict.png
47
+ - lib/glade/icons/members_klein.png
48
+ - lib/glade/icons/members_xklein.png
49
+ - lib/glade/icons/no.xpm
50
+ - lib/glade/icons/stock_book.svg
51
+ - lib/glade/icons/stock_book_klein.png
52
+ - lib/glade/icons/stock_book_xklein.png
53
+ - lib/glade/icons/stock_bookmark.svg
54
+ - lib/glade/icons/stock_bookmark_klein.png
55
+ - lib/glade/icons/stock_bookmark_xklein.png
56
+ - lib/glade/icons/stock_print.png
57
+ - lib/glade/interne.glade
58
+ - lib/glade/loginwindow.glade
59
+ - lib/glade/memberinfo.svg
60
+ - lib/glade/memberinfo_klein.png
61
+ - lib/glade/memberinfo_xklein.png
62
+ - lib/glade/members.glade
63
+ - lib/glade/members.svg
64
+ - lib/glade/members_klein.png
65
+ - lib/glade/members_xklein.png
66
+ - lib/glade/penningtool.glade
67
+ - lib/glade/people.glade
68
+ - lib/glade/printen.glade
69
+ - lib/glade/printer.png
70
+ - lib/glade/printer_klein.png
71
+ - lib/glade/printer_xklein.png
72
+ - lib/glade/printerlog_klein.png
73
+ - lib/glade/printerlog_xklein.png
74
+ - lib/glade/printing.glade
75
+ - lib/glade/products.glade
76
+ - lib/glade/sales.glade
77
+ - lib/glade/stock_book.svg
78
+ - lib/glade/stock_book_klein.png
79
+ - lib/glade/stock_book_xklein.png
80
+ - lib/glade/stock_bookmark_klein.png
81
+ - lib/glade/stock_bookmark_xklein.png
82
+ - lib/glade/vendingmachine.glade
83
+ - lib/lib/errors.rb
84
+ - lib/lib/util.rb
85
+ - lib/ui/automaatwindow.rb
86
+ - lib/ui/bibliotheekwindow.rb
87
+ - lib/ui/bibwindow.rb
88
+ - lib/ui/gladehelper.rb
89
+ - lib/ui/internewindow.rb
90
+ - lib/ui/loginwindow.rb
91
+ - lib/ui/memberswindow.rb
92
+ - lib/ui/messagebox.rb
93
+ - lib/ui/peoplewindow.rb
94
+ - lib/ui/printenwindow.rb
95
+ - lib/ui/printingwindow.rb
96
+ - lib/ui/productswindow.rb
97
+ - lib/ui/saleswindow.rb
98
+ - lib/ui/toolwindow.rb
99
+ has_rdoc: false
100
+ homepage: http://infogroep.be
101
+ post_install_message:
102
+ rdoc_options: []
103
+
104
+ require_paths:
105
+ - lib
106
+ - lib
107
+ - lib/ui
108
+ required_ruby_version: !ruby/object:Gem::Requirement
109
+ requirements:
110
+ - - ">="
111
+ - !ruby/object:Gem::Version
112
+ version: "0"
113
+ version:
114
+ required_rubygems_version: !ruby/object:Gem::Requirement
115
+ requirements:
116
+ - - ">="
117
+ - !ruby/object:Gem::Version
118
+ version: "0"
119
+ version:
120
+ requirements: []
121
+
122
+ rubyforge_project:
123
+ rubygems_version: 1.0.1
124
+ signing_key:
125
+ specification_version: 2
126
+ summary: gtk ig3tool client
127
+ test_files: []
128
+