ig3tool 0.3.0 → 0.4.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.
@@ -1,19 +0,0 @@
1
- require 'bitching'
2
-
3
- module Ig3tool
4
- class Actions
5
-
6
- def self.wannabe!(params)
7
- username = params["username"] or raise Needed, "username"
8
- password = params["password"] or raise Needed, "password"
9
- Bitch.wannabe(username, password)
10
- end
11
-
12
- def self.register!(params)
13
- username = params["username"] or raise Needed, "username"
14
- password = params["password"] or raise Needed, "password"
15
- Bitch.wannabe(username, password)
16
- end
17
-
18
- end
19
- end
@@ -1,3 +0,0 @@
1
- module Ig3tool
2
- # :)
3
- end
@@ -1,98 +0,0 @@
1
- require 'people'
2
- require 'interne'
3
-
4
- module Ig3tool
5
- class Actions
6
-
7
- def self.internes(params)
8
- internes = {}
9
- Interne.find(:all) \
10
- .sort { |a,b| a.person.username <=> b.person.username } \
11
- .each { |i| internes[i.person.username] = i.saldo }
12
- internes
13
- end
14
-
15
- # Verwacht een 'username' in de URL
16
- # Geeft saldo terug
17
- def self.interne(params)
18
- raise NeedDebugger unless params[:given_uri] == 1
19
- name = params[:from_uri].first
20
- _interne(name).saldo
21
- end
22
-
23
- # Toon de InterneTransactions
24
- # Geen debugger-username -> Alles
25
- # Debugger-username -> Donor + Recipient
26
- def self.interne_log(params)
27
- # XXX TODO
28
- # Change from LogEntry to InterneTransaction
29
- # MAAR:
30
- # eerst nog zorgen dat alle transacties ivm interne (dus ook scribblen enzo) ook weergegeven worden
31
- # voorlopig dus via LogEntry zodat je meer info hebt
32
- name, max_lines = params[:from_uri]
33
- max_lines = 500 if max_lines.nil?
34
-
35
- if name
36
- name = "%#{name}%"
37
- LogEntry.find(:all, :conditions => ["system = 'interne' and
38
- subsystem = 'transfer' and
39
- message like ?", name],
40
- :order => "timestamp DESC",
41
- :limit => max_lines)
42
- else
43
- LogEntry.find(:all, :order => "timestamp DESC",
44
- :limit => max_lines)
45
- end
46
- end
47
-
48
- # Verwacht in 'from','to' usernames
49
- # Verwacht in 'saldo' een getal
50
- # Geeft saldo terug.
51
- def self.interne_transfer!(params)
52
- from = params['from'] or raise Needed, "source interne"
53
- to = params['to'] or raise Needed, "target interne"
54
- amount = params['amount'].to_i or raise Needed, "amount"
55
-
56
- if amount < 0 then
57
- amount *= -1
58
- from, to = to, from
59
- end
60
-
61
- raise IG3Error, "Having fun playing with yourself?" if from == to
62
- raise IG3Error, "No sense in transferring 0 credits.." if amount == 0
63
-
64
- case
65
- when from == "kas" # geld UIT de kassa
66
- Logger::log :interne, :withdraw, '%s withdrew %.2f from kas' % [to, amount.to_f / 100]
67
- _with_interne(to) { |s| s - amount }
68
-
69
- when to == "kas" # geld IN de kassa
70
- Logger::log :interne, :deposit, '%s deposited %.2f in kas' % [from, amount.to_f / 100]
71
- _with_interne(from) { |s| s + amount }
72
-
73
- else
74
- Logger::log :interne, :transfer, '%s transferred %.2f to %s' % [from, amount.to_f / 100, to]
75
- Interne.transaction do
76
- _with_interne(to) { |s| s + amount }
77
- _with_interne(from) { |s| s - amount }
78
- end
79
- end
80
- end
81
-
82
- private
83
-
84
- def self._interne(name)
85
- d = Person.find(name)
86
- raise NotADebugger, name.to_s unless d.debugger?
87
- d.interne
88
- end
89
-
90
- def self._with_interne(name)
91
- i = _interne(name)
92
- i.saldo = yield i.saldo
93
- i.save
94
- i.saldo
95
- end
96
-
97
- end
98
- end
@@ -1,90 +0,0 @@
1
- require 'sales'
2
- require 'people'
3
- require 'interne'
4
-
5
- module Ig3tool
6
- class Actions
7
-
8
- # This one's for you, joris :P
9
- def self.kaching_cola(params)
10
- scribble(params.update({"items" => {"5449000000996" => 1}}))
11
- end
12
-
13
- # Verwacht een array van [barcode,aantal] in 'items'
14
- # Verwacht een username in 'debugger'
15
- # Geeft het nieuwe saldo terug
16
- def self.scribble!(params)
17
- name = params['debugger'] or raise Needed, "debugger"
18
-
19
- interne = _interne(name) or raise NotADebugger, name
20
- Product.transaction do
21
- _kaching_log :scribble, name, params['items']
22
- total = _kaching(params['items'], "debugger")
23
- interne.saldo -= total
24
- interne.save!
25
- total
26
- end
27
- end
28
-
29
- # Verwacht een hash van barcode => aantal in 'items'
30
- # Optioneel een status in 'status'
31
- # Geeft kost terug.
32
- def self.kaching!(params)
33
- Product.transaction do
34
- total = _kaching(params['items'], params['status'] || "plebs")
35
- _kaching_log :kaching, params['debugger'], params['items']
36
- total
37
- end
38
- end
39
-
40
- # Automaat bijvullen. 'items' zoals kaching, en 'debugger'
41
- def self.product_restock!(params)
42
- debugger = params['debugger']
43
- items = params['items']
44
-
45
- Product.transaction do
46
- total = _kaching(items, "plebs")
47
- _kaching_log(:restock, debugger, items)
48
- total
49
- end
50
- end
51
-
52
- private
53
-
54
- # Verwacht een hash van barcode => aantal en een status
55
- # Past de stock aan, en geeft de kost terug.
56
- def self._kaching(items, status)
57
- cost = 0
58
- raise Needed, "items" if items.nil? or items.empty?
59
- Product.transaction do
60
- items.each do |barcode, amount|
61
- p = Product.find(barcode)
62
- p.decrement_stock(amount)
63
- cost += p.price(status, amount)
64
- end
65
-
66
- cost
67
- end
68
- rescue ActiveRecord::RecordNotFound => e
69
- raise ProductNotFound, e.message[/ID=(.*)/]
70
- end
71
-
72
- def self._kaching_log(action, naam, items)
73
- Product.transaction do
74
- items.each do |barcode, amount|
75
- p = Product.find(barcode)
76
- raise IG3Error, "You did not enter a correct amount!" unless !amount.nil? and amount.integer? and amount > 0
77
- action_lookup = { :kaching => "sold",
78
- :scribble => "scribbled",
79
- :restock => "restocked automaat with" }
80
- action_str = action_lookup[action] or raise NotFound, "action"
81
- Logger::log :sales, action, "%s %s %d %s" %
82
- [ naam, action_str, amount, p.name ]
83
- end
84
- end
85
- rescue ActiveRecord::RecordNotFound => e
86
- raise ProductNotFound, e.message[/ID=(.*)/]
87
- end
88
-
89
- end
90
- end
@@ -1,178 +0,0 @@
1
- module Ig3tool
2
- class Actions
3
-
4
- STATUSSEN = { 0 => "non-member", 1 => "member", 2 => "honorary member", 3 => "debugger", 4 => "ex-debugger"}
5
-
6
- # Methods om alle mensen op te vragen
7
- singleton = class << self; self; end
8
- %w(everybody nonmembers honorarymembers members debuggers).each do |k|
9
- body = Proc.new do |params|
10
- Person.send(k.to_sym)
11
- end
12
-
13
- singleton.class_eval { define_method "person_#{k}", body}
14
- end
15
-
16
- # Zoekt persons op adhv attributes
17
- # Verwacht minstens 1 key => value pair, kan meerdere mensen teruggeven.
18
- # Mogelijke keys: username, email, first_name, last_name, rolnr, address, phone, gsm
19
- def self.person_lookup(params)
20
- raise Needed, "At least one search value" if params[:given_uri] < 1
21
- raise Needed, "Even number of search values" if params[:given_uri] % 2 == 1
22
-
23
- keys = params[:from_uri].to_h
24
- status = keys.delete 'status'
25
- valid_keys = %w(username email first_name last_name rolnr address phone gsm)
26
- res = Person.hash_lookup(keys, valid_keys)
27
-
28
- if status
29
- return res.select {|x| x.send "#{status}?".to_sym }
30
- else
31
- return res
32
- end
33
- rescue RuntimeError => e
34
- raise IG3Error, e.message
35
- end
36
-
37
- # Geeft de memberships van een persoon terug, gesorteerd op datum
38
- # Verwacht een username.
39
- def self.person_memberships(params)
40
- raise Needed, "username" if params[:given_uri] != 1
41
- Person.find(params[:from_uri].first).memberships.sort { |a,b| b.year <=> a.year }
42
- end
43
-
44
- # Returnt een persoon adhv een membership barcode
45
- def self.person_member(params)
46
- raise Needed, "memberid" if params[:given_uri] != 1
47
- memberid = params[:from_uri].first
48
- member = Membership.find_by_barcode(memberid)
49
- raise NotAMember if member.nil?
50
- Person.find(member.username) # Zoek het member, en return de persoon
51
- end
52
-
53
- # Verwijdert een member (indien mogelijk -> Geen openstaande leningen/niet-0-internes/...)
54
- def self.person_remove!(params)
55
- username = params["username"] or raise Needed, "username"
56
-
57
- p = Person.find username
58
-
59
- # Controleer Interne
60
- i = p.interne
61
- raise SaldoNotZero, "Debugger: saldo not zero!" if !i.nil? and i.saldo != 0
62
-
63
- # Controleer leningen
64
- p.memberships.each do |m|
65
- unless m.nil?
66
- loans = BibLoan.find_by_member_id m.id
67
- raise StillHaveLoans, "Member: outstanding loans" unless loans.nil? or loans.empty?
68
- end
69
- end
70
-
71
- begin
72
- p.destroy
73
- rescue ActiveRecord::RecordNotFound
74
- raise NotFound, "Person"
75
- else
76
- :ok
77
- end
78
- end
79
-
80
- # Returnt alle mogelijk statussen
81
- def self.person_statussen(params)
82
- STATUSSEN # Return de Hash
83
- end
84
-
85
- # Voegt een persoon toe
86
- def self.person_add!(params)
87
- p = Person.new
88
- p.username = params['username'] or raise Needed, "Username"
89
- p.email = params['email'] or raise Needed, "Email"
90
- p.first_name = params['first_name'] or raise Needed, "First_name"
91
- p.last_name = params['last_name'] or raise Needed, "Last_name"
92
- p.rolnr = params['rolnr']
93
- p.address = params['address']
94
- p.phone = params['phone']
95
- p.gsm = params['gsm']
96
-
97
- status = params['status'] || "non-member"
98
- memberid = params['memberid']
99
- if status != "non-member"
100
- m = Membership.new
101
- m.barcode = memberid
102
- m.username = p.username
103
- m.status = status
104
- m.year = Time.werkjaar
105
- end
106
-
107
- pu = PrintUser.new
108
- pu.saldo = 0
109
-
110
- Person.transaction do
111
- # Set username as latest because it calls save!
112
- p.save!
113
- pu.username = p.username
114
- pu.save!
115
- m.save! if status != "non-member"
116
-
117
- pu.add_credit(200) if status == "member"
118
- "OK"
119
- end
120
- end
121
-
122
- # Update een persoon (adhv een id)
123
- def self.person_update!(params)
124
- raise Needed, "Username" unless params['username']
125
- p = Person.find_by_username(params['username'])
126
- raise NotFound if p.nil?
127
- p.email = params['email'] or raise Needed, "Email"
128
- p.first_name = params['first_name'] or raise Needed, "First_name"
129
- p.last_name = params['last_name'] or raise Needed, "Last_name"
130
- p.rolnr = params['rolnr']
131
- p.address = params['address']
132
- p.phone = params['phone']
133
- p.gsm = params['gsm']
134
- p.save!
135
- end
136
-
137
- def self.person_isdebugger(params)
138
- raise Needed, "Username" unless params[:from_uri].size > 0
139
- p = Person.find_by_username(params[:from_uri].first)
140
- raise NotFound if p.nil?
141
- p.debugger?
142
- end
143
-
144
- def self.person_status(params)
145
- raise Needed, "Username" unless params[:from_uri].size > 0
146
- p = Person.find_by_username(params[:from_uri].first)
147
- raise NotFound if p.nil?
148
- if p.debugger?
149
- "debugger"
150
- elsif p.member?
151
- "member"
152
- else
153
- "non-member"
154
- end
155
- end
156
-
157
- def self.person_bugger!(params)
158
- raise Needed, "Username" unless params['username']
159
- p = Person.find_by_username(params['username'])
160
- raise NotFound if p.nil?
161
- raise NotAMember unless p.member?
162
- raise IG3Error, "already a debugger" if p.debugger?
163
-
164
- p.bugger!
165
- "OK"
166
- end
167
-
168
- def self.person_unbugger!(params)
169
- raise Needed, "Username" unless params['username']
170
- p = Person.find_by_username(params['username'])
171
- raise NotFound if p.nil?
172
- raise NotADebugger unless p.debugger?
173
-
174
- p.unbugger!
175
- "OK"
176
- end
177
- end
178
- end
@@ -1,125 +0,0 @@
1
- require 'people'
2
- require 'interne'
3
- require 'printing'
4
-
5
- module Ig3tool
6
- class Actions
7
-
8
- def self.print_users(params)
9
- PrintUser.find(:all, :order => "username")
10
- end
11
-
12
- def self.print_debuggers(params)
13
- users = PrintUser.find(:all, :order => "username")
14
- users.select{|user| user.debugger?}
15
- end
16
-
17
- def self.print_logs(params)
18
- max_lines = (params[:given_uri] < 1 ? 50 : params[:given_uri].first)
19
- PrintTransaction.find(:all, :limit => max_lines, :order => "time DESC")
20
- end
21
-
22
- def self.print_user(params)
23
- raise Needed, "username or alias" if params[:given_uri] < 1
24
- username = params[:from_uri].first
25
- PrintUser.lookup(username)
26
- end
27
-
28
- def self.print_remove!(params)
29
- username = params["username"] or raise Needed, "username"
30
- PrintUser.remove(username)
31
- end
32
-
33
- def self.print_addcredit!(params)
34
- username = params["username"] or raise Needed, "username"
35
- amount = params["amount"] or raise Needed, "amount"
36
- pu = PrintUser.lookup(username) or raise NotFound, "username"
37
- pu.add_credit(amount)
38
- pu
39
- end
40
-
41
- def self.print_errortest(params)
42
- PrintUser.errortest
43
- end
44
-
45
- def self.print_update!(params)
46
- username = params["username"] or raise Needed, "username"
47
- firstname = params["firstname"]
48
- lastname = params["lastname"]
49
- email = params["email"]
50
- raise Needed, "at least one of: username, firstname, lastname" if lastname.nil? && firstname.nil? && email.nil?
51
- amount = params["amount"] || 0
52
- begin
53
- p = Person.find(username)
54
- rescue
55
- p = Person.new
56
- p.username = username
57
- raise Needed, "username, firstname and lastname" if lastname.nil? && firstname.nil? && email.nil?
58
- end
59
- p.first_name = firstname unless firstname.nil?
60
- p.last_name = lastname unless lastname.nil?
61
- p.email = email unless email.nil?
62
- p.save!
63
- begin
64
- pu = PrintUser.lookup(username)
65
- rescue NotFound => err
66
- pu = PrintUser.new
67
- pu.username = username
68
- pu.save!
69
- end
70
- pu.add_credit(amount) if amount.to_i.to_b
71
- pu
72
- end
73
-
74
- def self.print_refund!(params)
75
- logid = params["logid"] or raise Needed, "logid"
76
- begin
77
- transaction = PrintTransaction.find(logid)
78
- transaction.refund
79
- rescue
80
- raise TransactionNotFound, "this log id is not valid"
81
- end
82
- end
83
-
84
- def self.print_print!(params)
85
- username = params["username"] or raise Needed, "username"
86
- job = params["job"] or raise Needed, "job"
87
- pages = params["pages"] or raise Needed, "pages"
88
- copies = params["copies"] or raise Needed, "copies"
89
- host = params["host"] or raise Needed, "host"
90
- amount = params["amount"] or raise Needed, "amount"
91
- queue = params["queue"] or raise Needed, "queue"
92
- message = params["message"] || ""
93
- pu = PrintUser.lookup(username)
94
- pu.print(job, pages, copies, host, amount, queue, message)
95
- end
96
-
97
- def self.print_addalias!(params)
98
- username = params["username"] or raise Needed, "username"
99
- nwalias = params["alias"] or raise Needed, "alias"
100
- pu = PrintUser.find(username) # dit is eigenlijk overkill, lekker!
101
- pa = PrintAlias.new
102
- pa.username = username
103
- pa.alias = nwalias
104
- pa.save!
105
- end
106
-
107
- def self.print_removealias!(params)
108
- username = params["username"] or raise Needed, "username"
109
- a = params["alias"] or raise Needed, "alias"
110
- pa = PrintAlias.find(a)
111
- if pa.print_user.username == username
112
- pa.destroy
113
- else
114
- raise NotFound, "wrong username"
115
- end
116
- end
117
-
118
- def self.print_removealiases!(params)
119
- username = params["username"] or raise Needed, "username"
120
- pu = PrintUser.lookup(username).remove_aliases
121
- pu
122
- end
123
-
124
- end
125
- end