Merge branch 'jordan' of ssh://git.onelab.eu/git/myslice into jordan
[myslice.git] / portal / slicerequestview.py
1 from django.template.loader      import render_to_string
2 from django.shortcuts            import render
3
4 from manifold.core.query         import Query
5 from manifold.manifoldapi        import execute_query
6
7 from portal.models               import PendingSlice
8 from portal.actions              import authority_get_pi_emails
9 from portal.forms                import SliceRequestForm
10 from portal.templateviews        import LoginRequiredAutoLogoutView
11 from myslice.viewutils           import topmenu_items, the_user
12
13 class SliceRequestView (LoginRequiredAutoLogoutView):
14
15     def authority_hrn_initial (self, request):
16         authorities_query = Query.get('authority').filter_by('authority_hrn', 'included', ['ple.inria', 'ple.upmc']).select('name', 'authority_hrn')
17 #        authorities_query = Query.get('authority').select('authority_hrn')
18         authorities = execute_query(request, authorities_query)
19         
20         authority_hrn_tuples = [ (authority['authority_hrn'], authority['name'],) for authority in authorities ]
21         return {'authority_hrn': authority_hrn_tuples}
22
23     # because we inherit LoginRequiredAutoLogoutView that is implemented by redefining 'dispatch'
24     # we cannot redefine dispatch here, or we'd lose LoginRequired and AutoLogout behaviours
25     def post (self, request):
26         
27         # The form has been submitted
28         form = SliceRequestForm(request.POST, initial=self.authority_hrn_initial(request)) 
29
30         if form.is_valid():
31             slice_name      = form.cleaned_data['slice_name']
32             authority_hrn   = form.cleaned_data['authority_hrn']
33             number_of_nodes = form.cleaned_data['number_of_nodes']
34             type_of_nodes   = form.cleaned_data['type_of_nodes']
35             purpose         = form.cleaned_data['purpose']
36             
37             s = PendingSlice(
38                 slice_name      = slice_name,
39                 authority_hrn   = authority_hrn,
40                 number_of_nodes = number_of_nodes,
41                 type_of_nodes   = type_of_nodes,
42                 purpose         = purpose
43             )
44             s.save()
45
46             # All validation rules pass; process data in form.cleaned_data
47             # slice_name, number_of_nodes, type_of_nodes, purpose
48             email = form.cleaned_data['email'] # email of the sender
49             cc_myself = form.cleaned_data['cc_myself']
50
51             # The recipients are the PI of the authority
52             recipients = authority_get_pi_emails(authority_hrn)
53             #recipients = ['yasin.upmc@gmail.com','jordan.auge@lip6.fr']
54             if cc_myself:
55                 recipients.append(email)
56             msg = render_to_string('slice_request_email.txt', form.cleaned_data)
57             send_mail("Onelab New Slice request form submitted", msg, email, recipients)
58
59             return render(request,'slicereq_recvd.html') # Redirect after POST
60         else:
61             return self._display (request, form)
62
63     def get (self, request):
64         return self._display (request, SliceRequestForm(initial=self.authority_hrn_initial(request)))
65
66     def _display (self, request, form):
67         return render(request, 'slice_request.html', {
68                 'form': form,
69                 'topmenu_items': topmenu_items('Request a slice', request),
70                 'username': the_user (request) 
71                 })
72
73