################################################
# Barcode Magic Commands
################################################
-@login_required
-def cmd_move_sample(request):
+
+def __cmd_move_sample_return(form, request, msg=''):
"""
- Moves a sample to a target container
+ A small helper function since this code is reused multiple times
"""
- form = CmdMoveSampleForm()
-
# Load form template
c = Context({'form': form,
- 'action_url': ''})
+ 'action_url': '.'})
t = get_template('generic_form.html')
return render_to_response('app.html', {
'media': '',
'bcmagic': BarcodeMagicForm({'bcm_mode': 'cmd_move_sample'}),
'select': 'samples',
+ 'msg': msg,
'body': t.render(c)
},
- context_instance=RequestContext(request))
\ No newline at end of file
+ context_instance=RequestContext(request))
+
+@login_required
+@revision.create_on_success
+def cmd_move_sample(request):
+ """
+ Moves a sample to a target container
+ """
+ form = CmdMoveSampleForm()
+ # Process form:
+ if request.method == 'POST':
+ form = CmdMoveSampleForm(request.POST)
+
+ #If for some reason the form is not valid, return
+ if not form.is_valid():
+ msg = "Form is not valid."
+ return __cmd_move_sample_return(form, request, msg)
+
+ try:
+ sample = models.Sample.objects.get(sampleid=form.cleaned_data['sampleid'])
+ except ObjectDoesNotExist, e:
+ msg = "Sample %s does not exist." % (form.cleaned_data['sampleid'])
+ return __cmd_move_sample_return(form, request, msg)
+
+ try:
+ container = models.Container.objects.get(uuid=form.cleaned_data['container_id'])
+ except ObjectDoesNotExist, e:
+ msg = "Container %s does not exist." % (form.cleaned_data['container_id'])
+ return __cmd_move_sample_return(form, request, msg)
+
+ # Move the sample to the new container
+ old_container = sample.container
+ sample.container = container
+ if old_container is None:
+ revision.comment = "Sample (%s) moved from Homeless to Container(%s; uuid: %s)" \
+ % (str(sample), str(container), container.uuid)
+ else:
+ revision.comment = "Sample (%s) moved from Container(%s; uuid: %s) to Container(%s; uuid: %s)" \
+ % (str(sample), str(old_container), old_container.uuid, str(container), container.uuid)
+ sample.save()
+
+ return __cmd_move_sample_return(CmdMoveSampleForm(), request, revision.comment)
+
+ return __cmd_move_sample_return(form, request)
+
+
+
+
\ No newline at end of file