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,154 +0,0 @@
1
- require 'sales'
2
- module Ig3tool
3
- class Actions
4
-
5
- # Geeft alle categorieen terug.
6
- def self.product_categories(params)
7
- Category.find(:all)
8
- end
9
-
10
- # Geeft alle producten uit een categorie terug
11
- def self.product_category(params)
12
- raise Needed, "Category" if params[:given_uri] != 1
13
- Category.find(params[:from_uri].first).products
14
- end
15
-
16
- # Verwacht een barcode in de URL
17
- # Geeft het product terug
18
- def self.product_lookup(params)
19
- raise Needed, "Barcode" if params[:given_uri] != 1
20
-
21
- p = params[:from_uri].first
22
- _product(p)
23
- end
24
-
25
- # Verwacht geen parameters
26
- # Geeft alle producten in de stock terug
27
- def self.product_all(params)
28
- #Product.find :all, :conditions => { 'stock_gt' => 0 } # Stock Greater than
29
- Product.find :all, :include => [:purchases]
30
- end
31
-
32
- # Verwacht een barcode in de URL
33
- # Geeft de stock terug
34
- def self.product_stock(params)
35
- raise Needed, "Barcode" if params[:given_uri] != 1
36
-
37
- prod = _product(params[:from_uri].first)
38
- prod.stock
39
- end
40
-
41
- # Verwacht een barcode en de stock in de URL
42
- # Geeft de diff stock terug
43
- # Verwijdert de oudste items indien newstock < oldstock
44
- # Voegt items toe met de nieuwste prijs indien newstock > oldstock
45
- def self.product_diff!(params)
46
- barcode = params["barcode"] or raise Needed, "Barcode"
47
- newstock = params["stock"] or raise Needed, "Stock"
48
- p = _product(barcode)
49
- oldstock = p.stock
50
-
51
- if oldstock < newstock
52
- # TODO XXX Set Price!
53
- else
54
- # TODO remove from stock!
55
- end
56
-
57
- Logger::log :stock, :diff, "%s stock changed from %d to %d" %
58
- [ p.name, oldstock, p.stock ]
59
- end
60
-
61
- # Voegt een product toe aan de DB
62
- # Verwacht 'barcode', 'name', 'category', 'nmprice', 'mprice' en 'dprice'
63
- def self.product_add!(params)
64
- notfound = []
65
-
66
- [:barcode, :name, :category, :nmprice, :mprice, :dprice].each do |k|
67
- notfound << k unless params.include? k.to_s and !params[k.to_s].nil?
68
- end
69
-
70
- raise Needed, notfound unless notfound.empty?
71
-
72
- p = \
73
- Product.create(:barcode => params["barcode"],
74
- :name => params["name"],
75
- :category => Category.find_by_name(params["category"].capitalize),
76
- :nmprice => params["nmprice"],
77
- :mprice => params["mprice"],
78
- :dprice => params["dprice"],
79
- :stock => 0) # XXX of params["amount"] ?
80
-
81
- Logger::log :product, :add, "Added %d (%s)" % [ params["barcode"], params["name"] ]
82
-
83
- "OK"
84
- end
85
-
86
- def self.product_remove!(params)
87
- barcode = params["barcode"] or raise Needed, "Barcode"
88
- p = _product(barcode)
89
-
90
- raise "still in stock, won't delete!" if p.stock > 0
91
-
92
- p.destroy
93
-
94
- "OK"
95
- end
96
-
97
- # Laat een 'debugger' een aankoop ingeven, met factuurnummer 'reference'.
98
- # Verwacht een hash barcode => [amount, cost] in 'items'.
99
- def self.product_purchase!(params)
100
- name = params["debugger"] or raise NeedDebugger
101
- debugger = Person.find_by_username(name)
102
- raise NotADebugger.new(name) unless !debugger.nil? && debugger.debugger?
103
-
104
- notfound = []
105
- params["items"].each do |barcode, item|
106
- _product(barcode, false) or notfound << barcode
107
- item[0] = item[0].to_i
108
- item[1] = item[1].to_i
109
- amount, cost = item
110
- raise "You're funny." unless amount.integer?
111
- end
112
-
113
- raise ProductNotFound.new(notfound.join(', ')) unless notfound.empty?
114
-
115
- Product.transaction do
116
- params["items"].each do |barcode, data|
117
- amount, cost = data
118
- p = _product(barcode)
119
- p.stock += amount
120
- p.save
121
-
122
- Purchase.create(:time => Time.now,
123
- :debugger => debugger,
124
- :product => p,
125
- :count => amount,
126
- :cost => cost)
127
-
128
- Logger::log :purchase, :add, "%s purchased %d x '%s' for %0.2f" %
129
- [ debugger.username, amount, p.name, cost ]
130
- end
131
- end
132
-
133
- "OK"
134
- end
135
-
136
- def self.product_purchases(params)
137
- p = params[:from_uri].first
138
- if p.nil? or p == "all"
139
- Purchase.find :all, :order => "product, time desc"
140
- else
141
- Purchase.find_all_by_barcode(p, :order => "product, time desc")
142
- end
143
- end
144
-
145
- private
146
- def self._product(barcode, complain=true)
147
- Product.find(barcode, :include => [:purchases])
148
- rescue
149
- raise NotFound, "Product" if complain
150
- nil
151
- end
152
-
153
- end
154
- end
data/lib/bib.rb DELETED
@@ -1,94 +0,0 @@
1
- module Ig3tool
2
-
3
- class BibSection < ActiveRecord::Base
4
-
5
- set_table_name "bib_sections"
6
- set_nonauto_primary_key :name
7
-
8
- validates_presence_of :name, :full_name
9
-
10
- validates_uniqueness_of :name
11
-
12
- has_many :books,
13
- :class_name => "BibBook",
14
- :foreign_key => "section"
15
-
16
- end
17
-
18
- class BibBook < ActiveRecord::Base
19
-
20
- set_table_name "bib_books"
21
- set_nonauto_primary_key :isbn
22
-
23
- validates_presence_of :isbn,
24
- :title,
25
- :author,
26
- :publisher,
27
- :section
28
-
29
- validates_each :section do |record, attr, value|
30
- begin
31
- BibSection.find(value)
32
- rescue
33
- record.errors.add attr, "Invalid section: '#{value}'"
34
- false
35
- end
36
- end
37
-
38
- has_many :loans,
39
- :class_name => "BibLoan",
40
- :foreign_key => "isbn"
41
-
42
- def available?
43
- available > 0
44
- end
45
-
46
- def available
47
- copies - loans.length
48
- end
49
-
50
- # ISBN-13 -> ISBN-10
51
- def self._isbn13(code)
52
- raise "Invalid ISBN-10 number!" if code.length != 10
53
- code.chop!
54
- code = "978" + code
55
-
56
- sum = 0
57
- code.split(//).each_with_index do |c, i|
58
- sum += c.to_i * ( i % 2 == 0 ? 1 : 3 )
59
- end
60
-
61
- rem = sum % 10
62
- check = (rem == 0) ? 0 : 10 - rem
63
-
64
- code = code + check.to_s
65
- end
66
-
67
- # ISBN-10 -> ISBN-13
68
- def self._isbn10(code)
69
- raise "Invalid ISBN-13 number!" if code.length != 13
70
- code = code[3..11]
71
-
72
- sum = 0
73
- 9.times {|i| sum += code[i].chr.to_i * (10 - i) }
74
-
75
- check = 11 - sum % 11
76
- check = 0 if sum == 0
77
- check = 'X' if check == 10
78
- code = code + check.to_s
79
- end
80
-
81
- end
82
-
83
- class BibLoan < ActiveRecord::Base
84
-
85
- set_table_name "bib_loans"
86
-
87
- validates_presence_of :isbn,
88
- :member_id,
89
- :warranty,
90
- :loan_date
91
-
92
- end
93
-
94
- end
@@ -1,112 +0,0 @@
1
- module Ig3tool
2
-
3
- #
4
- # Handige documentatie:
5
- #
6
- # Lesk, M.E.: "TBL -- A Program to Format Tables"
7
- # http://www.cs.bell-labs.com/10thEdMan/tbl.pdf
8
- #
9
- # PIC -- A Graphics Language for Typesetting, Brian Kernighan
10
- # http://www.cs.bell-labs.com/cm/cs/cstr/116.ps.gz
11
- #
12
-
13
- # dit is het billing gedoe
14
- # om een fancy factuur uit te printen
15
- # again thx to Peter
16
-
17
-
18
- CONFIG = { 'groff' => 'groff -ma4 -p -t | gv -',
19
- 'groff_alt' => 'groff -ma4 -p -t -l -L-Pigprint@igwe' }
20
-
21
-
22
- class Sales
23
-
24
- def printout debugger
25
- return if @sales.empty?
26
-
27
- p = Person.find(:first, :conditions => ['username=?', debugger])
28
- return unless p
29
- debugger = p.firstname + " " + p.lastname
30
- date = dutch_date
31
-
32
- def to_groff (str)
33
- gr = ''
34
- str.unpack('U*').each do |c|
35
- gr += c < 256 ? c.chr : sprintf('\[u%04X]', c)
36
- end
37
- return gr
38
- end
39
-
40
- groff = IO.popen(CONFIG["groff"], "w")
41
- groff.print <<EOF
42
-
43
-
44
-
45
-
46
-
47
- .TS
48
- box, expand ;
49
- l r
50
- ^ r .
51
- T{
52
- Infogroep
53
- p/a Faculteit Wetenschappen
54
- lokaal 1E8, tel. 02/629 33 56
55
- Vrije Universiteit Brussel
56
- T}\tBrussel, #{date}
57
- \tT{
58
- .PS
59
- B: box height 1 width 3.3
60
- .ps 8
61
- " stempel" at B.sw above ljust
62
- .ps 10
63
- .PE
64
- T}
65
-
66
-
67
-
68
- .TE
69
- .TS
70
- box, expand ;
71
- l | c | c
72
- l | n | n .
73
- Omschrijving artikels\tAantal\tPrijs
74
- _
75
- EOF
76
-
77
- each do |s|
78
- groff.printf("%s\t%d\t%.2f\n", to_groff(s.product.name), s.count, s.price)
79
- end
80
-
81
- groff.print <<EOF
82
- _
83
- .T&
84
- l s nB .
85
- T{
86
-
87
-
88
- Voor Infogroep,
89
-
90
-
91
-
92
- #{to_groff(debugger)}
93
- T}\t#{sprintf '%.2f', total_price}
94
- .TE
95
- EOF
96
-
97
- groff.close
98
- end
99
-
100
- def dutch_date
101
- months = %w(_ januari februari maart april mei juni juli
102
- augustus september oktober november december)
103
- days = %w(zondag maandag dinsdag woensdag donderdag
104
- vrijdag zaterdag zondag)
105
- t = Time.now
106
- "#{days[t.wday]} #{t.day} #{months[t.month]} #{t.year}"
107
- end
108
- private :dutch_date
109
-
110
- end
111
-
112
- end
@@ -1,49 +0,0 @@
1
- require 'digest/md5'
2
-
3
- module Ig3tool
4
-
5
- class Bitch < ActiveRecord::Base
6
-
7
- set_table_name "bitches"
8
-
9
- validates_presence_of :crap, :bitch
10
-
11
- validates_uniqueness_of :crap
12
-
13
- def self.lookup(crap)
14
- Bitch.find(:first, :conditions => ["crap = ?", crap])
15
- end
16
-
17
- def self.bitch(crap)
18
- Bitch.lookup(crap).bitch
19
- end
20
-
21
- def log_request(request)
22
- r = Request.new
23
- r.bitch = self.bitch
24
- r.request = request
25
- r.save
26
- end
27
-
28
- def self.can_request?(crap)
29
- not Bitch.lookup(crap).nil?
30
- end
31
-
32
- def self.wannabe(user, pass)
33
- # check if user isa ldap user
34
- # generate some sort of token to auth with
35
- raise Token, "you don't know the magic word..." unless IGLDAP.bitchke?(user, pass)
36
- b = Bitch.new
37
- b.bitch = user
38
- #b.crap = user.crypt("$1$" + Time.now.strftime("%S%M"))
39
- b.crap = Digest::MD5.hexdigest(user + Time.now.to_s)
40
- b.save!
41
- b.crap
42
- end
43
-
44
- end
45
-
46
- end
47
-
48
-
49
-
@@ -1,19 +0,0 @@
1
- module Ig3tool
2
-
3
- require 'yaml'
4
-
5
- class Config
6
- def Config.load(file)
7
- begin
8
- @@file = YAML.load_file(file)
9
- rescue SystemCallError => boom
10
- abort "Kon config file niet laden: #{boom.message}"
11
- end
12
- end
13
-
14
- def Config.[](attribute)
15
- @@file[attribute]
16
- end
17
- end
18
-
19
- end
@@ -1,15 +0,0 @@
1
- module ActiveRecord
2
- class Base
3
- # Deze methode laat toe TOCH primary keys te hebben.
4
- def self.set_nonauto_primary_key(field)
5
- set_primary_key field
6
- define_method (field.to_s+"_before_type_cast").to_sym do; end
7
- alias_method field.to_s+"=", :id=
8
- end
9
-
10
- def attributes_protected_by_default
11
- [] # STERF.
12
- end
13
- end
14
- end
15
-