Merge branch 'master' of ssh://192.168.100.6/repo/record

Conflicts:
	asuzr/common.py
	asuzr/views.py
This commit is contained in:
2015-07-31 23:32:35 +05:00
13 changed files with 138 additions and 25 deletions

View File

@@ -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

View File

@@ -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']

View File

@@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
asuzr/static/rubbish.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 505 B

View File

@@ -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

View File

@@ -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):

View File

@@ -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'

View File

@@ -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}))

View File

@@ -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 %}

View File

@@ -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 %}

View File

@@ -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>

View 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 %}