]> git.parisson.com Git - telemeta.git/commitdiff
add instrument replace view
authorGuillaume Pellerin <yomguy@parisson.com>
Thu, 19 Dec 2013 10:12:38 +0000 (11:12 +0100)
committerGuillaume Pellerin <yomguy@parisson.com>
Thu, 19 Dec 2013 10:12:38 +0000 (11:12 +0100)
telemeta/templates/telemeta/instrument_edit_value.html
telemeta/urls.py
telemeta/views/admin.py
telemeta/views/instrument.py

index 28d2bd5bff4b438393a173123386efce1d84c58a..9ca872550b041d737fb0865161823c34a4d87f4b 100644 (file)
    </div>
   </fieldset>
  </form>
+
+<form class="mod" id="replinstru" method="post"
+    action="{% url telemeta-instrument-record-replace instrument.id %}">{% csrf_token %}
+  <fieldset>
+   <legend>{% trans "Replace by" %}</legend>
+   <div class="field">
+    <select name="value">
+    {% for record in instruments %}
+      <option value="{{ record.id }}" />{{ record.name }}</option>
+    {% endfor %}
+    </select>
+    <input type="checkbox" name="delete" value="delete"> {% trans "delete value after replacing" %}
+   </div>
+   <br />
+   <div class="buttons">
+        <a href="#" class="component_icon button icon_save"
+   onclick="document.getElementById('replinstru').submit(); return false;">{% trans "Replace" %}</a>
+        <a href="{% url telemeta-instrument-edit %}"
+           class="component_icon button icon_cancel">{% trans "Cancel" %}</a>
+   </div>
+  </fieldset>
+ </form>
+
+
   <br style="clear: right"/>
 {% endblock %}
index 45b5c5dbdb0d17eecefba6ec6925fbdb63c05f1c..ab0af2150b9e16ab31bdcb77b7538bae2d3fe1ca 100644 (file)
@@ -239,6 +239,10 @@ urlpatterns = patterns('',
         + r'(?P<value_id>[0-9]+)/update/$',
         instrument_view.update_instrument_value,
         name="telemeta-instrument-record-update"),
+    url(r'^admin/instruments/'
+        + r'(?P<value_id>[0-9]+)/replace/$',
+        instrument_view.replace_instrument_value,
+        name="telemeta-instrument-record-replace"),
 
     # enumerations administration
     url(r'^admin/enumerations/(?P<enumeration_id>[0-9a-z]+)/$',
index 62fae36a1f1944083f43b5170f76bfd36c13f91f..585fbccfe23176b8726be7bf6700424231a3c06d 100644 (file)
@@ -170,6 +170,7 @@ class AdminView(object):
         from_record = enumeration.objects.get(id__exact=value_id)
         to_record = enumeration.objects.get(id__exact=to_value_id)
         links = [rel.get_accessor_name() for rel in from_record._meta.get_all_related_objects()]
+        field_type = WeakForeignKey
 
         for link in links:
             objects = getattr(from_record, link).all()
@@ -177,7 +178,7 @@ class AdminView(object):
                 for name in obj._meta.get_all_field_names():
                     try: 
                         field = obj._meta.get_field(name)
-                        if type(field) == WeakForeignKey:
+                        if type(field) == field_type:
                             if field.rel.to == enumeration:
                                 setattr(obj, name, to_record)
                                 obj.save()
index 023aa8aacc951d7bfff022ed1191170dd28c2d1c..ae88c225355252d89e7b5fe930550a0e2267cd2e 100644 (file)
@@ -69,8 +69,10 @@ class InstrumentView(object):
     @method_decorator(permission_required('telemeta.change_instrument'))
     def edit_instrument_value(self, request, value_id):
         instrument = Instrument.objects.get(id__exact=value_id)
+        instruments = Instrument.objects.all().order_by('name')
 
-        return render(request, 'telemeta/instrument_edit_value.html', {'instrument': instrument})
+        return render(request, 'telemeta/instrument_edit_value.html', 
+                    {'instrument': instrument, 'instruments': instruments})
 
     @method_decorator(permission_required('telemeta.change_instrument'))
     def update_instrument_value(self, request, value_id):
@@ -81,3 +83,39 @@ class InstrumentView(object):
             instrument.save()
 
         return self.edit_instrument(request)
+
+
+    @method_decorator(permission_required('telemeta.change_instrument'))
+    def replace_instrument_value(self, request, value_id):
+        if request.method == 'POST':
+            to_value_id = request.POST["value"]
+            delete = False
+            if 'delete' in request.POST.keys():
+                delete = True
+
+        if from_record == None:
+            raise Http404
+
+        obj_type = Instrument
+        field_type = ForeignKey
+        from_record = Instrument.objects.get(id__exact=value_id)
+        to_record = Instrument.objects.get(id__exact=to_value_id)
+        links = [rel.get_accessor_name() for rel in from_record._meta.get_all_related_objects()]
+
+        for link in links:
+            objects = getattr(from_record, link).all()
+            for obj in objects:
+                for name in obj._meta.get_all_field_names():
+                    try: 
+                        field = obj._meta.get_field(name)
+                        if type(field) == field_type:
+                            if field.rel.to == obj_type:
+                                setattr(obj, name, to_record)
+                                obj.save()
+                    except:
+                        continue
+        if delete:
+            from_record.delete()
+
+        return self.edit_instrument(request)
+