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):
|
||||
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
|
||||
|
||||
@@ -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']
|
||||
|
||||
@@ -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):
|
||||
|
||||
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
|
||||
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 = '''
|
||||
@@ -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('<a href="%s?date=%s">%s</a>' % (
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -120,13 +120,17 @@ 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', {
|
||||
'table1': attendance_table,
|
||||
'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):
|
||||
|
||||
@@ -109,3 +109,4 @@ from django.utils.safestring import mark_safe
|
||||
|
||||
INPLACEEDIT_EDIT_EMPTY_VALUE = mark_safe(u'<div class="gray">Редактировать</div>')
|
||||
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'^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'^order/add/$', 'asuzr.views.add_order', name = 'add-order'),
|
||||
url(r'^orders/(?P<archive>\d+)/$', 'asuzr.views.orders',name='asuzr-orders'),
|
||||
url(r'^desreport/$', 'asuzr.views.desreport'),
|
||||
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/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'),
|
||||
@@ -35,3 +36,4 @@ if settings.DEBUG:
|
||||
urlpatterns += patterns('',
|
||||
(r'^media/(?P<path>.*)$', 'django.views.static.serve', {
|
||||
'document_root': settings.MEDIA_ROOT}))
|
||||
|
||||
|
||||
@@ -37,6 +37,13 @@
|
||||
.gray {
|
||||
color: lightgray;
|
||||
}
|
||||
#dateform {
|
||||
margin-left: 12px;
|
||||
margin-top: 6px;
|
||||
}
|
||||
body {
|
||||
background: #F5F5F5
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
@@ -65,9 +72,9 @@
|
||||
|
||||
|
||||
{% block controls %}
|
||||
{% if form %}
|
||||
<form method="get">
|
||||
{{ form }}
|
||||
{% if dateform %}
|
||||
<form id='dateform' method="get">
|
||||
{{ dateform }}
|
||||
<input type="submit" value="OK" />
|
||||
</form>
|
||||
{% endif %}
|
||||
|
||||
@@ -1,19 +1,43 @@
|
||||
{% extends "asuzr/base.html" %}
|
||||
{% load thumbnail %}
|
||||
{% load staticfiles %}
|
||||
{% block page %}
|
||||
<style>
|
||||
#list li{
|
||||
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>
|
||||
{% if sketch_list %}
|
||||
<ul id = "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 %}
|
||||
</ul>
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
||||
{% block additional %}
|
||||
<div class="inline">
|
||||
@@ -25,3 +49,4 @@
|
||||
</form>
|
||||
</div>
|
||||
{% endblock %}
|
||||
{% endblock %}
|
||||
@@ -3,8 +3,15 @@
|
||||
{% load render_table from django_tables2 %}
|
||||
|
||||
{% block page %}
|
||||
<div class="inline"><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:38%;"><div><h3>{{ table1.verbose_name }}</h3></div>{% render_table table1 %}</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 %}
|
||||
<div>
|
||||
<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