def view_administration_users_add(request): if not request.user.is_superuser: return access_denied(request) responsible_input_mode = 0 # Determine to show which type of responsibility input in template if request.method == 'POST': form = UserAccountForm(request.POST) is_valid = True try: role = request.POST.get('role') group = Group.objects.get(name=role) group_details = RoleDetails.objects.get(role=group) if group_details.level == RoleDetails.SECTOR_LEVEL: responsible_input_mode = 1 elif group_details.level == RoleDetails.PROGRAM_LEVEL: responsible_input_mode = 2 except: is_valid = False messages.error(request, 'ข้อมูลตำแหน่งที่ส่งมาไม่อยู่ในรูปแบบที่ถูกต้อง') if form.is_valid() and is_valid: username = form.cleaned_data['username'] email = form.cleaned_data['email'] firstname = form.cleaned_data['firstname'] lastname = form.cleaned_data['lastname'] role = form.cleaned_data['role'] password = utilities.make_random_user_password() if group_details.level == RoleDetails.SECTOR_LEVEL: sector_id = request.POST.get('responsible_sector') try: responsible_sector = Sector.objects.get(pk=sector_id) except: is_valid = False messages.error(request, 'ไม่มีข้อมูลสำนักที่สังกัด กรุณากรอกข้อมูลให้ครบถ้วน') elif group_details.level == RoleDetails.PROGRAM_LEVEL: program_ids = request.POST.getlist('responsible_program') responsible_programs = [] if program_ids: for program_id in program_ids: try: responsible_programs.append(Program.objects.get(pk=program_id)) except: pass if not responsible_programs: is_valid = False messages.error(request, 'ไม่มีข้อมูลแผนงานที่สังกัด กรุณากรอกข้อมูลให้ครบถ้วน') else: is_valid = False messages.error(request, 'ข้อมูลตำแหน่งที่ส่งมาไม่อยู่ในรูปแบบที่ถูกต้อง') if is_valid: user = User.objects.create_user(username, email, password=password) user_account = UserAccount.objects.get(user=user) user_account.firstname = firstname user_account.lastname = lastname user_account.random_password = password user_account.save() user.groups.add(group) responsibility = UserRoleResponsibility.objects.create(user=user_account, role=group) if group_details.level == RoleDetails.SECTOR_LEVEL: responsibility.sectors.add(responsible_sector) elif group_details.level == RoleDetails.PROGRAM_LEVEL: for program in responsible_programs: responsibility.programs.add(program) email_render_dict = {'username':username, 'password':password, 'settings':settings, 'site':Site.objects.get_current()} email_subject = render_to_string('email/create_user_subject.txt', email_render_dict) email_message = render_to_string('email/create_user_message.txt', email_render_dict) send_mail(email_subject, email_message, settings.SYSTEM_NOREPLY_EMAIL, [email]) messages.success(request, 'เพิ่มผู้ใช้เรียบร้อย') return redirect('view_administration_users_password', user.id) else: form = UserAccountForm() sectors = Sector.objects.all().order_by('ref_no') master_plans = MasterPlan.objects.all().order_by('ref_no') # TODO: Check integrity of the following value responsible_sector = '' # Can be any string if 'responsible_sector' in request.POST: sector_id = request.POST.get('responsible_sector') responsible_sector = Sector.objects.get(pk=sector_id) responsible_programs = [] if 'responsible_program' in request.POST: program_ids = request.POST.getlist('responsible_program') responsible_programs = [Program.objects.get(pk=program_id) for program_id in program_ids] return render_page_response(request, 'users', 'page_administration/manage_users_modify_user.html', {'form': form, 'sectors':sectors, 'master_plans':master_plans, 'responsible_sector':responsible_sector, 'responsible_programs':responsible_programs, 'responsible_input_mode':responsible_input_mode})
def view_administration_users_add(request): if not request.user.is_superuser: return access_denied(request) if request.method == 'POST': form = UserAccountForm(request.POST) if form.is_valid(): username = form.cleaned_data['username'] email = form.cleaned_data['email'] firstname = form.cleaned_data['firstname'] lastname = form.cleaned_data['lastname'] role = form.cleaned_data['role'] password = utilities.make_random_user_password() user = User.objects.create_user(username, email, password=password) user_account = UserAccount.objects.get(user=user) user_account.firstname = firstname user_account.lastname = lastname user_account.random_password = password user_account.save() group = Group.objects.get(name=role) group_details = GroupDetails.objects.get(group=group) user.groups.add(group) responsibility = UserRoleResponsibility.objects.create(user=user_account, role=group) if group_details.level == GroupDetails.SECTOR_LEVEL: sector_id = request.POST.get('responsible_sector') sector = Sector.objects.get(pk=sector_id) responsibility.sectors.add(sector) elif group_details.level == GroupDetails.PROGRAM_LEVEL: program_ids = request.POST.getlist('responsible_program') for program_id in program_ids: program = Program.objects.get(pk=program_id) responsibility.programs.add(program) email_render_dict = {'username':username, 'password':password, 'settings':settings, 'site':Site.objects.get_current()} email_subject = render_to_string('email/create_user_subject.txt', email_render_dict) email_message = render_to_string('email/create_user_message.txt', email_render_dict) send_mail(email_subject, email_message, settings.SYSTEM_NOREPLY_EMAIL, [email]) return redirect('view_administration_users_password', user.id) else: form = UserAccountForm() sectors = Sector.objects.all().order_by('ref_no') master_plans = MasterPlan.objects.all().order_by('ref_no') responsible_sector = '' if 'responsible_sector' in request.POST: sector_id = request.POST.get('responsible_sector') responsible_sector = Sector.objects.get(pk=sector_id) responsible_programs = [] if 'responsible_program' in request.POST: program_ids = request.POST.getlist('responsible_program') responsible_programs = [Program.objects.get(pk=program_id) for program_id in program_ids] return render_page_response(request, 'users', 'page_administration/manage_users_modify_user.html', {'form': form, 'sectors':sectors, 'master_plans':master_plans, 'responsible_sector':responsible_sector, 'responsible_programs':responsible_programs})