diff --git a/asuzr/common.py b/asuzr/common.py index bf6f8be..80d5049 100644 --- a/asuzr/common.py +++ b/asuzr/common.py @@ -16,15 +16,10 @@ class custom_date(date): def weekday_color(self): return self.day_colors[self.weekday()] - @property - def date_dd_mm_yy(self): - return self.strftime('%d/%m/%Y') - @property def is_weekend(self): return self.weekday() >= 5 - def log_view_call(fn): ''' Wrapper for views log diff --git a/asuzr/forms.py b/asuzr/forms.py index f02adf5..4cfee75 100644 --- a/asuzr/forms.py +++ b/asuzr/forms.py @@ -1,7 +1,9 @@ # -*- coding: utf-8 -*- from django import forms +from django.forms import ModelForm from datetime import date from django.contrib.admin.widgets import AdminDateWidget +from asuzr.models import Order class DateForm (forms.Form): date = forms.DateField(widget = AdminDateWidget, label = u'Дата', initial = date.today) @@ -9,3 +11,9 @@ class DateForm (forms.Form): class DiapDateForm (forms.Form): sdate = forms.DateField(widget = AdminDateWidget, label = u'С', initial = date.today) edate = forms.DateField(widget = AdminDateWidget, label = u'по', initial = date.today) + +class OrderForm(ModelForm): + class Meta: + model = Order + fields = ['product', 'price', 'paid', 'address', 'deadline', 'delivery', 'lifting'] + \ No newline at end of file diff --git a/asuzr/models.py b/asuzr/models.py index 0606b62..4f8239c 100644 --- a/asuzr/models.py +++ b/asuzr/models.py @@ -112,6 +112,13 @@ class Order(models.Model): return need_color + def save(self, *args, **kwargs): + super(Order, self).save(*args, **kwargs) + cost_items = CostItem.objects.filter(default_item = True) + for ci in cost_items: + new_order_cost = OrderCosts(order = self, cost_item = ci, value = 0, formula = '') + new_order_cost.save() + #Эскизы class Sketch(models.Model): def get_sketch_path(self, file_name): diff --git a/asuzr/static/del.png b/asuzr/static/del.png new file mode 100644 index 0000000..4ac4b81 Binary files /dev/null and b/asuzr/static/del.png differ diff --git a/asuzr/static/rubbish.png b/asuzr/static/rubbish.png new file mode 100644 index 0000000..679fe94 Binary files /dev/null and b/asuzr/static/rubbish.png differ diff --git a/asuzr/tables.py b/asuzr/tables.py index ec24486..a29d868 100644 --- a/asuzr/tables.py +++ b/asuzr/tables.py @@ -7,6 +7,17 @@ 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 %}} + {{{{ record.product }}}} + {{% 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 = ''' @@ -56,9 +67,10 @@ class ThumbnailColumn(tables.TemplateColumn): 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')]) + 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 = 'Адрес') @@ -147,6 +159,7 @@ class VisitTable(tables.Table): 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('%s' % ( @@ -189,7 +202,7 @@ class DayOrdersTable(OrdersTable): 'designer', 'deadline', ) - template = 'asuzr/totals_table.html' + template = 'asuzr/table_with_form.html' class ProdPlanTable(tables.Table): date = tables.Column(verbose_name = 'Дата') @@ -203,14 +216,11 @@ class ProdPlanTable(tables.Table): class ProductionTable(tables.Table): cost_item = tables.Column(verbose_name = 'Комплектующие') - value = tables.Column(verbose_name = 'Стоимость') + value = EditableColumn('value', verbose_name = 'Стоимость') summary = ['Итого затрат', 0] balance = ['Прибыль', 0] - def render_value(self, value): - return '%0.2f' % value - def set_summary(self, value): self.summary[1] = value diff --git a/asuzr/views.py b/asuzr/views.py index 7d3cb17..e83a82a 100644 --- a/asuzr/views.py +++ b/asuzr/views.py @@ -119,6 +119,8 @@ def visit_view(request): orders_table = get_day_orders_table(curr_date, 'orders-') RequestConfig(request).configure(orders_table) + + order_form = OrderForm() title = u'Таблица посещаемости на %s' % dateformat.format(curr_date, 'F Y') return render(request, 'asuzr/table2.html', { @@ -126,7 +128,9 @@ def visit_view(request): 'table2': orders_table, 'additional_info': add_info, 'title': title, - 'form': form}) + 'dateform': form, + 'model_form': order_form + }) @login_required def main(request, day, month, year): @@ -217,6 +221,12 @@ def sketches(request, order_id): 'table': table, 'title': u'Эскизы заказа %s' % curr_order}) +def add_order(request): + new_order = Order(date=date.today(), designer = request.user) + form = OrderForm(request.POST, instance = new_order) + form.save() + return redirect(visit_view) + def delete_sketch(request): pk = request.GET.get('pk', -1) sketch = get_object_or_404(Sketch, pk = pk) @@ -246,7 +256,7 @@ def desreport(request): title = u'Отчет по дизайнерам за '+' - '.join((start_date, end_date)) form = DiapDateForm({'sdate': sdate, 'edate': edate}) 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, 'dateform': form}) @log_view_call @login_required @@ -282,7 +292,7 @@ def prod_plan_view(request): title = u'Производственный план на %s - %s' % (sdate.strftime('%d.%m.%Y'), edate.strftime('%d.%m.%Y')) form = DateForm({'date':curr_date}) 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, 'dateform': form}) @login_required def log_view(request): diff --git a/record/settings.py b/record/settings.py index e1ba6e5..7d9d4aa 100644 --- a/record/settings.py +++ b/record/settings.py @@ -109,3 +109,4 @@ from django.utils.safestring import mark_safe INPLACEEDIT_EDIT_EMPTY_VALUE = mark_safe(u'
Редактировать
') ADAPTOR_INPLACEEDIT_EDIT = 'inplaceeditform.perms.AdminDjangoPermEditInline' + diff --git a/record/urls.py b/record/urls.py index f574d7a..e7c5937 100644 --- a/record/urls.py +++ b/record/urls.py @@ -16,11 +16,12 @@ urlpatterns = patterns('', url(r'^product/(?P\d+)/$', 'asuzr.views.prod_detail'), url(r'^main/?(?P\d+)?/?(?P\d+)?/?(?P\d+)?/$', 'asuzr.views.main', name='asuzr-main'), url(r'^visits/$', 'asuzr.views.visit_view'), + url(r'^order/add/$', 'asuzr.views.add_order', name = 'add-order'), url(r'^orders/(?P\d+)/$', 'asuzr.views.orders',name='asuzr-orders'), url(r'^desreport/$', 'asuzr.views.desreport'), url(r'^production_table/(?P\d+)/$', 'asuzr.views.production_table'), url(r'^sketches/(?P\d+)/$', 'asuzr.views.sketches'), - url(r'^sketches/delete/$', 'asuzr.views.delete_sketch'), + url(r'^sketches/delete/$', 'asuzr.views.delete_sketch', name = 'asuzr-del-sketch'), url(r'^prodplan/$', 'asuzr.views.prod_plan_view'), url(r'^admin/', include(admin.site.urls)), url(r'^log/$', 'asuzr.views.log_view'), @@ -34,4 +35,5 @@ if settings.DEBUG: # static files (images, css, javascript, etc.) urlpatterns += patterns('', (r'^media/(?P.*)$', 'django.views.static.serve', { - 'document_root': settings.MEDIA_ROOT})) + 'document_root': settings.MEDIA_ROOT})) + diff --git a/templates/asuzr/base.html b/templates/asuzr/base.html index 15ceb25..1916e3c 100644 --- a/templates/asuzr/base.html +++ b/templates/asuzr/base.html @@ -37,6 +37,13 @@ .gray { color: lightgray; } + #dateform { + margin-left: 12px; + margin-top: 6px; + } + body { + background: #F5F5F5 + } @@ -65,9 +72,9 @@ {% block controls %} -{% if form %} -
- {{ form }} +{% if dateform %} + + {{ dateform }}
{% endif %} diff --git a/templates/asuzr/sketches.html b/templates/asuzr/sketches.html index 0e30591..3e81d7e 100644 --- a/templates/asuzr/sketches.html +++ b/templates/asuzr/sketches.html @@ -1,19 +1,43 @@ {% extends "asuzr/base.html" %} {% load thumbnail %} +{% load staticfiles %} {% block page %} {% if sketch_list %}
    {% for sketch in sketch_list %} -
  • {% thumbnail sketch.sketch_file "200x200" crop="center" as im %} {% endthumbnail %}
  • +
  • {% thumbnail sketch.sketch_file "200x200" crop="center" as im %} {% endthumbnail %}
  • {% endfor %}
{% endif %} -{% endblock %} {% block additional %}
@@ -25,3 +49,4 @@
{% endblock %} +{% endblock %} \ No newline at end of file diff --git a/templates/asuzr/table2.html b/templates/asuzr/table2.html index d42a7f0..962483d 100644 --- a/templates/asuzr/table2.html +++ b/templates/asuzr/table2.html @@ -3,8 +3,15 @@ {% load render_table from django_tables2 %} {% block page %} -

{{ table1.verbose_name }}

{% render_table table1 %}
-

{{ table2.verbose_name }}

{% render_table table2 %}
+

{{ table1.verbose_name }}

{% render_table table1 %}
+

{{ table2.verbose_name }}

{% render_table table2 %}
+ {% if order_form %} +
+ {% csrf_token %} + {{order_form}} + +
+ {% endif %} {% if additional_info %}

diff --git a/templates/asuzr/table_with_form.html b/templates/asuzr/table_with_form.html new file mode 100644 index 0000000..f82f136 --- /dev/null +++ b/templates/asuzr/table_with_form.html @@ -0,0 +1,41 @@ +{% extends "asuzr/totals_table.html" %} +{% load django_tables2 %} +{% load i18n %} +{% block table.tbody %} + + {% for row in table.page.object_list|default:table.rows %} {# support pagination #} + {% block table.tbody.row %} + {# avoid cycle for Django 1.2-1.6 compatibility #} + {% for column, cell in row.items %} + {% if column.localize == None %}{{ cell }}{% else %}{% if column.localize %}{{ cell|localize }}{% else %}{{ cell|unlocalize }}{% endif %}{% endif %} + {% endfor %} + + {% endblock table.tbody.row %} + {% empty %} + {% if table.empty_text %} + {% block table.tbody.empty_text %} + {{ table.empty_text }} + {% endblock table.tbody.empty_text %} + {% endif %} + {% endfor %} + {% if model_form %} +
+ {% csrf_token %} + + {{model_form.product}} + {{model_form.price}} + {{model_form.paid}} + {{model_form.address}} + + {{model_form.deadline}} + {{model_form.delivery}} + {{model_form.lifting}} + + + + + +
+ {% endif %} + +{% endblock table.tbody %} \ No newline at end of file