rawbotz 0.1.5 → 0.2.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +15 -5
- data/Gemfile +2 -0
- data/README.md +60 -6
- data/Rakefile +3 -2
- data/agpl-3.0.txt +661 -0
- data/exe/bcrypt_pw +10 -0
- data/exe/rawbotz_abort_orders +28 -0
- data/exe/rawbotz_process_order_queue +12 -8
- data/exe/rawbotz_stock_update +10 -1
- data/exe/rawbotz_update_local_products +11 -3
- data/exe/rawbotz_update_remote_products +27 -4
- data/lib/rawbotz.rb +13 -5
- data/lib/rawbotz/app.rb +36 -2
- data/lib/rawbotz/cli/order_result_table.rb +13 -0
- data/lib/rawbotz/helpers/format_helper.rb +14 -0
- data/lib/rawbotz/helpers/icon_helper.rb +108 -22
- data/lib/rawbotz/helpers/order_item_color_helper.rb +17 -0
- data/lib/rawbotz/helpers/resource_link_helper.rb +3 -0
- data/lib/rawbotz/mail_template.rb +42 -7
- data/lib/rawbotz/models/sales.rb +21 -0
- data/lib/rawbotz/models/stock.rb +25 -0
- data/lib/rawbotz/models/stock_product.rb +146 -0
- data/lib/rawbotz/models/stock_product_factory.rb +64 -0
- data/lib/rawbotz/processors/order_linker.rb +50 -0
- data/lib/rawbotz/{order_processor.rb → processors/order_processor.rb} +14 -3
- data/lib/rawbotz/processors/organic_product_deliveries_csv.rb +47 -0
- data/lib/rawbotz/{product_updater.rb → processors/product_updater.rb} +71 -6
- data/lib/rawbotz/processors/stock_processor.rb +67 -0
- data/lib/rawbotz/public/rawbotz.css +35 -1
- data/lib/rawbotz/public/rawbotz.js +0 -1
- data/lib/rawbotz/remote_shop.rb +3 -0
- data/lib/rawbotz/routes.rb +3 -0
- data/lib/rawbotz/routes/non_remote_orders.rb +129 -29
- data/lib/rawbotz/routes/orders.rb +55 -4
- data/lib/rawbotz/routes/orders/stock.rb +75 -0
- data/lib/rawbotz/routes/product_links.rb +1 -1
- data/lib/rawbotz/routes/products.rb +19 -22
- data/lib/rawbotz/routes/remote_shop.rb +1 -1
- data/lib/rawbotz/routes/stock.rb +58 -0
- data/lib/rawbotz/routes/suppliers.rb +9 -4
- data/lib/rawbotz/sales_data.rb +13 -0
- data/lib/rawbotz/version.rb +1 -1
- data/lib/rawbotz/views/_hide_unhide_button.haml +1 -1
- data/lib/rawbotz/views/_menu.haml +9 -0
- data/lib/rawbotz/views/index.haml +1 -1
- data/lib/rawbotz/views/layout.haml +0 -1
- data/lib/rawbotz/views/order/_head.haml +64 -19
- data/lib/rawbotz/views/order/_item_table.haml +19 -3
- data/lib/rawbotz/views/order/_order_actions.haml +26 -0
- data/lib/rawbotz/views/order/link_to_remote.haml +30 -0
- data/lib/rawbotz/views/order/non_remote.haml +120 -26
- data/lib/rawbotz/views/order/packlist.haml +62 -5
- data/lib/rawbotz/views/order/packlist.pdf.haml +35 -0
- data/lib/rawbotz/views/order/stock.haml +116 -0
- data/lib/rawbotz/views/order/view.haml +41 -21
- data/lib/rawbotz/views/orders/_order_table.haml +82 -0
- data/lib/rawbotz/views/orders/index.haml +41 -28
- data/lib/rawbotz/views/orders/menu.haml +2 -2
- data/lib/rawbotz/views/orders/non_remotes.haml +14 -3
- data/lib/rawbotz/views/pdf_layout.haml +44 -0
- data/lib/rawbotz/views/product/view.haml +64 -11
- data/lib/rawbotz/views/products/index.haml +1 -1
- data/lib/rawbotz/views/products/table.haml +5 -1
- data/lib/rawbotz/views/remote_cart/index.haml +10 -0
- data/lib/rawbotz/views/remote_order/view.haml +6 -4
- data/lib/rawbotz/views/remote_orders/index.haml +16 -13
- data/lib/rawbotz/views/stock/index.haml +119 -0
- data/lib/rawbotz/views/stock/menu.haml +20 -0
- data/lib/rawbotz/views/stock_product/_value_table_line.haml +22 -0
- data/lib/rawbotz/views/stock_product/value_table.haml +28 -0
- data/lib/rawbotz/views/stockexplorer/stockexplorer.haml +157 -0
- data/lib/rawbotz/views/supplier/orders/table.haml +26 -0
- data/lib/rawbotz/views/supplier/view.haml +56 -10
- data/rawbotz.gemspec +13 -9
- metadata +86 -17
- data/lib/rawbotz/views/order/new.haml +0 -22
data/exe/bcrypt_pw
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "rawbotz"
|
4
|
+
require "rawbotz/option_parser"
|
5
|
+
|
6
|
+
optparse = Rawbotz::OptionParser.new do |opts, options|
|
7
|
+
opts.banner = "Usage: #{$PROGRAM_NAME} [OPTIONS]"
|
8
|
+
opts.separator ""
|
9
|
+
end
|
10
|
+
|
11
|
+
optparse.parse!
|
12
|
+
options = optparse.options
|
13
|
+
|
14
|
+
logger = Logger.new(STDOUT)
|
15
|
+
logger.level = optparse.options[:verbose] ? Logger::DEBUG : Logger::INFO
|
16
|
+
|
17
|
+
logger.debug "#{$PROGRAM_NAME} #{Rawbotz::VERSION}"
|
18
|
+
|
19
|
+
logger.info("Setting all orders in processing state in 'aborted' state")
|
20
|
+
|
21
|
+
orders = RawgentoModels::Order.where(state: 'processing')
|
22
|
+
logger.info("Found #{orders.count} orders")
|
23
|
+
|
24
|
+
orders.update_all(state: 'aborted')
|
25
|
+
|
26
|
+
logger.info("done")
|
27
|
+
|
28
|
+
exit 0
|
@@ -8,7 +8,6 @@ require "rawbotz"
|
|
8
8
|
require 'rawbotz/option_parser'
|
9
9
|
require 'rawbotz/cli/order_result_table'
|
10
10
|
|
11
|
-
|
12
11
|
optparse = Rawbotz::OptionParser.new do |opts, options|
|
13
12
|
opts.banner = "Usage: #{$PROGRAM_NAME} [OPTIONS] ORDER_ID"
|
14
13
|
opts.separator ""
|
@@ -22,6 +21,8 @@ options = optparse.options
|
|
22
21
|
|
23
22
|
include RawgentoModels
|
24
23
|
|
24
|
+
STDOUT.sync = true # helps in shell redirection logging situations
|
25
|
+
|
25
26
|
def main options
|
26
27
|
logger = Logger.new(STDOUT)
|
27
28
|
logger.level = options[:verbose] ? Logger::DEBUG : Logger::INFO
|
@@ -49,13 +50,14 @@ def main options
|
|
49
50
|
|
50
51
|
logger.info ("#{order.order_items.processible.count} products to order.")
|
51
52
|
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
53
|
+
begin
|
54
|
+
order_processor = Rawbotz::OrderProcessor.new(order, logger)
|
55
|
+
order_processor.process!
|
56
|
+
order.update(state: :ordered)
|
57
|
+
rescue
|
58
|
+
logger.error("Hit error during order")
|
59
|
+
order.update(state: :error)
|
60
|
+
end
|
59
61
|
|
60
62
|
logger.info("Finished order")
|
61
63
|
|
@@ -66,6 +68,8 @@ def main options
|
|
66
68
|
diff_table = Rawbotz::CLI::OrderResultTable.tables diffs
|
67
69
|
puts diff_table
|
68
70
|
|
71
|
+
order.update(order_result: diff_table)
|
72
|
+
|
69
73
|
if options[:mail]
|
70
74
|
logger.debug("Sending mail")
|
71
75
|
mail = Rawbotz::mail("rawbotz order finished",
|
data/exe/rawbotz_stock_update
CHANGED
@@ -22,6 +22,10 @@ optparse = OptionParser.new do |opts|
|
|
22
22
|
options[:config] = c
|
23
23
|
end
|
24
24
|
|
25
|
+
opts.on("-f", "--fake VALUE", 'Fake value. If quantity is higher than 0.9*VALUE, subtract VALUE.') do |f|
|
26
|
+
options[:fake_value] = f
|
27
|
+
end
|
28
|
+
|
25
29
|
opts.separator ""
|
26
30
|
opts.separator "Output options"
|
27
31
|
opts.on("-v", "--verbose", 'print debug output (WARNING: including PASSWORD)') do |v|
|
@@ -73,7 +77,12 @@ def main options
|
|
73
77
|
if product.nil?
|
74
78
|
logger.info("No such product #{s.product_id}")
|
75
79
|
else
|
76
|
-
|
80
|
+
qty = s.qty
|
81
|
+
if options[:fake_value].to_i > 0 && options[:fake_value].to_i * 0.9 < s.qty.to_i
|
82
|
+
qty = qty - options[:fake_value].to_i
|
83
|
+
logger.info("Fake value (#{options[:fake_value]}) applies for product_id #{product.product_id}: #{s.qty}")
|
84
|
+
end
|
85
|
+
product.stock_items.create(qty: qty, date: now)
|
77
86
|
logger.info("Updated stock for #{s.product_id}")
|
78
87
|
end
|
79
88
|
end
|
@@ -11,6 +11,10 @@ optparse = Rawbotz::OptionParser.new do |opts, options|
|
|
11
11
|
"send mail with result") do |v|
|
12
12
|
options[:mail] = v
|
13
13
|
end
|
14
|
+
opts.on("-d", "--[no-]dry-run",
|
15
|
+
"simulate, log potential changes but do not save them") do |d|
|
16
|
+
options[:dry_run] = d
|
17
|
+
end
|
14
18
|
end
|
15
19
|
optparse.parse!
|
16
20
|
options = optparse.options
|
@@ -34,7 +38,7 @@ end
|
|
34
38
|
product_count = RawgentoModels::LocalProduct.unscoped.count
|
35
39
|
|
36
40
|
updater = Rawbotz::ProductUpdater.new logger
|
37
|
-
updater.sync
|
41
|
+
updater.sync(options[:dry_run])
|
38
42
|
|
39
43
|
logger.info("Finished updating local products.")
|
40
44
|
|
@@ -42,8 +46,12 @@ logger.info("Found #{RawgentoModels::LocalProduct.unscoped.count - product_count
|
|
42
46
|
|
43
47
|
if options[:mail]
|
44
48
|
logger.debug("Sending mail")
|
45
|
-
|
46
|
-
|
49
|
+
if updater.change_text.present?
|
50
|
+
Rawbotz::mail("rawbotz local product update",
|
51
|
+
"Found #{RawgentoModels::LocalProduct.unscoped.count - product_count} new local products\n\nOther changes:\n#{updater.change_text}")
|
52
|
+
else
|
53
|
+
Rawbotz::mail("rawbotz local product update: no changes", "Nothing changed in magento")
|
54
|
+
end
|
47
55
|
end
|
48
56
|
|
49
57
|
exit 0
|
@@ -5,6 +5,7 @@ require "rawbotz"
|
|
5
5
|
require 'magento_remote'
|
6
6
|
|
7
7
|
require 'optparse'
|
8
|
+
STDOUT.sync = true
|
8
9
|
|
9
10
|
options = { sleep_time: 1,
|
10
11
|
start_pid: 0,
|
@@ -29,6 +30,7 @@ optparse = OptionParser.new do |opts|
|
|
29
30
|
opts.separator "Configuration file (remote shop info, local db info)"
|
30
31
|
opts.on("-c", "--config FILE", 'file path to YAML config file.') do |c|
|
31
32
|
options[:config] = c
|
33
|
+
Rawbotz.conf_file_path = c
|
32
34
|
end
|
33
35
|
opts.separator ""
|
34
36
|
opts.separator "Parsing/scraping options"
|
@@ -52,9 +54,9 @@ optparse = OptionParser.new do |opts|
|
|
52
54
|
"try LIMIT products #{options.print_default(:limit)}") do |v|
|
53
55
|
options[:limit] = v
|
54
56
|
end
|
55
|
-
opts.on("-n", "--check-new",
|
57
|
+
opts.on("-n", "--[no-]check-new",
|
56
58
|
"check only for new products") do |v|
|
57
|
-
options[:check_new] =
|
59
|
+
options[:check_new] = v
|
58
60
|
end
|
59
61
|
|
60
62
|
opts.separator ""
|
@@ -77,6 +79,8 @@ optparse = OptionParser.new do |opts|
|
|
77
79
|
end
|
78
80
|
optparse.parse!
|
79
81
|
|
82
|
+
STDOUT.sync = true
|
83
|
+
|
80
84
|
if options[:check_new] && options[:start_pid] != 0
|
81
85
|
STDERR.puts "Cannot define both check-new and start-pid options"
|
82
86
|
exit 1
|
@@ -91,6 +95,7 @@ def main options
|
|
91
95
|
|
92
96
|
mech_config = (YAML.load_file options[:config])["remote_shop"]
|
93
97
|
logger.debug(mech_config)
|
98
|
+
|
94
99
|
mech = MagentoMech.from_config(mech_config)
|
95
100
|
mech.log_to! logger
|
96
101
|
|
@@ -104,6 +109,7 @@ def main options
|
|
104
109
|
number_dead = 0
|
105
110
|
product_count = RawgentoModels::RemoteProduct.count
|
106
111
|
|
112
|
+
changes = []
|
107
113
|
|
108
114
|
current_pid = options[:start_pid]
|
109
115
|
if options[:check_new]
|
@@ -120,8 +126,24 @@ def main options
|
|
120
126
|
p = mech.scrape_products(current_pid, 1, options[:sleep_time])
|
121
127
|
if !p.empty?
|
122
128
|
logger.info "Found #{p[0].inspect}"
|
129
|
+
|
123
130
|
product_db = RawgentoModels::RemoteProduct.find_or_initialize_by(product_id: p[0][1].to_i, supplier: supplier)
|
124
|
-
product_db.
|
131
|
+
product_db.name = p[0][0]
|
132
|
+
product_db.product_id = p[0][1].to_i
|
133
|
+
product_db.supplier = supplier
|
134
|
+
|
135
|
+
if product_db.persisted?
|
136
|
+
logger.debug "Product #{product_db.product_id} already existed"
|
137
|
+
else
|
138
|
+
logger.debug "Product #{product_db.product_id} is new!"
|
139
|
+
end
|
140
|
+
|
141
|
+
if product_db.changed?
|
142
|
+
change_line = "Changes for #{product_db.product_id} (#{product_db.name}): #{product_db.changes}"
|
143
|
+
logger.info(change_line)
|
144
|
+
changes << change_line
|
145
|
+
end
|
146
|
+
|
125
147
|
product_db.save!
|
126
148
|
number_dead = 0
|
127
149
|
else
|
@@ -151,7 +173,8 @@ def main options
|
|
151
173
|
if options[:mail]
|
152
174
|
logger.debug("Sending mail")
|
153
175
|
Rawbotz::mail("rawbotz remote product update",
|
154
|
-
"Found #{RawgentoModels::RemoteProduct.count - product_count} remote products"
|
176
|
+
"Found #{RawgentoModels::RemoteProduct.count - product_count} new remote products\n"\
|
177
|
+
"#{changes.join('\n')}")
|
155
178
|
end
|
156
179
|
end
|
157
180
|
|
data/lib/rawbotz.rb
CHANGED
@@ -1,15 +1,23 @@
|
|
1
|
+
require 'rawgento_models'
|
2
|
+
require 'rawgento_db'
|
3
|
+
|
1
4
|
require "rawbotz/version"
|
2
5
|
require "rawbotz/remote_shop"
|
3
6
|
require "rawbotz/local_shop"
|
4
|
-
require "rawbotz/
|
7
|
+
require "rawbotz/processors/stock_processor"
|
8
|
+
require "rawbotz/processors/order_processor"
|
9
|
+
require "rawbotz/processors/order_linker"
|
10
|
+
require "rawbotz/processors/organic_product_deliveries_csv"
|
5
11
|
require "rawbotz/datapolate"
|
12
|
+
require "rawbotz/sales_data"
|
13
|
+
require "rawbotz/models/sales"
|
14
|
+
require "rawbotz/models/stock"
|
15
|
+
require "rawbotz/models/stock_product"
|
16
|
+
require "rawbotz/models/stock_product_factory"
|
6
17
|
require "rawbotz/chart_month_dataset"
|
7
|
-
require "rawbotz/product_updater"
|
18
|
+
require "rawbotz/processors/product_updater"
|
8
19
|
require "rawbotz/mail_template"
|
9
20
|
|
10
|
-
require 'rawgento_models'
|
11
|
-
require 'rawgento_db'
|
12
|
-
|
13
21
|
require "rawbotz/routes"
|
14
22
|
|
15
23
|
require 'ostruct'
|
data/lib/rawbotz/app.rb
CHANGED
@@ -4,9 +4,13 @@ require 'action_view' # Workaround https://github.com/haml/haml/issues/695
|
|
4
4
|
require 'haml'
|
5
5
|
require 'rawbotz/helpers/icon_helper'
|
6
6
|
require 'rawbotz/helpers/flash_helper'
|
7
|
+
require 'rawbotz/helpers/format_helper'
|
7
8
|
require 'rawbotz/helpers/resource_link_helper'
|
9
|
+
require 'rawbotz/helpers/order_item_color_helper'
|
8
10
|
require 'tilt/haml'
|
9
11
|
|
12
|
+
require 'bcrypt'
|
13
|
+
|
10
14
|
class RawbotzApp < Sinatra::Base
|
11
15
|
include RawgentoModels
|
12
16
|
|
@@ -29,24 +33,44 @@ class RawbotzApp < Sinatra::Base
|
|
29
33
|
set :supplier, Supplier.find_by(name:
|
30
34
|
conf["supplier_name"])
|
31
35
|
set :conf, conf
|
36
|
+
|
37
|
+
if conf["authentication"] && !conf["authentication"].empty?
|
38
|
+
use Rack::Auth::Basic, "Protected Area, no robots allowed" do |username, password|
|
39
|
+
if username.nil? || password.nil? || conf["authentication"][username].nil?
|
40
|
+
nil
|
41
|
+
else
|
42
|
+
BCrypt::Password.new(conf["authentication"][username]) == password
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
32
46
|
end
|
33
47
|
|
34
48
|
helpers do ; end
|
35
49
|
helpers Rawbotz::Helpers::IconHelper
|
36
50
|
helpers Rawbotz::Helpers::FlashHelper
|
51
|
+
helpers Rawbotz::Helpers::FormatHelper
|
37
52
|
helpers Rawbotz::Helpers::ResourceLinkHelper
|
53
|
+
helpers Rawbotz::Helpers::OrderItemColorHelper
|
38
54
|
|
39
55
|
get '/' do
|
40
56
|
haml :index
|
41
57
|
end
|
42
58
|
|
59
|
+
# routes:
|
43
60
|
# get '/orders'
|
44
61
|
# get '/order/new'
|
45
62
|
# get '/order/:id'
|
46
63
|
# post '/order/:id/'
|
47
64
|
# get '/order/:id/packlist'
|
65
|
+
# get '/order/:id/packlist/pdf'
|
48
66
|
register Rawbotz::RawbotzApp::Routing::Orders
|
49
67
|
|
68
|
+
# get '/order/:id/stock
|
69
|
+
# post '/order/:id/stock'
|
70
|
+
# get '/order/:id/link_to_remote'
|
71
|
+
# post '/order/:id/link_to_remote'
|
72
|
+
register Rawbotz::RawbotzApp::Routing::Orders::Stock
|
73
|
+
|
50
74
|
# get '/products'
|
51
75
|
# post '/products/search'
|
52
76
|
# get '/product/:id'
|
@@ -74,9 +98,19 @@ class RawbotzApp < Sinatra::Base
|
|
74
98
|
# post '/supplier/:id'
|
75
99
|
register Rawbotz::RawbotzApp::Routing::Suppliers
|
76
100
|
|
101
|
+
# get '/suppliers/orders'
|
102
|
+
# get '/suppliers/orders.csv'
|
103
|
+
register Rawbotz::RawbotzApp::Routing::Suppliers::Orders
|
104
|
+
|
105
|
+
# get '/stock'
|
106
|
+
# get '/stock/alerts'
|
107
|
+
# get '/stock/warnings'
|
108
|
+
register Rawbotz::RawbotzApp::Routing::Stock
|
109
|
+
|
77
110
|
# get '/orders/non_remote'
|
78
|
-
# get '/order/non_remote/:
|
79
|
-
# post '/order/non_remote/:
|
111
|
+
# get '/order/non_remote/:order_id'
|
112
|
+
# post '/order/non_remote/:order_id'
|
113
|
+
# get '/order/non_remote/:supplier_id/new'
|
80
114
|
register Rawbotz::RawbotzApp::Routing::NonRemoteOrders
|
81
115
|
|
82
116
|
get '/maintenance' do
|
@@ -2,6 +2,17 @@ module Rawbotz::CLI
|
|
2
2
|
module OrderResultTable
|
3
3
|
def self.tables diffs
|
4
4
|
out = ""
|
5
|
+
if !diffs[:error].empty?
|
6
|
+
error_items = diffs[:error].map do |p|
|
7
|
+
[p[0][0..35]]
|
8
|
+
end
|
9
|
+
out << Terminal::Table.new(title: "With error",
|
10
|
+
headings: ['Product'],
|
11
|
+
rows: error_items,
|
12
|
+
style: {width: 60}).to_s
|
13
|
+
out << "\n\n"
|
14
|
+
end
|
15
|
+
|
5
16
|
if !diffs[:perfect].empty?
|
6
17
|
perfect_items = diffs[:perfect].map do |p, q|
|
7
18
|
[p.local_product.remote_product.name[0..35], q]
|
@@ -55,6 +66,8 @@ module Rawbotz::CLI
|
|
55
66
|
rows: extra_items,
|
56
67
|
style: {width:60}).to_s
|
57
68
|
end
|
69
|
+
|
70
|
+
out
|
58
71
|
end
|
59
72
|
end
|
60
73
|
end
|
@@ -1,38 +1,124 @@
|
|
1
1
|
module Rawbotz
|
2
2
|
module Helpers
|
3
3
|
module IconHelper
|
4
|
-
def
|
5
|
-
|
4
|
+
def add_icon tooltip_text: nil
|
5
|
+
icon "plus", tooltip_text: tooltip_text
|
6
6
|
end
|
7
|
-
def
|
8
|
-
|
7
|
+
def delete_icon tooltip_text: nil
|
8
|
+
icon "remove", tooltip_text: tooltip_text
|
9
9
|
end
|
10
|
-
def
|
11
|
-
|
10
|
+
def error_icon tooltip_text: nil
|
11
|
+
icon "flash", tooltip_text: tooltip_text
|
12
12
|
end
|
13
|
-
def
|
14
|
-
|
13
|
+
def external_link_icon tooltip_text: nil
|
14
|
+
icon "external-link", tooltip_text: tooltip_text
|
15
15
|
end
|
16
|
-
def
|
17
|
-
|
16
|
+
def false_icon tooltip_text: nil
|
17
|
+
icon "close", tooltip_text: tooltip_text
|
18
18
|
end
|
19
|
-
def
|
20
|
-
|
19
|
+
def index_icon tooltip_text: nil
|
20
|
+
icon "th-list", tooltip_text: tooltip_text
|
21
21
|
end
|
22
|
-
def
|
23
|
-
|
22
|
+
def info_icon tooltip_text: nil
|
23
|
+
icon "info-circle", tooltip_text: tooltip_text
|
24
24
|
end
|
25
|
-
def
|
26
|
-
|
25
|
+
def link_icon tooltip_text: nil
|
26
|
+
icon "info-link", tooltip_text: tooltip_text
|
27
27
|
end
|
28
|
-
def
|
29
|
-
|
28
|
+
def mail_icon tooltip_text: nil
|
29
|
+
icon "envelope-o", tooltip_text: tooltip_text
|
30
30
|
end
|
31
|
-
def
|
32
|
-
|
31
|
+
def order_icon tooltip_text: nil
|
32
|
+
icon "shopping-cart", tooltip_text: tooltip_text
|
33
33
|
end
|
34
|
-
def
|
35
|
-
|
34
|
+
def pack_icon tooltip_text: nil
|
35
|
+
icon "square-o", tooltip_text: tooltip_text
|
36
|
+
end
|
37
|
+
def packlist_icon tooltip_text: nil
|
38
|
+
icon "paperclip", tooltip_text: tooltip_text
|
39
|
+
end
|
40
|
+
def packsize_icon tooltip_text: nil
|
41
|
+
icon "cube", tooltip_text: tooltip_text
|
42
|
+
end
|
43
|
+
def product_icon tooltip_text: nil
|
44
|
+
icon "cube", tooltip_text: tooltip_text
|
45
|
+
end
|
46
|
+
def products_icon tooltip_text: nil
|
47
|
+
icon "cubes", tooltip_text: tooltip_text
|
48
|
+
end
|
49
|
+
def remote_icon tooltip_text: nil
|
50
|
+
icon "globe", tooltip_text: tooltip_text
|
51
|
+
end
|
52
|
+
def sales_icon tooltip_text: nil
|
53
|
+
icon "shopping-cart", tooltip_text: tooltip_text
|
54
|
+
end
|
55
|
+
def save_icon tooltip_text: nil
|
56
|
+
icon "envelope", tooltip_text: tooltip_text
|
57
|
+
end
|
58
|
+
def settings_icon tooltip_text: nil
|
59
|
+
icon "wrench", tooltip_text: tooltip_text
|
60
|
+
end
|
61
|
+
def shelve_icon tooltip_text: nil
|
62
|
+
icon "map-signs", tooltip_text: tooltip_text
|
63
|
+
end
|
64
|
+
def stock_empty_icon tooltip_text: nil
|
65
|
+
icon "battery-0", tooltip_text: tooltip_text
|
66
|
+
end
|
67
|
+
def stock_icon tooltip_text: nil
|
68
|
+
icon "battery-2", tooltip_text: tooltip_text
|
69
|
+
end
|
70
|
+
def stock_full_icon tooltip_text: nil
|
71
|
+
icon "battery-4", tooltip_text: tooltip_text
|
72
|
+
end
|
73
|
+
def success_icon tooltip_text: nil
|
74
|
+
icon "smile-o", tooltip_text: tooltip_text
|
75
|
+
end
|
76
|
+
def supplier_icon tooltip_text: nil
|
77
|
+
icon "truck", tooltip_text: tooltip_text
|
78
|
+
end
|
79
|
+
def true_icon tooltip_text: nil
|
80
|
+
icon "check-circle-o", tooltip_text: tooltip_text
|
81
|
+
end
|
82
|
+
def view_icon tooltip_text: nil
|
83
|
+
icon "eye", tooltip_text: tooltip_text
|
84
|
+
end
|
85
|
+
def warning_icon tooltip_text: nil
|
86
|
+
icon "warning", tooltip_text: tooltip_text
|
87
|
+
end
|
88
|
+
|
89
|
+
def bool_icon attr
|
90
|
+
if attr
|
91
|
+
true_icon
|
92
|
+
else
|
93
|
+
false_icon
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
def order_state_icon order
|
98
|
+
case order.state
|
99
|
+
when 'new'
|
100
|
+
icon "star"
|
101
|
+
when 'mailed'
|
102
|
+
icon "envelope-o"
|
103
|
+
when 'ordered'
|
104
|
+
icon "arrow-right"
|
105
|
+
when 'deleted'
|
106
|
+
icon "remove"
|
107
|
+
when 'stocked'
|
108
|
+
icon "thumbs-o-up"
|
109
|
+
else
|
110
|
+
icon "question"
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
private
|
115
|
+
def icon fa_name, tooltip_text: nil
|
116
|
+
"<i class=\"fa fa-#{fa_name}\"%s></i>" % tooltip(tooltip_text)
|
117
|
+
end
|
118
|
+
def tooltip tooltip_text
|
119
|
+
if tooltip_text
|
120
|
+
" title=\"#{tooltip_text}\""
|
121
|
+
end
|
36
122
|
end
|
37
123
|
end
|
38
124
|
end
|