Răsfoiți Sursa

Исправлены конфликты

Anastasia 10 ani în urmă
părinte
comite
49b67af7b7
5 a modificat fișierele cu 104 adăugiri și 8 ștergeri
  1. 5 1
      asuzr/common.py
  2. 12 1
      asuzr/tables.py
  3. 11 1
      asuzr/views.py
  4. 16 5
      templates/asuzr/base.html
  5. 60 0
      templates/asuzr/weekend_table.html

+ 5 - 1
asuzr/common.py

@@ -16,4 +16,8 @@ class custom_date(date):
   
  @property
  def date_dd_mm_yy(self):
-    return self.strftime("%d/%m/%Y")
+    return self.strftime("%d/%m/%Y")
+
+ @property
+ def is_weekend(self):
+    return self.weekday() >= 5

+ 12 - 1
asuzr/tables.py

@@ -124,8 +124,17 @@ 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 render_orders(self, value, record):
+  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>' % (
 			reverse('asuzr.views.visit_view'), 
 			record['date'].strftime('%d.%m.%Y'), 
@@ -134,6 +143,8 @@ class VisitTable(tables.Table):
 
   class Meta:
     attrs = {'class': 'paleblue'}
+    orderable = False
+    template = 'asuzr/weekend_table.html'
     
 class ProdPlanTable(tables.Table):
   date = tables.Column(verbose_name = 'Дата')

+ 11 - 1
asuzr/views.py

@@ -53,13 +53,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,9 +75,15 @@ def visit_view(request):
       month_days[day]['designer'] = '%s, %s' % (month_days[day]['designer'], designer)
     else:
       month_days[day]['designer'] = designer
- 
+      
   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})
 

+ 16 - 5
templates/asuzr/base.html

@@ -7,6 +7,7 @@
   <script src="{{ STATIC_URL }}admin/js/jquery.min.js" type="text/javascript"></script>
   {% inplace_static %}
   <link rel="stylesheet" href="{{ STATIC_URL }}django_tables2/themes/paleblue/css/screen.css" />
+  <link rel="stylesheet" href="{{ STATIC_URL }}admin/css/base.css" />
   <style>
     #menu {
       margin: 0; /* Обнуляем значение отступов */
@@ -16,6 +17,7 @@
       display: inline; /* Отображать как строчный элемент */
       margin-right: 5px; /* Отступ слева */
       border: 1px solid #000; /* Рамка вокруг текста */
+      border-radius: 4px;
       padding: 3px; /* Поля вокруг текста */
     }
     #user {
@@ -25,9 +27,13 @@
     #menu, #user {
       display: inline;
     }
+    table.paleblue tr.weekend {
+      background-color: #FFE4E1
+    }
  </style>
 </head>
-<body> 
+<body>
+<div class="breadcrumbs"> 
 {% block menu %}
 <ul id="menu" class="hr">
  <li><a href={% url 'asuzr-main' %}>Таблица посещаемости</a></li>
@@ -38,17 +44,22 @@
  {% if request.user.is_staff %}<li><a href={% url 'admin:index' %}>Администрирование</a></li>{% endif %}
 </ul>
 <div id="user">
-{% if request.user.is_authenticated %} Добро пожаловать, {{ request.user.first_name }}
-{% else %}<a href="{% url 'django.contrib.auth.views.login' %}">Вход</a>{% endif %}
-<br><a href="{% url 'django.contrib.auth.views.logout' %}">Выход</a>
+{% if request.user.is_authenticated %} 
+Добро пожаловать, {{ request.user.first_name }}
+(<a href="{% url 'django.contrib.auth.views.logout' %}">Выход</a>)
+{% else %}
+(<a href="{% url 'django.contrib.auth.views.login' %}">Вход</a>){% endif %}
+</div>
 </div>
 {% endblock %}
+
+<div id='content'>
 <H1>{% block title %}{{ title }}{% endblock %}</H1> 
 
 {% block page %}
 Тело страницы
 {% endblock %}
-
+</div>
 {% block footer %}
 <hr>
 {% endblock %}

+ 60 - 0
templates/asuzr/weekend_table.html

@@ -0,0 +1,60 @@
+{% spaceless %}
+{% load django_tables2 %}
+{% load i18n %}
+{% if table.page %}
+<div class="table-container">
+{% endif %}
+{% block table %}
+<table{% if table.attrs %} {{ table.attrs.as_html }}{% endif %}>
+    {% nospaceless %}
+    {% block table.thead %}
+    <thead>
+        <tr>
+        {% for column in table.columns %}
+            {% if column.orderable %}
+            <th {{ column.attrs.th.as_html }}><a href="{% querystring table.prefixed_order_by_field=column.order_by_alias.next %}">{{ column.header }}</a></th>
+            {% else %}
+            <th {{ column.attrs.th.as_html }}>{{ column.header }}</th>
+            {% endif %}
+        {% endfor %}
+        </tr>
+    </thead>
+    {% endblock table.thead %}
+    {% block table.tbody %}
+    <tbody>
+        {% for row in table.page.object_list|default:table.rows %} {# support pagination #}
+        {% block table.tbody.row %}
+          <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 %}
+        </tr>
+        {% endblock table.tbody.row %}
+        {% empty %}
+        {% if table.empty_text %}
+        {% block table.tbody.empty_text %}
+        <tr><td colspan="{{ table.columns|length }}">{{ table.empty_text }}</td></tr>
+        {% endblock table.tbody.empty_text %}
+        {% endif %}
+        {% endfor %}
+    </tbody>
+    {% endblock table.tbody %}
+    {% block table.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 %}
+
+{% endspaceless %}