diff --git a/asuzr/models.py b/asuzr/models.py
index 885c3fc..bd96baa 100644
--- a/asuzr/models.py
+++ b/asuzr/models.py
@@ -4,6 +4,8 @@
from django.db import models
from django.contrib.auth.models import User
from datetime import date, timedelta
+from django.contrib.auth.signals import user_logged_in, user_logged_out, user_login_failed
+from django.contrib.admin.models import LogEntry
#Изделия
class Product(models.Model):
@@ -158,3 +160,23 @@ class OrderCosts(models.Model):
def __unicode__(self):
return ', '.join((self.order.product.name, self.cost_item.name))
+
+
+############################################################################################
+# Signal handlers
+############################################################################################
+
+def auth_log(message, user = None):
+ if user == None:
+ user = User.objects.get(pk = 1)
+
+ entry = LogEntry(user = user, object_repr = message, action_flag = 4)
+ entry.save()
+
+on_login = lambda **kwargs: auth_log(u'Вход в систему', kwargs['user'])
+on_logout = lambda **kwargs: auth_log(u'Выход из системы', kwargs['user'])
+on_login_error = lambda **kwargs: auth_log(u'Ошибка входа пользователя %s' % kwargs['credentials']['username'])
+
+user_logged_in.connect(on_login)
+user_logged_out.connect(on_logout)
+user_login_failed.connect(on_login_error)
diff --git a/asuzr/tables.py b/asuzr/tables.py
index 4a38a21..ae30324 100644
--- a/asuzr/tables.py
+++ b/asuzr/tables.py
@@ -3,6 +3,7 @@
from django.core.urlresolvers import reverse
from django.utils.safestring import mark_safe
from django.utils.html import escape
+from django.contrib.admin.models import LogEntry
import django_tables2 as tables
from models import *
@@ -48,7 +49,7 @@ class ThumbnailColumn(tables.TemplateColumn):
template = '''
{{% load thumbnail %}}
- {{% thumbnail record.{field} "100x100" as im %}}
+ {{% thumbnail record.{field} "200x200" as im %}}
{{% endthumbnail %}}
'''.format(field = field_name)
@@ -162,10 +163,11 @@ class VisitTable(tables.Table):
class DayOrdersTable(OrdersTable):
designer = tables.Column(verbose_name = 'Дизайнер')
- summary = ['Итого:', 0, '', '', '',]
+ summary = ['Итого:', 0, 0, '', '', '', '', '']
- def set_summary(self, price):
+ def set_summary(self, price, paid):
self.summary[1] = price
+ self.summary[2] = paid
def render_designer(self, value):
return ' '.join((value.first_name, value.last_name))
@@ -174,9 +176,6 @@ class DayOrdersTable(OrdersTable):
empty_text = 'Заказов для этого дня нет'
attrs = {'class': 'paleblue'}
exclude = ('date',
- 'delivery',
- 'lifting',
- 'paid',
'ostatok',
'approved',
'sketch',
@@ -184,7 +183,8 @@ class DayOrdersTable(OrdersTable):
'is_done',
)
sequence = ('product',
- 'price',
+ 'price',
+ 'paid',
'address',
'designer',
'deadline',
@@ -220,3 +220,14 @@ class ProductionTable(tables.Table):
class Meta:
attrs = {'class': 'paleblue'}
template = 'asuzr/totals_table.html'
+
+class LogTable(tables.Table):
+ def render_action_flag(self, value):
+ return {1: 'Добавление',
+ 2: 'Изменение',
+ 3: 'Удаление',
+ 4: 'Авторизация'}[value]
+
+ class Meta:
+ model = LogEntry
+ attrs = {'class': 'paleblue'}
diff --git a/asuzr/views.py b/asuzr/views.py
index c0e7e59..7c0f13a 100644
--- a/asuzr/views.py
+++ b/asuzr/views.py
@@ -3,6 +3,7 @@
from django.shortcuts import render, redirect, get_object_or_404
from django.http import HttpResponse, HttpResponseRedirect
from django.template import RequestContext, Context, loader
+from django.contrib.admin.models import LogEntry
from asuzr.models import *
from datetime import datetime, date, timedelta
import calendar
@@ -93,17 +94,24 @@ def get_attendance_table(year, month, prefix):
def get_day_orders_table(date, prefix):
orders = Order.objects.filter(date = date)
- orders_price = orders.aggregate(Sum('price'))
+ summaries = orders.aggregate(Sum('price'), Sum('paid'))
table = DayOrdersTable(orders, prefix = prefix)
table.verbose_name = 'Заказы на %s' % date.strftime('%d %B %Y г')
- table.set_summary(orders_price['price__sum'] or 0)
+ table.set_summary(summaries['price__sum'] or 0, summaries['paid__sum'] or 0)
return table
+def create_attendance_if_need(date):
+ attendance, created = Attendance.objects.get_or_create(date = date,
+ defaults={'calls': 0, 'visits': 0})
+ if created:
+ attendance.save()
+
@login_required
def visit_view(request):
curr_date = datetime.strptime(request.GET.get('date', date.today().strftime('%d.%m.%Y')), '%d.%m.%Y')
form = DateForm({'date':curr_date})
+ create_attendance_if_need(curr_date)
attendance_table, add_info = get_attendance_table(curr_date.year, curr_date.month, 'attendance-')
RequestConfig(request, paginate={'per_page': 32}).configure(attendance_table)
@@ -271,3 +279,10 @@ def prod_plan_view(request):
form = DateForm({'date':curr_date})
RequestConfig(request).configure(table)
return render(request, 'asuzr/table.html', {'table': table, 'title': title, 'form': form})
+
+@login_required
+def log_view(request):
+ log = LogEntry.objects.all()
+ table = LogTable(log)
+ RequestConfig(request).configure(table)
+ return render(request, 'asuzr/table.html', {'table': table, 'title': 'Журнал операций'})
diff --git a/record/urls.py b/record/urls.py
index 390c34f..f574d7a 100644
--- a/record/urls.py
+++ b/record/urls.py
@@ -23,6 +23,7 @@ urlpatterns = patterns('',
url(r'^sketches/delete/$', 'asuzr.views.delete_sketch'),
url(r'^prodplan/$', 'asuzr.views.prod_plan_view'),
url(r'^admin/', include(admin.site.urls)),
+ url(r'^log/$', 'asuzr.views.log_view'),
url(r'^inplaceeditform/', include('inplaceeditform.urls')),
url(r'^accounts/login/$', login),
url(r'^accounts/logout/$', logout),
diff --git a/templates/asuzr/base.html b/templates/asuzr/base.html
index 5e3a587..15ceb25 100644
--- a/templates/asuzr/base.html
+++ b/templates/asuzr/base.html
@@ -48,7 +48,10 @@