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'%s' % (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 %} +