Преглед изворни кода

Merge branch 'master' of ssh://192.168.100.6/repo/record

Conflicts:
	asuzr/forms.py
Denis V. Dedkov пре 10 година
родитељ
комит
92e138aaa2
9 измењених фајлова са 108 додато и 34 уклоњено
  1. 1 0
      asuzr/admin.py
  2. 48 4
      asuzr/forms.py
  3. 3 3
      asuzr/models.py
  4. 1 1
      asuzr/tables.py
  5. 26 13
      asuzr/views.py
  6. 1 0
      record/urls.py
  7. 16 0
      templates/asuzr/base.html
  8. 2 2
      templates/asuzr/table2.html
  9. 10 11
      templates/asuzr/table_with_form.html

+ 1 - 0
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.

+ 48 - 4
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'<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):
   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)
+				    )

+ 3 - 3
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

+ 1 - 1
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):

+ 26 - 13
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

+ 1 - 0
record/urls.py

@@ -20,6 +20,7 @@ urlpatterns = patterns('',
     url(r'^orders/(?P<archive>\d+)/$', 'asuzr.views.orders',name='asuzr-orders'),
     url(r'^desreport/$', 'asuzr.views.desreport'),
     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/delete/$', 'asuzr.views.delete_sketch', name = 'asuzr-del-sketch'),
     url(r'^prodplan/$', 'asuzr.views.prod_plan_view'),

+ 16 - 0
templates/asuzr/base.html

@@ -8,6 +8,22 @@
   {% inplace_static %}
   <link rel="stylesheet" href="{{ STATIC_URL }}django_tables2/themes/paleblue/css/screen.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>
     #menu {
       margin: 0; /* Обнуляем значение отступов */

+ 2 - 2
templates/asuzr/table2.html

@@ -3,8 +3,8 @@
 {% load render_table from django_tables2 %}
 
 {% block page %}
-  <div class="inline" style="width:38%;"><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>{{ table1.verbose_name }}</h3></div>{% render_table table1 %}</div>
+  <div class="inline"><div><h3>{{ table2.verbose_name }}</h3></div>{% render_table table2 %}</div>
   {% if order_form %}
   <form action="{% url 'add-order' %}" method="POST" >
   {% csrf_token %}

+ 10 - 11
templates/asuzr/table_with_form.html

@@ -2,6 +2,7 @@
 {% load django_tables2 %}
 {% load i18n %}
 {% block table.tbody %}
+	   
     <tbody>
         {% for row in table.page.object_list|default:table.rows %} {# support pagination #}
         {% block table.tbody.row %}
@@ -18,21 +19,19 @@
         {% endblock table.tbody.empty_text %}
         {% endif %}
         {% endfor %}
-        {% if model_form %}
-        <form action="{% url 'add-order' %}" method="POST" >
+        {% if add_form %}
+        {% if params %}
+        <form action="{% url form_action params %}" method="POST" >
+        {% else %}
+        <form action="{% url form_action %}" method="POST" >
+        {% endif %}
 	  {% csrf_token %}
 	  <tr>
-	    <td>{{model_form.product}}</td>
-	    <td>{{model_form.price}}</td>
-	    <td>{{model_form.paid}}</td>
-	    <td>{{model_form.address}}</td>
-	    <td></td>
-	    <td>{{model_form.deadline}}</td>
-	    <td>{{model_form.delivery}}</td>
-	    <td>{{model_form.lifting}}</td>
+	  {% for field in add_form %}
+	    <td>{{field}}</td>
+	  {% endfor %}  
 	  </tr>
 	  <tr>
-	    <td></td><td></td><td></td><td></td><td></td><td></td><td></td>
 	    <td><input type="submit" text="Добавить заказ"></td>
 	  </tr>
 	</form>