Исправлены конфликты

This commit is contained in:
Anastasia
2015-06-19 09:11:49 +05:00
11 changed files with 204 additions and 120 deletions

View File

@@ -105,7 +105,11 @@ class Order(models.Model):
#Эскизы
class Sketch(models.Model):
sketch_file = models.FileField(upload_to = 'sketches/') #путь к файу
def get_sketch_path(self, file_name):
template = 'sketches/%s'
return template % '' if self.order == None else '%s/%s' % ((template % self.order.id), file_name)
sketch_file = models.FileField(upload_to = get_sketch_path) #путь к файу
order = models.ForeignKey(Order) #id заказа
def __unicode__(self):

View File

@@ -17,12 +17,12 @@ class EditableColumn(tables.TemplateColumn):
main_part = ''
if object_name == '':
main_part = '''
{{% inplace_edit "record.{field}" auto_height = 1 %}}
{{% inplace_edit "record.{field}" auto_height = 1, auto_width = 1 %}}
'''
else:
main_part = '''
{{% if record.{object_name} %}}
{{% inplace_edit "record.{object_name}.{field}" auto_height = 1 %}}
{{% inplace_edit "record.{object_name}.{field}" auto_height = 1, auto_width = 1 %}}
{{% endif %}}
'''
template = template.format(main_part = main_part)
@@ -43,7 +43,7 @@ class ThumbnailColumn(tables.TemplateColumn):
class OrdersTable(tables.Table):
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.Column(verbose_name = 'Наименование')
delivery = EditableColumn('delivery', verbose_name = 'Доставка')
lifting = EditableColumn('lifting', verbose_name = 'Подъем')
@@ -55,18 +55,12 @@ class OrdersTable(tables.Table):
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)
designer = tables.Column(visible = False)
calls = tables.Column(visible = False)
contact = tables.Column(visible = False)
phone_num = tables.Column(visible = False)
cancelled = tables.Column(visible = False)
def render_price(self, value):
return '%0.1f' % value
return '%0.2f' % value
def render_ostatok(self, value):
return '%0.1f' % value
return '%0.2f' % value
class Meta:
model = Order
@@ -84,6 +78,7 @@ class OrdersTable(tables.Table):
'sketch',
'executor',
'is_done',)
exclude = ('id', 'calls', 'contact', 'phone_num', 'cancelled', 'designer', )
class ArchiveOrdersTable(OrdersTable):
calls = EditableColumn('calls', verbose_name = 'Обзвон')
@@ -112,6 +107,11 @@ class DesignerTable(tables.Table):
class SketchesTable(tables.Table):
sketch_file = tables.FileColumn(verbose_name = 'Имя файла')
sketch_image = ThumbnailColumn('sketch_file', verbose_name = 'Эскиз', orderable = False)
delete_sketch = tables.Column(verbose_name = 'Удалить', orderable = False, empty_values = ())
def render_delete_sketch(self, record):
return mark_safe(u'<a href="%s?pk=%s">Удалить</a>' %
(reverse('asuzr.views.delete_sketch'), escape(record.id)))
class Meta:
attrs = {'class': 'paleblue'}
@@ -146,6 +146,37 @@ class VisitTable(tables.Table):
orderable = False
template = 'asuzr/weekend_table.html'
class DayOrdersTable(OrdersTable):
designer = tables.Column(verbose_name = 'Дизайнер')
summary = ['Итого:', 0, '', '', '',]
def set_summary(self, price):
self.summary[1] = price
def render_designer(self, value):
return ' '.join((value.first_name, value.last_name))
class Meta:
attrs = {'class': 'paleblue'}
exclude = ('date',
'delivery',
'lifting',
'paid',
'ostatok',
'approved',
'sketch',
'executor',
'is_done',
)
sequence = ('product',
'price',
'address',
'designer',
'deadline',
)
template = 'asuzr/totals_table.html'
class ProdPlanTable(tables.Table):
date = tables.Column(verbose_name = 'Дата')
week_day = tables.Column(verbose_name = 'День недели', accessor = 'date.weekday_name')

View File

@@ -1,21 +1,16 @@
# -*- coding: utf-8 -*-
from django.shortcuts import render
from django.shortcuts import render, redirect, get_object_or_404
from django.http import HttpResponse, HttpResponseRedirect
from django.template import RequestContext, Context, loader
from asuzr.models import Product
from asuzr.models import Attendance
from asuzr.models import Order
from asuzr.models import OrderPlan
from asuzr.models import Schedule
from asuzr.models import ProdPlan
from asuzr.models import *
from datetime import datetime, date, timedelta
import calendar
from django.db.models import Count, Sum
from asuzr.common import custom_date
from django.contrib.auth.decorators import login_required
from tables import *
from forms import *
from asuzr.tables import *
from asuzr.forms import *
from django_tables2 import RequestConfig
@login_required
@@ -44,16 +39,12 @@ def get_orders_by_date(dt):
order_list = Order.objects.filter(date=dt).order_by('id')
return order_list
@login_required
def visit_view(request):
curr_date = datetime.strptime(request.GET.get('date', date.today().strftime('%d.%m.%Y')), '%d.%m.%Y')
form = DateForm(request.GET, initial = {'date': curr_date})
def get_attendance_table(year, month, prefix):
day_in_month = calendar.monthrange(year,month)[1]
sdate = date(year,month,1)
edate = date(year,month,day_in_month)
y,m = curr_date.year, curr_date.month
day_in_month = calendar.monthrange(y,m)[1]
month_days = {i+1: {'date': custom_date(y,m,i+1)} for i in range(day_in_month)}
sdate = date(y,m,1)
edate = date(y,m,day_in_month)
month_days = {i+1: {'date': custom_date(year,month,i+1)} for i in range(day_in_month)}
attend_list = Attendance.objects.filter(date__range = (sdate,edate))
attend_sum = attend_list.aggregate(Sum('calls'), Sum('visits'))
@@ -77,24 +68,55 @@ def visit_view(request):
else:
month_days[day]['designer'] = designer
table = VisitTable(month_days.values())
RequestConfig(request, paginate={'per_page': 32}).configure(table)
month_plan = OrderPlan.objects.filter(date = sdate).first()
month_plan = 0 if month_plan == None else month_plan.plan
month_balance = month_plan - (order_sum['price__sum'] or 0)
additional_info = {'title': 'Справочно',
'rows': [
{'title': 'ПЛАН', 'value': month_plan},
{'title': 'Осталось до выполнения', 'value': month_balance},
]
}
table = VisitTable(month_days.values(), prefix = prefix)
table.verbose_name = 'Сводная информация'
table.set_summaries({
'calls': attend_sum['calls__sum'],
'visits': attend_sum['visits__sum'],
'orders': order_sum['product__count'],
'cost': order_sum['price__sum'],
'calls': attend_sum['calls__sum'] or 0,
'visits': attend_sum['visits__sum'] or 0,
'orders': order_sum['product__count'] or 0,
'cost': order_sum['price__sum'] or 0,
})
title = 'Таблица посещаемости на %s г.' % curr_date.strftime('%B %Y')
if request.method == 'POST':
form = DateForm(request.POST)
if form.is_valid():
print form.cleaned_data
else:
form = DateForm()
return table, additional_info
return render(request, 'asuzr/table.html', {'table': table, 'title': title, 'form': form})
def get_day_orders_table(date, prefix):
orders = Order.objects.filter(date = date)
orders_price = orders.aggregate(Sum('price'))
table = DayOrdersTable(orders, prefix = prefix)
table.verbose_name = 'Заказы на %s' % date.strftime('%d %B %Y г')
table.set_summary(orders_price['price__sum'] or 0)
return table
@login_required
def visit_view(request):
curr_date = datetime.strptime(request.GET.get('date', date.today().strftime('%d.%m.%Y')), '%d.%m.%Y')
form = DateForm(request.GET, initial = {'date': curr_date})
attendance_table, add_info = get_attendance_table(curr_date.year, curr_date.month, 'attendance-')
RequestConfig(request, paginate={'per_page': 32}).configure(attendance_table)
orders_table = get_day_orders_table(curr_date, 'orders-')
RequestConfig(request).configure(orders_table)
title = 'Таблица посещаемости на %s' % curr_date.strftime('%B %Y г')
return render(request, 'asuzr/table2.html', {
'table1': attendance_table,
'table2': orders_table,
'additional_info': add_info,
'title': title,
'form': form})
@login_required
def main(request, day, month, year):
@@ -169,9 +191,28 @@ def main(request, day, month, year):
@login_required
def sketches(request, order_id):
curr_order = Order.objects.get(pk = order_id)
if request.method == 'POST':
if 'sketch_file' in request.FILES:
files = request.FILES.getlist('sketch_file')
for f in files:
instance = Sketch(sketch_file = f, order = curr_order)
instance.save()
return redirect(sketches, order_id = 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})
return render(request, 'asuzr/sketches.html', {
'order_id': order_id,
'table': table,
'title': 'Эскизы заказа %s' % curr_order})
def delete_sketch(request):
pk = request.GET.get('pk', -1)
sketch = get_object_or_404(Sketch, pk = pk)
order_id = sketch.order.pk
sketch.sketch_file.delete(save = False)
sketch.delete()
return redirect(sketches, order_id = order_id)
@login_required
def orders(request, archive):
@@ -226,12 +267,3 @@ def prod_plan_view(request):
title = u'Производственный план на %s - %s' % (sdate.strftime('%d.%m.%Y'), edate.strftime('%d.%m.%Y'))
RequestConfig(request).configure(table)
return render(request, 'asuzr/table.html', {'table': table, 'title': title})
def get_date(request):
if request.method == 'POST':
form = DateForm(request.POST)
if form.is_valid():
HttpResponse("AAA")
else:
form = DateForm()
return render(request, 'asuzr/date_control.html', {'form': form})

View File

@@ -87,8 +87,12 @@ STATIC_URL = '/static/'
TEMPLATE_DIRS = ('templates/')
TEMPLATE_CONTEXT_PROCESSORS += ('django.core.context_processors.request',)
TEMPLATE_CONTEXT_PROCESSORS += ('django.core.context_processors.request',
'django.core.context_processors.csrf',
)
MEDIA_ROOT = 'media/'
MEDIA_URL = 'http://127.0.0.1:8000/media/'
THUMBNAIL_ENGINE = 'sorl.thumbnail.engines.convert_engine.Engine'

View File

@@ -20,13 +20,13 @@ urlpatterns = patterns('',
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'^prodplan/$', 'asuzr.views.prod_plan_view'),
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),
url(r'^test/$', 'asuzr.views.get_date'),
)
if settings.DEBUG:

View File

@@ -30,13 +30,17 @@
table.paleblue tr.weekend {
background-color: #FFE4E1
}
.inline {
display: inline-block;
vertical-align: top;
}
</style>
</head>
<body>
<div class="breadcrumbs">
{% block menu %}
<ul id="menu" class="hr">
<li><a href={% url 'asuzr-main' %}>Таблица посещаемости</a></li>
<li><a href={% url 'asuzr.views.visit_view' %}>Таблица посещаемости</a></li>
<li><a href={% url 'asuzr.views.orders' 0 %}>Таблица выхода заказов</a></li>
<li><a href={% url 'asuzr.views.orders' 1 %}>Архивная таблица</a></li>
<li><a href={% url 'asuzr.views.desreport' %}>Отчет по дизайнерам</a></li>

View File

@@ -0,0 +1,12 @@
{% extends "asuzr/table.html" %}
{% block additional %}
<div class="inline">
<form action="/sketches/{{ order_id }}/" method="POST" enctype="multipart/form-data">
{% csrf_token %}
<div>Добавить эскизы:</div>
<input type="file" name="sketch_file" multiple />
<input type="submit" text="Добавить эскиз">
</form>
</div>
{% endblock %}

View File

@@ -3,6 +3,10 @@
{% load render_table from django_tables2 %}
{% block page %}
{% block table %}
{% render_table table %}
{% endblock %}
{% block additional %}
{% endblock %}
{% endblock %}

View File

@@ -0,0 +1,24 @@
{% extends "asuzr/base.html" %}
{% load inplace_edit %}
{% 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>
{% if additional_info %}
<div>
<hr>
<div>
<h3>{{ additional_info.title }}</h3>
</div>
<div class="table-container">
<table class="paleblue">
{% for row in additional_info.rows %}
<tr><td>{{ row.title }}</td><td>{{ row.value }}</td></tr>
{% endfor %}
</table>
</div>
</div>
{% endif %}
{% endblock %}

View File

@@ -0,0 +1,15 @@
{% extends "django_tables2/table.html" %}
{% load django_tables2 %}
{% load i18n %}
{% block table.tfoot %}
<tfoot>
{% if table.summary %}
<tr>
{% for summary in table.summary %}
<td> {{ summary }} </td>
{% endfor %}
</tr>
{% endif %}
</tfoot>
{% endblock table.tfoot %}

View File

@@ -1,28 +1,6 @@
{% spaceless %}
{% extends "asuzr/totals_table.html" %}
{% load django_tables2 %}
{% load i18n %}
{% if table.page %}
<div class="table-container">
{% endif %}
{% block table %}
<table{% if table.attrs %} {{ table.attrs.as_html }}{% endif %}>
{% nospaceless %}
{% block table.thead %}
<thead>
<tr>
{% for column in table.columns %}
{% if column.orderable %}
<th {{ column.attrs.th.as_html }}><a href="{% querystring table.prefixed_order_by_field=column.order_by_alias.next %}">{{ column.header }}</a></th>
{% else %}
<th {{ column.attrs.th.as_html }}>{{ column.header }}</th>
{% endif %}
{% endfor %}
</tr>
</thead>
{% endblock table.thead %}
{% block table.tbody %}
<tbody>
{% for row in table.page.object_list|default:table.rows %} {# support pagination #}
{% block table.tbody.row %}
<tr class="
{% if row.date.is_weekend %}weekend{% else %}
@@ -33,28 +11,4 @@
{% 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 %}
</tbody>
{% endblock table.tbody %}
{% block table.tfoot %}
<tfoot>
{% if table.summary %}
<tr>
{% for summary in table.summary %}
<td> {{ summary }} </td>
{% endfor %}
</tr>
{% endif %}
</tfoot>
{% endblock table.tfoot %}
{% endnospaceless %}
</table>
{% endblock table %}
{% endspaceless %}