sales 0.0.3 → 0.0.4
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.
- data/VERSION.yml +1 -1
- data/bin/sale +67 -101
- metadata +1 -1
data/VERSION.yml
CHANGED
data/bin/sale
CHANGED
@@ -29,7 +29,7 @@ USAGE = <<-EGASU
|
|
29
29
|
#{'sale weekly'.green}
|
30
30
|
|
31
31
|
get and present the last daily summary report
|
32
|
-
#{'sale'
|
32
|
+
#{'sale'.green}
|
33
33
|
|
34
34
|
get and present a daily summary report for a date
|
35
35
|
#{'sale.rb YYYYMMDD'.green}
|
@@ -64,7 +64,7 @@ else
|
|
64
64
|
end
|
65
65
|
|
66
66
|
#prepare the java runtime classpath for the Autoingestion.class
|
67
|
-
classpath = File.join(File.dirname(__FILE__), %w[..])
|
67
|
+
@classpath = File.join(File.dirname(__FILE__), %w[..])
|
68
68
|
|
69
69
|
#identifiers
|
70
70
|
PRODUCT_TYPE_IDENTIFIER = {
|
@@ -288,7 +288,57 @@ def compute_and_present(reports)
|
|
288
288
|
puts "\n\n"
|
289
289
|
end
|
290
290
|
|
291
|
+
# Download a report with the autoingest java tool
|
292
|
+
#
|
293
|
+
#
|
294
|
+
def autoingest(username, password, vendorId, options = "Sales Daily Summary")
|
295
|
+
#call the java program and fetch the file
|
296
|
+
e = `java -cp #{@classpath} Autoingestion #{@username} #{@password} #{@vendorId} #{options}`
|
297
|
+
report_file = e.split("\n").first
|
298
|
+
if File.exists? report_file
|
299
|
+
f = `gzip -df #{report_file}`
|
300
|
+
else
|
301
|
+
puts "#{e}\n".red
|
302
|
+
end
|
303
|
+
end
|
304
|
+
|
305
|
+
# Downloads daily reports
|
306
|
+
#
|
307
|
+
#
|
308
|
+
def get_daily_reports
|
309
|
+
# Daily reports are available only for past 14 days, please enter a date within past 14 days.
|
310
|
+
first_date = Date.today
|
311
|
+
(1..14).each do |i|
|
312
|
+
date = (first_date - i).to_s.gsub('-', '')
|
313
|
+
puts "\nGetting Daily Sales Report for #{date}\n"
|
314
|
+
filename = "S_D_#{@vendorId}_#{date}.txt"
|
315
|
+
unless File.exists? filename #download unless there already is a file
|
316
|
+
autoingest(@username, @password, @vendorId, "Sales Daily Summary #{date}")
|
317
|
+
end
|
318
|
+
end # 1..14.each
|
319
|
+
end
|
320
|
+
|
321
|
+
# Downloads weekly reports
|
322
|
+
#
|
323
|
+
#
|
324
|
+
def get_weekly_reports
|
325
|
+
# Weekly reports are available only for past 13 weeks, please enter a weekend date within past 13 weeks.
|
326
|
+
first_date = Date.today
|
327
|
+
(1..13).each do |i| #13 weeks
|
328
|
+
date = (first_date - i*7)
|
329
|
+
day_increment = (0 - date.cwday) % 7
|
330
|
+
day_increment = 7 if day_increment == 0
|
331
|
+
next_sunday = date + day_increment
|
332
|
+
formatted_date = next_sunday.to_s.gsub('-', '')
|
333
|
+
puts "\nGetting Weekly Sales Report for #{formatted_date}\n"
|
334
|
+
filename = "S_W_#{@vendorId}_#{formatted_date}.txt"
|
335
|
+
unless File.exists? filename #download unless there already is a file
|
336
|
+
autoingest(@username, @password, @vendorId, "Sales Weekly Summary #{formatted_date}")
|
337
|
+
end
|
338
|
+
end # 1..13.each
|
339
|
+
end
|
291
340
|
|
341
|
+
#-------------------------------------------------------------------------------------------------------------------------------
|
292
342
|
#begin to show visible light of this program by displaying its name, version and creator
|
293
343
|
puts "\nSales v#{VERSION}".red + " created by Your Headless Standup Programmer http://kitschmaster.com".dark_blue if @beVerbose
|
294
344
|
|
@@ -303,9 +353,15 @@ elsif ARGV[0] == "daily" || ARGV[0] == "weekly"
|
|
303
353
|
#collect the report files
|
304
354
|
dir_filter = ARGV[0] == "daily" ? "D" : "W" #the daily or the weekly files
|
305
355
|
reports = Dir["S_#{dir_filter}_*.txt"].uniq.compact
|
306
|
-
if reports.empty?
|
356
|
+
if reports.empty?
|
357
|
+
#no reports, try downloding them first
|
358
|
+
puts "\nDownloading reports first...".red
|
359
|
+
method("get_#{ARGV[0]}_reports".to_sym).call #dynamically instantiating a method and calling on it
|
360
|
+
reports = Dir["S_#{dir_filter}_*.txt"].uniq.compact #reload reports list
|
361
|
+
end
|
362
|
+
if reports.empty? #recheck
|
307
363
|
#no reports
|
308
|
-
puts "\
|
364
|
+
puts "\nDownload reports first. Use command:".red
|
309
365
|
puts "sale get:#{ARGV[0].split(':').last}\n".green
|
310
366
|
else
|
311
367
|
#compute and present the collected reports
|
@@ -314,116 +370,26 @@ elsif ARGV[0] == "daily" || ARGV[0] == "weekly"
|
|
314
370
|
#-----------------------------------------------------------------------------------------------------------------------------
|
315
371
|
elsif ARGV[0] == "get:daily"
|
316
372
|
#-----------------------------------------------------------------------------------------------------------------------------
|
317
|
-
|
318
|
-
first_date = Date.today
|
319
|
-
(1..14).each do |i|
|
320
|
-
date = (first_date - i).to_s.gsub('-', '')
|
321
|
-
puts "\nGetting Daily Sales Report for #{date}\n"
|
322
|
-
filename = "S_D_#{@vendorId}_#{date}.txt"
|
323
|
-
unless File.exists? filename #download unless there already is a file
|
324
|
-
#call the java program and fetch the file
|
325
|
-
e = `java -cp #{classpath} Autoingestion #{@username} #{@password} #{@vendorId} Sales Daily Summary #{date}`
|
326
|
-
report_file = e.split("\n").first
|
327
|
-
if File.exists? report_file
|
328
|
-
f = `gzip -df #{report_file}`
|
329
|
-
else
|
330
|
-
puts "#{e}\n".red
|
331
|
-
end
|
332
|
-
end
|
333
|
-
end # 1..14.each
|
373
|
+
get_daily_reports
|
334
374
|
#-----------------------------------------------------------------------------------------------------------------------------
|
335
375
|
elsif ARGV[0] == "get:weekly"
|
336
376
|
#-----------------------------------------------------------------------------------------------------------------------------
|
337
|
-
|
338
|
-
first_date = Date.today
|
339
|
-
(1..13).each do |i| #13 weeks
|
340
|
-
date = (first_date - i*7)
|
341
|
-
day_increment = (0 - date.cwday) % 7
|
342
|
-
day_increment = 7 if day_increment == 0
|
343
|
-
next_sunday = date + day_increment
|
344
|
-
formatted_date = next_sunday.to_s.gsub('-', '')
|
345
|
-
puts "\nGetting Weekly Sales Report for #{formatted_date}\n"
|
346
|
-
filename = "S_W_#{@vendorId}_#{formatted_date}.txt"
|
347
|
-
unless File.exists? filename #download unless there already is a file
|
348
|
-
#call the java program and fetch the file
|
349
|
-
e = `java -cp #{classpath} Autoingestion #{@username} #{@password} #{@vendorId} Sales Weekly Summary #{formatted_date}`
|
350
|
-
report_file = e.split("\n").first
|
351
|
-
if File.exists? report_file
|
352
|
-
f = `gzip -df #{report_file}`
|
353
|
-
else
|
354
|
-
puts "#{e}\n".red
|
355
|
-
end
|
356
|
-
end
|
357
|
-
end # 1..13.each
|
377
|
+
get_weekly_reports
|
358
378
|
#-----------------------------------------------------------------------------------------------------------------------------
|
359
379
|
else
|
360
380
|
#-----------------------------------------------------------------------------------------------------------------------------
|
361
381
|
# no argument or date in format YYYYMMDD
|
362
|
-
#get sales report for date
|
382
|
+
#get sales report for default date
|
363
383
|
@date = ARGV[0]
|
364
384
|
date = (Date.today - 1).to_s.gsub('-', '')
|
365
385
|
date = @date if ARGV[0]
|
366
386
|
puts "\nDaily Sales Report for #{date}\n"
|
367
387
|
filename = "S_D_#{@vendorId}_#{date}.txt"
|
368
388
|
unless File.exists? filename #download unless there already is a file
|
369
|
-
|
370
|
-
e = `java -cp #{classpath} Autoingestion #{@username} #{@password} #{@vendorId} Sales Daily Summary #{date}`
|
371
|
-
report_file = e.split("\n").first
|
372
|
-
if File.exists? report_file
|
373
|
-
f = `gzip -df #{report_file}`
|
374
|
-
else
|
375
|
-
puts "#{e}\n".red
|
376
|
-
end
|
389
|
+
autoingest(@username, @password, @vendorId, "Sales Daily Summary #{date}")
|
377
390
|
end
|
391
|
+
#compute and present the report
|
378
392
|
compute_and_present([filename])
|
379
|
-
=begin
|
380
|
-
if File.exists? filename #only if there is data
|
381
|
-
#calculate totals
|
382
|
-
report_data = File.open(filename, "rb").read
|
383
|
-
report = parse(report_data)
|
384
|
-
apps = {}
|
385
|
-
total_payed_units = 0
|
386
|
-
total_inapp_units = 0
|
387
|
-
total_free_units = 0
|
388
|
-
total_updated_units = 0
|
389
|
-
report.each do |item|
|
390
|
-
sku = item[:sku] #group data by app sku
|
391
|
-
if apps.has_key? sku #app is already cached
|
392
|
-
app = apps[sku]
|
393
|
-
else #initially insert app
|
394
|
-
app = {:sku=>sku, :title=>item[:title], :sold_units=>0, :updated_units=>0}
|
395
|
-
apps[sku] = app
|
396
|
-
end
|
397
|
-
#count units
|
398
|
-
if SALE_IDENTS.include? item[:product_type_id] #count sales
|
399
|
-
app[:sold_units] += item[:units]
|
400
|
-
if item[:customer_price]==0 #a free app
|
401
|
-
total_free_units += item[:units]
|
402
|
-
else
|
403
|
-
total_payed_units += item[:units]
|
404
|
-
end
|
405
|
-
elsif INAPP_SALE_IDENTS.include? item[:product_type_id]
|
406
|
-
app[:sold_units] += item[:units]
|
407
|
-
total_inapp_units += item[:units]
|
408
|
-
elsif UPDATE_IDENTS.include? item[:product_type_id] #count updates
|
409
|
-
app[:updated_units] += item[:units]
|
410
|
-
total_updated_units += item[:units]
|
411
|
-
end
|
412
|
-
end
|
413
|
-
|
414
|
-
#report
|
415
|
-
puts "\n" + "Product".ljust(40).blue + ": " +"Downloads".green + " / " + "Updates".green
|
416
|
-
puts "____________________________________________________________".yellow
|
417
|
-
apps.each do |app_sku, app|
|
418
|
-
puts "#{app[:title].ljust(40).blue}: #{app[:sold_units].to_s.ljust(10).green} / #{app[:updated_units].to_s.rjust(7).dark_green}"
|
419
|
-
end
|
420
|
-
puts "____________________________________________________________".yellow
|
421
|
-
puts "#{'InApp Purchases'.ljust(40).green}: #{total_inapp_units}"
|
422
|
-
puts "#{'Payed Downloads'.ljust(40).green}: #{total_payed_units}"
|
423
|
-
puts "#{'Free Downloads'.ljust(40).dark_green}: #{total_free_units}"
|
424
|
-
puts "#{'Updates'.ljust(40).dark_green}: #{total_updated_units}"
|
425
|
-
puts "\n"
|
426
|
-
end
|
427
|
-
=end
|
428
393
|
#-----------------------------------------------------------------------------------------------------------------------------
|
429
|
-
end
|
394
|
+
end
|
395
|
+
#-------------------------------------------------------------------------------------------------------------------------------
|