def done(self, form_list, **kwargs): #Format the data for output and filter out unnecessary instrument fields #This is a bit of a pain: form wizard expects a list of dicts - you can't name them. Which sucks further down in the code... data_list = {} for form in form_list: form_dict = {} if form.prefix == 'spinalresources': #only add information for selected instruments for k,v in form.cleaned_data.iteritems(): if ('instruments' in k) and v: #form_dict[k] = v This doesn't really tell us much instrument_num = k.strip('instruments[')[:-1] form_dict['resource_admins[%s]' % instrument_num] = form.cleaned_data.get('resource_admins[%s]' % instrument_num) if ('lab_administrators' in k) or ('extra_info' in k): form_dict[k] = v else: for k,v in form.cleaned_data.iteritems(): form_dict[k] = v data_list.update({form.prefix: form_dict}) #Save the Request request = Request() lab_group = None for name, form in data_list.iteritems(): if 'userinfo' in name: rcuser = RCUser() username = "******" % (form['first_name'][0:1], form['last_name']) rcuser.username = username.lower() rcuser.password = "******" rcuser.first_name = form['first_name'] rcuser.last_name = form['last_name'] rcuser.email = form['email'] rcuser.title = form['title'] rcuser.phone = form['phone'] rcuser.department = form['department'] rcuser.save() elif 'piinfo' in name: #If the lab was selected from the drop down menu, get the existing pi from the lab group. #Otherwise, create a new pi using the form fields. if form['name']: piuser = form['name'].pi lab_group = form['name'] else: piuser = PIUser() username = "******" % (form['first_name'][0:1], form['last_name']) piuser.username = username.lower() piuser.password = "******" piuser.first_name = form['first_name'] piuser.last_name = form['last_name'] piuser.email = form['email'] piuser.phone = form['phone'] piuser.mailing_address = form['mailing_address'] piuser.save() else: for k,v in form.iteritems(): request.set_attr(k, v) request.rcuser = rcuser if lab_group: lab_group.members.add(rcuser) lab_group.save() request.pi = piuser request.ignore_me = True #IGNORE ME! request.save() for k,v in data_list['servicechoices'].iteritems(): if v: service = Service.objects.get(name=k) request.services.add(service) request.ignore_me = False request.save() #Save the LabAdmins and InstrumentRequests for name, form in data_list.iteritems(): if name == 'spinalresources': for k,v in form.iteritems(): if 'resource_admins' in k: instrument_request = InstrumentRequest() resource_name, resource_group, resource_administrators = v.split(" | ") instrument_request.resource_name = resource_name instrument_request.resource_group = resource_group instrument_request.resource_administrators = resource_administrators instrument_request.request = request instrument_request.save() if ((k == 'lab_administrators') and v) or ((k == 'extra_info') and v): lab_administrator = LabAdministrator() #request only one admin for all resources if (k == 'lab_administrators') and (v != ""): lab_admin_email, lab_admin_name = v.split(" - ") lab_administrator.lab_administrator_name = lab_admin_name lab_administrator.lab_administrator_email = lab_admin_email if (k == 'extra_info' and v != ""): lab_administrator.extra_info = v lab_administrator.request = request lab_administrator.save() #create RT Ticket subject_text = "Account Request for %s %s" % (data_list['userinfo']['first_name'], data_list['userinfo']['last_name']) ticket_text = "" ticket_text += " To approve or reject this request, click here:\n" ticket_text += " http://%s/admin/requestapp/request/%s/\n" % ('127.0.0.1:8000', request.pk) # change url ticket_text += " \n" ticket_text += " User Info:\n" ticket_text += " - First Name: %s\n" % (data_list['userinfo']['first_name']) ticket_text += " - Last Name: %s\n" % (data_list['userinfo']['last_name']) ticket_text += " - Email: %s\n" % (data_list['userinfo']['email']) ticket_text += " - Phone: %s\n" % (data_list['userinfo']['phone']) ticket_text += " \n" ticket_text += " Faculty Sponsor:\n" if not data_list['piinfo']['name']: #lab does not exist, RC needs to create this lab ticket_text += " This is a new PI/Lab Group. Please use the Django Admin to create this group.\n" ticket_text += " - PI First Name: %s\n" % (data_list['piinfo']['first_name']) ticket_text += " - PI Last Name: %s\n" % (data_list['piinfo']['last_name']) ticket_text += " - PI Email: %s\n" % (data_list['piinfo']['email']) ticket_text += " - PI Mailing Address: %s\n" % (data_list['piinfo']['mailing_address']) ticket_text += " \n" ticket_text += " Services:\n" if data_list['servicechoices']['Instrument Sign-Up']: ticket_text += " User needs instrument access. See below.\n" if data_list['servicechoices']['Storage']: ticket_text += " User needs network storage. See below.\n" if data_list['servicechoices']['Other']: ticket_text += " User has other needs. See below.\n" if 'spinalresources' in data_list: ticket_text += " Spinal Resources\n" for k,v in data_list['spinalresources'].iteritems(): if (('lab_administrators' in k) or ('extra_info' in k)): ticket_text += " - %s: %s\n" % (k,v) else: ticket_text += " - %s\n" % (v) if 'storage' in data_list: ticket_text += " Storage\n" for k,v in data_list['storage'].iteritems(): ticket_text += " - %s: %s\n" % (k, v) if 'otherinfo' in data_list: ticket_text += " Other Comments\n" for k,v in data_list['otherinfo'].iteritems(): ticket_text += " - %s: %s\n" % (k, v) tracker = rt.Rt(RT_URI, RT_USER, RT_PW) tracker.login() ticket_num = tracker.create_ticket(Queue='AccountRequest', Subject=subject_text, Text=ticket_text) tracker.logout() if ticket_num: request.rt_ticket_number = ticket_num request.save() #Add user to AD ldap_conn = LdapConnection() cn = str("%s %s" % (data_list['userinfo']['first_name'], data_list['userinfo']['last_name'])) email = str(data_list['userinfo']['email']) phone = str(data_list['userinfo']['phone']) title = str(data_list['userinfo']['title']) department = str(data_list['userinfo']['department']) ldap_conn.add_user(cn, email, phone, title, department) pw = str(data_list['userinfo']['choose_password']) ldap_conn.set_password(cn, pw) #ldap_conn.enable_new_user(cn) ldap_conn.unbind() return render_to_response('formtools/wizard/done.html', {'data_list': data_list},)