diff --git a/opentech/apply/activity/migrations/0001_initial.py b/opentech/apply/activity/migrations/0001_initial.py index b5e7d8c3be47f7ad5afd532ae439e69b16fb976d..123a96d01492ebf7d8bbf918c3307736312fbf54 100644 --- a/opentech/apply/activity/migrations/0001_initial.py +++ b/opentech/apply/activity/migrations/0001_initial.py @@ -27,6 +27,7 @@ class Migration(migrations.Migration): ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), ], options={ + 'base_manager_name': 'objects', 'ordering': ['-timestamp'], }, ), diff --git a/opentech/apply/activity/models.py b/opentech/apply/activity/models.py index 4598929ccd285bd8930b72f2169212f77d1cd4ed..ece98c60b9dd630e1d2cf145460e141240901123 100644 --- a/opentech/apply/activity/models.py +++ b/opentech/apply/activity/models.py @@ -18,6 +18,16 @@ VISIBILITY = { } +class BaseActivityQuerySet(models.QuerySet): + def visible_to(self, user): + return self.filter(visibility__in=self.model.visibility_for(user)) + + +class ActivityQuerySet(BaseActivityQuerySet): + def comments(self): + return self.filter(type=COMMENT) + + class ActivityBaseManager(models.Manager): def create(self, **kwargs): kwargs.update(type=self.type) @@ -27,9 +37,8 @@ class ActivityBaseManager(models.Manager): return super().get_queryset().filter(type=self.type) -class CommentQueryset(models.QuerySet): - def visibile_to(self, user): - return self.filter(visibility__in=self.model.visibility_for(user)) +class CommentQueryset(BaseActivityQuerySet): + pass class CommentManger(ActivityBaseManager): @@ -48,12 +57,13 @@ class Activity(models.Model): message = models.TextField() visibility = models.CharField(choices=VISIBILITY.items(), default=PUBLIC, max_length=10) - objects = models.Manager() + objects = models.Manager.from_queryset(ActivityQuerySet)() comments = CommentManger.from_queryset(CommentQueryset)() actions = ActionManager() class Meta: ordering = ['-timestamp'] + base_manager_name = 'objects' @property def private(self): diff --git a/opentech/apply/activity/views.py b/opentech/apply/activity/views.py index 033cd5fe772e64b367f493af150d4239e1a40393..3d67c5ec9e42992d9c5cfa8d24df023d36d041bc 100644 --- a/opentech/apply/activity/views.py +++ b/opentech/apply/activity/views.py @@ -23,7 +23,7 @@ class ActivityContextMixin: def get_context_data(self, **kwargs): extra = { 'actions': Activity.actions.filter(submission=self.object), - 'comments': Activity.comments.filter(submission=self.object).visibile_to(self.request.user), + 'comments': Activity.comments.filter(submission=self.object).visible_to(self.request.user), } return super().get_context_data(**extra, **kwargs) diff --git a/opentech/apply/funds/tables.py b/opentech/apply/funds/tables.py index 689a196f533cb797e3932e13769da25fd11c4906..b203a70fefdf7d6a02647991d30922fd36707b1a 100644 --- a/opentech/apply/funds/tables.py +++ b/opentech/apply/funds/tables.py @@ -20,11 +20,13 @@ class SubmissionsTable(tables.Table): status_name = tables.Column(verbose_name="Status") stage = tables.Column(verbose_name="Type", order_by=('status',)) page = tables.Column(verbose_name="Fund") + comments = tables.Column(accessor='activities.comments.all', verbose_name="Comments") class Meta: model = ApplicationSubmission order_by = ('-submit_time',) fields = ('title', 'status_name', 'stage', 'page', 'round', 'submit_time') + sequence = fields + ('comments',) template = 'funds/tables/table.html' row_attrs = { 'class': lambda record: '' if record.active else 'is-inactive' @@ -33,9 +35,13 @@ class SubmissionsTable(tables.Table): def render_user(self, value): return value.get_full_name() - def render_status_name(self, value, record): + def render_status_name(self, value): return mark_safe(f'<span>{ value }</span>') + def render_comments(self, value): + request = self.context['request'] + return str(value.visible_to(request.user).count()) + def order_status_name(self, qs, desc): return qs.step_order(desc), True @@ -46,6 +52,7 @@ class AdminSubmissionsTable(SubmissionsTable): class Meta(SubmissionsTable.Meta): fields = ('title', 'status_name', 'stage', 'page', 'round', 'lead', 'submit_time') # type: ignore + sequence = fields + ('comments',) def get_used_rounds(request):