Merge branch 'master' of ssh://192.168.100.6/repo/record
Conflicts: asuzr/common.py asuzr/views.py
This commit is contained in:
@@ -16,15 +16,10 @@ class custom_date(date):
|
|||||||
def weekday_color(self):
|
def weekday_color(self):
|
||||||
return self.day_colors[self.weekday()]
|
return self.day_colors[self.weekday()]
|
||||||
|
|
||||||
@property
|
|
||||||
def date_dd_mm_yy(self):
|
|
||||||
return self.strftime('%d/%m/%Y')
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def is_weekend(self):
|
def is_weekend(self):
|
||||||
return self.weekday() >= 5
|
return self.weekday() >= 5
|
||||||
|
|
||||||
|
|
||||||
def log_view_call(fn):
|
def log_view_call(fn):
|
||||||
'''
|
'''
|
||||||
Wrapper for views log
|
Wrapper for views log
|
||||||
|
|||||||
@@ -1,7 +1,9 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
from django import forms
|
from django import forms
|
||||||
|
from django.forms import ModelForm
|
||||||
from datetime import date
|
from datetime import date
|
||||||
from django.contrib.admin.widgets import AdminDateWidget
|
from django.contrib.admin.widgets import AdminDateWidget
|
||||||
|
from asuzr.models import Order
|
||||||
|
|
||||||
class DateForm (forms.Form):
|
class DateForm (forms.Form):
|
||||||
date = forms.DateField(widget = AdminDateWidget, label = u'Дата', initial = date.today)
|
date = forms.DateField(widget = AdminDateWidget, label = u'Дата', initial = date.today)
|
||||||
@@ -9,3 +11,9 @@ class DateForm (forms.Form):
|
|||||||
class DiapDateForm (forms.Form):
|
class DiapDateForm (forms.Form):
|
||||||
sdate = forms.DateField(widget = AdminDateWidget, label = u'С', initial = date.today)
|
sdate = forms.DateField(widget = AdminDateWidget, label = u'С', initial = date.today)
|
||||||
edate = 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']
|
||||||
|
|
||||||
@@ -112,6 +112,13 @@ class Order(models.Model):
|
|||||||
|
|
||||||
return need_color
|
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):
|
class Sketch(models.Model):
|
||||||
def get_sketch_path(self, file_name):
|
def get_sketch_path(self, file_name):
|
||||||
|
|||||||
BIN
asuzr/static/del.png
Normal file
BIN
asuzr/static/del.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.1 KiB |
BIN
asuzr/static/rubbish.png
Normal file
BIN
asuzr/static/rubbish.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 505 B |
@@ -7,6 +7,17 @@ from django.contrib.admin.models import LogEntry
|
|||||||
import django_tables2 as tables
|
import django_tables2 as tables
|
||||||
from models import *
|
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):
|
class EditableColumn(tables.TemplateColumn):
|
||||||
def __init__(self, field_name, object_name = '', *args, **kwargs):
|
def __init__(self, field_name, object_name = '', *args, **kwargs):
|
||||||
template = '''
|
template = '''
|
||||||
@@ -56,9 +67,10 @@ class ThumbnailColumn(tables.TemplateColumn):
|
|||||||
super(ThumbnailColumn, self).__init__(template, *args, **kwargs)
|
super(ThumbnailColumn, self).__init__(template, *args, **kwargs)
|
||||||
|
|
||||||
class OrdersTable(tables.Table):
|
class OrdersTable(tables.Table):
|
||||||
date = tables.DateColumn('d/m/Y', verbose_name = 'Дата')
|
date = tables.DateColumn('d.m.Y', verbose_name = 'Дата')
|
||||||
deadline = 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 = 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 = 'Доставка')
|
delivery = EditableColumn('delivery', verbose_name = 'Доставка')
|
||||||
lifting = EditableColumn('lifting', verbose_name = 'Подъем')
|
lifting = EditableColumn('lifting', verbose_name = 'Подъем')
|
||||||
address = tables.Column(verbose_name = 'Адрес')
|
address = tables.Column(verbose_name = 'Адрес')
|
||||||
@@ -147,6 +159,7 @@ class VisitTable(tables.Table):
|
|||||||
idx = indexes[s]
|
idx = indexes[s]
|
||||||
self.summary[idx] = summaries[s]
|
self.summary[idx] = summaries[s]
|
||||||
|
|
||||||
|
|
||||||
def render_orders(self, value, record, column):
|
def render_orders(self, value, record, column):
|
||||||
value = 0 if value == None else value
|
value = 0 if value == None else value
|
||||||
return mark_safe('<a href="%s?date=%s">%s</a>' % (
|
return mark_safe('<a href="%s?date=%s">%s</a>' % (
|
||||||
@@ -189,7 +202,7 @@ class DayOrdersTable(OrdersTable):
|
|||||||
'designer',
|
'designer',
|
||||||
'deadline',
|
'deadline',
|
||||||
)
|
)
|
||||||
template = 'asuzr/totals_table.html'
|
template = 'asuzr/table_with_form.html'
|
||||||
|
|
||||||
class ProdPlanTable(tables.Table):
|
class ProdPlanTable(tables.Table):
|
||||||
date = tables.Column(verbose_name = 'Дата')
|
date = tables.Column(verbose_name = 'Дата')
|
||||||
@@ -203,14 +216,11 @@ class ProdPlanTable(tables.Table):
|
|||||||
|
|
||||||
class ProductionTable(tables.Table):
|
class ProductionTable(tables.Table):
|
||||||
cost_item = tables.Column(verbose_name = 'Комплектующие')
|
cost_item = tables.Column(verbose_name = 'Комплектующие')
|
||||||
value = tables.Column(verbose_name = 'Стоимость')
|
value = EditableColumn('value', verbose_name = 'Стоимость')
|
||||||
|
|
||||||
summary = ['Итого затрат', 0]
|
summary = ['Итого затрат', 0]
|
||||||
balance = ['Прибыль', 0]
|
balance = ['Прибыль', 0]
|
||||||
|
|
||||||
def render_value(self, value):
|
|
||||||
return '%0.2f' % value
|
|
||||||
|
|
||||||
def set_summary(self, value):
|
def set_summary(self, value):
|
||||||
self.summary[1] = value
|
self.summary[1] = value
|
||||||
|
|
||||||
|
|||||||
@@ -119,6 +119,8 @@ def visit_view(request):
|
|||||||
|
|
||||||
orders_table = get_day_orders_table(curr_date, 'orders-')
|
orders_table = get_day_orders_table(curr_date, 'orders-')
|
||||||
RequestConfig(request).configure(orders_table)
|
RequestConfig(request).configure(orders_table)
|
||||||
|
|
||||||
|
order_form = OrderForm()
|
||||||
|
|
||||||
title = u'Таблица посещаемости на %s' % dateformat.format(curr_date, 'F Y')
|
title = u'Таблица посещаемости на %s' % dateformat.format(curr_date, 'F Y')
|
||||||
return render(request, 'asuzr/table2.html', {
|
return render(request, 'asuzr/table2.html', {
|
||||||
@@ -126,7 +128,9 @@ def visit_view(request):
|
|||||||
'table2': orders_table,
|
'table2': orders_table,
|
||||||
'additional_info': add_info,
|
'additional_info': add_info,
|
||||||
'title': title,
|
'title': title,
|
||||||
'form': form})
|
'dateform': form,
|
||||||
|
'model_form': order_form
|
||||||
|
})
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
def main(request, day, month, year):
|
def main(request, day, month, year):
|
||||||
@@ -217,6 +221,12 @@ def sketches(request, order_id):
|
|||||||
'table': table,
|
'table': table,
|
||||||
'title': u'Эскизы заказа %s' % curr_order})
|
'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):
|
def delete_sketch(request):
|
||||||
pk = request.GET.get('pk', -1)
|
pk = request.GET.get('pk', -1)
|
||||||
sketch = get_object_or_404(Sketch, pk = pk)
|
sketch = get_object_or_404(Sketch, pk = pk)
|
||||||
@@ -246,7 +256,7 @@ def desreport(request):
|
|||||||
title = u'Отчет по дизайнерам за '+' - '.join((start_date, end_date))
|
title = u'Отчет по дизайнерам за '+' - '.join((start_date, end_date))
|
||||||
form = DiapDateForm({'sdate': sdate, 'edate': edate})
|
form = DiapDateForm({'sdate': sdate, 'edate': edate})
|
||||||
RequestConfig(request).configure(table)
|
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
|
@log_view_call
|
||||||
@login_required
|
@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'))
|
title = u'Производственный план на %s - %s' % (sdate.strftime('%d.%m.%Y'), edate.strftime('%d.%m.%Y'))
|
||||||
form = DateForm({'date':curr_date})
|
form = DateForm({'date':curr_date})
|
||||||
RequestConfig(request).configure(table)
|
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
|
@login_required
|
||||||
def log_view(request):
|
def log_view(request):
|
||||||
|
|||||||
@@ -109,3 +109,4 @@ from django.utils.safestring import mark_safe
|
|||||||
|
|
||||||
INPLACEEDIT_EDIT_EMPTY_VALUE = mark_safe(u'<div class="gray">Редактировать</div>')
|
INPLACEEDIT_EDIT_EMPTY_VALUE = mark_safe(u'<div class="gray">Редактировать</div>')
|
||||||
ADAPTOR_INPLACEEDIT_EDIT = 'inplaceeditform.perms.AdminDjangoPermEditInline'
|
ADAPTOR_INPLACEEDIT_EDIT = 'inplaceeditform.perms.AdminDjangoPermEditInline'
|
||||||
|
|
||||||
|
|||||||
@@ -16,11 +16,12 @@ urlpatterns = patterns('',
|
|||||||
url(r'^product/(?P<prod_id>\d+)/$', 'asuzr.views.prod_detail'),
|
url(r'^product/(?P<prod_id>\d+)/$', 'asuzr.views.prod_detail'),
|
||||||
url(r'^main/?(?P<day>\d+)?/?(?P<month>\d+)?/?(?P<year>\d+)?/$', 'asuzr.views.main', name='asuzr-main'),
|
url(r'^main/?(?P<day>\d+)?/?(?P<month>\d+)?/?(?P<year>\d+)?/$', 'asuzr.views.main', name='asuzr-main'),
|
||||||
url(r'^visits/$', 'asuzr.views.visit_view'),
|
url(r'^visits/$', 'asuzr.views.visit_view'),
|
||||||
|
url(r'^order/add/$', 'asuzr.views.add_order', name = 'add-order'),
|
||||||
url(r'^orders/(?P<archive>\d+)/$', 'asuzr.views.orders',name='asuzr-orders'),
|
url(r'^orders/(?P<archive>\d+)/$', 'asuzr.views.orders',name='asuzr-orders'),
|
||||||
url(r'^desreport/$', 'asuzr.views.desreport'),
|
url(r'^desreport/$', 'asuzr.views.desreport'),
|
||||||
url(r'^production_table/(?P<order_id>\d+)/$', 'asuzr.views.production_table'),
|
url(r'^production_table/(?P<order_id>\d+)/$', 'asuzr.views.production_table'),
|
||||||
url(r'^sketches/(?P<order_id>\d+)/$', 'asuzr.views.sketches'),
|
url(r'^sketches/(?P<order_id>\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'^prodplan/$', 'asuzr.views.prod_plan_view'),
|
||||||
url(r'^admin/', include(admin.site.urls)),
|
url(r'^admin/', include(admin.site.urls)),
|
||||||
url(r'^log/$', 'asuzr.views.log_view'),
|
url(r'^log/$', 'asuzr.views.log_view'),
|
||||||
@@ -34,4 +35,5 @@ if settings.DEBUG:
|
|||||||
# static files (images, css, javascript, etc.)
|
# static files (images, css, javascript, etc.)
|
||||||
urlpatterns += patterns('',
|
urlpatterns += patterns('',
|
||||||
(r'^media/(?P<path>.*)$', 'django.views.static.serve', {
|
(r'^media/(?P<path>.*)$', 'django.views.static.serve', {
|
||||||
'document_root': settings.MEDIA_ROOT}))
|
'document_root': settings.MEDIA_ROOT}))
|
||||||
|
|
||||||
|
|||||||
@@ -37,6 +37,13 @@
|
|||||||
.gray {
|
.gray {
|
||||||
color: lightgray;
|
color: lightgray;
|
||||||
}
|
}
|
||||||
|
#dateform {
|
||||||
|
margin-left: 12px;
|
||||||
|
margin-top: 6px;
|
||||||
|
}
|
||||||
|
body {
|
||||||
|
background: #F5F5F5
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
@@ -65,9 +72,9 @@
|
|||||||
|
|
||||||
|
|
||||||
{% block controls %}
|
{% block controls %}
|
||||||
{% if form %}
|
{% if dateform %}
|
||||||
<form method="get">
|
<form id='dateform' method="get">
|
||||||
{{ form }}
|
{{ dateform }}
|
||||||
<input type="submit" value="OK" />
|
<input type="submit" value="OK" />
|
||||||
</form>
|
</form>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|||||||
@@ -1,19 +1,43 @@
|
|||||||
{% extends "asuzr/base.html" %}
|
{% extends "asuzr/base.html" %}
|
||||||
{% load thumbnail %}
|
{% load thumbnail %}
|
||||||
|
{% load staticfiles %}
|
||||||
{% block page %}
|
{% block page %}
|
||||||
<style>
|
<style>
|
||||||
#list li{
|
#list li{
|
||||||
list-style-type: none; /* Прячем исходные маркеры */
|
list-style-type: none; /* Прячем исходные маркеры */
|
||||||
|
display: inline; /* Отображать как строчный элемент */
|
||||||
|
margin-right: 10px; /* Отступ слева */
|
||||||
|
padding: 5px; /* Поля вокруг текста */
|
||||||
}
|
}
|
||||||
|
#sketch {
|
||||||
|
width: 200px;
|
||||||
|
margin: 0px;
|
||||||
|
}
|
||||||
|
#sketch li {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
.sketch_img {
|
||||||
|
display: inline-block;
|
||||||
|
width: 200px;
|
||||||
|
height: 200px;
|
||||||
|
z-index: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.del_icon {
|
||||||
|
display: inline-block;
|
||||||
|
z-index: 2;
|
||||||
|
margin-left: -30px;
|
||||||
|
width: 20px;
|
||||||
|
height: 20px;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
{% if sketch_list %}
|
{% if sketch_list %}
|
||||||
<ul id = "list">
|
<ul id = "list">
|
||||||
{% for sketch in sketch_list %}
|
{% for sketch in sketch_list %}
|
||||||
<li> {% thumbnail sketch.sketch_file "200x200" crop="center" as im %} <a href = {{sketch.sketch_file.url}}> <img src = "{{ im.url }}"> </a>{% endthumbnail %} </li>
|
<li id="sketch"> {% thumbnail sketch.sketch_file "200x200" crop="center" as im %} <a class = "sketch_img" href = {{sketch.sketch_file.url}}> <img src = "{{ im.url }}"/> </a>{% endthumbnail %} <a class = "del_icon" title = "Удалить" href= "{% url 'asuzr-del-sketch' %}?pk={{sketch.id}}"><img src = "{% static "del.png" %}"/></a></li>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</ul>
|
</ul>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
{% block additional %}
|
{% block additional %}
|
||||||
<div class="inline">
|
<div class="inline">
|
||||||
@@ -25,3 +49,4 @@
|
|||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
{% endblock %}
|
||||||
@@ -3,8 +3,15 @@
|
|||||||
{% load render_table from django_tables2 %}
|
{% load render_table from django_tables2 %}
|
||||||
|
|
||||||
{% block page %}
|
{% block page %}
|
||||||
<div class="inline"><div><h3>{{ table1.verbose_name }}</h3></div>{% render_table table1 %}</div>
|
<div class="inline" style="width:38%;"><div><h3>{{ table1.verbose_name }}</h3></div>{% render_table table1 %}</div>
|
||||||
<div class="inline"><div><h3>{{ table2.verbose_name }}</h3></div>{% render_table table2 %}</div>
|
<div class="inline" style="width:20%;"><div><h3>{{ table2.verbose_name }}</h3></div>{% render_table table2 %}</div>
|
||||||
|
{% if order_form %}
|
||||||
|
<form action="{% url 'add-order' %}" method="POST" >
|
||||||
|
{% csrf_token %}
|
||||||
|
{{order_form}}
|
||||||
|
<input type="submit" text="Добавить заказ">
|
||||||
|
</form>
|
||||||
|
{% endif %}
|
||||||
{% if additional_info %}
|
{% if additional_info %}
|
||||||
<div>
|
<div>
|
||||||
<hr>
|
<hr>
|
||||||
|
|||||||
41
templates/asuzr/table_with_form.html
Normal file
41
templates/asuzr/table_with_form.html
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
{% extends "asuzr/totals_table.html" %}
|
||||||
|
{% load django_tables2 %}
|
||||||
|
{% load i18n %}
|
||||||
|
{% block table.tbody %}
|
||||||
|
<tbody>
|
||||||
|
{% for row in table.page.object_list|default:table.rows %} {# support pagination #}
|
||||||
|
{% block table.tbody.row %}
|
||||||
|
<tr class="{{ forloop.counter|divisibleby:2|yesno:"even,odd" }}"> {# avoid cycle for Django 1.2-1.6 compatibility #}
|
||||||
|
{% for column, cell in row.items %}
|
||||||
|
<td {{ column.attrs.td.as_html }}>{% if column.localize == None %}{{ cell }}{% else %}{% if column.localize %}{{ cell|localize }}{% else %}{{ cell|unlocalize }}{% endif %}{% endif %}</td>
|
||||||
|
{% endfor %}
|
||||||
|
</tr>
|
||||||
|
{% endblock table.tbody.row %}
|
||||||
|
{% empty %}
|
||||||
|
{% if table.empty_text %}
|
||||||
|
{% block table.tbody.empty_text %}
|
||||||
|
<tr><td colspan="{{ table.columns|length }}">{{ table.empty_text }}</td></tr>
|
||||||
|
{% endblock table.tbody.empty_text %}
|
||||||
|
{% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
{% if model_form %}
|
||||||
|
<form action="{% url 'add-order' %}" method="POST" >
|
||||||
|
{% csrf_token %}
|
||||||
|
<tr>
|
||||||
|
<td>{{model_form.product}}</td>
|
||||||
|
<td>{{model_form.price}}</td>
|
||||||
|
<td>{{model_form.paid}}</td>
|
||||||
|
<td>{{model_form.address}}</td>
|
||||||
|
<td></td>
|
||||||
|
<td>{{model_form.deadline}}</td>
|
||||||
|
<td>{{model_form.delivery}}</td>
|
||||||
|
<td>{{model_form.lifting}}</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td></td><td></td><td></td><td></td><td></td><td></td><td></td>
|
||||||
|
<td><input type="submit" text="Добавить заказ"></td>
|
||||||
|
</tr>
|
||||||
|
</form>
|
||||||
|
{% endif %}
|
||||||
|
</tbody>
|
||||||
|
{% endblock table.tbody %}
|
||||||
Reference in New Issue
Block a user