Итоги для таблицы посещений
Добавлен вывод итогов для таблицы посещений
This commit is contained in:
@@ -121,7 +121,15 @@ class VisitTable(tables.Table):
|
|||||||
orders = tables.Column(verbose_name = 'Заказы', accessor = 'order.product__count')
|
orders = tables.Column(verbose_name = 'Заказы', accessor = 'order.product__count')
|
||||||
cost = tables.Column(verbose_name = 'Стоимость', accessor = 'order.price__sum')
|
cost = tables.Column(verbose_name = 'Стоимость', accessor = 'order.price__sum')
|
||||||
designer = tables.Column(verbose_name = 'Дизайнеры')
|
designer = tables.Column(verbose_name = 'Дизайнеры')
|
||||||
|
|
||||||
|
summary = ['Всего','',0,0,0,0,'']
|
||||||
|
|
||||||
|
def set_summaries(self, summaries):
|
||||||
|
indexes = {'calls': 2, 'visits': 3, 'orders': 4, 'cost': 5}
|
||||||
|
for s in summaries:
|
||||||
|
idx = indexes[s]
|
||||||
|
self.summary[idx] = summaries[s]
|
||||||
|
|
||||||
def render_orders(self, value, record, column):
|
def render_orders(self, value, record, column):
|
||||||
value = 0 if value == None else value
|
value = 0 if value == None else value
|
||||||
return mark_safe('<a href="%s?date=%s">%s</a>' % (
|
return mark_safe('<a href="%s?date=%s">%s</a>' % (
|
||||||
|
|||||||
@@ -52,13 +52,17 @@ def visit_view(request):
|
|||||||
edate = date(y,m,day_in_month)
|
edate = date(y,m,day_in_month)
|
||||||
|
|
||||||
attend_list = Attendance.objects.filter(date__range = (sdate,edate))
|
attend_list = Attendance.objects.filter(date__range = (sdate,edate))
|
||||||
|
attend_sum = attend_list.aggregate(Sum('calls'), Sum('visits'))
|
||||||
for attend in attend_list:
|
for attend in attend_list:
|
||||||
month_days[attend.date.day]['attend'] = attend
|
month_days[attend.date.day]['attend'] = attend
|
||||||
|
|
||||||
order_list = Order.objects.filter(date__range = (sdate,edate))
|
order_list = Order.objects.filter(date__range = (sdate,edate))
|
||||||
|
order_sum = order_list.aggregate(Count('product'), Sum('price'))
|
||||||
order_list = order_list.values('date')
|
order_list = order_list.values('date')
|
||||||
order_list = order_list.annotate(Count('product'), Sum('price'))
|
order_list = order_list.annotate(Count('product'), Sum('price'))
|
||||||
|
|
||||||
|
print order_sum
|
||||||
|
|
||||||
for order in order_list:
|
for order in order_list:
|
||||||
month_days[order['date'].day]['order'] = order
|
month_days[order['date'].day]['order'] = order
|
||||||
|
|
||||||
@@ -71,10 +75,14 @@ def visit_view(request):
|
|||||||
else:
|
else:
|
||||||
month_days[day]['designer'] = designer
|
month_days[day]['designer'] = designer
|
||||||
|
|
||||||
print month_days
|
|
||||||
|
|
||||||
table = VisitTable(month_days.values())
|
table = VisitTable(month_days.values())
|
||||||
RequestConfig(request, paginate={'per_page': 32}).configure(table)
|
RequestConfig(request, paginate={'per_page': 32}).configure(table)
|
||||||
|
table.set_summaries({
|
||||||
|
'calls': attend_sum['calls__sum'],
|
||||||
|
'visits': attend_sum['visits__sum'],
|
||||||
|
'orders': order_sum['product__count'],
|
||||||
|
'cost': order_sum['price__sum'],
|
||||||
|
})
|
||||||
title = 'Таблица посещаемости на %s г.' % curr_date.strftime('%B %Y')
|
title = 'Таблица посещаемости на %s г.' % curr_date.strftime('%B %Y')
|
||||||
return render(request, 'asuzr/table.html', {'table': table, 'title': title})
|
return render(request, 'asuzr/table.html', {'table': table, 'title': title})
|
||||||
|
|
||||||
|
|||||||
@@ -24,11 +24,10 @@
|
|||||||
<tbody>
|
<tbody>
|
||||||
{% for row in table.page.object_list|default:table.rows %} {# support pagination #}
|
{% for row in table.page.object_list|default:table.rows %} {# support pagination #}
|
||||||
{% block table.tbody.row %}
|
{% block table.tbody.row %}
|
||||||
{% if row.date.is_weekend %}
|
<tr class="
|
||||||
<tr class="weekend"> {# avoid cycle for Django 1.2-1.6 compatibility #}
|
{% if row.date.is_weekend %}weekend{% else %}
|
||||||
{% else %}
|
{{ forloop.counter|divisibleby:2|yesno:"even,odd" }}{% endif %}
|
||||||
<tr class="{{ forloop.counter|divisibleby:2|yesno:"even,odd" }}"> {# avoid cycle for Django 1.2-1.6 compatibility #}
|
"> {# avoid cycle for Django 1.2-1.6 compatibility #}
|
||||||
{% endif %}
|
|
||||||
{% for column, cell in row.items %}
|
{% for column, cell in row.items %}
|
||||||
<td {{ column.attrs.td.as_html }}>{% if column.localize == None %}{{ cell }}{% else %}{% if column.localize %}{{ cell|localize }}{% else %}{{ cell|unlocalize }}{% endif %}{% endif %}</td>
|
<td {{ column.attrs.td.as_html }}>{% if column.localize == None %}{{ cell }}{% else %}{% if column.localize %}{{ cell|localize }}{% else %}{{ cell|unlocalize }}{% endif %}{% endif %}</td>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
@@ -44,34 +43,18 @@
|
|||||||
</tbody>
|
</tbody>
|
||||||
{% endblock table.tbody %}
|
{% endblock table.tbody %}
|
||||||
{% block table.tfoot %}
|
{% block table.tfoot %}
|
||||||
<tfoot></tfoot>
|
<tfoot>
|
||||||
|
{% if table.summary %}
|
||||||
|
<tr>
|
||||||
|
{% for summary in table.summary %}
|
||||||
|
<td> {{ summary }} </td>
|
||||||
|
{% endfor %}
|
||||||
|
</tr>
|
||||||
|
{% endif %}
|
||||||
|
</tfoot>
|
||||||
{% endblock table.tfoot %}
|
{% endblock table.tfoot %}
|
||||||
{% endnospaceless %}
|
{% endnospaceless %}
|
||||||
</table>
|
</table>
|
||||||
{% endblock table %}
|
{% endblock table %}
|
||||||
|
|
||||||
{% if table.page %}
|
|
||||||
{% with table.page.paginator.count as total %}
|
|
||||||
{% with table.page.object_list|length as count %}
|
|
||||||
{% block pagination %}
|
|
||||||
<ul class="pagination">
|
|
||||||
{% if table.page.has_previous %}
|
|
||||||
{% nospaceless %}{% block pagination.previous %}<li class="previous"><a href="{% querystring table.prefixed_page_field=table.page.previous_page_number %}">{% trans "Previous" %}</a></li>{% endblock pagination.previous %}{% endnospaceless %}
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
{% if table.page.has_previous or table.page.has_next %}
|
|
||||||
{% nospaceless %}{% block pagination.current %}<li class="current">{% blocktrans with table.page.number as current and table.paginator.num_pages as total %}Page {{ current }} of {{ total }}{% endblocktrans %}</li>{% endblock pagination.current %}{% endnospaceless %}
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
{% if table.page.has_next %}
|
|
||||||
{% nospaceless %}{% block pagination.next %}<li class="next"><a href="{% querystring table.prefixed_page_field=table.page.next_page_number %}">{% trans "Next" %}</a></li>{% endblock pagination.next %}{% endnospaceless %}
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
{% nospaceless %}{% block pagination.cardinality %}<li class="cardinality">{% if total != count %}{% blocktrans %}{{ count }} of {{ total }}{% endblocktrans %}{% else %}{{ total }}{% endif %} {% if total == 1 %}{{ table.data.verbose_name }}{% else %}{{ table.data.verbose_name_plural }}{% endif %}</li>{% endblock pagination.cardinality %}{% endnospaceless %}
|
|
||||||
</ul>
|
|
||||||
{% endblock pagination %}
|
|
||||||
{% endwith %}
|
|
||||||
{% endwith %}
|
|
||||||
</div>
|
|
||||||
{% endif %}
|
|
||||||
{% endspaceless %}
|
{% endspaceless %}
|
||||||
|
|||||||
Reference in New Issue
Block a user