def get_context_data(self, **kwargs): queryset = kwargs.pop('object_list') # Отработать форму фильтрации page_number = self.request.GET.get('page', None) # Обработать фильтры, если они есть self.queryset, form = self.process_filter_form(queryset, self.request.GET) # Разбить на страницы page_size = self.paginate_by paginator, page, queryset, is_paginated = self.paginate_queryset( self.queryset, page_size, page_number) # для всех заявок получаем возрастные группы, которые подходят для них age_groups = AgeGroup.objects.all() current_distribution_year = get_current_distribution_year() requestions = queryset for requestion in requestions: requestion.age_groups_calculated = requestion.age_groups( age_groups=age_groups, current_distribution_year=current_distribution_year) # для анонимного и авторизованного пользователя нужно отобразить # какие особые действия совершались с заявкой if requestions: # если получать логи при пустом queryset, то все упадет, # паджинатор возвращает queryset[0:0] с пустым query requestions = add_special_transitions_to_requestions(requestions) context = { 'paginator': paginator, 'page_obj': page, 'is_paginated': is_paginated, 'requestions': requestions, 'form': form, 'target_requestion': self.requestion, 'offset': (page.number - 1) * page_size, 'STATUS_DECISION': STATUS_DECISION, 'NOT_APPEAR_STATUSES': [STATUS_NOT_APPEAR, ], 'STATUS_DISTIRIBUTED': STATUS_DISTRIBUTED, 'import_finished': Preference.objects.filter( key=PREFERENCE_IMPORT_FINISHED).exists() } context.update(kwargs) return context
def get_queue_data(self, requestion): before = Requestion.objects.queue().active_queue().requestions_before(requestion) benefits_before = before.benefits().count() confirmed_before = before.confirmed().count() requestions_before = before.count() benefits_after = Requestion.objects.active_queue().benefits().count() - benefits_before confirmed_after = Requestion.objects.active_queue().confirmed().count() - confirmed_before requestions_after = Requestion.objects.active_queue().count() - requestions_before offset = max(0, requestions_before - 20) queue_chunk = Requestion.objects.queue().hide_distributed().add_distributed_sadiks()[offset:requestions_before + 20] queue_chunk = add_special_transitions_to_requestions(queue_chunk) # Вычесть свою заявку requestions_after -= 1 if requestion.benefit_category.priority > 0: benefits_after -= 1 if requestion.status == STATUS_REQUESTER: confirmed_after -= 1 # для заявок вычисляем возрастные группы age_groups = AgeGroup.objects.all() current_distribution_year = get_current_distribution_year() for req in queue_chunk: req.age_groups_calculated = req.age_groups( age_groups=age_groups, current_distribution_year=current_distribution_year) return { 'benefits_before': benefits_before, 'benefits_after': benefits_after, 'confirmed_before': confirmed_before, 'confirmed_after': confirmed_after, 'requestions_before': requestions_before, 'requestions_after': requestions_after, 'queue': queue_chunk, 'offset': offset, }