diff --git a/.gitignore b/.gitignore index 3dfbf94..7b6a36d 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ db* .directory sketches/* +media/* diff --git a/asuzr/models.py b/asuzr/models.py index 51ab9ac..132b4d0 100644 --- a/asuzr/models.py +++ b/asuzr/models.py @@ -88,6 +88,10 @@ class Order(models.Model): def approved_date(self): return self.approved.strftime("%d/%m/%Y %H:%M") + @property + def sketch(self): + return len(Sketch.objects.filter(order = self)) + @property def ostatok(self): return self.price-self.paid @@ -101,7 +105,7 @@ class Order(models.Model): #Эскизы class Sketch(models.Model): - sketch_file = models.FileField(upload_to = 'sketches') #путь к файу + sketch_file = models.FileField(upload_to = 'sketches/') #путь к файу order = models.ForeignKey(Order) #id заказа def __unicode__(self): diff --git a/asuzr/tables.py b/asuzr/tables.py index b2b493a..bc4ed69 100644 --- a/asuzr/tables.py +++ b/asuzr/tables.py @@ -11,9 +11,16 @@ def editable(field_name): class EditableColumn(tables.TemplateColumn): def __init__(self, field_name, *args, **kwargs): super(tables.TemplateColumn, self).__init__(*args, **kwargs) + print kwargs template = '{{% load inplace_edit %}}\n\n{{% inplace_edit "record.{field}" auto_height = 1 %}}'.format(field = field_name) self.template_code = template +class ThumbnailColumn(tables.TemplateColumn): + def __init__(self, field_name, *args, **kwargs): + super(tables.TemplateColumn, self).__init__(*args, **kwargs) + template = '{{% load thumbnail %}}\n\n{{% thumbnail record.{field} "100x100" as im %}}{{% endthumbnail %}}'.format(field = field_name) + self.template_code = template + class TestTable(tables.Table): name = EditableColumn('name', "Наименование") prod_period = EditableColumn('prod_period', "Время производства") @@ -33,7 +40,7 @@ class OrdersTable(tables.Table): paid = EditableColumn('paid', verbose_name = 'Оплачено') ostatok = tables.Column(verbose_name = 'Остаток') approved = EditableColumn('approved', verbose_name = 'Согласовано') - sketch = tables.LinkColumn('sketches', 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 = 'Сдан') id = tables.Column(visible = False) @@ -82,6 +89,10 @@ class DesignerTable(tables.Table): def render_sum_price(self, value): return '%0.1f' % value - + +class SketchesTable(tables.Table): + sketch_file = tables.FileColumn(verbose_name = 'Имя файла') + sketch_image = ThumbnailColumn('sketch_file', verbose_name = 'Эскиз', orderable = False) + class Meta: attrs = {'class': 'paleblue'} diff --git a/asuzr/templatetags/__init__.py b/asuzr/templatetags/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/asuzr/templatetags/filters.py b/asuzr/templatetags/filters.py new file mode 100644 index 0000000..ed1e053 --- /dev/null +++ b/asuzr/templatetags/filters.py @@ -0,0 +1,9 @@ +from django import template +from django.contrib.auth.models import Group + +register = template.Library() + +@register.filter(name='has_group') +def has_group(user, group_name): + group = Group.objects.get(name=group_name) + return True if group in user.groups.all() else False diff --git a/asuzr/views.py b/asuzr/views.py index e204f10..27b1647 100644 --- a/asuzr/views.py +++ b/asuzr/views.py @@ -105,6 +105,13 @@ def main(request, day, month, year): }) return HttpResponse(t.render(c)) +@login_required +def sketches(request, order_id): + curr_order = Order.objects.get(pk = order_id) + table = SketchesTable(Sketch.objects.filter(order = curr_order)) + RequestConfig(request).configure(table) + return render(request, 'asuzr/table.html', {'table': table, 'title': 'Эскизы заказа %s' % curr_order}) + @login_required def orders(request, archive): is_archive = (archive == '1') @@ -137,4 +144,4 @@ def production_table(request, order_id): 'sel_order' : sel_order, 'cost_items' : cost_items, }) - return HttpResponse(t.render(c)) \ No newline at end of file + return HttpResponse(t.render(c)) diff --git a/record/settings.py b/record/settings.py index 932441c..dacb4ba 100644 --- a/record/settings.py +++ b/record/settings.py @@ -39,7 +39,8 @@ INSTALLED_APPS = ( 'django.contrib.staticfiles', 'inplaceeditform', 'django_tables2', - 'asuzr' + 'sorl.thumbnail', + 'asuzr', ) MIDDLEWARE_CLASSES = ( @@ -85,6 +86,10 @@ USE_TZ = True STATIC_URL = '/static/' -TEMPLATE_DIRS = ('/home/anastasia/projects/django/record/templates/') +TEMPLATE_DIRS = ('templates/') TEMPLATE_CONTEXT_PROCESSORS += ('django.core.context_processors.request',) + +MEDIA_ROOT = 'media/' + +MEDIA_URL = 'http://127.0.0.1:8000/media/' diff --git a/record/urls.py b/record/urls.py index fab93ac..fabedd0 100644 --- a/record/urls.py +++ b/record/urls.py @@ -1,5 +1,8 @@ from django.conf.urls import patterns, include, url from django.contrib.auth.views import login, logout +from django.conf.urls.static import static +from django.contrib.staticfiles.urls import staticfiles_urlpatterns +from django.conf import settings from django.contrib import admin admin.autodiscover() @@ -9,18 +12,22 @@ js_info_dict = { } urlpatterns = patterns('', - # Examples: - # url(r'^$', 'record.views.home', name='home'), - # url(r'^blog/', include('blog.urls')), url(r'^product/$', 'asuzr.views.prod_list'), 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'^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'^admin/', include(admin.site.urls)), 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), ) + +if settings.DEBUG: + # static files (images, css, javascript, etc.) + urlpatterns += patterns('', + (r'^media/(?P.*)$', 'django.views.static.serve', { + 'document_root': settings.MEDIA_ROOT})) diff --git a/sketches/front_view.PDF b/sketches/front_view.PDF deleted file mode 100644 index 523275a..0000000 Binary files a/sketches/front_view.PDF and /dev/null differ diff --git a/sketches/top_view.PDF b/sketches/top_view.PDF deleted file mode 100644 index 9b48588..0000000 Binary files a/sketches/top_view.PDF and /dev/null differ diff --git a/templates/asuzr/base.html b/templates/asuzr/base.html index be82a8d..5911fbd 100644 --- a/templates/asuzr/base.html +++ b/templates/asuzr/base.html @@ -1,4 +1,6 @@ {% load inplace_edit %} +{% load filters %} + Автоматическая система учета заказов студии мебели Рекорд @@ -16,16 +18,29 @@ border: 1px solid #000; /* Рамка вокруг текста */ padding: 3px; /* Поля вокруг текста */ } - + #user { + float: right; + text-align: right; + } + #menu, #user { + display: inline; + } + -{% block menu %} - +{% block menu %} + +
+{% if request.user.is_authenticated %} Добро пожаловать, {{ request.user.first_name }} +{% else %}Вход{% endif %} +
Выход +
{% endblock %}

{% block title %}{{ title }}{% endblock %}