예제 #1
0
def create_pie_chart(start, end):
    airline = your_airline()
    cursor.execute(
        'SELECT * FROM purchases NATURAL JOIN ticket WHERE purchase_date BETWEEN %s AND %s AND \
                  airline_name=%s', (start, end, airline))
    puchases = cursor.fetchall()

    cust_revenue = 0
    agent_revenue = 0
    for bought in puchases:
        ticket_id = bought['ticket_id']
        cursor.execute(
            'SELECT price FROM ticket NATURAL JOIN flight WHERE ticket_id=%s AND airline_name=%s',
            (ticket_id, airline))
        price = cursor.fetchone()['price']
        if (bought['booking_agent_id'] == None):
            cust_revenue += price
        else:
            agent_revenue += price
    total_revenue = agent_revenue + cust_revenue

    data = pd.Series([
        float(agent_revenue / total_revenue),
        float(cust_revenue / total_revenue)
    ],
                     index=['Booking Agent', 'Customer'])
    pie_chart = Donut(data)
    pie_chart.toolbar_location = None
    info = [pie_chart, cust_revenue, agent_revenue]
    return info
예제 #2
0
def budget_detail(request, budget_id):
    budget_owner = User.objects.get(id=Budget.objects.get(id=budget_id).user_id).username
    title = Budget.objects.get(id=budget_id).title
    base = Cost.objects.filter(budget_id=budget_id, user=request.user).values()
    total = Cost.objects.filter(budget_id=budget_id, user=request.user).aggregate(Sum('value'))['value__sum']
    budget = Budget.objects.get(id=budget_id).value
    date = []
    date_url = []
    categories = []
    categories_id = []

    for item in Cost.objects.filter(budget_id=budget_id, user=request.user).values('title', 'publish', 'category_id'):
        date.append(str(item['publish']))
        date_url.append(str(item['publish']).replace('-', '/'))
        categories.append(Category.objects.get(id=item['category_id']).title)
        categories_id.append(Category.objects.get(id=item['category_id']).id)

    categories_title = []
    categories_title_id =[]
    categories_data = []

    for item in Category.objects.values('title', 'id'):
        val = Cost.objects.filter(budget_id=budget_id, user=request.user,
                                  category_id=item['id']).aggregate(Sum('value'))['value__sum']
        if val is not None:
            categories_title.append(item['title'])
            categories_title_id.append(item['id'])
            categories_data.append(val)

    try:
        total_budget = budget - total
    except TypeError:
        total_budget = 0

    info = zip(base, date, date_url, categories, categories_id)

    data = {
        'money': [float(x) for x in categories_data],
        'labels': categories_title
    }
    p1 = Donut(data, values='money', label='labels', plot_width=390, plot_height=400, legend=None, responsive=True)
    p1.logo = None
    p1.toolbar_location = None
    script, div = components(p1, CDN)

    cat_all = zip(categories_title, categories_data, categories_title_id)
    return render(request, 'core_sm/costs/budget/budget_detail.html', {'info': info,
                                                                'title': title,
                                                                'total': total,
                                                                'budget': budget,
                                                                'total_budget': total_budget,
                                                                'script': mark_safe(script),
                                                                'div': mark_safe(div),
                                                                'cat_all': cat_all,
                                                                'categories_data': categories_data,
                                                                'budget_owner': budget_owner})
예제 #3
0
                plot_width=220,
                color=source.data['color'])
wedge_r = Donut(df,
                plot_height=220,
                plot_width=220,
                color=source.data['color'])
wedge_z = Donut(df,
                plot_height=220,
                plot_width=220,
                color=source.data['color'])

wedge_b.logo = None
wedge_r.logo = None
wedge_z.logo = None

wedge_b.toolbar_location = None
wedge_r.toolbar_location = None
wedge_z.toolbar_location = None

curdoc().add_root(row(widgetbox(title, width=700)))

curdoc().add_root(row(widgetbox(slider, width=700)))

curdoc().add_root(
    row(
        column(
            widgetbox(Div(text="<b>Cameras:</b>")), p,
            row(widgetbox(Div(text=""), width=50),
                widgetbox(wedge_metric_select, width=600))),
        column(widgetbox(Div(text="<b>Metrics:</b>"), width=150),
               widgetbox(metric_select, width=150))))
예제 #4
0
def category_detail(request, category_id):
    category_title = Category.objects.get(id=category_id).title
    spends = Cost.objects.filter(category_id=category_id, user=request.user)
    stats = []
    days = []
    days_url = []
    for item in spends:
        stats.append(Budget.objects.get(id=item.budget_id).title)

    for item in spends.values('publish'):
        days.append(str(item['publish']))
        days_url.append(str(item['publish']).replace('-', '/'))

    data = zip(spends, stats, days, days_url)

    data_sum = Cost.objects.filter(category_id=category_id, user=request.user).aggregate(Sum('value'))['value__sum']
    data_avg = Cost.objects.filter(category_id=category_id, user=request.user).aggregate(Avg('value'))['value__avg']
    data_min = Cost.objects.filter(category_id=category_id, user=request.user).aggregate(Min('value'))['value__min']
    data_max = Cost.objects.filter(category_id=category_id, user=request.user).aggregate(Max('value'))['value__max']

    category_budget_title = []
    category_budget_spends = []
    category_budget_id = []

    for item in Budget.objects.values('title', 'id'):
        val = Cost.objects.filter(budget_id=item['id'], category_id=category_id, user=request.user).aggregate(Sum('value'))[
            'value__sum']
        if val is not None:
            category_budget_title.append(item['title'])
            category_budget_spends.append(val)
            category_budget_id.append(item['id'])
        else:
            pass

    budgets = []
    budgets_id = []
    budgets_data = []

    for item in Budget.objects.filter(user=request.user).values('title', 'id'):
        val = Cost.objects.filter(category_id=category_id,
                                  user=request.user,
                                  budget_id=Budget.objects.get(id=item['id']).id).aggregate(Sum('value'))['value__sum']
        if val is not None:
            budgets_data.append(val)
            budgets.append(item['title'])
            budgets_id.append(item['id'])

    table_data = {
        'money': [float(x) for x in budgets_data],
        'labels': budgets
    }
    p1 = Donut(table_data, values='money', label='labels', plot_width=390, plot_height=400, legend=None, responsive=True)
    p1.logo = None
    p1.toolbar_location = None
    script, div = components(p1, CDN)

    category_budget_data = zip(category_budget_title, category_budget_spends, category_budget_id)

    return render(request, 'core_sm/costs/category/category_detail.html', {'data': data,
                                                                           'data_sum': data_sum,
                                                                           'data_avg': data_avg,
                                                                           'data_min': data_min,
                                                                           'data_max': data_max,
                                                                           'category_title': category_title,
                                                                           'category_budget_data': category_budget_data,
                                                                           'script': mark_safe(script),
                                                                           'div': mark_safe(div)})