mirror of
https://github.com/galaxyproject/galaxy.git
synced 2026-09-24 16:30:27 +08:00
lims: added email notification on request completion
This commit is contained in:
@@ -1402,12 +1402,13 @@ class Request( object ):
|
||||
REJECTED = 'Rejected',
|
||||
COMPLETE = 'Complete' )
|
||||
def __init__(self, name=None, desc=None, request_type=None, user=None,
|
||||
form_values=None):
|
||||
form_values=None, notify=None):
|
||||
self.name = name
|
||||
self.desc = desc
|
||||
self.type = request_type
|
||||
self.values = form_values
|
||||
self.user = user
|
||||
self.notify = notify
|
||||
self.samples_list = []
|
||||
def state(self):
|
||||
if self.events:
|
||||
|
||||
@@ -641,6 +641,7 @@ Request.table = Table('request', metadata,
|
||||
Column( "update_time", DateTime, default=now, onupdate=now ),
|
||||
Column( "name", TrimmedString( 255 ), nullable=False ),
|
||||
Column( "desc", TEXT ),
|
||||
Column( "notify", Boolean, default=False ),
|
||||
Column( "form_values_id", Integer, ForeignKey( "form_values.id" ), index=True ),
|
||||
Column( "request_type_id", Integer, ForeignKey( "request_type.id" ), index=True ),
|
||||
Column( "user_id", Integer, ForeignKey( "galaxy_user.id" ), index=True ),
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
"""
|
||||
Migration script to add a notify column to the request table.
|
||||
"""
|
||||
|
||||
from sqlalchemy import *
|
||||
from migrate import *
|
||||
from migrate.changeset import *
|
||||
|
||||
import logging
|
||||
log = logging.getLogger( __name__ )
|
||||
|
||||
metadata = MetaData( migrate_engine )
|
||||
|
||||
def upgrade():
|
||||
print __doc__
|
||||
metadata.reflect()
|
||||
|
||||
Request_table = Table( "request", metadata, autoload=True )
|
||||
c = Column( "notify", Boolean, default=False )
|
||||
c.create( Request_table )
|
||||
assert c is Request_table.c.notify
|
||||
|
||||
def downgrade():
|
||||
pass
|
||||
@@ -209,6 +209,7 @@ class Requests( BaseController ):
|
||||
request_details.append(dict(label='Type',
|
||||
value=request.type.name,
|
||||
helptext=''))
|
||||
|
||||
request_details.append(dict(label='State',
|
||||
value=request.state(),
|
||||
helptext=''))
|
||||
@@ -235,6 +236,13 @@ class Requests( BaseController ):
|
||||
request_details.append(dict(label=field['label'],
|
||||
value=request.values.content[index],
|
||||
helptext=field['helptext']+' ('+req+')'))
|
||||
if request.notify:
|
||||
notify = 'Yes'
|
||||
else:
|
||||
notify = 'No'
|
||||
request_details.append(dict(label='Send email notification once the sequencing request is complete',
|
||||
value=notify,
|
||||
helptext=''))
|
||||
return request_details
|
||||
def __show_request(self, trans, **kwd):
|
||||
params = util.Params( kwd )
|
||||
@@ -707,6 +715,9 @@ class Requests( BaseController ):
|
||||
util.restore_text( params.get( 'desc', '' ) )),
|
||||
helptext='(Optional)'))
|
||||
widgets = widgets + request_type.request_form.get_widgets( trans.user, **kwd )
|
||||
widgets.append(dict(label='Send email notification once the sequencing request is complete',
|
||||
widget=CheckboxField('email_notify', False),
|
||||
helptext=''))
|
||||
return trans.fill_template( '/requests/new_request.mako',
|
||||
select_request_type=select_request_type,
|
||||
request_type=request_type,
|
||||
@@ -755,6 +766,7 @@ class Requests( BaseController ):
|
||||
request_type = trans.sa_session.query( trans.app.model.RequestType ).get( int( params.select_request_type ) )
|
||||
name = util.restore_text(params.get('name', ''))
|
||||
desc = util.restore_text(params.get('desc', ''))
|
||||
notify = CheckboxField.is_checked( params.get('email_notify', '') )
|
||||
# library
|
||||
try:
|
||||
library = trans.sa_session.query( trans.app.model.Library ).get( int( params.get( 'library_id', None ) ) )
|
||||
@@ -801,7 +813,7 @@ class Requests( BaseController ):
|
||||
trans.sa_session.flush()
|
||||
if not request:
|
||||
request = trans.app.model.Request(name, desc, request_type,
|
||||
trans.user, form_values)
|
||||
trans.user, form_values, notify)
|
||||
trans.sa_session.add( request )
|
||||
trans.sa_session.flush()
|
||||
trans.sa_session.refresh( request )
|
||||
@@ -816,6 +828,7 @@ class Requests( BaseController ):
|
||||
request.type = request_type
|
||||
request.user = trans.user
|
||||
request.values = form_values
|
||||
request.notify = notify
|
||||
trans.sa_session.add( request )
|
||||
trans.sa_session.flush()
|
||||
return request
|
||||
@@ -896,6 +909,9 @@ class Requests( BaseController ):
|
||||
widget=TextField('desc', 40, desc),
|
||||
helptext='(Optional)'))
|
||||
widgets = widgets + request.type.request_form.get_widgets( trans.user, request.values.content, **kwd )
|
||||
widgets.append(dict(label='Send email notification once the sequencing request is complete',
|
||||
widget=CheckboxField('email_notify', request.notify),
|
||||
helptext=''))
|
||||
return trans.fill_template( '/requests/edit_request.mako',
|
||||
select_request_type=select_request_type,
|
||||
request_type=request.type,
|
||||
|
||||
@@ -362,6 +362,9 @@ class RequestsAdmin( BaseController ):
|
||||
widget=TextField('desc', 40, desc),
|
||||
helptext='(Optional)'))
|
||||
widgets = widgets + request.type.request_form.get_widgets( request.user, request.values.content, **kwd )
|
||||
widgets.append(dict(label='Send email notification once the sequencing request is complete',
|
||||
widget=CheckboxField('email_notify', request.notify),
|
||||
helptext=''))
|
||||
return trans.fill_template( '/admin/requests/edit_request.mako',
|
||||
select_request_type=select_request_type,
|
||||
request_type=request.type,
|
||||
@@ -633,6 +636,9 @@ class RequestsAdmin( BaseController ):
|
||||
util.restore_text( params.get( 'desc', '' ) )),
|
||||
helptext='(Optional)'))
|
||||
widgets = widgets + request_type.request_form.get_widgets( user, **kwd )
|
||||
widgets.append(dict(label='Send email notification once the sequencing request is complete',
|
||||
widget=CheckboxField('email_notify', False),
|
||||
helptext='Email would be sent to the lab admin and the user for whom this request has been created.'))
|
||||
return trans.fill_template( '/admin/requests/new_request.mako',
|
||||
select_request_type=select_request_type,
|
||||
request_type=request_type,
|
||||
@@ -694,6 +700,7 @@ class RequestsAdmin( BaseController ):
|
||||
user = trans.sa_session.query( trans.app.model.User ).get( int( params.get( 'select_user', '' ) ) )
|
||||
name = util.restore_text(params.get('name', ''))
|
||||
desc = util.restore_text(params.get('desc', ''))
|
||||
notify = CheckboxField.is_checked( params.get('email_notify', '') )
|
||||
# fields
|
||||
values = []
|
||||
for index, field in enumerate(request_type.request_form.fields):
|
||||
@@ -728,7 +735,7 @@ class RequestsAdmin( BaseController ):
|
||||
trans.sa_session.flush()
|
||||
if not request:
|
||||
request = trans.app.model.Request(name, desc, request_type,
|
||||
user, form_values)
|
||||
user, form_values, notify)
|
||||
trans.sa_session.add( request )
|
||||
trans.sa_session.flush()
|
||||
trans.sa_session.refresh( request )
|
||||
@@ -745,6 +752,7 @@ class RequestsAdmin( BaseController ):
|
||||
request.desc = desc
|
||||
request.type = request_type
|
||||
request.user = user
|
||||
request.notify = notify
|
||||
request.values = form_values
|
||||
trans.sa_session.add( request )
|
||||
trans.sa_session.flush()
|
||||
@@ -1183,6 +1191,13 @@ class RequestsAdmin( BaseController ):
|
||||
request_details.append(dict(label=field['label'],
|
||||
value=request.values.content[index],
|
||||
helptext=field['helptext']+' ('+req+')'))
|
||||
if request.notify:
|
||||
notify = 'Yes'
|
||||
else:
|
||||
notify = 'No'
|
||||
request_details.append(dict(label='Send email notification once the sequencing request is complete',
|
||||
value=notify,
|
||||
helptext=''))
|
||||
return request_details
|
||||
def __validate_barcode(self, trans, sample, barcode):
|
||||
'''
|
||||
@@ -1333,6 +1348,15 @@ class RequestsAdmin( BaseController ):
|
||||
event = trans.app.model.RequestEvent(request, request.states.COMPLETE, comments)
|
||||
trans.sa_session.add( event )
|
||||
trans.sa_session.flush()
|
||||
# now that the request is complete send the email notification to the
|
||||
# the user
|
||||
if request.notify:
|
||||
mail = os.popen("%s -t" % trans.app.config.sendmail_path, 'w')
|
||||
subject = "Galaxy Sample Tracking: '%s' sequencing request in complete." % request.name
|
||||
body = "The '%s' sequencing request (type: %s) is now complete. Datasets from all the samples are now available for analysis or download from the respective data libraries in Galaxy." % (request.name, request.type.name)
|
||||
email_content = "To: %s\nFrom: no-reply@nowhere.edu\nSubject: %s\n\n%s" % (request.user.email, subject, body)
|
||||
mail.write( email_content )
|
||||
x = mail.close()
|
||||
def change_state(self, trans, sample):
|
||||
possible_states = sample.request.type.states
|
||||
curr_state = sample.current_state()
|
||||
|
||||
Reference in New Issue
Block a user