diff --git a/lib/galaxy/web/controllers/requests.py b/lib/galaxy/web/controllers/requests.py index 436bbbcc201..6784e9b582f 100644 --- a/lib/galaxy/web/controllers/requests.py +++ b/lib/galaxy/web/controllers/requests.py @@ -97,17 +97,18 @@ class Requests( BaseController ): for s in request.samples: self.current_samples.append([s.name, s.values.content]) if add_sample: - self.current_samples.append(['New Sample',['' for field in request.type.sample_form.fields]]) + self.current_samples.append(['Sample_%i' % (len(self.current_samples)+1),['' for field in request.type.sample_form.fields]]) # selectfield of all samples copy_list = SelectField('copy_sample') copy_list.add_option('None', -1, selected=True) for i, s in enumerate(self.current_samples): - copy_list.add_option(i+1, i) + copy_list.add_option(i+1, i) + self.details_state = 'Show request details' return trans.fill_template( '/requests/show_request.mako', request=request, request_details=self.request_details(trans, id), current_samples = self.current_samples, - sample_copy=copy_list) + sample_copy=copy_list, details_state=self.details_state) def request_details(self, trans, id): ''' Shows the request details @@ -141,7 +142,20 @@ class Requests( BaseController ): value=request.values.content[index], helptext=field['helptext']+' ('+req+')')) return request_details - + + def __update_samples(self, request, **kwd): + params = util.Params( kwd ) + num_samples = len(self.current_samples) + self.current_samples = [] + for s in request.samples: + self.current_samples.append([s.name, s.values.content]) + for index in range(num_samples-len(request.samples)): + sample_index = index + len(request.samples) + sample_name = util.restore_text( params.get( 'sample_%i_name' % sample_index, '' ) ) + sample_values = [] + for field_index in range(len(request.type.sample_form.fields)): + sample_values.append(util.restore_text( params.get( 'sample_%i_field_%i' % (sample_index, field_index), '' ) )) + self.current_samples.append([sample_name, sample_values]) @web.expose def show_request(self, trans, **kwd): params = util.Params( kwd ) @@ -157,26 +171,17 @@ class Requests( BaseController ): **kwd) ) if params.get('add_sample_button', False) == 'Add New': # save the all (saved+unsaved) sample info in 'current_samples' - num_samples = len(self.current_samples) - self.current_samples = [] - for s in request.samples: - self.current_samples.append([s.name, s.values.content]) - for index in range(num_samples-len(request.samples)): - sample_index = index + len(request.samples) - sample_name = util.restore_text( params.get( 'sample_%i_name' % sample_index, '' ) ) - sample_values = [] - for field_index in range(len(request.type.sample_form.fields)): - sample_values.append(util.restore_text( params.get( 'sample_%i_field_%i' % (sample_index, field_index), '' ) )) - self.current_samples.append([sample_name, sample_values]) + self.__update_samples(request, **kwd) # add an empty or filled sample # if the user has selected a sample no. to copy then copy the contents # of the src sample to the new sample else an empty sample src_sample_index = int(params.get( 'copy_sample', -1 )) if src_sample_index == -1: # empty sample - self.current_samples.append(['New Sample',['' for field in request.type.sample_form.fields]]) + self.current_samples.append(['Sample_%i' % (len(self.current_samples)+1),['' for field in request.type.sample_form.fields]]) else: - self.current_samples.append([self.current_samples[src_sample_index][0]+'_copy',[val for val in self.current_samples[src_sample_index][1]]]) + self.current_samples.append([self.current_samples[src_sample_index][0]+'_%i' % (len(self.current_samples)+1), + [val for val in self.current_samples[src_sample_index][1]]]) # selectfield of all samples copy_list = SelectField('copy_sample') copy_list.add_option('None', -1, selected=True) @@ -186,11 +191,38 @@ class Requests( BaseController ): request=request, request_details=self.request_details(trans, request.id), current_samples = self.current_samples, - sample_copy=copy_list) + sample_copy=copy_list, details_state=self.details_state) if params.get('save_samples_button', False) == 'Save': - num_samples = len(self.current_samples) + # update current_samples + self.__update_samples(request, **kwd) + # check for duplicate sample names + msg = '' + for index in range(len(self.current_samples)-len(request.samples)): + sample_index = index + len(request.samples) + sample_name = self.current_samples[sample_index][0] + if not sample_name.strip(): + msg = 'Please enter the name of sample number %i' % sample_index + break + count = 0 + for i in range(len(self.current_samples)): + if sample_name == self.current_samples[i][0]: + count = count + 1 + if count > 1: + msg = "This request has %i samples with the name %s.\nSamples belonging to a request must have unique names." % (count, sample_name) + break + if msg: + copy_list = SelectField('copy_sample') + copy_list.add_option('None', -1, selected=True) + for i, s in enumerate(self.current_samples): + copy_list.add_option(i+1, i) + return trans.fill_template( '/requests/show_request.mako', + request=request, + request_details=self.request_details(trans, request.id), + current_samples = self.current_samples, + sample_copy=copy_list, details_state=self.details_state, + messagetype='error', msg=msg) # save all the new/unsaved samples entered by the user - for index in range(num_samples-len(request.samples)): + for index in range(len(self.current_samples)-len(request.samples)): sample_index = index + len(request.samples) sample_name = util.restore_text( params.get( 'sample_%i_name' % sample_index, '' ) ) sample_values = [] @@ -208,7 +240,6 @@ class Requests( BaseController ): action='list', operation='show_request', id=trans.security.encode_id(request.id)) ) - @web.expose def delete_sample(self, trans, **kwd): params = util.Params( kwd ) @@ -221,6 +252,7 @@ class Requests( BaseController ): if s: s.delete() s.flush() + request.flush() del self.current_samples[sample_index] copy_list = SelectField('copy_sample') copy_list.add_option('None', -1, selected=True) @@ -230,7 +262,26 @@ class Requests( BaseController ): request=request, request_details=self.request_details(trans, request.id), current_samples = self.current_samples, - sample_copy=copy_list) + sample_copy=copy_list, details_state=self.details_state) + @web.expose + def toggle_request_details(self, trans, **kwd): + params = util.Params( kwd ) + msg = util.restore_text( params.get( 'msg', '' ) ) + messagetype = params.get( 'messagetype', 'done' ) + request = trans.app.model.Request.get(int(params.get('request_id', 0))) + if self.details_state == 'Show request details': + self.details_state = 'Hide request details' + elif self.details_state == 'Hide request details': + self.details_state = 'Show request details' + copy_list = SelectField('copy_sample') + copy_list.add_option('None', -1, selected=True) + for i, s in enumerate(self.current_samples): + copy_list.add_option(i+1, i) + return trans.fill_template( '/requests/show_request.mako', + request=request, + request_details=self.request_details(trans, request.id), + current_samples = self.current_samples, + sample_copy=copy_list, details_state=self.details_state) @web.expose def new(self, trans, **kwd): params = util.Params( kwd ) @@ -248,7 +299,7 @@ class Requests( BaseController ): elif params.get('save', False) == 'True': request_type = trans.app.model.RequestType.get(int(params.request_type_id)) msg = self.__validate(trans, - [('name','Name'), ('library_id','Library')], + [('name','Name')], request_type.request_form.fields, **kwd) if msg: @@ -283,7 +334,7 @@ class Requests( BaseController ): ''' params = util.Params( kwd ) for field, field_name in main_fields: - if not util.restore_text(params.get(field, None)): + if not util.restore_text(params.get(field, '')): return 'Please enter the %s of the request' % field_name # check rest of the fields of the form for index, field in enumerate(form_fields): @@ -303,7 +354,15 @@ class Requests( BaseController ): pass name = util.restore_text(params.get('name', '')) desc = util.restore_text(params.get('desc', '')) - library_id = int(util.restore_text(params.get('library_id', 0))) + try: + library_id = int(util.restore_text(params.get('library_id', None))) + except: + msg = "Sequencing request could not be saved. Invalid library" + return trans.response.send_redirect( web.url_for( controller='requests', + action='list', + status='error', + message=msg, + **kwd) ) values = [] for index, field in enumerate(request_type.request_form.fields): values.append(util.restore_text(params.get('field_%i' % index, ''))) diff --git a/lib/galaxy/web/controllers/requests_admin.py b/lib/galaxy/web/controllers/requests_admin.py index cf11631b3b6..3916abc9cd4 100644 --- a/lib/galaxy/web/controllers/requests_admin.py +++ b/lib/galaxy/web/controllers/requests_admin.py @@ -92,10 +92,31 @@ class Requests( BaseController ): self.current_samples = [] for s in request.samples: self.current_samples.append([s.name, s.values.content]) + self.details_state = 'Show request details' return trans.fill_template( '/admin/requests/show_request.mako', request=request, request_details=self.request_details(trans, id), - current_samples = self.current_samples) + current_samples = self.current_samples, + details_state=self.details_state) + @web.expose + def toggle_request_details(self, trans, **kwd): + params = util.Params( kwd ) + msg = util.restore_text( params.get( 'msg', '' ) ) + messagetype = params.get( 'messagetype', 'done' ) + request = trans.app.model.Request.get(int(params.get('request_id', 0))) + if self.details_state == 'Show request details': + self.details_state = 'Hide request details' + elif self.details_state == 'Hide request details': + self.details_state = 'Show request details' + copy_list = SelectField('copy_sample') + copy_list.add_option('None', -1, selected=True) + for i, s in enumerate(self.current_samples): + copy_list.add_option(i+1, i) + return trans.fill_template( '/admin/requests/show_request.mako', + request=request, + request_details=self.request_details(trans, request.id), + current_samples = self.current_samples, + sample_copy=copy_list, details_state=self.details_state) def request_details(self, trans, id): ''' Shows the request details diff --git a/templates/admin/index.mako b/templates/admin/index.mako index e78c0355a4c..60d6c95ecd5 100644 --- a/templates/admin/index.mako +++ b/templates/admin/index.mako @@ -114,7 +114,7 @@
- Requests + Sequencing Requests
diff --git a/templates/admin/requests/grid.mako b/templates/admin/requests/grid.mako index 8b6c21e0d01..99d2a2952b1 100644 --- a/templates/admin/requests/grid.mako +++ b/templates/admin/requests/grid.mako @@ -76,9 +76,6 @@

${grid.title}

- %if len(query.all()): -

All Users

- %endif ## %if len(query.all()): ## Filter: ## %for i, filter in enumerate( grid.standard_filters ): diff --git a/templates/admin/requests/show_request.mako b/templates/admin/requests/show_request.mako index 31a97369e03..09bf859438e 100644 --- a/templates/admin/requests/show_request.mako +++ b/templates/admin/requests/show_request.mako @@ -8,7 +8,7 @@
-

Request: ${request.name}

+

Sequencing Request "${request.name}"

    @@ -38,21 +38,26 @@
    ##
    Request Details: '${request_details[0]['value']}'
    - %for index, rd in enumerate(request_details): -
    - - %if not rd['value']: - None - %else: - %if rd['label'] == 'Library': - ${rd['value']} - %else: - ${rd['value']} + + %if details_state == "Hide request details": + %for index, rd in enumerate(request_details): +
    + + %if not rd['value']: + None + %else: + %if rd['label'] == 'Library': + ${rd['value']} + %else: + ${rd['value']} + %endif %endif - %endif -
    -
    - %endfor +
    +
    + %endfor + %endif
diff --git a/templates/admin/samples/bar_codes.mako b/templates/admin/samples/bar_codes.mako index f6485d20702..88ca0db3896 100644 --- a/templates/admin/samples/bar_codes.mako +++ b/templates/admin/samples/bar_codes.mako @@ -1,13 +1,20 @@ <%inherit file="/base.mako"/> <%namespace file="/message.mako" import="render_msg" /> -

Bar codes for Samples of Request: ${request.name}

+

Bar codes for Samples of Request "${request.name}"

User: ${user.email}

%if msg: ${render_msg( msg, messagetype )} %endif + +
diff --git a/templates/admin/samples/events.mako b/templates/admin/samples/events.mako index 51eb9049dfd..bcf33c7b5ae 100644 --- a/templates/admin/samples/events.mako +++ b/templates/admin/samples/events.mako @@ -3,7 +3,13 @@ <%def name="title()">Events for Sample ${sample.name} -

Events for Sample "${sample.name}" of Request: ${sample.request.name}

+

Events for Sample "${sample.name}"

+

User: ${sample.request.user.email}

%if msg: diff --git a/templates/requests/new_request.mako b/templates/requests/new_request.mako index b03b9b881ff..6b60311546b 100644 --- a/templates/requests/new_request.mako +++ b/templates/requests/new_request.mako @@ -5,6 +5,14 @@ %if msg: ${render_msg( msg, messagetype )} %endif +
+
+
${title}
diff --git a/templates/requests/select_request_type.mako b/templates/requests/select_request_type.mako index 9d99d61458b..a053a43356c 100644 --- a/templates/requests/select_request_type.mako +++ b/templates/requests/select_request_type.mako @@ -5,7 +5,14 @@ %if msg: ${render_msg( msg, messagetype )} %endif - +
+
+
Add a new request
diff --git a/templates/requests/show_request.mako b/templates/requests/show_request.mako index d8b41a0fc0d..5425f3aa3e3 100644 --- a/templates/requests/show_request.mako +++ b/templates/requests/show_request.mako @@ -8,17 +8,23 @@
-

Request: ${request.name}

+

Sequencing Request "${request.name}"

-%if not request.submitted and request.samples: + -%endif + <%def name="render_sample_form( index, sample_name, sample_values )"> @@ -60,21 +66,26 @@
##
Request Details: '${request_details[0]['value']}'
- %for index, rd in enumerate(request_details): -
- - %if not rd['value']: - None - %else: - %if rd['label'] == 'Library': - ${rd['value']} - %else: - ${rd['value']} + + %if details_state == "Hide request details": + %for index, rd in enumerate(request_details): +
+ + %if not rd['value']: + None + %else: + %if rd['label'] == 'Library': + ${rd['value']} + %else: + ${rd['value']} + %endif %endif - %endif -
-
- %endfor +
+
+ %endfor + %endif
@@ -101,10 +112,13 @@
+ <% + request.refresh() + %> %for sample_index, sample in enumerate(current_samples): - %if sample[0] in [s.name for s in request.samples]: + %if sample_index in range(len(request.samples)): ${render_sample( sample_index, request.samples[sample_index] )} %else: ${render_sample_form( sample_index, sample[0], sample[1])} diff --git a/templates/sample/sample_events.mako b/templates/sample/sample_events.mako index 4bd4c5f5832..c6a89d26638 100644 --- a/templates/sample/sample_events.mako +++ b/templates/sample/sample_events.mako @@ -3,7 +3,19 @@ <%def name="title()">Events for Sample ${sample_name} -

Events for Sample "${sample_name}" of Request: ${request.name}

+ +

Events for Sample "${sample_name}"

+ + %if msg: ${render_msg( msg, messagetype )}
${sample_index+1}