def get_form_for_page(self): fields = {} initial = {'activity': self.activity.id} task_update_type = ContentType.objects.get(app_label = 'activities', model = 'taskupdate') # Add fields for each element on the page for task in self.page.object_list: activity_type = task.activity.type fields['task-%s-status' % task.id] = forms.ModelChoiceField(get_task_statuses(activity_type)) fields['task-%s-tags' % task.id] = TagsAutoboxField(widget=TagsAutoboxWidget(), required=False) fields['task-%s-tags' % task.id].request = self.request fields['task-%s-comment' % task.id] = forms.CharField(widget=forms.Textarea, required=False) existing_tags = self.get_existing_tags_for_task(task, task_update_type) initial['task-%s-status' % task.id] = task.status.id initial['task-%s-tags' % task.id] = existing_tags['task'] for task_voter in task.task_voters.all(): fields['task-%s-task-voter-%s-tags' % (task.id, task_voter.id)] = TagsAutoboxField(widget=TagsAutoboxWidget(), required=False) fields['task-%s-task-voter-%s-tags' % (task.id, task_voter.id)].request = self.request initial['task-%s-task-voter-%s-tags' % (task.id, task_voter.id)] = existing_tags[task_voter.voter.id] if self.request.method == 'POST': form = ActivityTasksForm(self.request.POST, initial=initial) else: form = ActivityTasksForm(initial=initial) form.fields.update(fields) return form
def task_counts(self): activity = self.detail.obj statuses = get_task_statuses(activity.type) statuses = statuses.filter(tasks__activity = activity) total_all = statuses.count() user_supporter = self.detail.request.user.get_profile().supporter my_tasks = activity.tasks.filter(assigned_to = user_supporter) total_my = my_tasks.count() statuses = statuses.annotate(num_tasks = models.Count('tasks')) statuses = statuses.annotate(num_my_tasks = CountIf( 'tasks', condition = {'tasks__assigned_to': user_supporter}, )) counts_by_status = [ { 'status_id': None, 'label': 'Total', 'count_all': total_all, 'count_my': total_my, }, ] for status in statuses: counts_by_status.append({ 'status_id': status.id, 'label': status.title, 'count_all': status.num_tasks, 'count_my': status.num_my_tasks, }) return counts_by_status
def __init__(self, *args, **kwargs): activity = kwargs['activity'] del(kwargs['activity']) super(TasksChangeStatusForm, self).__init__(*args, **kwargs) self.fields['status'].queryset = get_task_statuses(activity.type)