Example #1
0
def home_view(request):
    categories, income = Operation.get_user_income_by_category(request.user)
    categories2, outcome2 = Operation.get_user_outcome_by_category(
        request.user)

    fig_income = px.pie(categories,
                        categories,
                        income,
                        title={
                            'text': "Income",
                            'y': 0.9,
                            'x': 0.45,
                            'xanchor': 'center',
                            'yanchor': 'top',
                            'font': {'family': 'Arial',
                                     'size': 20
                                     }
                        },

                        width=500,
                        height=450)

    fig_outcome = px.pie(categories2,
                         categories2,
                         outcome2,
                         title={
                             'text': "Outcome",
                             'y': 0.9,
                             'x': 0.45,
                             'xanchor': 'center',
                             'yanchor': 'top',
                             'font': {'family': 'Arial',
                                      'size': 20
                                      }
                         },
                         width=500,
                         height=450)

    # plot(fig, filename='statistic/templates/piechart_income')
    pie_income = plot(fig_income, output_type='div')
    pie_outcome = plot(fig_outcome, output_type='div')

    income = Operation.get_user_income(request.user)
    outcome = Operation.get_user_outcome(request.user)
    current = Operation.get_user_current(request.user)
    operation_list = Operation.get_user_operation(request.user)
    user_category = Category.get_user_category(request.user)

    request.session['current'] = current

    return render(request,
                  'statistic.html',
                  {'income': income,
                   'outcome': outcome,
                   'current': current,
                   'operation_list': operation_list,
                   'user_category': user_category,
                   'pie_income': pie_income,
                   'pie_outcome': pie_outcome})
Example #2
0
    def get_outcome_of_all_categories_per_month(user_id):
        categories = Category.get_user_category(user_id)
        outcome_per_month = {key: 0 for key in range(1, 13)}
        for category in categories:
            if category.type != 'Current':
                category_income = Operation.get_category_outcome_per_month(
                    user_id, category.id)

                for month, outcome in category_income.items():
                    outcome_per_month[month] += outcome

        return outcome_per_month
Example #3
0
    def get_user_outcome_by_category(user_id):
        '''

        :param user_id:
        :return: tuple with category names and outcome of each category
        '''
        categories = Category.get_user_category(user_id)
        category_name = [
            category.name for category in categories
            if category.type != 'Current'
        ]
        outcome = []
        for category in categories:
            if category.type != 'Current':
                outcome.append(
                    Operation.get_user_category_outcome(user_id, category.id))

        return (category_name, outcome)
Example #4
0
def create_view(request):
    user_category = Category.get_user_category(user_id=request.user)

    if request.method == 'POST':
        to_category = request.POST.get('to')
        from_category = request.POST.get('from')
        value = request.POST.get('value')
        date = request.POST.get('date')

        from_category_obj = Category.get_category_by_name(user_id=request.user,
                                                          name=from_category)
        to_category_obj = Category.get_category_by_name(user_id=request.user,
                                                        name=to_category)

        if from_category_obj.type == to_category_obj.type or (
                from_category_obj.type != "Current"
                and to_category_obj.type != 'Current'):
            return HttpResponse('ONE CATEGORY MUST BE CURRENT')
        Operation.create(from_category_obj, to_category_obj, value, date)
        return redirect('operation_home')

    return render(request, 'operation_create.html',
                  {'user_category': user_category})
Example #5
0
def detail_view(request):
    categories = Category.get_user_category(request.user)
    category_income = []
    category_outcome = []
    category_operations = []
    category_bar = []

    current_month = datetime.datetime.today().month
    months1 = {1: 'Jan', 2: 'Feb', 3: 'Mar', 4: 'Apr', 5: 'May', 6: 'Jun',
               7: 'Jul', 8: 'Aug', 9: 'Sep', 10: 'Oct', 11: 'Nov', 12: 'Dec'}

    months = [months1[(i % 13)] for i in range(current_month + 1,
                                               current_month + 14) if i != 13]

    for category in categories:
        category_operations.append(Operation.get_user_operation_by_category(
            request.user, category.id))
        income_per_month1 = Operation.get_category_income_per_month(
            request.user,
            category.id)
        outcome_per_month1 = Operation.get_category_outcome_per_month(
            request.user,
            category.id)

        category_income.append(Operation.get_user_category_income(request.user,
                                                                  category.id))

        category_outcome.append(Operation.get_user_category_outcome(request.user,
                                                                    category.id))
        income_per_month = {}
        outcome_per_month = {}
        for i in range(current_month + 1, current_month + 14):
            if i == 13: continue
            i %= 13
            income_per_month[i] = income_per_month1[i]
            outcome_per_month[i] = outcome_per_month1[i]
        fig = go.Figure()
        fig.add_trace(go.Bar(
            x=months,
            y=list(income_per_month.values()),
            name='Income',
            marker_color='indianred'
        ))
        fig.add_trace(go.Bar(
            x=months,
            y=list(outcome_per_month.values()),
            name='Outcome',
            marker_color='blue'
        ))
        fig.update_layout(barmode='group',
                          title={
                              'text': f"{category.name} Income\Outcome",
                              'y': 0.9,
                              'x': 0.5,
                              'xanchor': 'center',
                              'yanchor': 'top',
                              'font': {'family': 'Arial',
                                       'size': 20
                                       }
                          },
                          width=1425, height=600)

        # html <div> with Bar Chart
        category_bar.append(plot(fig, output_type='div'))

    print(category_operations)

    return render(request, 'statistic_detail.html',
                  {'categories': categories,
                   'category_income': category_income,
                   'category_outcome': category_outcome,
                   'category_bar': category_bar,
                   'category_operations': category_operations
                   })