Исправлены конфликты
This commit is contained in:
@@ -4,6 +4,8 @@
|
|||||||
from django.db import models
|
from django.db import models
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
from datetime import date, timedelta
|
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):
|
class Product(models.Model):
|
||||||
@@ -158,3 +160,23 @@ class OrderCosts(models.Model):
|
|||||||
|
|
||||||
def __unicode__(self):
|
def __unicode__(self):
|
||||||
return ', '.join((self.order.product.name, self.cost_item.name))
|
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)
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
from django.core.urlresolvers import reverse
|
from django.core.urlresolvers import reverse
|
||||||
from django.utils.safestring import mark_safe
|
from django.utils.safestring import mark_safe
|
||||||
from django.utils.html import escape
|
from django.utils.html import escape
|
||||||
|
from django.contrib.admin.models import LogEntry
|
||||||
import django_tables2 as tables
|
import django_tables2 as tables
|
||||||
from models import *
|
from models import *
|
||||||
|
|
||||||
@@ -48,7 +49,7 @@ class ThumbnailColumn(tables.TemplateColumn):
|
|||||||
template = '''
|
template = '''
|
||||||
{{% load thumbnail %}}
|
{{% load thumbnail %}}
|
||||||
|
|
||||||
{{% thumbnail record.{field} "100x100" as im %}}
|
{{% thumbnail record.{field} "200x200" as im %}}
|
||||||
<img src="{{{{ im.url }}}}">
|
<img src="{{{{ im.url }}}}">
|
||||||
{{% endthumbnail %}}
|
{{% endthumbnail %}}
|
||||||
'''.format(field = field_name)
|
'''.format(field = field_name)
|
||||||
@@ -162,10 +163,11 @@ class VisitTable(tables.Table):
|
|||||||
class DayOrdersTable(OrdersTable):
|
class DayOrdersTable(OrdersTable):
|
||||||
designer = tables.Column(verbose_name = 'Дизайнер')
|
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[1] = price
|
||||||
|
self.summary[2] = paid
|
||||||
|
|
||||||
def render_designer(self, value):
|
def render_designer(self, value):
|
||||||
return ' '.join((value.first_name, value.last_name))
|
return ' '.join((value.first_name, value.last_name))
|
||||||
@@ -174,9 +176,6 @@ class DayOrdersTable(OrdersTable):
|
|||||||
empty_text = 'Заказов для этого дня нет'
|
empty_text = 'Заказов для этого дня нет'
|
||||||
attrs = {'class': 'paleblue'}
|
attrs = {'class': 'paleblue'}
|
||||||
exclude = ('date',
|
exclude = ('date',
|
||||||
'delivery',
|
|
||||||
'lifting',
|
|
||||||
'paid',
|
|
||||||
'ostatok',
|
'ostatok',
|
||||||
'approved',
|
'approved',
|
||||||
'sketch',
|
'sketch',
|
||||||
@@ -184,7 +183,8 @@ class DayOrdersTable(OrdersTable):
|
|||||||
'is_done',
|
'is_done',
|
||||||
)
|
)
|
||||||
sequence = ('product',
|
sequence = ('product',
|
||||||
'price',
|
'price',
|
||||||
|
'paid',
|
||||||
'address',
|
'address',
|
||||||
'designer',
|
'designer',
|
||||||
'deadline',
|
'deadline',
|
||||||
@@ -220,3 +220,14 @@ class ProductionTable(tables.Table):
|
|||||||
class Meta:
|
class Meta:
|
||||||
attrs = {'class': 'paleblue'}
|
attrs = {'class': 'paleblue'}
|
||||||
template = 'asuzr/totals_table.html'
|
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'}
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
from django.shortcuts import render, redirect, get_object_or_404
|
from django.shortcuts import render, redirect, get_object_or_404
|
||||||
from django.http import HttpResponse, HttpResponseRedirect
|
from django.http import HttpResponse, HttpResponseRedirect
|
||||||
from django.template import RequestContext, Context, loader
|
from django.template import RequestContext, Context, loader
|
||||||
|
from django.contrib.admin.models import LogEntry
|
||||||
from asuzr.models import *
|
from asuzr.models import *
|
||||||
from datetime import datetime, date, timedelta
|
from datetime import datetime, date, timedelta
|
||||||
import calendar
|
import calendar
|
||||||
@@ -93,17 +94,24 @@ def get_attendance_table(year, month, prefix):
|
|||||||
|
|
||||||
def get_day_orders_table(date, prefix):
|
def get_day_orders_table(date, prefix):
|
||||||
orders = Order.objects.filter(date = date)
|
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 = DayOrdersTable(orders, prefix = prefix)
|
||||||
table.verbose_name = 'Заказы на %s' % date.strftime('%d %B %Y г')
|
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
|
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
|
@login_required
|
||||||
def visit_view(request):
|
def visit_view(request):
|
||||||
curr_date = datetime.strptime(request.GET.get('date', date.today().strftime('%d.%m.%Y')), '%d.%m.%Y')
|
curr_date = datetime.strptime(request.GET.get('date', date.today().strftime('%d.%m.%Y')), '%d.%m.%Y')
|
||||||
form = DateForm({'date':curr_date})
|
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-')
|
attendance_table, add_info = get_attendance_table(curr_date.year, curr_date.month, 'attendance-')
|
||||||
RequestConfig(request, paginate={'per_page': 32}).configure(attendance_table)
|
RequestConfig(request, paginate={'per_page': 32}).configure(attendance_table)
|
||||||
|
|
||||||
@@ -271,3 +279,10 @@ def prod_plan_view(request):
|
|||||||
form = DateForm({'date':curr_date})
|
form = DateForm({'date':curr_date})
|
||||||
RequestConfig(request).configure(table)
|
RequestConfig(request).configure(table)
|
||||||
return render(request, 'asuzr/table.html', {'table': table, 'title': title, 'form': form})
|
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': 'Журнал операций'})
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ urlpatterns = patterns('',
|
|||||||
url(r'^sketches/delete/$', 'asuzr.views.delete_sketch'),
|
url(r'^sketches/delete/$', 'asuzr.views.delete_sketch'),
|
||||||
url(r'^prodplan/$', 'asuzr.views.prod_plan_view'),
|
url(r'^prodplan/$', 'asuzr.views.prod_plan_view'),
|
||||||
url(r'^admin/', include(admin.site.urls)),
|
url(r'^admin/', include(admin.site.urls)),
|
||||||
|
url(r'^log/$', 'asuzr.views.log_view'),
|
||||||
url(r'^inplaceeditform/', include('inplaceeditform.urls')),
|
url(r'^inplaceeditform/', include('inplaceeditform.urls')),
|
||||||
url(r'^accounts/login/$', login),
|
url(r'^accounts/login/$', login),
|
||||||
url(r'^accounts/logout/$', logout),
|
url(r'^accounts/logout/$', logout),
|
||||||
|
|||||||
@@ -48,7 +48,10 @@
|
|||||||
<li><a href={% url 'asuzr.views.orders' 1 %}>Архивная таблица</a></li>
|
<li><a href={% url 'asuzr.views.orders' 1 %}>Архивная таблица</a></li>
|
||||||
<li><a href={% url 'asuzr.views.desreport' %}>Отчет по дизайнерам</a></li>
|
<li><a href={% url 'asuzr.views.desreport' %}>Отчет по дизайнерам</a></li>
|
||||||
<li><a href={% url 'asuzr.views.prod_plan_view' %}>Производственный план</a></li>
|
<li><a href={% url 'asuzr.views.prod_plan_view' %}>Производственный план</a></li>
|
||||||
{% if request.user.is_staff %}<li><a href={% url 'admin:index' %}>Администрирование</a></li>{% endif %}
|
{% if request.user.is_staff %}
|
||||||
|
<li><a href={% url 'asuzr.views.log_view' %}>Журнал операций</a></li>
|
||||||
|
<li><a href={% url 'admin:index' %}>Администрирование</a></li>
|
||||||
|
{% endif %}
|
||||||
</ul>
|
</ul>
|
||||||
<div id="user">
|
<div id="user">
|
||||||
{% if request.user.is_authenticated %}
|
{% if request.user.is_authenticated %}
|
||||||
|
|||||||
Reference in New Issue
Block a user