__init__.py 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271
  1. # vim:fileencoding=utf-8
  2. # Plugin velivery_relatorios para matebot: Faz relatórios, exibe informações e subsidia estatísticas com os dados do Velivery
  3. # Copyleft (C) 2018 Desobediente Civil, Velivery
  4. # This program is free software: you can redistribute it and/or modify
  5. # it under the terms of the GNU General Public License as published by
  6. # the Free Software Foundation, either version 3 of the License, or
  7. # (at your option) any later version.
  8. # This program is distributed in the hope that it will be useful,
  9. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11. # GNU General Public License for more details.
  12. # You should have received a copy of the GNU General Public License
  13. # along with this program. If not, see <http://www.gnu.org/licenses/>.
  14. ### Imports
  15. import datetime, inspect
  16. from plugins.velivery_pedidos import busca_pedidos, db_timezone, db_datetime
  17. from plugins.velivery_relatorios.dre import dre_csv
  18. from plugins.velivery_relatorios.uni import ltv,recompra_2, usuarios_unicos_1 as usuarios_unicos, vendas_soma, vendas_csv
  19. from plugins.velivery_relatorios.conteudo import lista_mailing_csv_2 as lista_mailing_csv, usuarios_por_pedidos
  20. from plugins.velivery_relatorios.vegcoin import pedidos_veganweek, pedidos_veganweek_csv, usuarios_inativos_csv, usuarios_vegcoinweek_cac_csv
  21. def taxa_recompra(args):
  22. return busca_pedidos.busca_recompra(args)
  23. def relatorio_recompra(args):
  24. args.update(periodo = "total")
  25. args.update(db_query = ' '.join([]))
  26. try:
  27. if args['command_list'][0] in ['2015', '2016', '2017', '2018']:
  28. ano = str(args['command_list'][0])
  29. args.update(db_query = ' '.join([
  30. "AND", '>='.join(['created_at', ''.join(["'", str(ano), "-01-01 00:00:00", "'"])]),
  31. "AND", '<='.join(['created_at', ''.join(["'", str(ano), "-12-31 23:59:59", "'"])]),
  32. ]))
  33. try:
  34. if str(args['command_list'][1]) in ['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12']:
  35. mes = str(args['command_list'][1])
  36. args.update(db_query = ' '.join([
  37. "AND", '>='.join(['created_at', ''.join(["'", str(ano), "-", str(mes), "-01 00:00:00", "'"])]),
  38. "AND", '<='.join(['created_at', ''.join(["'", str(ano), "-", str(mes), "-31 23:59:59", "'"])]),
  39. ]))
  40. args.update(periodo = ' '.join([str(mes), " de ", str(ano)]))
  41. return busca_pedidos.busca_recompra_10(args)
  42. except IndexError:
  43. pass
  44. args.update(periodo = str(ano))
  45. return busca_pedidos.busca_recompra_10(args)
  46. else:
  47. return {
  48. 'status': False,
  49. 'type': 'erro',
  50. 'multi': False,
  51. 'response': u"Vossa excelência estás a tirardes com a minha cara. Por acaso '%s' é um ano?" % (str(ano)),
  52. 'debug': u"O contrário do sucesso!",
  53. 'parse_mode': None,
  54. }
  55. except IndexError:
  56. args.update(periodo = "total")
  57. args.update(db_query = ' '.join([]))
  58. return busca_pedidos.busca_recompra_10(args)
  59. return {
  60. 'status': False,
  61. 'type': 'erro',
  62. 'multi': False,
  63. 'response': u"Vossa excelência estás a tirardes com a minha cara. Por favor, providencie um ano como argumento.",
  64. 'debug': u"O contrário do sucesso!",
  65. 'parse_mode': None,
  66. }
  67. return busca_pedidos.busca_recompra_10(args)
  68. def relatorio_vendas(args):
  69. args.update(periodo = "total")
  70. args.update(db_query = ' '.join([]))
  71. try:
  72. if args['command_list'][0].isdigit() and int(args['command_list'][0]) >= 2015:
  73. ano = str(args['command_list'][0])
  74. args.update(db_query = ' '.join([
  75. "AND", '>='.join(['created_at', ''.join(["'", str(ano), "-01-01 00:00:00", "'"])]),
  76. "AND", '<='.join(['created_at', ''.join(["'", str(ano), "-12-31 23:59:59", "'"])]),
  77. ]))
  78. try:
  79. if str(args['command_list'][1]) in ['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12']:
  80. mes = str(args['command_list'][1])
  81. args.update(db_query = ' '.join([
  82. "AND", '>='.join(['created_at', ''.join(["'", str(ano), "-", str(mes), "-01 00:00:00", "'"])]),
  83. "AND", '<='.join(['created_at', ''.join(["'", str(ano), "-", str(mes), "-31 23:59:59", "'"])]),
  84. ]))
  85. args.update(periodo = ' '.join([str(mes), " de ", str(ano)]))
  86. return busca_pedidos.busca_vendas_1(args)
  87. except IndexError:
  88. pass
  89. args.update(periodo = str(ano))
  90. return busca_pedidos.busca_vendas_1(args)
  91. else:
  92. return {
  93. 'status': False,
  94. 'type': 'erro',
  95. 'multi': False,
  96. 'response': u"Vossa excelência estás a tirardes com a minha cara. Por acaso '%s' é um ano?" % (str(args['command_list'][0])),
  97. 'debug': u"O contrário do sucesso!",
  98. 'parse_mode': None,
  99. }
  100. except IndexError:
  101. args.update(periodo = "total")
  102. args.update(db_query = ' '.join([]))
  103. return busca_pedidos.busca_vendas_1(args)
  104. return {
  105. 'status': False,
  106. 'type': 'erro',
  107. 'multi': False,
  108. 'response': u"Vossa excelência estás a tirardes com a minha cara. Por favor, providencie um ano como argumento.",
  109. 'debug': u"O contrário do sucesso!",
  110. 'parse_mode': None,
  111. }
  112. def relatorio_usuarios(args):
  113. try:
  114. if args['command_list'][0] in ['2015', '2016', '2017', '2018']:
  115. ano = str(args['command_list'][0])
  116. args.update(db_query = ' '.join([
  117. "AND", '>='.join(['created_at', ''.join(["'", str(ano), "-01-01 00:00:00", "'"])]),
  118. "AND", '<='.join(['created_at', ''.join(["'", str(ano), "-12-31 23:59:59", "'"])]),
  119. ]))
  120. if str(args['command_list'][1]) in ['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12']:
  121. mes = str(args['command_list'][1])
  122. args.update(db_query = ' '.join([
  123. "AND", '>='.join(['created_at', ''.join(["'", str(ano), "-", str(mes), "-01 00:00:00", "'"])]),
  124. "AND", '<='.join(['created_at', ''.join(["'", str(ano), "-", str(mes), "-31 23:59:59", "'"])]),
  125. ]))
  126. args.update(periodo = ' '.join([str(mes), " de ", str(ano)]))
  127. return busca_pedidos.busca_usuarios(args)
  128. else:
  129. args.update(periodo = str(ano))
  130. return busca_pedidos.busca_usuarios(args)
  131. else:
  132. return {
  133. 'status': False,
  134. 'type': 'erro',
  135. 'multi': False,
  136. 'response': u"Vossa excelência estás a tirardes com a minha cara. Por acaso '%s' é um ano?" % (str(ano)),
  137. 'debug': u"O contrário do sucesso!",
  138. 'parse_mode': None,
  139. }
  140. except IndexError:
  141. args.update(periodo = "total")
  142. args.update(db_query = ' '.join([]))
  143. return busca_pedidos.busca_usuarios(args)
  144. return {
  145. 'status': False,
  146. 'type': 'erro',
  147. 'multi': False,
  148. 'response': u"Vossa excelência estás a tirardes com a minha cara. Por favor, providencie um ano como argumento.",
  149. 'debug': u"O contrário do sucesso!",
  150. 'parse_mode': None,
  151. }
  152. def dados_estabelecimentos(args):
  153. args.update(db_query = ' '.join([]))
  154. return busca_pedidos.busca_dados_estabelecimentos(args)
  155. def relatorio_uf(args):
  156. args.update(periodo = "total")
  157. args.update(db_query = ' '.join([]))
  158. try:
  159. if args['command_list'][0] in ['2015', '2016', '2017', '2018']:
  160. ano = str(args['command_list'][0])
  161. args.update(db_query = ' '.join([
  162. "AND", '>='.join(['created_at', ''.join(["'", str(ano), "-01-01 00:00:00", "'"])]),
  163. "AND", '<='.join(['created_at', ''.join(["'", str(ano), "-12-31 23:59:59", "'"])]),
  164. ]))
  165. try:
  166. if str(args['command_list'][1]) in ['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12']:
  167. mes = str(args['command_list'][1])
  168. args.update(db_query = ' '.join([
  169. "AND", '>='.join(['created_at', ''.join(["'", str(ano), "-", str(mes), "-01 00:00:00", "'"])]),
  170. "AND", '<='.join(['created_at', ''.join(["'", str(ano), "-", str(mes), "-31 23:59:59", "'"])]),
  171. ]))
  172. args.update(periodo = ' '.join([str(mes), " de ", str(ano)]))
  173. return busca_pedidos.busca_uf(args)
  174. except IndexError:
  175. pass
  176. args.update(periodo = str(ano))
  177. return busca_pedidos.busca_uf(args)
  178. else:
  179. return {
  180. 'status': False,
  181. 'type': 'erro',
  182. 'multi': False,
  183. 'response': u"Vossa excelência estás a tirardes com a minha cara. Por acaso '%s' é um ano?" % (str(ano)),
  184. 'debug': u"O contrário do sucesso!",
  185. 'parse_mode': None,
  186. }
  187. except IndexError:
  188. args.update(periodo = "total")
  189. args.update(db_query = ' '.join([]))
  190. return busca_pedidos.busca_uf(args)
  191. return {
  192. 'status': False,
  193. 'type': 'erro',
  194. 'multi': False,
  195. 'response': u"Vossa excelência estás a tirardes com a minha cara. Por favor, providencie um ano como argumento.",
  196. 'debug': u"O contrário do sucesso!",
  197. 'parse_mode': None,
  198. }
  199. def relatorio_dre(args):
  200. return dre_csv(args)
  201. def relatorio_ltv(args):
  202. return ltv(args)
  203. def relatorio_recompra2(args):
  204. return recompra_2(args)
  205. def relatorio_usuarios_unicos(args):
  206. return usuarios_unicos(args)
  207. def resumo_vendas_2(args):
  208. args.update(relatorio = inspect.currentframe().f_code.co_name)
  209. return vendas_soma(args)
  210. def relatorio_vendas_2(args):
  211. args.update(relatorio = inspect.currentframe().f_code.co_name)
  212. return vendas_csv(args)
  213. def mailing(args):
  214. args.update(relatorio = inspect.currentframe().f_code.co_name)
  215. return lista_mailing_csv(args)
  216. def relatorio_usuarios_pedidos(args):
  217. args.update(relatorio = inspect.currentframe().f_code.co_name)
  218. return usuarios_por_pedidos(args)
  219. def veganweek(args):
  220. try:
  221. return pedidos_veganweek_csv(args)
  222. except Exception as e:
  223. args['bot'].sendMessage(args['chat_id'], u"Erro catastrófico: %s" % (e))
  224. raise
  225. return {
  226. 'status': False,
  227. 'type': 'erro',
  228. 'multi': False,
  229. 'response': u"Tivemos um problema técnico e não conseguimos encontrar o que pedirdes.",
  230. 'debug': log_str.debug(u"Exceção: %s" % (e)),
  231. 'parse_mode': None,
  232. }
  233. def inativos(args):
  234. try:
  235. return usuarios_inativos_csv(args)
  236. except Exception as e:
  237. args['bot'].sendMessage(args['chat_id'], u"Erro catastrófico: %s" % (e))
  238. raise
  239. return {
  240. 'status': False,
  241. 'type': 'erro',
  242. 'multi': False,
  243. 'response': u"Tivemos um problema técnico e não conseguimos encontrar o que pedirdes.",
  244. 'debug': log_str.debug(u"Exceção: %s" % (e)),
  245. 'parse_mode': None,
  246. }
  247. def vegcoinweek_cac(args):
  248. return usuarios_vegcoinweek_cac_csv(args)