lims: added email notification on request completion

This commit is contained in:
Ramkrishna Chakrabarty
2010-04-14 11:21:00 -04:00
parent 8269fd0c4e
commit 56578f4d81
5 changed files with 69 additions and 3 deletions
+2 -1
View File
@@ -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:
+1
View File
@@ -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
+17 -1
View File
@@ -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,
+25 -1
View File
@@ -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()