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 4cfee75..20cd68b 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'%s' % (settings.STATIC_URL, ('Add Another'))) + return mark_safe(u''.join(output)) class DateForm (forms.Form): date = forms.DateField(widget = AdminDateWidget, label = u'Дата', initial = date.today) @@ -15,5 +42,24 @@ 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) + ) + \ No newline at end of file diff --git a/asuzr/models.py b/asuzr/models.py index 4f8239c..3f74cfb 100644 --- a/asuzr/models.py +++ b/asuzr/models.py @@ -171,7 +171,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)) ############################################################################################ @@ -204,7 +204,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 @@ -214,7 +214,7 @@ def after_save(*args, **kwargs): entry = LogEntry(**log_entry) entry.save() -@receiver(post_delete) +#@receiver(post_delete) def after_delete(*args, **kwargs): log_entry = construct_log_entry(**kwargs) log_entry['action_flag'] = DELETION diff --git a/asuzr/tables.py b/asuzr/tables.py index d26c376..55a5f75 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 eb79128..fd33864 100644 --- a/asuzr/views.py +++ b/asuzr/views.py @@ -119,7 +119,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', { @@ -128,7 +128,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 @@ -219,7 +220,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) @@ -264,8 +265,20 @@ def production_table(request, order_id): 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}) + 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) + @login_required def prod_plan_view(request): 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 %} +