Просмотр исходного кода

Итоги для таблицы посещений

Добавлен вывод итогов для таблицы посещений
Denis V. Dedkov 10 лет назад
Родитель
Сommit
6cc7e88844
3 измененных файлов с 31 добавлено и 32 удалено
  1. 8 0
      asuzr/tables.py
  2. 10 2
      asuzr/views.py
  3. 13 30
      templates/asuzr/weekend_table.html

+ 8 - 0
asuzr/tables.py

@@ -121,7 +121,15 @@ class VisitTable(tables.Table):
   orders = tables.Column(verbose_name = 'Заказы', accessor = 'order.product__count')
   cost = tables.Column(verbose_name = 'Стоимость', accessor = 'order.price__sum')
   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):
     value = 0 if value == None else value
     return mark_safe('<a href="%s?date=%s">%s</a>' % (

+ 10 - 2
asuzr/views.py

@@ -52,13 +52,17 @@ def visit_view(request):
   edate = date(y,m,day_in_month)
 
   attend_list = Attendance.objects.filter(date__range = (sdate,edate))
+  attend_sum = attend_list.aggregate(Sum('calls'), Sum('visits'))
   for attend in attend_list:
     month_days[attend.date.day]['attend'] = attend
 
   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.annotate(Count('product'), Sum('price'))
 
+  print order_sum
+
   for order in order_list:
     month_days[order['date'].day]['order'] = order
 
@@ -71,10 +75,14 @@ def visit_view(request):
     else:
       month_days[day]['designer'] = designer
 
-  print month_days 
- 
   table = VisitTable(month_days.values())
   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')
   return render(request, 'asuzr/table.html', {'table': table, 'title': title})
 

+ 13 - 30
templates/asuzr/weekend_table.html

@@ -24,11 +24,10 @@
     <tbody>
         {% for row in table.page.object_list|default:table.rows %} {# support pagination #}
         {% block table.tbody.row %}
-        {% if row.date.is_weekend %}
-          <tr class="weekend"> {# avoid cycle for Django 1.2-1.6 compatibility #}
-        {% else %}
-          <tr class="{{ forloop.counter|divisibleby:2|yesno:"even,odd" }}"> {# avoid cycle for Django 1.2-1.6 compatibility #}
-        {% endif %}
+          <tr class="
+                    {% if row.date.is_weekend %}weekend{% else %}
+                    {{ forloop.counter|divisibleby:2|yesno:"even,odd" }}{% endif %}
+                    "> {# avoid cycle for Django 1.2-1.6 compatibility #}
             {% 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>
             {% endfor %}
@@ -44,34 +43,18 @@
     </tbody>
     {% endblock table.tbody %}
     {% 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 %}
     {% endnospaceless %}
 </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 %}