Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- @login_required
- def statistics_page(request):
- accounts = Account.objects.filter(user=request.user)
- daily_operations = Operation.objects.filter(user=request.user)
- regular_transactions = RegularTransaction.objects.filter(user=request.user)
- if request.method == 'POST':
- form = OperationFilterForStatisticForm(request.user, request.POST)
- if form.is_valid():
- account = form.cleaned_data['account']
- period = form.cleaned_data['period']
- start_date = form.cleaned_data['start_date']
- end_date = form.cleaned_data['end_date']
- if account:
- daily_operations = daily_operations.filter(account=account)
- regular_transactions = regular_transactions.filter(account=account)
- if period == 'day':
- start_date = end_date
- elif period == 'week':
- start_date = end_date - timedelta(days=6)
- elif period == 'month':
- start_date = end_date.replace(day=1)
- elif period == 'year':
- start_date = end_date.replace(month=1, day=1)
- daily_operations = daily_operations.filter(date__range=(start_date, end_date))
- regular_transactions = regular_transactions.filter(date__range=(start_date, end_date))
- else:
- form = OperationFilterForStatisticForm(request.user)
- expense_operations_daily = daily_operations.filter(key=Operation.EXPENSES)
- income_operations_daily = daily_operations.filter(key=Operation.INCOME)
- expense_operations_regular = regular_transactions.filter(key=RegularTransaction.EXPENSES)
- income_operations_regular = regular_transactions.filter(key=RegularTransaction.INCOME)
- # Объединение операций по типу (Расходы или Доходы)
- expense_operations = list(expense_operations_daily) + list(expense_operations_regular)
- income_operations = list(income_operations_daily) + list(income_operations_regular)
- combined_operations = list(daily_operations) + list(regular_transactions)
- sorted_operations = reversed(sorted(combined_operations, key=lambda op: op.date))
- data_expenses = []
- labels_expenses = []
- dates_expenses = []
- for expense_operation in expense_operations:
- data_expenses.append(int(expense_operation.amount))
- labels_expenses.append(str(expense_operation.category.category_name))
- dates_expenses.append(int(expense_operation.date.month))
- # ===============================
- data_expenses_new = []
- labels_expenses_new = []
- seen_labels = set()
- for i in range(len(labels_expenses)):
- label = labels_expenses[i]
- if label not in seen_labels:
- seen_labels.add(label)
- total_amount = data_expenses[i]
- for j in range(i + 1, len(labels_expenses)):
- if labels_expenses[j] == label:
- total_amount += data_expenses[j]
- data_expenses_new.append(total_amount)
- labels_expenses_new.append(label)
- data_expenses = data_expenses_new
- labels_expenses = labels_expenses_new
- # ===============================
- data_incomes = []
- labels_incomes = []
- dates_incomes = []
- for income_operation in income_operations:
- data_incomes.append(int(income_operation.amount))
- labels_incomes.append(str(income_operation.category.category_name))
- dates_incomes.append(income_operation.date.strftime('%B'))
- # ===============================
- data_incomes_new = []
- labels_incomes_new = []
- s_seen_labels = set()
- for i in range(len(labels_incomes)):
- label = labels_incomes[i]
- if label not in s_seen_labels:
- s_seen_labels.add(label)
- total_amount = data_incomes[i]
- for j in range(i + 1, len(labels_incomes)):
- if labels_incomes[j] == label:
- total_amount += data_incomes[j]
- data_incomes_new.append(total_amount)
- labels_incomes_new.append(label)
- data_incomes = data_incomes_new
- labels_incomes = labels_incomes_new
- # ===============================
- full_expenses_sum = sum(data_expenses)
- full_incomes_sum = sum(data_incomes)
- results = [sum(data_expenses),
- sum(data_incomes),
- sum(data_incomes) - sum(data_expenses)]
- string_result = ['Расходы', 'Доходы', 'Прибыль']
- all_months = [month for month in range(1, 13)]
- income_months = list(set(dates_incomes))
- month_labels = [str(month) if month in income_months else '' for month in all_months]
- context = {
- 'accounts': accounts,
- 'combined_data_expenses': zip(labels_expenses, data_expenses),
- 'combined_data_incomes': zip(labels_incomes, data_incomes),
- 'full_expenses_sum': full_expenses_sum,
- 'full_incomes_sum': full_incomes_sum,
- 'daily_operations': daily_operations,
- 'regular_transactions': regular_transactions,
- 'sorted_operations': sorted_operations,
- 'data_expenses': data_expenses,
- 'labels_expenses': labels_expenses,
- 'data_incomes': data_incomes,
- 'labels_incomes': labels_incomes,
- 'results': results,
- 'string_results': string_result,
- 'dates_incomes': dates_incomes,
- 'dates_expenses': dates_expenses,
- 'month_labels': month_labels,
- 'form': form,
- }
- return render(request, 'profile/statistics/statistic_main.html', context=context)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement