diff --git a/asuzr/admin.py b/asuzr/admin.py
index cc26c8f..b3d6ac2 100644
--- a/asuzr/admin.py
+++ b/asuzr/admin.py
@@ -10,6 +10,7 @@ from asuzr.models import Attendance
from asuzr.models import Schedule
from asuzr.models import OrderCosts
from asuzr.models import CostItem
+from asuzr.forms import *
# Register your models here.
diff --git a/asuzr/forms.py b/asuzr/forms.py
index 39a535e..3947c56 100644
--- a/asuzr/forms.py
+++ b/asuzr/forms.py
@@ -2,8 +2,35 @@
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
+from django.contrib.admin.widgets import AdminDateWidget, FilteredSelectMultiple, RelatedFieldWidgetWrapper
+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' ' % (self.related_url, name))
+ output.append(u'
' % (settings.STATIC_URL, ('Add Another')))
+ return mark_safe(u''.join(output))
class DateForm (forms.Form):
date = forms.DateField(widget = AdminDateWidget(format='%d.%m.%Y'),
@@ -19,5 +46,22 @@ class DiapDateForm (forms.Form):
class OrderForm(ModelForm):
class Meta:
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)
+ )
diff --git a/asuzr/models.py b/asuzr/models.py
index e9c6a19..eb259f8 100644
--- a/asuzr/models.py
+++ b/asuzr/models.py
@@ -172,7 +172,7 @@ class OrderCosts(models.Model):
formula = models.CharField(max_length=150, null=True, blank = True)
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
return log_entry
-@receiver(post_save)
+#@receiver(post_save)
def after_save(*args, **kwargs):
instance = kwargs['instance']
if isinstance(instance, LogEntry): return
@@ -216,7 +216,7 @@ def after_save(*args, **kwargs):
entry = LogEntry(**log_entry)
entry.save()
-@receiver(post_delete)
+#@receiver(post_delete)
def after_delete(*args, **kwargs):
instance = kwargs['instance']
if isinstance(instance, Session): return
diff --git a/asuzr/tables.py b/asuzr/tables.py
index a29d868..e2c1357 100644
--- a/asuzr/tables.py
+++ b/asuzr/tables.py
@@ -229,7 +229,7 @@ class ProductionTable(tables.Table):
class Meta:
attrs = {'class': 'paleblue'}
- template = 'asuzr/totals_table.html'
+ template = 'asuzr/table_with_form.html'
class LogTable(tables.Table):
def render_action_flag(self, value):
diff --git a/asuzr/views.py b/asuzr/views.py
index 51750a2..d55c122 100644
--- a/asuzr/views.py
+++ b/asuzr/views.py
@@ -120,7 +120,7 @@ def visit_view(request):
orders_table = get_day_orders_table(curr_date, 'orders-')
RequestConfig(request).configure(orders_table)
- order_form = OrderForm()
+ order_form = OrderForm(initial = {'designer': request.user})
title = u'Таблица посещаемости на %s' % dateformat.format(curr_date, 'F Y')
return render(request, 'asuzr/table2.html', {
@@ -129,7 +129,8 @@ def visit_view(request):
'additional_info': add_info,
'title': title,
'dateform': form,
- 'model_form': order_form
+ 'add_form': order_form,
+ 'form_action': 'add-order'
})
@login_required
@@ -221,7 +222,7 @@ def sketches(request, order_id):
'title': u'Эскизы заказа %s' % curr_order})
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.save()
return redirect(visit_view)
@@ -260,16 +261,28 @@ def desreport(request):
@log_view_call
@login_required
def production_table(request, order_id):
- order_list = Order.objects.filter(is_done=False).order_by('-id')
- sel_order = Order.objects.filter(id=order_id)
- cost_items = sel_order.values('cost_items')
- t=loader.get_template('asuzr/order_costs.html')
- c=RequestContext(request,{
- 'order_list' : order_list,
- 'sel_order' : sel_order,
- 'cost_items' : cost_items,
- })
- return HttpResponse(t.render(c))
+ order_costs = OrderCosts.objects.filter(order=order_id)
+ table = ProductionTable(order_costs)
+ curr_order = Order.objects.get(pk = order_id)
+ title = u'Производственная таблица'
+ table.verbose_name = u'Заказ: %s' % (', '.join((curr_order.product.name, curr_order.address)))
+ table.verbose_name2 = u'Стоимость: %s' % str(curr_order.price)
+ costs_sum = order_costs.aggregate(Sum('value'))
+ table.set_summary(costs_sum['value__sum'] or 0)
+ table.set_balance(curr_order.price - (costs_sum['value__sum'] or 0))
+
+ 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
@login_required
diff --git a/record/urls.py b/record/urls.py
index e7c5937..911e527 100644
--- a/record/urls.py
+++ b/record/urls.py
@@ -20,6 +20,7 @@ urlpatterns = patterns('',
url(r'^orders/(?P\d+)/$', 'asuzr.views.orders',name='asuzr-orders'),
url(r'^desreport/$', 'asuzr.views.desreport'),
url(r'^production_table/(?P\d+)/$', 'asuzr.views.production_table'),
+ url(r'^production_table/add_item/(?P\d+)$', 'asuzr.views.production_table_add_item', name = 'add-cost-items'),
url(r'^sketches/(?P\d+)/$', 'asuzr.views.sketches'),
url(r'^sketches/delete/$', 'asuzr.views.delete_sketch', name = 'asuzr-del-sketch'),
url(r'^prodplan/$', 'asuzr.views.prod_plan_view'),
diff --git a/templates/asuzr/base.html b/templates/asuzr/base.html
index 1916e3c..2b6db80 100644
--- a/templates/asuzr/base.html
+++ b/templates/asuzr/base.html
@@ -8,6 +8,22 @@
{% inplace_static %}
+