def post(self, request): user_search_string = request.POST.get('q') search_by = request.POST.get('search_by') cobmined_user_search_obj = CombinedUserSearch(user_search_string, search_by) context = cobmined_user_search_obj.search() return render(request, self.template_name, context)
def post(self, request, *args, **kwargs): user_search_string = request.POST.get('q') search_by = request.POST.get('search_by') pk = self.kwargs.get('pk') project_obj = get_object_or_404(Project, pk=pk) users_to_exclude = [ ele.user.username for ele in project_obj.projectuser_set.filter( status__name='Active') ] cobmined_user_search_obj = CombinedUserSearch(user_search_string, search_by, users_to_exclude) context = cobmined_user_search_obj.search() matches = context.get('matches') for match in matches: match.update( {'role': ProjectUserRoleChoice.objects.get(name='User')}) if matches: formset = formset_factory(ProjectAddUserForm, max_num=len(matches)) formset = formset(initial=matches, prefix='userform') context['formset'] = formset context['user_search_string'] = user_search_string context['search_by'] = search_by if len(user_search_string.split()) > 1: users_already_in_project = [] for ele in user_search_string.split(): if ele in users_to_exclude: users_already_in_project.append(ele) context['users_already_in_project'] = users_already_in_project # The following block of code is used to hide/show the allocation div in the form. if project_obj.allocation_set.filter( status__name__in=['Active', 'New', 'Renewal Requested' ]).exists(): div_allocation_class = 'placeholder_div_class' else: div_allocation_class = 'd-none' context['div_allocation_class'] = div_allocation_class ### allocation_form = ProjectAddUsersToAllocationForm( request.user, project_obj.pk, prefix='allocationform') context['pk'] = pk context['allocation_form'] = allocation_form return render(request, self.template_name, context)
def post(self, request, *args, **kwargs): user_search_string = request.POST.get('q') search_by = request.POST.get('search_by') pk = self.kwargs.get('pk') project_obj = get_object_or_404(Project, pk=pk) users_to_exclude = [ ele.user.username for ele in project_obj.projectuser_set.filter( status__name='Active') ] cobmined_user_search_obj = CombinedUserSearch(user_search_string, search_by, users_to_exclude) context = cobmined_user_search_obj.search() matches = context.get('matches') for match in matches: match.update( {'role': ProjectUserRoleChoice.objects.get(name='User')}) formset = formset_factory(ProjectAddUserForm, max_num=len(matches)) formset = formset(request.POST, initial=matches, prefix='userform') allocation_form = ProjectAddUsersToAllocationForm( request.user, project_obj.pk, request.POST, prefix='allocationform') added_users_count = 0 if formset.is_valid() and allocation_form.is_valid(): project_user_active_status_choice = ProjectUserStatusChoice.objects.get( name='Active') allocation_user_active_status_choice = AllocationUserStatusChoice.objects.get( name='Active') allocation_form_data = allocation_form.cleaned_data['allocation'] if '__select_all__' in allocation_form_data: allocation_form_data.remove('__select_all__') for form in formset: user_form_data = form.cleaned_data if user_form_data['selected']: added_users_count += 1 # Will create local copy of user if not already present in local database user_obj, _ = User.objects.get_or_create( username=user_form_data.get('username')) user_obj.first_name = user_form_data.get('first_name') user_obj.last_name = user_form_data.get('last_name') user_obj.email = user_form_data.get('email') user_obj.save() role_choice = user_form_data.get('role') # Is the user already in the project? if project_obj.projectuser_set.filter( user=user_obj).exists(): project_user_obj = project_obj.projectuser_set.get( user=user_obj) project_user_obj.role = role_choice project_user_obj.status = project_user_active_status_choice project_user_obj.save() else: project_user_obj = ProjectUser.objects.create( user=user_obj, project=project_obj, role=role_choice, status=project_user_active_status_choice) for allocation in Allocation.objects.filter( pk__in=allocation_form_data): if allocation.allocationuser_set.filter( user=user_obj).exists(): allocation_user_obj = allocation.allocationuser_set.get( user=user_obj) allocation_user_obj.status = allocation_user_active_status_choice allocation_user_obj.save() else: allocation_user_obj = AllocationUser.objects.create( allocation=allocation, user=user_obj, status=allocation_user_active_status_choice) allocation_activate_user.send( sender=self.__class__, allocation_user_pk=allocation_user_obj.pk) messages.success( request, 'Added {} users to project.'.format(added_users_count)) else: if not formset.is_valid(): for error in formset.errors: messages.error(request, error) if not allocation_form.is_valid(): for error in allocation_form.errors: messages.error(request, error) return HttpResponseRedirect( reverse('project-detail', kwargs={'pk': pk}))