Merge branch 'master' of ssh://192.168.100.6/repo/record
Conflicts: asuzr/forms.py
This commit is contained in:
@@ -10,6 +10,7 @@ from asuzr.models import Attendance
|
|||||||
from asuzr.models import Schedule
|
from asuzr.models import Schedule
|
||||||
from asuzr.models import OrderCosts
|
from asuzr.models import OrderCosts
|
||||||
from asuzr.models import CostItem
|
from asuzr.models import CostItem
|
||||||
|
from asuzr.forms import *
|
||||||
|
|
||||||
|
|
||||||
# Register your models here.
|
# Register your models here.
|
||||||
|
|||||||
@@ -2,8 +2,35 @@
|
|||||||
from django import forms
|
from django import forms
|
||||||
from django.forms import ModelForm
|
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, FilteredSelectMultiple, RelatedFieldWidgetWrapper
|
||||||
from asuzr.models import Order
|
from django.forms.extras.widgets import Select
|
||||||
|
from django.db.models.fields.related import ManyToOneRel
|
||||||
|
from asuzr.models import *
|
||||||
|
from django.core.urlresolvers import reverse
|
||||||
|
from django.utils.safestring import mark_safe
|
||||||
|
from django.forms import widgets
|
||||||
|
from django.conf import settings
|
||||||
|
|
||||||
|
class RelatedFieldWidgetCanAdd(widgets.Select):
|
||||||
|
|
||||||
|
def __init__(self, related_model, related_url=None, *args, **kw):
|
||||||
|
|
||||||
|
super(RelatedFieldWidgetCanAdd, self).__init__(*args, **kw)
|
||||||
|
|
||||||
|
if not related_url:
|
||||||
|
rel_to = related_model
|
||||||
|
info = (rel_to._meta.app_label, rel_to._meta.object_name.lower())
|
||||||
|
related_url = 'admin:%s_%s_add' % info
|
||||||
|
|
||||||
|
# Be careful that here "reverse" is not allowed
|
||||||
|
self.related_url = related_url
|
||||||
|
|
||||||
|
def render(self, name, value, *args, **kwargs):
|
||||||
|
self.related_url = reverse(self.related_url)
|
||||||
|
output = [super(RelatedFieldWidgetCanAdd, self).render(name, value, *args, **kwargs)]
|
||||||
|
output.append(u'<a href="%s" class="add-another" id="add_id_%s" onclick="return showAddAnotherPopup(this);"> ' % (self.related_url, name))
|
||||||
|
output.append(u'<img src="%sadmin/img/icon_addlink.gif" width="10" height="10" alt="%s"/></a>' % (settings.STATIC_URL, ('Add Another')))
|
||||||
|
return mark_safe(u''.join(output))
|
||||||
|
|
||||||
class DateForm (forms.Form):
|
class DateForm (forms.Form):
|
||||||
date = forms.DateField(widget = AdminDateWidget(format='%d.%m.%Y'),
|
date = forms.DateField(widget = AdminDateWidget(format='%d.%m.%Y'),
|
||||||
@@ -19,5 +46,22 @@ class DiapDateForm (forms.Form):
|
|||||||
class OrderForm(ModelForm):
|
class OrderForm(ModelForm):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Order
|
model = Order
|
||||||
fields = ['product', 'price', 'paid', 'address', 'deadline', 'delivery', 'lifting']
|
fields = ['product', 'price', 'paid', 'address', 'designer', 'deadline', 'delivery', 'lifting']
|
||||||
|
|
||||||
|
product = forms.ModelChoiceField(
|
||||||
|
required=False,
|
||||||
|
queryset = Product.objects.all(),
|
||||||
|
widget=RelatedFieldWidgetCanAdd(Product)
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class ProdTableForm(ModelForm):
|
||||||
|
class Meta:
|
||||||
|
model = OrderCosts
|
||||||
|
fields = ['cost_item', 'value']
|
||||||
|
|
||||||
|
cost_item = forms.ModelChoiceField(
|
||||||
|
required=False,
|
||||||
|
queryset = CostItem.objects.all(),
|
||||||
|
widget=RelatedFieldWidgetCanAdd(CostItem)
|
||||||
|
)
|
||||||
|
|||||||
@@ -172,7 +172,7 @@ class OrderCosts(models.Model):
|
|||||||
formula = models.CharField(max_length=150, null=True, blank = True)
|
formula = models.CharField(max_length=150, null=True, blank = True)
|
||||||
|
|
||||||
def __unicode__(self):
|
def __unicode__(self):
|
||||||
return ', '.join((self.order.product.name, self.cost_item.name))
|
return ', '.join((str(self.order.id), self.order.product.name, self.cost_item.name))
|
||||||
|
|
||||||
|
|
||||||
############################################################################################
|
############################################################################################
|
||||||
@@ -205,7 +205,7 @@ def construct_log_entry(**kwargs):
|
|||||||
log_entry['object_id'] = instance.id
|
log_entry['object_id'] = instance.id
|
||||||
return log_entry
|
return log_entry
|
||||||
|
|
||||||
@receiver(post_save)
|
#@receiver(post_save)
|
||||||
def after_save(*args, **kwargs):
|
def after_save(*args, **kwargs):
|
||||||
instance = kwargs['instance']
|
instance = kwargs['instance']
|
||||||
if isinstance(instance, LogEntry): return
|
if isinstance(instance, LogEntry): return
|
||||||
@@ -216,7 +216,7 @@ def after_save(*args, **kwargs):
|
|||||||
entry = LogEntry(**log_entry)
|
entry = LogEntry(**log_entry)
|
||||||
entry.save()
|
entry.save()
|
||||||
|
|
||||||
@receiver(post_delete)
|
#@receiver(post_delete)
|
||||||
def after_delete(*args, **kwargs):
|
def after_delete(*args, **kwargs):
|
||||||
instance = kwargs['instance']
|
instance = kwargs['instance']
|
||||||
if isinstance(instance, Session): return
|
if isinstance(instance, Session): return
|
||||||
|
|||||||
@@ -229,7 +229,7 @@ class ProductionTable(tables.Table):
|
|||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
attrs = {'class': 'paleblue'}
|
attrs = {'class': 'paleblue'}
|
||||||
template = 'asuzr/totals_table.html'
|
template = 'asuzr/table_with_form.html'
|
||||||
|
|
||||||
class LogTable(tables.Table):
|
class LogTable(tables.Table):
|
||||||
def render_action_flag(self, value):
|
def render_action_flag(self, value):
|
||||||
|
|||||||
@@ -120,7 +120,7 @@ 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()
|
order_form = OrderForm(initial = {'designer': request.user})
|
||||||
|
|
||||||
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', {
|
||||||
@@ -129,7 +129,8 @@ def visit_view(request):
|
|||||||
'additional_info': add_info,
|
'additional_info': add_info,
|
||||||
'title': title,
|
'title': title,
|
||||||
'dateform': form,
|
'dateform': form,
|
||||||
'model_form': order_form
|
'add_form': order_form,
|
||||||
|
'form_action': 'add-order'
|
||||||
})
|
})
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
@@ -221,7 +222,7 @@ def sketches(request, order_id):
|
|||||||
'title': u'Эскизы заказа %s' % curr_order})
|
'title': u'Эскизы заказа %s' % curr_order})
|
||||||
|
|
||||||
def add_order(request):
|
def add_order(request):
|
||||||
new_order = Order(date=date.today(), designer = request.user)
|
new_order = Order(date=date.today())
|
||||||
form = OrderForm(request.POST, instance = new_order)
|
form = OrderForm(request.POST, instance = new_order)
|
||||||
form.save()
|
form.save()
|
||||||
return redirect(visit_view)
|
return redirect(visit_view)
|
||||||
@@ -260,16 +261,28 @@ def desreport(request):
|
|||||||
@log_view_call
|
@log_view_call
|
||||||
@login_required
|
@login_required
|
||||||
def production_table(request, order_id):
|
def production_table(request, order_id):
|
||||||
order_list = Order.objects.filter(is_done=False).order_by('-id')
|
order_costs = OrderCosts.objects.filter(order=order_id)
|
||||||
sel_order = Order.objects.filter(id=order_id)
|
table = ProductionTable(order_costs)
|
||||||
cost_items = sel_order.values('cost_items')
|
curr_order = Order.objects.get(pk = order_id)
|
||||||
t=loader.get_template('asuzr/order_costs.html')
|
title = u'Производственная таблица'
|
||||||
c=RequestContext(request,{
|
table.verbose_name = u'Заказ: %s' % (', '.join((curr_order.product.name, curr_order.address)))
|
||||||
'order_list' : order_list,
|
table.verbose_name2 = u'Стоимость: %s' % str(curr_order.price)
|
||||||
'sel_order' : sel_order,
|
costs_sum = order_costs.aggregate(Sum('value'))
|
||||||
'cost_items' : cost_items,
|
table.set_summary(costs_sum['value__sum'] or 0)
|
||||||
})
|
table.set_balance(curr_order.price - (costs_sum['value__sum'] or 0))
|
||||||
return HttpResponse(t.render(c))
|
|
||||||
|
form = ProdTableForm()
|
||||||
|
|
||||||
|
RequestConfig(request).configure(table)
|
||||||
|
return render(request, 'asuzr/table.html',
|
||||||
|
{'table': table, 'title': title, 'add_form': form, 'form_action': 'add-cost-items', 'params': order_id})
|
||||||
|
|
||||||
|
def production_table_add_item(request, order_id):
|
||||||
|
curr_order = Order.objects.get(pk = order_id)
|
||||||
|
new_item = OrderCosts(order=curr_order)
|
||||||
|
form = ProdTableForm(request.POST, instance = new_item)
|
||||||
|
form.save()
|
||||||
|
return redirect(production_table, order_id = order_id)
|
||||||
|
|
||||||
@log_view_call
|
@log_view_call
|
||||||
@login_required
|
@login_required
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ urlpatterns = patterns('',
|
|||||||
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'^production_table/add_item/(?P<order_id>\d+)$', 'asuzr.views.production_table_add_item', name = 'add-cost-items'),
|
||||||
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', name = 'asuzr-del-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'),
|
||||||
|
|||||||
@@ -8,6 +8,22 @@
|
|||||||
{% inplace_static %}
|
{% inplace_static %}
|
||||||
<link rel="stylesheet" href="{{ STATIC_URL }}django_tables2/themes/paleblue/css/screen.css" />
|
<link rel="stylesheet" href="{{ STATIC_URL }}django_tables2/themes/paleblue/css/screen.css" />
|
||||||
<link rel="stylesheet" href="{{ STATIC_URL }}admin/css/base.css" />
|
<link rel="stylesheet" href="{{ STATIC_URL }}admin/css/base.css" />
|
||||||
|
<script type="text/javascript" src="/static/admin/js/admin/RelatedObjectLookups.js">
|
||||||
|
|
||||||
|
function showAddAnotherPopup(triggeringLink) {
|
||||||
|
var name = triggeringLink.id.replace(/^add_/, '');
|
||||||
|
name = id_to_windowname(name);
|
||||||
|
href = triggeringLink.href
|
||||||
|
if (href.indexOf('?') == -1) {
|
||||||
|
href += '?_popup=1';
|
||||||
|
} else {
|
||||||
|
href += '&_popup=1';
|
||||||
|
}
|
||||||
|
var win = window.open(href, name, 'height=500,width=800,resizable=yes,scrollbars=yes');
|
||||||
|
win.focus();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
</script>
|
||||||
<style>
|
<style>
|
||||||
#menu {
|
#menu {
|
||||||
margin: 0; /* Обнуляем значение отступов */
|
margin: 0; /* Обнуляем значение отступов */
|
||||||
|
|||||||
@@ -3,8 +3,8 @@
|
|||||||
{% load render_table from django_tables2 %}
|
{% load render_table from django_tables2 %}
|
||||||
|
|
||||||
{% block page %}
|
{% block page %}
|
||||||
<div class="inline" style="width:38%;"><div><h3>{{ table1.verbose_name }}</h3></div>{% render_table table1 %}</div>
|
<div class="inline"><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>
|
<div class="inline"><div><h3>{{ table2.verbose_name }}</h3></div>{% render_table table2 %}</div>
|
||||||
{% if order_form %}
|
{% if order_form %}
|
||||||
<form action="{% url 'add-order' %}" method="POST" >
|
<form action="{% url 'add-order' %}" method="POST" >
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
{% load django_tables2 %}
|
{% load django_tables2 %}
|
||||||
{% load i18n %}
|
{% load i18n %}
|
||||||
{% block table.tbody %}
|
{% block table.tbody %}
|
||||||
|
|
||||||
<tbody>
|
<tbody>
|
||||||
{% for row in table.page.object_list|default:table.rows %} {# support pagination #}
|
{% for row in table.page.object_list|default:table.rows %} {# support pagination #}
|
||||||
{% block table.tbody.row %}
|
{% block table.tbody.row %}
|
||||||
@@ -18,21 +19,19 @@
|
|||||||
{% endblock table.tbody.empty_text %}
|
{% endblock table.tbody.empty_text %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
{% if model_form %}
|
{% if add_form %}
|
||||||
<form action="{% url 'add-order' %}" method="POST" >
|
{% if params %}
|
||||||
|
<form action="{% url form_action params %}" method="POST" >
|
||||||
|
{% else %}
|
||||||
|
<form action="{% url form_action %}" method="POST" >
|
||||||
|
{% endif %}
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<tr>
|
<tr>
|
||||||
<td>{{model_form.product}}</td>
|
{% for field in add_form %}
|
||||||
<td>{{model_form.price}}</td>
|
<td>{{field}}</td>
|
||||||
<td>{{model_form.paid}}</td>
|
{% endfor %}
|
||||||
<td>{{model_form.address}}</td>
|
|
||||||
<td></td>
|
|
||||||
<td>{{model_form.deadline}}</td>
|
|
||||||
<td>{{model_form.delivery}}</td>
|
|
||||||
<td>{{model_form.lifting}}</td>
|
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td></td><td></td><td></td><td></td><td></td><td></td><td></td>
|
|
||||||
<td><input type="submit" text="Добавить заказ"></td>
|
<td><input type="submit" text="Добавить заказ"></td>
|
||||||
</tr>
|
</tr>
|
||||||
</form>
|
</form>
|
||||||
|
|||||||
Reference in New Issue
Block a user