def create_group(request): if request.method == "POST": form_group_name = GroupNameHandlerForm(request.POST) form_group_description = GroupDescriptionHandlerForm(request.POST) if form_group_name.is_valid() and form_group_description.is_valid(): # create group group_name = form_group_name.cleaned_data['group_name'] group_description = \ form_group_description.cleaned_data['group_description'] # group name must be unique! # use user name + created time as group name unique_group_name = "".join( ('[real]', request.user.username, unicode(datetime.now()))) group = Group(name=unique_group_name) group.save() # create related group info to handle group information group_info = GroupInfo(name=group_name, description=group_description, group=group, owner=request.user) group_info.save() # add user to group manager group_info.manager.add(request.user) # relate user to group request.user.groups.add(group) # redirect to group page return redirect('group_page', group_info_id=group_info.id) else: form_group_name = GroupNameHandlerForm() form_group_description = GroupDescriptionHandlerForm() render_data_dict = { 'form_group_name': form_group_name, 'form_group_description': form_group_description, } return render(request, 'group_info/create_group_page.html', render_data_dict)
def create_project(request): if request.method == 'POST': form_project_name = ProjectNameHandlerForm(request.POST) form_project_description = ProjectDescriptionHandlerForm(request.POST) if form_project_name.is_valid() and form_project_description.is_valid( ): # get project info project_name = form_project_name.cleaned_data['project_name'] project_description = \ form_project_description.cleaned_data['project_description'] # create manager group and default group # manager group is for project management. # default group is for adding user individually. # create groups unique_manage_group_name = \ "".join(('[project][manage_group]', request.user.username, unicode(datetime.now()))) unique_default_group_name = \ "".join(('[project][default_group]', request.user.username, unicode(datetime.now()))) manage_group = Group(name=unique_manage_group_name) default_group = Group(name=unique_default_group_name) manage_group.save() default_group.save() # add user to manage_group manage_group.user_set.add(request.user) # create relate group_infos # only for saving the info of group, not the manager manage_group_info = GroupInfo(name="manage_group", group=manage_group, owner=request.user, real_flag=False) default_group_info = GroupInfo(name="default_group", group=default_group, owner=request.user, real_flag=False) manage_group_info.save() default_group_info.save() # project must be created after all above staff were finished. project = Project(name=project_name, description=project_description, manage_group=manage_group, owner=request.user) project.save() # add manage_group info to project info # notice that the default group is treated as a normal group. project.normal_group.add(default_group) return redirect('project_page', project_id=project.id) else: form_project_name = ProjectNameHandlerForm() form_project_description = ProjectDescriptionHandlerForm() #rendering render_data_dict = { 'form_project_name': form_project_name, 'form_project_description': form_project_description, } return render(request, 'project/create_project_page.html', render_data_dict)
def show_project_management_page(request, project_id): project_id = int(project_id) project = get_object_or_404(Project, id=project_id) if request.method == 'POST': form_project_name = ProjectNameHandlerForm(request.POST) form_project_description = ProjectDescriptionHandlerForm(request.POST) form_add_group = AddGroupForm(request.POST) if form_project_name.is_valid(): project_name = form_project_name.cleaned_data['project_name'] project.name = project_name project.save() return redirect('project_management_page', project_id=project_id) #if form_project_description.is_valid() \ # and 'project_description' in request.POST: if form_project_description.is_valid(): project_description = \ form_project_description.cleaned_data['project_description'] project.description = project_description project.save() return redirect('project_management_page', project_id=project_id) if form_add_group.is_valid(): group_name = form_add_group.cleaned_data['group_name'] group = get_object_or_404(Group, name=group_name) # add to attended group project.attended_group.add(group) # real group isolation unique_project_group_name = \ "".join('[project][attended_group]', request.user.username, datetime.now()) project_group = Group(name=unique_project_group_name) project_group.save() for user in group.user_set.all(): project_group.user_set.add(user) project.normal_group.add(project_group) # group info project_group_info = GroupInfo(name='[attended]' + group_name, group=project_group, real_flag=False) return redirect('project_management_page', project_id=project_id) else: form_project_name = ProjectNameHandlerForm() form_project_description = ProjectDescriptionHandlerForm() form_add_group = AddGroupForm() # rendering display_project_normal_group = \ {group.name: { 'group_info_id': group.groupinfo.id, 'remove_url': url_with_querystring( reverse('delete_group_from_project'), project_id=project_id, group_info_id=group.groupinfo.id) } \ for group in project.normal_group.all() \ if group.real_flag} render_data_dict = { 'form_project_name': form_project_name, 'form_project_description': form_project_description, 'form_add_group': form_add_group, 'project_normal_group': display_project_normal_group, 'project_id': project_id, } return render(request, 'project/project_management_page.html', render_data_dict)