diff --git a/analysismonth.py b/analysismonth.py index ed739a9..25a5fc3 100644 --- a/analysismonth.py +++ b/analysismonth.py @@ -10,7 +10,8 @@ import locales def analysis_month(message): transactions = Transaction.select().where( Transaction.user == User.get(username=message.chat.id), - Transaction.month == datetime.datetime.today().strftime('%m') + Transaction.month == datetime.datetime.today().strftime('%m'), + Transaction.year == datetime.datetime.today().strftime('%Y') ) incomes = 0 consuptions = 0 @@ -19,29 +20,37 @@ def analysis_month(message): incomes += i.sum elif i.type == 'consuption': consuptions += i.sum - - vals = [incomes, consuptions] - labels = [] - - if locales.LOCALE == 'ru': - labels = ['Доходы', 'Расходы'] - elif locales.LOCALE == 'en': - labels = ['Incomes', 'Consuptions'] - - exp = (0.1, 0) - plt.pie(vals, labels=labels, explode=exp, wedgeprops=dict(width=0.5)) - plt.legend() - plt.savefig('diagrams/diagramallmonth.png') - mes = labels[0] + ' : +' + str(vals[0]) + '\n' + labels[1] + ' : -' + str(vals[1]) + '\n' - with open('diagrams/diagramallmonth.png', 'rb') as diagram: - bot.send_photo(message.chat.id, diagram) + mes = '' + if len(transactions) == 0: + if locales.LOCALE == 'ru': + mes += 'Нет транзакций за этот месяц\n' + elif locales.LOCALE == 'en': + mes += 'No transactions for this month\n' bot.send_message(message.chat.id, mes) + else: + vals = [incomes, consuptions] + labels = [] + + if locales.LOCALE == 'ru': + labels = ['Доходы', 'Расходы'] + elif locales.LOCALE == 'en': + labels = ['Incomes', 'Consuptions'] + + exp = (0.1, 0) + plt.pie(vals, labels=labels, explode=exp, wedgeprops=dict(width=0.5)) + plt.legend() + plt.savefig('diagrams/month/diagramallmonth.png') + mes = labels[0] + ' : +' + str(vals[0]) + '\n' + labels[1] + ' : -' + str(vals[1]) + '\n' + with open('diagrams/month/diagramallmonth.png', 'rb') as diagram: + bot.send_photo(message.chat.id, diagram) + bot.send_message(message.chat.id, mes) def analysis_month_rm(message): transactions = Transaction.select().where( Transaction.user == User.get(username=message.chat.id), Transaction.month == datetime.datetime.now().strftime('%m'), + Transaction.year == datetime.datetime.today().strftime('%Y'), Transaction.type == 'consuption' ) vals = [] @@ -54,23 +63,31 @@ def analysis_month_rm(message): labels.append(i.category) vals.append(i.sum) - exp = [] - for _ in labels: - exp.append(0.1) - - plt.pie(vals, labels=labels, explode=exp, wedgeprops=dict(width=0.5)) - plt.legend() - plt.savefig('diagrams/rmanalysismonth.png') - mes = '' - pos = 0 - for i in labels: - mes += i + ' : -' + str(vals[pos]) + currencyes.currensyes['ru-ruble'] + '\n' - pos += 1 - - with open('diagrams/rmanalysismonth.png', 'rb') as diagram: - bot.send_photo(message.chat.id, diagram) + if len(transactions) == 0: + if locales.LOCALE == 'ru': + mes += 'Нет расходов за этот месяц\n' + elif locales.LOCALE == 'en': + mes += 'No consuptions for this month\n' bot.send_message(message.chat.id, mes) + else: + exp = [] + for _ in labels: + exp.append(0.1) + + plt.pie(vals, labels=labels, explode=exp, wedgeprops=dict(width=0.5)) + plt.legend() + plt.savefig('diagrams/month/rmanalysismonth.png') + + mes = '' + pos = 0 + for i in labels: + mes += i + ' : -' + str(vals[pos]) + currencyes.currensyes['ru-ruble'] + '\n' + pos += 1 + + with open('diagrams/month/rmanalysismonth.png', 'rb') as diagram: + bot.send_photo(message.chat.id, diagram) + bot.send_message(message.chat.id, mes) def have_in_vals(category, labels): @@ -86,6 +103,7 @@ def analysis_month_add(message): transactions = Transaction.select().where( Transaction.user == User.get(username=message.chat.id), Transaction.month == datetime.datetime.now().strftime('%m'), + Transaction.year == datetime.datetime.today().strftime('%Y'), Transaction.type == 'incom' ) vals = [] @@ -97,21 +115,28 @@ def analysis_month_add(message): else: labels.append(i.category) vals.append(i.sum) - - exp = [] - for _ in labels: - exp.append(0.1) - - plt.pie(vals, labels=labels, explode=exp, wedgeprops=dict(width=0.5)) - plt.legend() - plt.savefig('diagrams/addanalysismonth.png') - mes = '' - pos = 0 - for i in labels: - mes += i + ' : +' + str(vals[pos]) + currencyes.currensyes['ru-ruble'] + '\n' - pos += 1 - - with open('diagrams/addanalysismonth.png', 'rb') as diagram: - bot.send_photo(message.chat.id, diagram) + if len(transactions) == 0: + if locales.LOCALE == 'ru': + mes += 'Нет доходов за этот месяц\n' + elif locales.LOCALE == 'en': + mes += 'No incomes for this month\n' bot.send_message(message.chat.id, mes) + else: + exp = [] + for _ in labels: + exp.append(0.1) + + plt.pie(vals, labels=labels, explode=exp, wedgeprops=dict(width=0.5)) + plt.legend() + plt.savefig('diagrams/month/addanalysismonth.png') + + mes = '' + pos = 0 + for i in labels: + mes += i + ' : +' + str(vals[pos]) + currencyes.currensyes['ru-ruble'] + '\n' + pos += 1 + + with open('diagrams/month/addanalysismonth.png', 'rb') as diagram: + bot.send_photo(message.chat.id, diagram) + bot.send_message(message.chat.id, mes) diff --git a/analysistoday.py b/analysistoday.py new file mode 100644 index 0000000..4809492 --- /dev/null +++ b/analysistoday.py @@ -0,0 +1,135 @@ +from bot import bot +from database.models import Transaction, User +import matplotlib.pyplot as plt +import locales +import datetime +import currencyes +from analysismonth import have_in_vals + + +def analysis_today(message): + transactions = Transaction.select().where( + Transaction.user == User.get(username=message.chat.id), + Transaction.month == datetime.datetime.today().strftime('%m'), + Transaction.year == datetime.datetime.today().strftime('%Y'), + Transaction.day == datetime.datetime.today().strftime('%d') + ) + incomes = 0 + consuptions = 0 + for i in transactions: + if i.type == 'incom': + incomes += i.sum + elif i.type == 'consuption': + consuptions += i.sum + mes = '' + if len(transactions) == 0: + if locales.LOCALE == 'ru': + mes += 'Нет транзакций за сегодня\n' + elif locales.LOCALE == 'en': + mes += 'No transactions today\n' + bot.send_message(message.chat.id, mes) + else: + vals = [incomes, consuptions] + labels = [] + + if locales.LOCALE == 'ru': + labels = ['Доходы', 'Расходы'] + elif locales.LOCALE == 'en': + labels = ['Incomes', 'Consuptions'] + + exp = (0.1, 0) + plt.pie(vals, labels=labels, explode=exp, wedgeprops=dict(width=0.5)) + plt.legend() + plt.savefig('diagrams/today/diagramalltoday.png') + mes = labels[0] + ' : +' + str(vals[0]) + '\n' + labels[1] + ' : -' + str(vals[1]) + '\n' + with open('diagrams/today/diagramalltoday.png', 'rb') as diagram: + bot.send_photo(message.chat.id, diagram) + bot.send_message(message.chat.id, mes) + + +def analysis_today_rm(message): + transactions = Transaction.select().where( + Transaction.user == User.get(username=message.chat.id), + Transaction.month == datetime.datetime.now().strftime('%m'), + Transaction.year == datetime.datetime.today().strftime('%Y'), + Transaction.day == datetime.datetime.today().strftime('%d'), + Transaction.type == 'consuption' + ) + vals = [] + labels = [] + for i in transactions: + if have_in_vals(i.category, labels)[0]: + pos = have_in_vals(i.category, labels)[1] + vals[pos] += i.sum + else: + labels.append(i.category) + vals.append(i.sum) + mes = '' + if len(transactions) == 0: + if locales.LOCALE == 'ru': + mes += 'Нет расходов за сегодня\n' + elif locales.LOCALE == 'en': + mes += 'No сonsuptions today\n' + bot.send_message(message.chat.id, mes) + else: + exp = [] + for _ in labels: + exp.append(0.1) + + plt.pie(vals, labels=labels, explode=exp, wedgeprops=dict(width=0.5)) + plt.legend() + plt.savefig('diagrams/today/rmanalysistoday.png') + + mes = '' + pos = 0 + for i in labels: + mes += i + ' : -' + str(vals[pos]) + currencyes.currensyes['ru-ruble'] + '\n' + pos += 1 + + with open('diagrams/today/rmanalysistoday.png', 'rb') as diagram: + bot.send_photo(message.chat.id, diagram) + bot.send_message(message.chat.id, mes) + + +def analysis_today_add(message): + transactions = Transaction.select().where( + Transaction.user == User.get(username=message.chat.id), + Transaction.month == datetime.datetime.now().strftime('%m'), + Transaction.year == datetime.datetime.today().strftime('%Y'), + Transaction.day == datetime.datetime.today().strftime('%d'), + Transaction.type == 'incom' + ) + vals = [] + labels = [] + for i in transactions: + if have_in_vals(i.category, labels)[0]: + pos = have_in_vals(i.category, labels)[1] + vals[pos] += i.sum + else: + labels.append(i.category) + vals.append(i.sum) + mes = '' + if len(transactions) == 0: + if locales.LOCALE == 'ru': + mes += 'Нет доходов за сегодня\n' + elif locales.LOCALE == 'en': + mes += 'No incomes today\n' + bot.send_message(message.chat.id, mes) + else: + exp = [] + for _ in labels: + exp.append(0.1) + + plt.pie(vals, labels=labels, explode=exp, wedgeprops=dict(width=0.5)) + plt.legend() + plt.savefig('diagrams/today/addanalysistoday.png') + + mes = '' + pos = 0 + for i in labels: + mes += i + ' : +' + str(vals[pos]) + currencyes.currensyes['ru-ruble'] + '\n' + pos += 1 + + with open('diagrams/today/addanalysistoday.png', 'rb') as diagram: + bot.send_photo(message.chat.id, diagram) + bot.send_message(message.chat.id, mes) diff --git a/analysisyear.py b/analysisyear.py new file mode 100644 index 0000000..6ffab4f --- /dev/null +++ b/analysisyear.py @@ -0,0 +1,129 @@ +from bot import bot +from database.models import Transaction, User +import locales +import matplotlib.pyplot as plt +import datetime +from analysismonth import have_in_vals +import currencyes + + +def analysis_year(message): + transactions = Transaction.select().where( + Transaction.user == User.get(username=message.chat.id), + Transaction.year == datetime.datetime.today().strftime('%Y') + ) + incomes = 0 + consuptions = 0 + for i in transactions: + if i.type == 'incom': + incomes += i.sum + elif i.type == 'consuption': + consuptions += i.sum + mes = '' + if len(transactions) == 0: + if locales.LOCALE == 'ru': + mes += 'Нет транзакций за этот год\n' + elif locales.LOCALE == 'en': + mes += 'No transactions for this year\n' + bot.send_message(message.chat.id, mes) + else: + vals = [incomes, consuptions] + labels = [] + + if locales.LOCALE == 'ru': + labels = ['Доходы', 'Расходы'] + elif locales.LOCALE == 'en': + labels = ['Incomes', 'Consuptions'] + + exp = (0.1, 0) + plt.pie(vals, labels=labels, explode=exp, wedgeprops=dict(width=0.5)) + plt.legend() + plt.savefig('diagrams/year/diagramallyear.png') + mes = labels[0] + ' : +' + str(vals[0]) + '\n' + labels[1] + ' : -' + str(vals[1]) + '\n' + with open('diagrams/year/diagramallyear.png', 'rb') as diagram: + bot.send_photo(message.chat.id, diagram) + bot.send_message(message.chat.id, mes) + + +def analysis_year_rm(message): + transactions = Transaction.select().where( + Transaction.user == User.get(username=message.chat.id), + Transaction.year == datetime.datetime.today().strftime('%Y'), + Transaction.type == 'consuption' + ) + vals = [] + labels = [] + for i in transactions: + if have_in_vals(i.category, labels)[0]: + pos = have_in_vals(i.category, labels)[1] + vals[pos] += i.sum + else: + labels.append(i.category) + vals.append(i.sum) + mes = '' + if len(transactions) == 0: + if locales.LOCALE == 'ru': + mes += 'Нет расходов за этот год\n' + elif locales.LOCALE == 'en': + mes += 'No consuptions for this year\n' + bot.send_message(message.chat.id, mes) + else: + exp = [] + for _ in labels: + exp.append(0.1) + + plt.pie(vals, labels=labels, explode=exp, wedgeprops=dict(width=0.5)) + plt.legend() + plt.savefig('diagrams/year/rmanalysisyear.png') + + mes = '' + pos = 0 + for i in labels: + mes += i + ' : -' + str(vals[pos]) + currencyes.currensyes['ru-ruble'] + '\n' + pos += 1 + + with open('diagrams/year/rmanalysisyear.png', 'rb') as diagram: + bot.send_photo(message.chat.id, diagram) + bot.send_message(message.chat.id, mes) + + +def analysis_year_add(message): + transactions = Transaction.select().where( + Transaction.user == User.get(username=message.chat.id), + Transaction.year == datetime.datetime.today().strftime('%Y'), + Transaction.type == 'incom' + ) + vals = [] + labels = [] + for i in transactions: + if have_in_vals(i.category, labels)[0]: + pos = have_in_vals(i.category, labels)[1] + vals[pos] += i.sum + else: + labels.append(i.category) + vals.append(i.sum) + mes = '' + if len(transactions) == 0: + if locales.LOCALE == 'ru': + mes += 'Нет доходов за этот год\n' + elif locales.LOCALE == 'en': + mes += 'No incomes for this year\n' + bot.send_message(message.chat.id, mes) + else: + exp = [] + for _ in labels: + exp.append(0.1) + + plt.pie(vals, labels=labels, explode=exp, wedgeprops=dict(width=0.5)) + plt.legend() + plt.savefig('diagrams/year/addanalysisyear.png') + + mes = '' + pos = 0 + for i in labels: + mes += i + ' : +' + str(vals[pos]) + currencyes.currensyes['ru-ruble'] + '\n' + pos += 1 + + with open('diagrams/year/addanalysisyear.png', 'rb') as diagram: + bot.send_photo(message.chat.id, diagram) + bot.send_message(message.chat.id, mes) diff --git a/bot.py b/bot.py index ea23855..26a88cc 100644 --- a/bot.py +++ b/bot.py @@ -1,5 +1,5 @@ import telebot -TOKEN = '5123679189:AAHPLBfbPfuCiNK9qCcykcB2pRG-J4OEyrw' +TOKEN = '5425337391:AAHA89sTMj9ndxrQZpWc2aCs5NT5QPMxBBs' bot = telebot.TeleBot(TOKEN) diff --git a/database.sqlite b/database.sqlite index 3c24cde..29a8130 100644 Binary files a/database.sqlite and b/database.sqlite differ diff --git a/diagrams/addanalysismonth.png b/diagrams/month/addanalysismonth.png similarity index 100% rename from diagrams/addanalysismonth.png rename to diagrams/month/addanalysismonth.png diff --git a/diagrams/diagramallmonth.png b/diagrams/month/diagramallmonth.png similarity index 100% rename from diagrams/diagramallmonth.png rename to diagrams/month/diagramallmonth.png diff --git a/diagrams/rmanalysismonth.png b/diagrams/month/rmanalysismonth.png similarity index 100% rename from diagrams/rmanalysismonth.png rename to diagrams/month/rmanalysismonth.png diff --git a/diagrams/today/addanalysistoday.png b/diagrams/today/addanalysistoday.png new file mode 100644 index 0000000..1978098 Binary files /dev/null and b/diagrams/today/addanalysistoday.png differ diff --git a/diagrams/today/diagramalltoday.png b/diagrams/today/diagramalltoday.png new file mode 100644 index 0000000..78d5f96 Binary files /dev/null and b/diagrams/today/diagramalltoday.png differ diff --git a/diagrams/today/rmanalysistoday.png b/diagrams/today/rmanalysistoday.png new file mode 100644 index 0000000..c12b09c Binary files /dev/null and b/diagrams/today/rmanalysistoday.png differ diff --git a/diagrams/year/addanalysisyear.png b/diagrams/year/addanalysisyear.png new file mode 100644 index 0000000..aee21eb Binary files /dev/null and b/diagrams/year/addanalysisyear.png differ diff --git a/diagrams/year/diagramallyear.png b/diagrams/year/diagramallyear.png new file mode 100644 index 0000000..d360b74 Binary files /dev/null and b/diagrams/year/diagramallyear.png differ diff --git a/diagrams/year/rmanalysisyear.png b/diagrams/year/rmanalysisyear.png new file mode 100644 index 0000000..d60b2c9 Binary files /dev/null and b/diagrams/year/rmanalysisyear.png differ diff --git a/locales.py b/locales.py index 1e6beef..d45e16b 100644 --- a/locales.py +++ b/locales.py @@ -14,6 +14,17 @@ ru = { 8. /rmtoday - расходы за сегодня 9. /addall - доходы за все время 10. /rmall - расходы за все время +11. /rmmonth - расходы за этот месяц +12. /addmonth - доходы за этот месяц +13. /analysismonth - диаграмма транзакций за этот месяц +14. /rmanalysismonth - диаграмма расходов за этот месяц +15. /addanalysismonth - диаграмма доходов за этот месяц +16. /analysisyear - диаграмма транзакций за этот год +17. /rmanalysisyear - диаграмма расходов за этот год +18. /addanalysisyear - диаграмма доходов за этот год +19. /analysistoday - диаграмма транзакций за сегодня +20. /rmanalysistoday - диаграмма расходов за сегодня +21. /addanalysistoday - диаграмма доходов за сегодня ''', 'error404_message': 'Я не могу это сделать.', 'erradd': 'Используйте:\n1. /add [сумма]\n2. + [сумма]\n3. /add [сумма] [категория]\n4. + [сумма] [категория]', @@ -34,6 +45,17 @@ Hi i am finance bot and i can do this: 8. /rmtoday - consuptions today 9. /addall - incomes to all time 10. /rmall - consuptions to all time +11. /rmmonth - consuptions for this month +12. /addmonth - incomes for this month +13. /analysismonth - diagram of transactions for this month +14. /rmanalysismonth - diagram of consuptions for this month +15. /addanalysismonth - diagram of incomes for this month +16. /analysisyear - diagram of transactions for this year +17. /rmanalysisyear - diagram of consuptions for this year +18. /addanalysisyear - diagram of incomes for this year +19. /analysistoday - diagram of transactions today +20. /rmanalysistoday - diagram of consuptions today +21. /addanalysistoday - diagram of incomes today ''', 'error404_message': 'I can\'t do this.', 'erradd': 'Use:\n1. /add [sum]\n2. + [sum]\n3. /add [sum] [category]\n4. + [sum] [category]', diff --git a/main.py b/main.py index aef6edb..03c3aab 100644 --- a/main.py +++ b/main.py @@ -7,6 +7,8 @@ from database.models import User, Transaction from currencyes import currensyes from multiprocessing import Process from analysismonth import analysis_month, analysis_month_rm, analysis_month_add +from analysisyear import analysis_year, analysis_year_rm, analysis_year_add +from analysistoday import analysis_today, analysis_today_rm, analysis_today_add # функция ограничения количества знаков после запятой @@ -245,6 +247,18 @@ def main(): Process(target=analysis_month_rm, args=(message, )).start() elif message.text.split(' ')[0] == '/addanalysismonth': Process(target=analysis_month_add, args=(message,)).start() + elif message.text.split(' ')[0] == '/analysisyear': + Process(target=analysis_year, args=(message, )).start() + elif message.text.split(' ')[0] == '/rmanalysisyear': + Process(target=analysis_year_rm, args=(message, )).start() + elif message.text.split(' ')[0] == '/addanalysisyear': + Process(target=analysis_year_add, args=(message, )).start() + elif message.text.split(' ')[0] == '/analysistoday': + Process(target=analysis_today, args=(message,)).start() + elif message.text.split(' ')[0] == '/rmanalysistoday': + Process(target=analysis_today_rm, args=(message,)).start() + elif message.text.split(' ')[0] == '/addanalysistoday': + Process(target=analysis_today_add, args=(message,)).start() else: mes = None if locales.LOCALE == 'ru':