| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243 |
- # -*- 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):
- executor = EditableColumn('executor', 'prodplan', verbose_name = 'Исполнитель')
- order = EditableColumn('order', 'prodplan', verbose_name = 'Заказ')
- action = EditableColumn('action', 'prodplan', verbose_name = 'Действие')
- class Meta:
- attrs = {'class': 'paleblue'}
- template = 'asuzr/table_with_form.html'
-
- 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'}
|