Added ability to add samples after a request is submitted.

This commit is contained in:
Ramkrishna Chakrabarty
2011-01-26 11:35:52 -05:00
parent a6b6f13af3
commit 529098e77e
6 changed files with 68 additions and 33 deletions
+32 -10
View File
@@ -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
+5 -2
View File
@@ -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:
<label>There are no samples.</label>
%endif
%if is_unsubmitted:
%if can_add_samples:
## The user is adding a new sample
%if displayable_sample_widgets:
<p/>
+19 -16
View File
@@ -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='<h3>Samples</h3>' )">
## 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 ):
<ul class="manage-table-actions">
+4 -1
View File
@@ -37,7 +37,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_request = ( is_admin and not request.is_complete ) or request.is_unsubmitted
can_reject = is_admin and is_submitted
+4 -1
View File
@@ -22,13 +22,16 @@
is_complete = request.is_complete
is_submitted = request.is_submitted
is_unsubmitted = request.is_unsubmitted
can_add_samples = is_unsubmitted
can_edit_request = ( is_admin and not request.is_complete ) or request.is_unsubmitted
can_delete_samples = request.samples and not is_complete
can_edit_samples = request.samples and ( is_admin or not is_complete )
can_reject = is_admin and is_submitted
can_submit = request.samples and is_unsubmitted
can_undelete = request.deleted
if is_admin:
can_add_samples = not is_complete
else:
can_add_samples = is_unsubmitted
%>
<br/><br/>
+4 -3
View File
@@ -563,11 +563,12 @@ class TestFormsAndSampleTracking( TwillTestCase ):
state=request1.states.SUBMITTED,
strings_displayed=[ request1.name ] )
strings_displayed = [ request1.states.SUBMITTED,
'Reject this request' ]
strings_not_displayed = [ 'Add sample' ]
'Reject this request',
'Add sample',
'Edit samples' ]
self.view_request( cntrller='requests_admin',
request_id=self.security.encode_id( request1.id ),
strings_not_displayed=strings_not_displayed )
strings_displayed=strings_displayed )
# Set bar codes for the samples
bar_codes = [ '10001', '10002', '10003' ]
strings_displayed_after_submit = [ 'Changes made to the samples have been saved.' ]