diff --git a/.gitignore b/.gitignore index 1b470ef..bda459f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ *swp *.pyc db* +record/settings.py sketches/* diff --git a/asuzr/models.py b/asuzr/models.py index a474807..f70c7bb 100644 --- a/asuzr/models.py +++ b/asuzr/models.py @@ -71,7 +71,7 @@ class Order(models.Model): contact = models.CharField(max_length=150, null=True, blank = True) #контактное лицо phone_num = models.CharField(max_length=150,null=True, blank = True) #контактный телефон cancelled = models.BooleanField(default=False) #отменен - cost_items = models.ManyToManyField(CostItem, through='OrderCosts') #статьи затрат + cost_items = models.ManyToManyField(CostItem, through='OrderCosts', related_name='+', null=True, blank=True) #статьи затрат def __unicode__(self): return ', '.join((self.date.strftime('%d %b %Y'), self.product.name, self.address)) diff --git a/asuzr/tables.py b/asuzr/tables.py new file mode 100644 index 0000000..68d64ef --- /dev/null +++ b/asuzr/tables.py @@ -0,0 +1,73 @@ +# -*- coding: utf-8 -*- + +from django.utils.safestring import mark_safe +import django_tables2 as tables +from models import * + +def editable(field_name): + return '{{% load inplace_edit %}}\n\n{{% inplace_edit "record.{field}" auto_height = 1 %}}'.format(field = field_name) + + +class EditableColumn(tables.TemplateColumn): + def __init__(self, field_name, *args, **kwargs): + super(tables.TemplateColumn, self).__init__(*args, **kwargs) + template = '{{% load inplace_edit %}}\n\n{{% inplace_edit "record.{field}" auto_height = 1 %}}'.format(field = field_name) + self.template_code = template + +class TestTable(tables.Table): + name = EditableColumn('name', "Наименование") + prod_period = EditableColumn('prod_period', "Время производства") + + class Meta: + model = Product + attrs = {"class": "paleblue"} + +class OrdersTable(tables.Table): + date = tables.DateColumn('d/m/Y', verbose_name = 'Дата') + deadline = tables.DateColumn('d/m/Y/', verbose_name = 'Срок сдачи') + product = tables.Column(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('sketches', verbose_name = 'Эскиз') + executor = EditableColumn('executor', verbose_name = 'Исполнитель') + is_done = EditableColumn('is_done', verbose_name = 'Сдан') + id = tables.Column(visible = False) + designer = tables.Column(visible = False) + calls = tables.Column(visible = False) + contact = tables.Column(visible = False) + phone_num = tables.Column(visible = False) + cancelled = tables.Column(visible = False) + + def render_price(self, value): + return '%0.1f' % value + + def render_ostatok(self, value): + return '%0.1f' % value + + class Meta: + model = Order + attrs = {'class': 'paleblue'} + sequence = ('date', + 'deadline', + 'product', + 'delivery', + 'lifting', + 'address', + 'price', + 'paid', + 'ostatok', + 'approved', + 'sketch', + 'executor', + 'is_done',) + +class ArchiveOrdersTable(OrdersTable): + calls = EditableColumn('calls', verbose_name = 'Обзвон') + + class Meta: + attrs = {'class': 'paleblue'} diff --git a/asuzr/views.py b/asuzr/views.py index 8de6fe2..d222342 100644 --- a/asuzr/views.py +++ b/asuzr/views.py @@ -1,3 +1,5 @@ +# -*- coding: utf-8 -*- + from django.shortcuts import render from django.http import HttpResponse from django.template import RequestContext, Context, loader @@ -11,6 +13,8 @@ import calendar from django.db.models import Count, Sum from asuzr.common import custom_date from django.contrib.auth.decorators import login_required +from tables import * +from django_tables2 import RequestConfig @login_required def prod_list(request): @@ -102,23 +106,13 @@ def main(request, day, month, year): return HttpResponse(t.render(c)) @login_required -def orders (request, archive): - if archive=='0': - is_done_value=False - else: - is_done_value=True - order_id=request.GET.get('order_id',0) - order_list = Order.objects.filter(is_done=is_done_value).order_by('-id') - sel_order = Order.objects.filter(id=order_id) - cost_items = sel_order.values('cost_items') - t=loader.get_template('asuzr/orders.html') - c=RequestContext(request, { - 'order_list': order_list, - 'archive': is_done_value, - 'sel_order' : sel_order, - 'cost_items' : cost_items, - }) - return HttpResponse(t.render(c)) +def orders(request, archive): + is_archive = (archive == '1') + Table = ArchiveOrdersTable if is_archive else OrdersTable + table = Table(Order.objects.filter(is_done = is_archive)) + title = 'Архивная таблица заказов' if is_archive else 'Таблица выхода заказов' + RequestConfig(request).configure(table) + return render(request, 'asuzr/table.html', {'table': table, 'title': title}) @login_required def desreport(request): @@ -146,8 +140,4 @@ def production_table(request, order_id): 'sel_order' : sel_order, 'cost_items' : cost_items, }) - return HttpResponse(t.render(c)) - - - - + return HttpResponse(t.render(c)) \ No newline at end of file diff --git a/record/urls.py b/record/urls.py index 9a97213..fab93ac 100644 --- a/record/urls.py +++ b/record/urls.py @@ -4,6 +4,10 @@ from django.contrib.auth.views import login, logout from django.contrib import admin admin.autodiscover() +js_info_dict = { + 'packages': ('django.conf',), +} + urlpatterns = patterns('', # Examples: # url(r'^$', 'record.views.home', name='home'), @@ -18,4 +22,5 @@ urlpatterns = patterns('', url(r'^inplaceeditform/', include('inplaceeditform.urls')), url(r'^accounts/login/$', login), url(r'^accounts/logout/$', logout), + url(r'^jsi18n$', 'django.views.i18n.javascript_catalog', js_info_dict), ) diff --git a/templates/asuzr/attendance.html b/templates/asuzr/attendance.html index b0556d7..842ea68 100644 --- a/templates/asuzr/attendance.html +++ b/templates/asuzr/attendance.html @@ -15,8 +15,8 @@ {{ attend.date.date_dd_mm_yy}} {{ attend.date.weekday_name}} - {{attend.attend.calls}} - {{attend.attend.visits}} + {% if attend.attend %}{% inplace_edit "attend.attend.calls" %}{% endif %} + {% if attend.attend %}{% inplace_edit "attend.attend.visits" %}{% endif %} {{ attend.orders_count}} {{ attend.orders_price}} {{ attend.designers}} diff --git a/templates/asuzr/base.html b/templates/asuzr/base.html index bc0e969..be82a8d 100644 --- a/templates/asuzr/base.html +++ b/templates/asuzr/base.html @@ -4,17 +4,30 @@ Автоматическая система учета заказов студии мебели Рекорд {% inplace_static %} + + {% block menu %} -