Files
record/asuzr/tables.py
2015-08-04 15:30:06 +05:00

245 lines
9.1 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# -*- coding: utf-8 -*-
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 *
class StaffLinkColumn(tables.TemplateColumn):
def __init__(self, view, *args, **kwargs):
template = '''
{{% if request.user.is_staff %}}
<a href={{% url '{view}' record.id %}}>{{{{ record.product }}}}</a>
{{% else %}}
{{{{ record.product }}}}
{{% endif %}}
'''.format(view = view)
super(StaffLinkColumn, self).__init__(template, *args, **kwargs)
class EditableColumn(tables.TemplateColumn):
def __init__(self, field_name, object_name = '', *args, **kwargs):
template = '''
{{{{% load inplace_edit %}}}}
{main_part}
'''
main_part = ''
params = 'auto_height = 1, auto_width = 1'
if object_name == '':
main_part = '''
{{% inplace_edit "record.{field}" {params} %}}
'''
else:
main_part = '''
{{% if record.{object_name} %}}
{{% inplace_edit "record.{object_name}.{field}" {params} %}}
{{% endif %}}
'''
template = template.format(main_part = main_part)
template = template.format(field = field_name, object_name = object_name, params = params)
super(EditableColumn, self).__init__(template, *args, **kwargs)
class ColoredEditableColumn(EditableColumn):
def __init__(self, field_name, object_name = '', condition_field = None, *args, **kwargs):
super(ColoredEditableColumn, self).__init__(field_name, object_name, *args, **kwargs)
self.condition_field = condition_field
def render(self, record, **kwargs):
if self.condition_field != None and eval('record.%s' % self.condition_field):
self.attrs = {'td': {'bgcolor': '#FFE4E1'}}
else:
self.attrs = {}
return super(ColoredEditableColumn, self).render(record, **kwargs)
class ThumbnailColumn(tables.TemplateColumn):
def __init__(self, field_name, *args, **kwargs):
template = '''
{{% load thumbnail %}}
{{% thumbnail record.{field} "200x200" as im %}}
<img src="{{{{ im.url }}}}">
{{% endthumbnail %}}
'''.format(field = field_name)
super(ThumbnailColumn, self).__init__(template, *args, **kwargs)
class OrdersTable(tables.Table):
date = tables.DateColumn('d.m.Y', verbose_name = 'Дата')
deadline = tables.DateColumn('d.m.Y', verbose_name = 'Срок сдачи')
#product = tables.LinkColumn('asuzr.views.production_table', verbose_name = 'Наименование', args=[tables.utils.A('pk')])
product = StaffLinkColumn(view = 'asuzr.views.production_table', verbose_name = 'Наименование')
delivery = EditableColumn('delivery', verbose_name = 'Доставка')
lifting = EditableColumn('lifting', verbose_name = 'Подъем')
address = tables.Column(verbose_name = 'Адрес')
price = tables.Column(verbose_name = 'Стоимость')
paid = EditableColumn('paid', verbose_name = 'Оплачено')
ostatok = tables.Column(verbose_name = 'Остаток')
approved = EditableColumn('approved', verbose_name = 'Согласовано')
sketch = tables.LinkColumn('asuzr.views.sketches', verbose_name = 'Эскизы', args=[tables.utils.A('pk')])
executor = EditableColumn('executor', verbose_name = 'Исполнитель')
is_done = EditableColumn('is_done', verbose_name = 'Сдан')
def render_price(self, value):
return '%0.2f' % value
def render_ostatok(self, value):
return '%0.2f' % value
class Meta:
model = Order
empty_text = 'Незавершенных заказов нет'
attrs = {'class': 'paleblue'}
sequence = ('date',
'deadline',
'product',
'delivery',
'lifting',
'address',
'price',
'paid',
'ostatok',
'approved',
'sketch',
'executor',
'is_done',)
exclude = ('id', 'calls', 'contact', 'phone_num', 'cancelled', 'designer', )
class ArchiveOrdersTable(OrdersTable):
calls = ColoredEditableColumn('calls', condition_field = 'calls_color', verbose_name = 'Обзвон')
class Meta:
attrs = {'class': 'paleblue'}
empty_text = 'Архивных заказов нет'
class DesignerTable(tables.Table):
full_name = tables.Column(empty_values=(), verbose_name = 'Дизайнер')
designer__count = tables.Column(verbose_name = 'Всего заказов')
price__sum = tables.Column(verbose_name = 'Общая сумма')
def render_full_name(self, record):
return " ".join((record['designer__first_name'], record['designer__last_name']))
def render_sum_price(self, value):
return '%0.1f' % value
class Meta:
empty_text = 'Заказов за этот период не было'
attrs = {'class': 'paleblue'}
class SketchesTable(tables.Table):
sketch_file = tables.FileColumn(verbose_name = 'Имя файла')
sketch_image = ThumbnailColumn('sketch_file', verbose_name = 'Эскиз', orderable = False)
delete_sketch = tables.Column(verbose_name = 'Удалить', orderable = False, empty_values = ())
def render_delete_sketch(self, record):
return mark_safe(u'<a href="%s?pk=%s">Удалить</a>' %
(reverse('asuzr.views.delete_sketch'), escape(record.id)))
class Meta:
empty_text = 'Эскизов для этого заказа нет'
attrs = {'class': 'paleblue'}
class VisitTable(tables.Table):
date = tables.Column(verbose_name = 'Дата')
week_day = tables.Column(verbose_name = 'День недели', accessor = 'date.weekday_name')
calls = EditableColumn('calls', 'attend' ,verbose_name = 'Звонки', accessor = 'attend.calls')
visits = EditableColumn('visits','attend', verbose_name = 'Посещения', accessor = 'attend.visits')
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>' % (
reverse('asuzr.views.visit_view'),
record['date'].strftime('%d.%m.%Y'),
escape(value),
))
class Meta:
attrs = {'class': 'paleblue'}
orderable = False
template = 'asuzr/weekend_table.html'
class DayOrdersTable(OrdersTable):
designer = tables.Column(verbose_name = 'Дизайнер')
summary = ['Итого:', 0, 0, '', '', '', '', '']
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))
class Meta:
empty_text = 'Заказов для этого дня нет'
attrs = {'class': 'paleblue'}
exclude = ('date',
'ostatok',
'approved',
'sketch',
'executor',
'is_done',
)
sequence = ('product',
'price',
'paid',
'address',
'designer',
'deadline',
)
template = 'asuzr/table_with_form.html'
class ProdPlanTable(tables.Table):
date = tables.Column(verbose_name = 'Дата')
week_day = tables.Column(verbose_name = 'День недели', accessor = 'date.weekday_name')
executor = EditableColumn('executor', 'prodplan',verbose_name = 'Исполнитель')
order = EditableColumn('order', 'prodplan', verbose_name = 'Заказ')
action = EditableColumn('action', 'prodplan', verbose_name = 'Действие')
class Meta:
attrs = {'class': 'paleblue'}
class ProductionTable(tables.Table):
cost_item = tables.Column(verbose_name = 'Комплектующие')
value = EditableColumn('value', verbose_name = 'Стоимость')
summary = ['Итого затрат', 0]
balance = ['Прибыль', 0]
def set_summary(self, value):
self.summary[1] = value
def set_balance(self, value):
self.balance[1] = value
class Meta:
attrs = {'class': 'paleblue'}
template = 'asuzr/table_with_form.html'
class LogTable(tables.Table):
def render_action_flag(self, value):
return {1: 'Добавление',
2: 'Изменение',
3: 'Удаление',
4: 'Авторизация',
5: 'Открытие страницы',}[value]
class Meta:
model = LogEntry
attrs = {'class': 'paleblue'}