Guest User

Untitled

a guest
Oct 24th, 2017
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.34 KB | None | 0 0
  1. #!/usr/bin/python2.6
  2. # -*- coding: utf-8 -*-
  3.  
  4. # import from Standard Library
  5. import os, sys, getpass
  6. import datetime
  7. from decimal import *
  8. import itertools
  9.  
  10. # import from MySQLdb
  11. import MySQLdb
  12.  
  13. # import form itools
  14. import itools.csv
  15. from itools.handlers import RWDatabase
  16.  
  17. # import from matplotlib
  18. import matplotlib.pyplot as plt
  19. import matplotlib.dates as mdates
  20.  
  21.  
  22. # connect to the MySQL server and select the databases
  23. dbhost = 'localhost'
  24. dbuser = 'user'
  25. from_db = 'boutique'
  26.  
  27. if os.environ.has_key('MYSQL_PASSWD'):
  28. dbpasswd = os.environ['MYSQL_PASSWD']
  29. else:
  30. dbpasswd = getpass.getpass("Enter MySQL password: ")
  31. try:
  32. org = MySQLdb.connect (host = dbhost, user = dbuser, passwd = dbpasswd)
  33.  
  34. except MySQLdb.Error, e:
  35. print "Error %d: %s" % (e.args[0], e.args[1])
  36. sys.exit (1)
  37.  
  38. main = org.cursor()
  39.  
  40. # select the database and set the sql query
  41. main.execute('USE %s' % from_db)
  42. daily_total_orders = "SELECT COUNT(DISTINCT o.id_order) as orders, SUM(o.total_paid / c.conversion_rate) as ttc, \
  43. ((SUM(o.total_products) - SUM(o.total_discounts)) / c.conversion_rate) as ht \
  44. FROM ps_orders o INNER JOIN ps_currency c ON o.id_currency = c.id_currency \
  45. WHERE o.valid = 1 AND o.invoice_date BETWEEN (%s) AND (%s)"
  46.  
  47. # my date range
  48. total_days = 30
  49. today = datetime.datetime.today()
  50. date_generator = (today - datetime.timedelta(days=i) for i in itertools.count())
  51. dates = itertools.islice(date_generator, total_days)
  52. x = (list(dates))
  53. y = []
  54. z = []
  55. commission = []
  56. daily_total_clicks = []
  57. charges = []
  58. for date in x:
  59. date = str(date.isoformat(' ').split(' ')[0])
  60. main.execute(daily_total_orders, (date + ' 00:00:00', date + ' 23:59:59'))
  61. results = main.fetchall()
  62. try:
  63. for row in results:
  64. if row[2] != None:
  65. y.append(row[1])
  66. z.append(row[2])
  67. print type(row[2]), row[2]
  68. commission.append(int(row[2])*0.2)
  69. else:
  70. commission.append(int(0))
  71. y.append(int(0))
  72. z.append(int(0))
  73. except MySQLdb.Error, e:
  74. print "Error %s" % e
  75. sys.exit (1)
  76. print commission
  77. # close the database connection
  78. main.close()
  79.  
  80. # pull the Google AdWords data and format
  81. rw_database = RWDatabase()
  82. adwords = rw_database.get_handler('/Users/khinester/Desktop/account_activities_201105_201106.csv')
  83. for row in adwords.get_rows():
  84. if row[2] != '':
  85. # clean up the CSV by removing 'Acount Activity'
  86. description, clicks = row[1].split(':')
  87. daily_clicks = clicks.split(' ')
  88. daily_total_clicks.append(daily_clicks[1])
  89. charges.append(Decimal(row[2]))
  90. # get the totals
  91. total_income = sum(y)
  92. total_adwords = sum(charges)
  93. total_commission = sum(commission)
  94. # plot the data
  95. fig = plt.figure()
  96. fig.suptitle('Revenue over Time', fontsize=12, fontweight='bold')
  97. ax = fig.add_subplot(111)
  98. ax.set_title('for the last %s days' % total_days)
  99. ax.set_xlabel('dates')
  100. ax.set_ylabel('daily total')
  101. plt.plot(x,y,'-o',x,z,'-o',x,charges,'-o', ms=5, lw=2, alpha=0.7)
  102. plt.plot(x,commission, 'k:', color = 'r')
  103. plt.legend(('Income - %s GBP' % total_income, 'Discounts', 'Google AdWords - %s GBP'% total_adwords, 'Commission - %s GBP' % total_commission),
  104. 'upper right', shadow=True)
  105. plt.show()
Add Comment
Please, Sign In to add comment