diff --git a/lib/galaxy/web/controllers/requests_common.py b/lib/galaxy/web/controllers/requests_common.py index 06c4affbb91..466264d72a5 100644 --- a/lib/galaxy/web/controllers/requests_common.py +++ b/lib/galaxy/web/controllers/requests_common.py @@ -1176,22 +1176,35 @@ class RequestsCommon( BaseController, UsesFormDefinitions ): # until the request is submitted, at which time all samples of the request will be # set to the first SampleState configured for the request's RequestType configured # by the admin ( i.e., the sample's SampleState would be set to request.type.states[0] ). + new_samples = [] for index in range( len( samples ) - len( request.samples ) ): sample_index = len( request.samples ) sample_widget = samples[ sample_index ] form_values = trans.model.FormValues( request.type.sample_form, sample_widget[ 'field_values' ] ) trans.sa_session.add( form_values ) trans.sa_session.flush() - s = trans.model.Sample( name=sample_widget[ 'name' ], - desc='', - request=request, - form_values=form_values, - bar_code='', - library=sample_widget[ 'library' ], - folder=sample_widget[ 'folder' ], - history=sample_widget['history'], - workflow=sample_widget['workflow_dict'] ) - trans.sa_session.add( s ) + sample = trans.model.Sample( name=sample_widget[ 'name' ], + desc='', + request=request, + form_values=form_values, + bar_code='', + library=sample_widget[ 'library' ], + folder=sample_widget[ 'folder' ], + history=sample_widget['history'], + workflow=sample_widget['workflow_dict'] ) + trans.sa_session.add( sample ) + trans.sa_session.flush() + new_samples.append( sample ) + # If this sample is added when the request is already submitted then these new samples + # should be in the first sample state when saved + if request.is_submitted: + initial_sample_state_after_request_submitted = request.type.states[0] + for sample in new_samples: + event_comment = 'Sample added and sample state set to %s.' % request.type.states[0].name + event = trans.model.SampleEvent( sample, + initial_sample_state_after_request_submitted, + event_comment ) + trans.sa_session.add( event ) trans.sa_session.flush() return trans.response.send_redirect( web.url_for( controller='requests_common', action=redirect_action, @@ -1351,6 +1364,15 @@ class RequestsCommon( BaseController, UsesFormDefinitions ): history = sample.history workflow = sample.workflow field_values = sample.values.content + if not history: + history_id = 'none' + else: + history_id = history.id + if not workflow: + workflow_id = 'none' + else: + workflow_id = workflow.id + workflow_dict = sample.workflow else: # Update the sample attributes from kwd sample_id = None diff --git a/templates/requests/common/add_samples.mako b/templates/requests/common/add_samples.mako index 9e19f0ecd8b..f92c82c3349 100644 --- a/templates/requests/common/add_samples.mako +++ b/templates/requests/common/add_samples.mako @@ -22,7 +22,10 @@ is_complete = request.is_complete is_submitted = request.is_submitted is_unsubmitted = request.is_unsubmitted - can_add_samples = is_unsubmitted + if is_admin: + can_add_samples = not is_complete + else: + can_add_samples = is_unsubmitted can_delete_samples = request.samples and not is_complete can_edit_samples = request.samples and ( is_admin or not is_complete ) can_edit_request = ( is_admin and not request.is_complete ) or request.is_unsubmitted @@ -73,7 +76,7 @@ ${render_samples_messages(request, is_admin, is_submitted, message, status)} %else: %endif - %if is_unsubmitted: + %if can_add_samples: ## The user is adding a new sample %if displayable_sample_widgets:

diff --git a/templates/requests/common/common.mako b/templates/requests/common/common.mako index fbe0f5eb498..7000d37c1a1 100644 --- a/templates/requests/common/common.mako +++ b/templates/requests/common/common.mako @@ -315,22 +315,25 @@ <%def name="render_samples_grid( cntrller, request, displayable_sample_widgets, action, adding_new_samples=False, encoded_selected_sample_ids=[], render_buttons=False, grid_header='

Samples

' )"> ## Displays the "Samples" grid - <% - trans.sa_session.refresh( request ) - is_admin = cntrller == 'requests_admin' and trans.user_is_admin() - is_complete = request.is_complete - is_rejected = request.is_rejected - is_submitted = request.is_submitted - is_unsubmitted = request.is_unsubmitted - can_add_samples = request.is_unsubmitted - can_delete_samples = not adding_new_samples and request.samples and ( ( is_admin and not is_complete ) or is_unsubmitted ) - can_edit_samples = request.samples and ( is_admin or not is_complete ) - can_select_datasets = is_admin and displayable_sample_widgets and ( is_submitted or is_complete ) - can_transfer_datasets = is_admin and request.samples and not request.is_rejected - display_checkboxes = not adding_new_samples and ( is_complete or is_rejected or is_submitted ) - display_bar_code = request.samples and ( is_complete or is_rejected or is_submitted ) - display_datasets = request.samples and ( is_complete or is_submitted ) - %> +<% + trans.sa_session.refresh( request ) + is_admin = cntrller == 'requests_admin' and trans.user_is_admin() + is_complete = request.is_complete + is_rejected = request.is_rejected + is_submitted = request.is_submitted + is_unsubmitted = request.is_unsubmitted + if is_admin: + can_add_samples = not is_complete + else: + can_add_samples = is_unsubmitted + can_delete_samples = not adding_new_samples and request.samples and ( ( is_admin and not is_complete ) or is_unsubmitted ) + can_edit_samples = request.samples and ( is_admin or not is_complete ) + can_select_datasets = is_admin and displayable_sample_widgets and ( is_submitted or is_complete ) + can_transfer_datasets = is_admin and request.samples and not request.is_rejected + display_checkboxes = not adding_new_samples and ( is_complete or is_rejected or is_submitted ) + display_bar_code = request.samples and ( is_complete or is_rejected or is_submitted ) + display_datasets = request.samples and ( is_complete or is_submitted ) +%> ${grid_header} %if render_buttons and ( can_add_samples or can_edit_samples ):