92f6cbd9227bcffa2eb465177f4d226c3ccc30ba
[htsworkflow.git] / htsworkflow / frontend / experiments / views.py
1 # Create your views here.
2 #from django.template import Context, loader
3 #shortcut to the above modules
4 from django.contrib.auth.decorators import user_passes_test
5 from django.core.exceptions import ObjectDoesNotExist
6 from django.core.mail import EmailMessage, mail_managers
7 from django.http import HttpResponse
8 from django.shortcuts import render_to_response, get_object_or_404
9 from django.template import Context
10 from django.template.loader import get_template
11
12 from htsworkflow.frontend.experiments.models import *
13 from htsworkflow.frontend.experiments.experiments import \
14      estimateFlowcellDuration, \
15      makeUserLaneMap
16
17 def index(request):
18     all_runs = DataRun.objects.order_by('-run_start_time')
19     #t = loader.get_template('experiments/index.html')
20     #c = Context({
21     #    'data_run_list': all_runs,
22     #})
23     #return HttpResponse(t.render(c)) 
24     # shortcut to the above module usage
25     return render_to_response('experiments/index.html',{'data_run_list': all_runs}) 
26     
27 def detail(request, run_folder):
28     html_str = '<h2>Exp Track Details Page</h2>'
29     html_str += 'Run Folder: '+run_folder
30     r = get_object_or_404(DataRun,run_folder=run_folder)
31     return render_to_response('experiments/detail.html',{'run_f': r})
32
33 def makeFCSheet(request,fcid):
34   # get Flowcell by input fcid
35   # ...
36   rec = None
37   try:
38     rec = FlowCell.objects.get(flowcell_id=fcid)
39   except ObjectDoesNotExist:
40     pass
41   lanes = ['1','2','3','4','5','6','7','8']
42   return render_to_response('experiments/flowcellSheet.html',{'fc': rec})
43
44
45 @user_passes_test(lambda u: u.is_staff)
46 def startedEmail(request, pk):
47     """
48     Create the we have started processing your samples email
49     """
50     fc = get_object_or_404(FlowCell, id=pk)
51
52     send = request.REQUEST.get('send',False)
53     if send in ('1', 'on', 'True', 'true', True):
54         send = True
55     else:
56         send = False
57
58     bcc_managers = request.REQUEST.get('bcc', False)
59     if bcc_managers in ('on', '1', 'True', 'true'):
60         bcc_managers = True
61     else:
62         bcc_managers = False
63
64     user_lane = makeUserLaneMap(fc)
65     estimate_low, estimate_high = estimateFlowcellDuration(fc)
66     email_verify = get_template('experiments/email_preview.html')
67     email_template = get_template('experiments/started_email.html')
68     sender = settings.NOTIFICATION_SENDER
69
70     warnings = []
71     emails = []
72     
73     for user in user_lane.keys():
74         sending = ""
75         # build body
76         context = Context({u'flowcell': fc,
77                    u'lanes': user_lane[user],
78                    u'runfolder': 'blank',
79                    u'finish_low': estimate_low,
80                    u'finish_high': estimate_high,
81                    u'user_admin': user.admin_url(),
82                   })
83
84         # build view
85         subject = "Flowcell  %s" % ( fc.flowcell_id )
86         body = email_template.render(context)
87
88         # provide warning
89         has_email = True
90         if user.email is None or len(user.email) == 0:
91             warnings.append((user.admin_url(), user.username))
92             has_email = False
93             
94         if send:
95             if has_email:
96                 email = EmailMessage(subject, body, sender, to=[user.email])
97                 if bcc_managers:
98                     print 'bcc_managers', bcc_managers
99                     email.bcc = settings.MANAGERS
100                 print email.to, email.bcc
101                 email.send()
102                 sending = "sent"
103             else:
104                 print settings.MANAGERS
105                 mail_managers("Couldn't send to "+user.username, body)
106                 sending = "bounced to managers"
107
108         emails.append((user.email, subject, body, sending))
109
110     verify_context = Context({
111         'send': send,
112         'warnings': warnings,
113         'emails': emails,
114         'from': sender,
115         })
116     return HttpResponse(email_verify.render(verify_context))
117     
118 def finishedEmail(request, pk):
119     """
120     """
121     return HttpResponse("I've got nothing.")