ig3tool 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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
+