simple_inventory 0.0.1

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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: e1e03d50c006361c80047cbe732a7b2e949e6816
4
+ data.tar.gz: 7df91ba86624670aeb8d7389a6659568a28f7141
5
+ SHA512:
6
+ metadata.gz: c1804e0563aba2b1a8f10a0298e2b40ae1b23935434af66ce99d87f97d981a626cf46b77ff46d5d30e6bd42ee1f923aa06c9deac1c4de42f6cd7cedbf7476b4d
7
+ data.tar.gz: e905fbb585ee2833f6b44aff9cdcf67081d84b8218e34de914dcf611a1a68134bbe618d7d50b5358a13c37e3cae4a6ad3766351f605cbcdf34f22a6cd1f51012
@@ -0,0 +1,158 @@
1
+ #!/usr/bin/env ruby
2
+ #simple_inventory.rb
3
+
4
+ require './simple_inventory_cl.rb'
5
+
6
+ go = true
7
+
8
+ while go
9
+ puts "::SIMPLE Inventory:: Collaborate => https://github.com/mepyyeti/simple_inv"
10
+ puts
11
+ puts "enter [1] to ADD an item\nenter [2] to DELETE an item"
12
+ puts "enter [3] to SUBTRACT an amount\nenter [4] to REPLENISH"
13
+ puts "enter [5] to VIEW INVENTORY \nenter [6] to EXIT"
14
+ choice = gets.chomp
15
+
16
+ unless choice.empty? == false
17
+ next
18
+ end
19
+
20
+ choice = Integer(choice)
21
+
22
+ if choice == 1
23
+ print "enter item: "
24
+ item = gets.chomp
25
+
26
+ if item.empty? then next end
27
+
28
+ puts "item: empty? #{item.empty?} nil? #{item.nil?} string? #{item.is_a?(String)}"
29
+ print "amount: "
30
+ stock = Integer(gets.chomp)
31
+ puts stock.class
32
+
33
+ while stock < 1
34
+ print "amount: "
35
+ stock = Integer(gets.chomp)
36
+ end
37
+
38
+ stock = Integer(stock)
39
+ rl = true
40
+
41
+ while rl
42
+ print "set a reorder level: "
43
+ reorder_lvl = gets.chomp
44
+
45
+ while reorder_lvl.empty? || reorder_lvl.nil?
46
+ print "set a NUMERIC reorder level: "
47
+ reorder_lvl = gets.chomp
48
+ end
49
+
50
+ reorder_lvl = Integer(reorder_lvl)
51
+ furthermore = {reorder_lvl: reorder_lvl}
52
+
53
+ unless reorder_lvl >= 1
54
+ puts "reorder level must be greater than 1"
55
+ next
56
+ end
57
+
58
+ rl = false
59
+ end
60
+
61
+ print "want to enter an item description? [y/n]: "
62
+ choice = gets.chomp.downcase
63
+
64
+ unless choice == 'n' || choice =='no' || choice == '' || choice == ' '
65
+ puts "enter a description of 20 char or less: "
66
+ extra = gets.chomp
67
+
68
+ if extra.size > 20
69
+ "description is too long."
70
+ next
71
+ else
72
+ "acceptable."
73
+ end
74
+
75
+ furthermore = {stock: stock, reorder_lvl: reorder_lvl, desc: extra}
76
+ else
77
+ furthermore = {stock: stock, reorder_lvl: reorder_lvl}
78
+ end
79
+
80
+ x = Inv.new(item, furthermore)
81
+ x.run(item,furthermore)
82
+
83
+ elsif choice == 2
84
+ id_prod_hash = {stock: 1, desc: 'just viewing'}
85
+ x = Inv.new(id_prod_hash)
86
+ summary = x.summary
87
+
88
+ if summary == false then next end
89
+
90
+ print "type id number OR product name to delete item: "
91
+ id_or_prod = gets.chomp.downcase
92
+ print "Confirm deletion? [y/n]? :"
93
+ confirm = gets.chomp.downcase
94
+
95
+ unless confirm == 'y' || confirm == 'yes'
96
+ puts "deletion aborted...returned to main screen options"
97
+ next
98
+ else
99
+ x.delete(id_or_prod)
100
+ end
101
+
102
+ elsif choice == 3 || choice == 4
103
+ id_prod_hash = {stock: 1, desc: 'just viewing'}
104
+ y = Inv.new(id_prod_hash)
105
+ summary = y.summary
106
+
107
+ if summary == false then next end
108
+
109
+ direct = "type id number OR product name: "
110
+ print " #{direct}"
111
+ id_or_prod = gets.chomp.downcase
112
+
113
+ while id_or_prod.empty? || id_or_prod.nil?
114
+ print " #{direct}"
115
+ id_or_prod = gets.chomp.downcase
116
+ end
117
+
118
+ pulled = y.find_to_change(id_or_prod)
119
+ pulled = Integer(pulled)
120
+
121
+ if choice == 3
122
+ add_subtract = "sold"
123
+ print "How many #{add_subtract}? "
124
+ sold = Integer(gets.chomp)
125
+
126
+ if sold < 0
127
+ sold = abs(sold)
128
+ end
129
+
130
+ new_quant = pulled - sold
131
+
132
+ else
133
+ add_subtract = "do you want to replenish"
134
+ print "How many #{add_subtract}? "
135
+ sold = Integer(gets.chomp)
136
+
137
+ if sold < 0
138
+ sold = abs(sold)
139
+ end
140
+
141
+ new_quant = pulled + sold
142
+ end
143
+
144
+ y.sell_replenish(new_quant, id_or_prod)
145
+ y.reorder(id_or_prod)
146
+
147
+ elsif choice == 5
148
+ id_prod_hash = {stock: 1, desc: 'just viewing'}
149
+ z = Inv.new(id_prod_hash)
150
+ z.summary
151
+
152
+ elsif choice == 6
153
+ go = false
154
+
155
+ else
156
+ next
157
+ end
158
+ end
@@ -0,0 +1,141 @@
1
+ #!/usr/bin/env ruby
2
+ #simple_inventory_cl.rb
3
+
4
+ require 'sqlite3'
5
+
6
+ class Inv
7
+ attr_reader :item, :stock, :desc
8
+
9
+ def item=(item)
10
+ @item = item
11
+ end
12
+
13
+ def stock=(stock=1)
14
+ @stock = Integer(stock)
15
+ end
16
+
17
+ def initialize(item='nothing',**specs)
18
+ self.item = item
19
+ self.stock = specs[:stock]
20
+ @desc = specs[:desc]
21
+ end
22
+
23
+ def run(item, furthermore)
24
+ begin
25
+ db = SQLite3::Database.open('inventory.db')
26
+ puts db.get_first_value "select SQLite_VERSION()"
27
+ db.transaction
28
+ #db.execute2 "drop table stock"
29
+ db.execute2 "create table if not exists stock(Id INTEGER PRIMARY KEY, Product TEXT, RO TEXT, Level INTEGER, RO_at INTEGER, Description TEXT)"
30
+ puts "foo"
31
+ db.execute2 "insert into stock(Product, Level, RO_at, Description) values(:Product, :Level, :RO_at, :Description)", item, furthermore[:stock], furthermore[:reorder_lvl], furthermore[:desc]
32
+ db.commit
33
+ puts db.changes.to_s + " change"
34
+ puts "You added #{item}, with stock level #{stock}"
35
+ puts "#{item} is described as: #{desc}."
36
+ puts
37
+ print_me = db.execute2 "select * from stock where Product = :item" , item
38
+ print_me.each { |p| puts "%3s %-10s -%-3s- [%5s] %-5s %20s" % [p[0],p[1],p[2],p[3],p[4],p[5]] }
39
+ puts
40
+ rescue SQLite3::Exception => e
41
+ print "error in run " , e
42
+ db.rollback
43
+ ensure
44
+ db.close if db
45
+ end
46
+ end
47
+
48
+ def summary
49
+ begin
50
+ db = SQLite3::Database.open('inventory.db')
51
+ return "no match" unless File.exists?('inventory.db')
52
+ all = db.execute2 "SELECT * from stock"
53
+ puts
54
+ puts "this is your current inventory"
55
+ all.each { |p| puts "%3s %-10s -%-3s- [%5s] %-5s %20s " % [p[0],p[1],p[2],p[3],p[4],p[5]]}
56
+ puts
57
+ rescue SQLite3::Exception => e
58
+ puts "error in summary " , e
59
+ ensure
60
+ db.close if db
61
+ end
62
+ end
63
+
64
+ def delete(id_prod)
65
+ begin
66
+ db = SQLite3::Database.open('inventory.db')
67
+ db.transaction
68
+ db.execute2 "DELETE from stock WHERE Id = :id_prod OR Product = :id_prod", id_prod
69
+ db.commit
70
+ puts db.changes.to_s + " deletion"
71
+ rescue SQLite3::Exception => e
72
+ puts "error in delete " , e
73
+ db.rollback
74
+ ensure
75
+ db.close if db
76
+ end
77
+ end
78
+
79
+
80
+ def find_to_change(id_prod)
81
+ begin
82
+ db = SQLite3::Database.open('inventory.db')
83
+ print_out = db.execute2 "Select * from stock where Id = :id_prod OR Product = :id_prod" ,id_prod
84
+ puts
85
+ print_out.each { |line| puts "%3s %-10s -%-3s- [%5s] %-5s %20s" % [line[0], line[1], line[2], line[3], line[4], line[5]]}
86
+ puts
87
+ pull = db.execute2 "Select Level from stock where Id = :id_prod OR Product = :id_prod" ,id_prod
88
+ @pull = Integer(pull[1][0])
89
+ rescue SQLite3::Exception => e
90
+ puts "error in find_to_change " , e
91
+ ensure
92
+ db.close if db
93
+ end
94
+ @pull
95
+ end
96
+
97
+ def sell_replenish(new_quant, id_prod)
98
+ begin
99
+ db = SQLite3::Database.open('inventory.db')
100
+ puts new_quant.class
101
+ db.transaction
102
+ db.execute2 "UPDATE stock SET Level = :new_quant WHERE Id = :id_prod OR Product = :id_prod" , new_quant, id_prod
103
+ db.commit
104
+ puts db.changes.to_s + " change"
105
+ rescue SQLite3::Exception => e
106
+ puts "error in sell_replenish ", e
107
+ db.rollback
108
+ ensure
109
+ db.close if db
110
+ end
111
+ end
112
+
113
+ def reorder(id_prod)
114
+ begin
115
+ db = SQLite3::Database.open('inventory.db')
116
+ current_level = db.execute2 "SELECT Level from stock WHERE Id = :id_prod OR Product = :id_prod", id_prod
117
+ @current_level = Integer(current_level[1][0])
118
+ reorder_level = db.execute2 "SELECT RO_at from stock WHERE Id = :id_prod OR Product = :id_prod", id_prod
119
+ @reorder_level = Integer(reorder_level[1][0])
120
+ if @current_level <= @reorder_level
121
+ replenish = "YES"
122
+ else
123
+ replenish = ''
124
+ end
125
+ db.transaction
126
+ db.execute2 "UPDATE stock SET RO = :replenish WHERE Id = :id_prod OR Product = :id_prod", replenish, id_prod
127
+ db.commit
128
+ puts db.changes.to_s + " change"
129
+ print_out = db.execute2 "SELECT * from stock WHERE Id = :id_prod OR Product = :id_prod", id_prod
130
+ puts
131
+ print_out.each { |p| puts "%3s %-10s -%-3s- [%5s] %-5s %20s" % [p[0],p[1],p[2],p[3],p[4],p[5]]}
132
+ puts
133
+ rescue SQLite3::Exception => e
134
+ puts "error in reorder method " , e
135
+ db.rollback
136
+ ensure
137
+ db.close if db
138
+ end
139
+ @replenish = replenish
140
+ end
141
+ end
metadata ADDED
@@ -0,0 +1,46 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: simple_inventory
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - fookh
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2019-03-20 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: A lightweight inventory system utilizing SQLite3. Allows user to add/delete
14
+ items, subtract/replenish quantities, view inventory contents. sqlite3 based
15
+ email: foo@yetispeak.com
16
+ executables: []
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - lib/simple_inventory.rb
21
+ - lib/simple_inventory_cl.rb
22
+ homepage:
23
+ licenses:
24
+ - MIT
25
+ metadata: {}
26
+ post_install_message:
27
+ rdoc_options: []
28
+ require_paths:
29
+ - lib
30
+ required_ruby_version: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ">="
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
35
+ required_rubygems_version: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ requirements: []
41
+ rubyforge_project:
42
+ rubygems_version: 2.5.2.1
43
+ signing_key:
44
+ specification_version: 4
45
+ summary: a lightweight inventory system
46
+ test_files: []