コード例 #1
0
    def get_data(self, request):
        since = timezone.now() - relativedelta(days=self.num_days)
        labels = Label.get_all(request.org, request.user)

        counts_by_label = DailyCount.get_by_label(labels,
                                                  DailyCount.TYPE_INCOMING,
                                                  since).scope_totals()

        # sort by highest count DESC, label name ASC
        by_usage = sorted(counts_by_label.items(),
                          key=lambda c: (-c[1], c[0].name))
        by_usage = [c for c in by_usage if c[1]]  # remove zero counts

        if len(by_usage) > self.num_items:
            label_zones = by_usage[:self.num_items - 1]
            others = by_usage[self.num_items - 1:]
        else:
            label_zones = by_usage
            others = []

        series = [{"name": l[0].name, "y": l[1]} for l in label_zones]

        # if there are remaining items, merge into single "Other" zone
        if others:
            series.append({
                "name": str(_("Other")),
                "y": sum([o[1] for o in others])
            })

        return {"series": series}
コード例 #2
0
ファイル: views.py プロジェクト: digideskio/casepro
        def post(self, request, *args, **kwargs):
            case = self.get_object()
            label_ids = parse_csv(request.POST.get('labels', ''), as_ints=True)
            labels = Label.get_all(request.org).filter(pk__in=label_ids)

            case.update_labels(request.user, labels)
            return HttpResponse(status=204)
コード例 #3
0
    def get_context_data(self, **kwargs):
        context = super(BaseInboxView, self).get_context_data(**kwargs)
        org = self.request.org
        user = self.request.user
        partner = user.get_partner(org)

        labels = list(Label.get_all(org, user).order_by("name"))
        Label.bulk_cache_initialize(labels)

        fields = Field.get_all(org, visible=True).order_by("label")

        # angular app requires context data in JSON format
        context["context_data_json"] = json_encode({
            "user": {
                "id": user.pk,
                "partner": partner.as_json() if partner else None
            },
            "labels": [l.as_json() for l in labels],
            "fields": [f.as_json() for f in fields],
        })

        context["banner_text"] = org.get_banner_text()
        context["folder"] = self.folder.name
        context["folder_icon"] = self.folder_icon
        context["open_case_count"] = Case.get_open(org, user).count()
        context["closed_case_count"] = Case.get_closed(org, user).count()
        context["allow_case_without_message"] = getattr(
            settings, "SITE_ALLOW_CASE_WITHOUT_MESSAGE", False)
        context[
            "user_must_reply_with_faq"] = org and not user.is_anonymous and user.must_use_faq(
            )
        context["site_contact_display"] = getattr(settings,
                                                  "SITE_CONTACT_DISPLAY",
                                                  "name")
        return context
コード例 #4
0
    def get_day_totals(self, request, since):
        label_id = request.GET.get('label')

        if label_id:
            label = Label.get_all(org=request.org).get(pk=label_id)
            return DailyCount.get_by_label([label], DailyCount.TYPE_INCOMING, since).day_totals()
        else:
            return DailyCount.get_by_org([self.request.org], DailyCount.TYPE_INCOMING, since).day_totals()
コード例 #5
0
ファイル: views.py プロジェクト: praekelt/casepro
        def post(self, request, *args, **kwargs):
            case = self.get_object()
            user = request.user
            user_labels = Label.get_all(self.org, user)

            label_ids = request.json['labels']
            specified_labels = list(user_labels.filter(pk__in=label_ids))

            # user can't remove labels that they can't see
            unseen_labels = [l for l in case.labels.all() if l not in user_labels]

            case.update_labels(user, specified_labels + unseen_labels)
            return HttpResponse(status=204)
コード例 #6
0
ファイル: views.py プロジェクト: praekelt/casepro
        def get_context_data(self, **kwargs):
            context = super(CaseCRUDL.Read, self).get_context_data(**kwargs)
            case = self.get_object()
            labels = Label.get_all(self.request.org).order_by('name')
            can_update = case.access_level(self.request.user) == AccessLevel.update

            # angular app requires context data in JSON format
            context['context_data_json'] = json_encode({
                'all_labels': [l.as_json() for l in labels]
            })

            context['max_msg_chars'] = MAX_MESSAGE_CHARS
            context['can_update'] = can_update
            context['alert'] = self.request.GET.get('alert', None)
            return context
コード例 #7
0
ファイル: views.py プロジェクト: Ilhasoft/casepro
        def get_context_data(self, **kwargs):
            context = super(CaseCRUDL.Read, self).get_context_data(**kwargs)
            case = self.get_object()
            can_update = case.access_level(
                self.request.user) == AccessLevel.update

            labels = Label.get_all(self.request.org).order_by("name")
            fields = Field.get_all(self.object.org,
                                   visible=True).order_by("label")

            # angular app requires context data in JSON format
            context["context_data_json"] = {
                "all_labels": [l.as_json() for l in labels],
                "fields": [f.as_json() for f in fields],
            }

            context["can_update"] = can_update
            context["alert"] = self.request.GET.get("alert", None)
            context["case_id"] = case.id

            return context
コード例 #8
0
ファイル: views.py プロジェクト: faithNassiwa/casepro
    class Label(OrgObjPermsMixin, SmartUpdateView):
        """
        JSON endpoint for labelling a case
        """
        permission = 'cases.case_update'

        def post(self, request, *args, **kwargs):
            case = self.get_object()
            user = request.user
            user_labels = Label.get_all(self.org, user)

            label_ids = request.json['labels']
            specified_labels = list(user_labels.filter(pk__in=label_ids))

            # user can't remove labels that they can't see
            unseen_labels = [
                l for l in case.labels.all() if l not in user_labels
            ]

            case.update_labels(user, specified_labels + unseen_labels)
            return HttpResponse(status=204)
コード例 #9
0
ファイル: models.py プロジェクト: praekelt/casepro
    def render_book(self, book):
        if self.type == self.TYPE_LABEL:
            sheet = book.add_sheet(six.text_type(_("Incoming Messages")))

            labels = list(Label.get_all(self.org).order_by('name'))

            # get each label's day counts and organise by label and day
            totals_by_label = {}
            for label in labels:
                totals = DailyCount.get_by_label([label], DailyCount.TYPE_INCOMING, self.since, self.until).day_totals()
                totals_by_label[label] = {t[0]: t[1] for t in totals}

            self.write_row(sheet, 0, ["Date"] + [l.name for l in labels])

            row = 1
            for day in date_range(self.since, self.until):
                totals = [totals_by_label.get(l, {}).get(day, 0) for l in labels]
                self.write_row(sheet, row, [day] + totals)
                row += 1

        elif self.type == self.TYPE_PARTNER:
            sheet = book.add_sheet(six.text_type(_("Replies Sent")))

            partners = list(Partner.get_all(self.org).order_by('name'))

            # get each partner's day counts and organise by partner and day
            totals_by_partner = {}
            for partner in partners:
                totals = DailyCount.get_by_partner([partner], DailyCount.TYPE_REPLIES,
                                                   self.since, self.until).day_totals()
                totals_by_partner[partner] = {t[0]: t[1] for t in totals}

            self.write_row(sheet, 0, ["Date"] + [p.name for p in partners])

            row = 1
            for day in date_range(self.since, self.until):
                totals = [totals_by_partner.get(l, {}).get(day, 0) for l in partners]
                self.write_row(sheet, row, [day] + totals)
                row += 1
コード例 #10
0
ファイル: views.py プロジェクト: praekelt/casepro
    def get_context_data(self, **kwargs):
        context = super(BaseHomeView, self).get_context_data(**kwargs)
        org = self.request.org
        user = self.request.user
        partner = user.get_partner(org)

        labels = Label.get_all(org, user).order_by('name')
        groups = Group.get_all(org, visible=True).order_by('name')

        # angular app requires context data in JSON format
        context['context_data_json'] = json_encode({
            'user': {'id': user.pk, 'partner': partner.as_json() if partner else None},
            'labels': [l.as_json() for l in labels],
            'groups': [g.as_json() for g in groups],
        })

        context['banner_text'] = org.get_banner_text()
        context['folder'] = self.folder.name
        context['folder_icon'] = self.folder_icon
        context['open_case_count'] = Case.get_open(org, user).count()
        context['closed_case_count'] = Case.get_closed(org, user).count()
        return context
コード例 #11
0
ファイル: views.py プロジェクト: faithNassiwa/casepro
        def get_context_data(self, **kwargs):
            context = super(CaseCRUDL.Read, self).get_context_data(**kwargs)
            case = self.get_object()
            can_update = case.access_level(
                self.request.user) == AccessLevel.update

            labels = Label.get_all(self.request.org).order_by('name')
            fields = Field.get_all(self.object.org,
                                   visible=True).order_by('label')

            # angular app requires context data in JSON format
            context['context_data_json'] = json_encode({
                'all_labels': [l.as_json() for l in labels],
                'fields': [f.as_json() for f in fields],
            })

            context['can_update'] = can_update
            context['alert'] = self.request.GET.get('alert', None)
            context['case_id'] = case.id
            context['pods'] = pod_registry.pods
            context['pod_types'] = pod_registry.pod_types

            return context
コード例 #12
0
ファイル: views.py プロジェクト: faithNassiwa/casepro
    def get_context_data(self, **kwargs):
        context = super(BaseInboxView, self).get_context_data(**kwargs)
        org = self.request.org
        user = self.request.user
        partner = user.get_partner(org)

        labels = list(Label.get_all(org, user).order_by('name'))
        Label.bulk_cache_initialize(labels)

        groups = Group.get_all(org, visible=True).order_by('name')
        fields = Field.get_all(org, visible=True).order_by('label')

        # angular app requires context data in JSON format
        context['context_data_json'] = json_encode({
            'user': {
                'id': user.pk,
                'partner': partner.as_json() if partner else None
            },
            'labels': [l.as_json() for l in labels],
            'groups': [g.as_json() for g in groups],
            'fields': [f.as_json() for f in fields],
        })

        context['banner_text'] = org.get_banner_text()
        context['folder'] = self.folder.name
        context['folder_icon'] = self.folder_icon
        context['open_case_count'] = Case.get_open(org, user).count()
        context['closed_case_count'] = Case.get_closed(org, user).count()
        context['allow_case_without_message'] = getattr(
            settings, 'SITE_ALLOW_CASE_WITHOUT_MESSAGE', False)
        context['user_must_reply_with_faq'] = org and not user.is_anonymous(
        ) and user.must_use_faq()
        context['site_contact_display'] = getattr(settings,
                                                  'SITE_CONTACT_DISPLAY',
                                                  "name")
        return context
コード例 #13
0
ファイル: models.py プロジェクト: xkmato/casepro
    def render_book(self, book):
        if self.type == self.TYPE_LABEL:
            sheet = book.add_sheet(six.text_type(_("Incoming Messages")))

            labels = list(Label.get_all(self.org).order_by('name'))

            # get each label's day counts and organise by label and day
            totals_by_label = {}
            for label in labels:
                totals = DailyCount.get_by_label([label], DailyCount.TYPE_INCOMING, self.since, self.until).day_totals()
                totals_by_label[label] = {t[0]: t[1] for t in totals}

            self.write_row(sheet, 0, ["Date"] + [l.name for l in labels])

            row = 1
            for day in date_range(self.since, self.until):
                totals = [totals_by_label.get(l, {}).get(day, 0) for l in labels]
                self.write_row(sheet, row, [day] + totals)
                row += 1

        elif self.type == self.TYPE_USER:
            replies_sheet = book.add_sheet(six.text_type(_("Replies Sent")))
            cases_opened_sheet = book.add_sheet(six.text_type(_("Cases Opened")))
            cases_closed_sheet = book.add_sheet(six.text_type(_("Cases Closed")))

            users = self.org.get_org_users().order_by('profile__full_name')

            replies_totals_by_user = {}
            cases_opened_by_user = {}
            cases_closed_by_user = {}
            for user in users:
                replies_totals = DailyCount.get_by_user(
                    self.org, [user], DailyCount.TYPE_REPLIES, self.since, self.until).day_totals()
                cases_opened_totals = DailyCount.get_by_user(
                    self.org, [user], DailyCount.TYPE_CASE_OPENED, self.since, self.until).day_totals()
                cases_closed_totals = DailyCount.get_by_user(
                    self.org, [user], DailyCount.TYPE_CASE_CLOSED, self.since, self.until).day_totals()
                replies_totals_by_user[user] = {t[0]: t[1] for t in replies_totals}
                cases_opened_by_user[user] = {t[0]: t[1] for t in cases_opened_totals}
                cases_closed_by_user[user] = {t[0]: t[1] for t in cases_closed_totals}

            self.write_row(replies_sheet, 0, ["Date"] + [u.get_full_name() for u in users])
            self.write_row(cases_opened_sheet, 0, ["Date"] + [u.get_full_name() for u in users])
            self.write_row(cases_closed_sheet, 0, ["Date"] + [u.get_full_name() for u in users])

            row = 1
            for day in date_range(self.since, self.until):
                replies_totals = [replies_totals_by_user.get(u, {}).get(day, 0) for u in users]
                cases_opened_totals = [cases_opened_by_user.get(u, {}).get(day, 0) for u in users]
                cases_closed_totals = [cases_closed_by_user.get(u, {}).get(day, 0) for u in users]
                self.write_row(replies_sheet, row, [day] + replies_totals)
                self.write_row(cases_opened_sheet, row, [day] + cases_opened_totals)
                self.write_row(cases_closed_sheet, row, [day] + cases_closed_totals)
                row += 1

        elif self.type == self.TYPE_PARTNER:
            replies_sheet = book.add_sheet(six.text_type(_("Replies Sent")))
            ave_sheet = book.add_sheet(six.text_type(_("Average Reply Time")))
            ave_closed_sheet = book.add_sheet(six.text_type(_("Average Closed Time")))
            cases_opened_sheet = book.add_sheet(six.text_type(_("Cases Opened")))
            cases_closed_sheet = book.add_sheet(six.text_type(_("Cases Closed")))

            partners = list(Partner.get_all(self.org).order_by('name'))

            # get each partner's day counts and organise by partner and day
            replies_totals_by_partner = {}
            cases_opened_by_partner = {}
            cases_closed_by_partner = {}
            replied_averages_by_partner = {}
            closed_averages_by_partner = {}
            for partner in partners:
                replies_totals = DailyCount.get_by_partner([partner], DailyCount.TYPE_REPLIES,
                                                           self.since, self.until).day_totals()
                cases_opened_totals = DailyCount.get_by_partner([partner], DailyCount.TYPE_CASE_OPENED,
                                                                self.since, self.until).day_totals()
                cases_closed_totals = DailyCount.get_by_partner([partner], DailyCount.TYPE_CASE_CLOSED,
                                                                self.since, self.until).day_totals()
                replies_totals_by_partner[partner] = {t[0]: t[1] for t in replies_totals}
                cases_opened_by_partner[partner] = {t[0]: t[1] for t in cases_opened_totals}
                cases_closed_by_partner[partner] = {t[0]: t[1] for t in cases_closed_totals}
                replied_second_totals = DailySecondTotalCount.get_by_partner([partner],
                                                                             DailySecondTotalCount.TYPE_TILL_REPLIED,
                                                                             self.since, self.until).day_totals()
                replied_averages_by_partner[partner] = {t[0]: (float(t[2]) / t[1]) for t in replied_second_totals}
                closed_second_totals = DailySecondTotalCount.get_by_partner([partner],
                                                                            DailySecondTotalCount.TYPE_TILL_CLOSED,
                                                                            self.since, self.until).day_totals()
                closed_averages_by_partner[partner] = {t[0]: (float(t[2]) / t[1]) for t in closed_second_totals}

            self.write_row(replies_sheet, 0, ["Date"] + [p.name for p in partners])
            self.write_row(cases_opened_sheet, 0, ["Date"] + [p.name for p in partners])
            self.write_row(cases_closed_sheet, 0, ["Date"] + [p.name for p in partners])
            self.write_row(ave_sheet, 0, ["Date"] + [p.name for p in partners])
            self.write_row(ave_closed_sheet, 0, ["Date"] + [p.name for p in partners])

            row = 1
            for day in date_range(self.since, self.until):
                replies_totals = [replies_totals_by_partner.get(l, {}).get(day, 0) for l in partners]
                cases_opened_totals = [cases_opened_by_partner.get(l, {}).get(day, 0) for l in partners]
                cases_closed_totals = [cases_closed_by_partner.get(l, {}).get(day, 0) for l in partners]
                replied_averages = [replied_averages_by_partner.get(l, {}).get(day, 0) for l in partners]
                closed_averages = [closed_averages_by_partner.get(l, {}).get(day, 0) for l in partners]
                self.write_row(replies_sheet, row, [day] + replies_totals)
                self.write_row(cases_opened_sheet, row, [day] + cases_opened_totals)
                self.write_row(cases_closed_sheet, row, [day] + cases_closed_totals)
                self.write_row(ave_sheet, row, [day] + replied_averages)
                self.write_row(ave_closed_sheet, row, [day] + closed_averages)
                row += 1
コード例 #14
0
 def get_labels(self):
     return self.labels.filter(is_active=True) if self.is_restricted else Label.get_all(self.org)
コード例 #15
0
ファイル: models.py プロジェクト: Ilhasoft/casepro
    def render_book(self, book):
        if self.type == self.TYPE_LABEL:
            sheet = book.add_sheet(str(_("Incoming Messages")))

            labels = list(Label.get_all(self.org).order_by("name"))

            # get each label's day counts and organise by label and day
            totals_by_label = {}
            for label in labels:
                totals = DailyCount.get_by_label([label],
                                                 DailyCount.TYPE_INCOMING,
                                                 self.since,
                                                 self.until).day_totals()
                totals_by_label[label] = {t[0]: t[1] for t in totals}

            self.write_row(sheet, 0, ["Date"] + [l.name for l in labels])

            row = 1
            for day in date_range(self.since, self.until):
                totals = [
                    totals_by_label.get(l, {}).get(day, 0) for l in labels
                ]
                self.write_row(sheet, row, [day] + totals)
                row += 1

        elif self.type == self.TYPE_USER:
            replies_sheet = book.add_sheet(str(_("Replies Sent")))
            cases_opened_sheet = book.add_sheet(str(_("Cases Opened")))
            cases_closed_sheet = book.add_sheet(str(_("Cases Closed")))

            users = self.org.get_org_users().order_by("profile__full_name")

            replies_totals_by_user = {}
            cases_opened_by_user = {}
            cases_closed_by_user = {}
            for user in users:
                replies_totals = DailyCount.get_by_user(
                    self.org, [user], DailyCount.TYPE_REPLIES, self.since,
                    self.until).day_totals()
                cases_opened_totals = DailyCount.get_by_user(
                    self.org, [user], DailyCount.TYPE_CASE_OPENED, self.since,
                    self.until).day_totals()
                cases_closed_totals = DailyCount.get_by_user(
                    self.org, [user], DailyCount.TYPE_CASE_CLOSED, self.since,
                    self.until).day_totals()
                replies_totals_by_user[user] = {
                    t[0]: t[1]
                    for t in replies_totals
                }
                cases_opened_by_user[user] = {
                    t[0]: t[1]
                    for t in cases_opened_totals
                }
                cases_closed_by_user[user] = {
                    t[0]: t[1]
                    for t in cases_closed_totals
                }

            self.write_row(replies_sheet, 0,
                           ["Date"] + [u.get_full_name() for u in users])
            self.write_row(cases_opened_sheet, 0,
                           ["Date"] + [u.get_full_name() for u in users])
            self.write_row(cases_closed_sheet, 0,
                           ["Date"] + [u.get_full_name() for u in users])

            row = 1
            for day in date_range(self.since, self.until):
                replies_totals = [
                    replies_totals_by_user.get(u, {}).get(day, 0)
                    for u in users
                ]
                cases_opened_totals = [
                    cases_opened_by_user.get(u, {}).get(day, 0) for u in users
                ]
                cases_closed_totals = [
                    cases_closed_by_user.get(u, {}).get(day, 0) for u in users
                ]
                self.write_row(replies_sheet, row, [day] + replies_totals)
                self.write_row(cases_opened_sheet, row,
                               [day] + cases_opened_totals)
                self.write_row(cases_closed_sheet, row,
                               [day] + cases_closed_totals)
                row += 1

        elif self.type == self.TYPE_PARTNER:
            replies_sheet = book.add_sheet(str(_("Replies Sent")))
            ave_sheet = book.add_sheet(str(_("Average Reply Time")))
            ave_closed_sheet = book.add_sheet(str(_("Average Closed Time")))
            cases_opened_sheet = book.add_sheet(str(_("Cases Opened")))
            cases_closed_sheet = book.add_sheet(str(_("Cases Closed")))

            partners = list(Partner.get_all(self.org).order_by("name"))

            # get each partner's day counts and organise by partner and day
            replies_totals_by_partner = {}
            cases_opened_by_partner = {}
            cases_closed_by_partner = {}
            replied_averages_by_partner = {}
            closed_averages_by_partner = {}
            for partner in partners:
                replies_totals = DailyCount.get_by_partner(
                    [partner], DailyCount.TYPE_REPLIES, self.since,
                    self.until).day_totals()
                cases_opened_totals = DailyCount.get_by_partner(
                    [partner], DailyCount.TYPE_CASE_OPENED, self.since,
                    self.until).day_totals()
                cases_closed_totals = DailyCount.get_by_partner(
                    [partner], DailyCount.TYPE_CASE_CLOSED, self.since,
                    self.until).day_totals()
                replies_totals_by_partner[partner] = {
                    t[0]: t[1]
                    for t in replies_totals
                }
                cases_opened_by_partner[partner] = {
                    t[0]: t[1]
                    for t in cases_opened_totals
                }
                cases_closed_by_partner[partner] = {
                    t[0]: t[1]
                    for t in cases_closed_totals
                }
                replied_second_totals = DailySecondTotalCount.get_by_partner(
                    [partner], DailySecondTotalCount.TYPE_TILL_REPLIED,
                    self.since, self.until).day_totals()
                replied_averages_by_partner[partner] = {
                    t[0]: (float(t[2]) / t[1])
                    for t in replied_second_totals
                }
                closed_second_totals = DailySecondTotalCount.get_by_partner(
                    [partner], DailySecondTotalCount.TYPE_TILL_CLOSED,
                    self.since, self.until).day_totals()
                closed_averages_by_partner[partner] = {
                    t[0]: (float(t[2]) / t[1])
                    for t in closed_second_totals
                }

            self.write_row(replies_sheet, 0,
                           ["Date"] + [p.name for p in partners])
            self.write_row(cases_opened_sheet, 0,
                           ["Date"] + [p.name for p in partners])
            self.write_row(cases_closed_sheet, 0,
                           ["Date"] + [p.name for p in partners])
            self.write_row(ave_sheet, 0, ["Date"] + [p.name for p in partners])
            self.write_row(ave_closed_sheet, 0,
                           ["Date"] + [p.name for p in partners])

            row = 1
            for day in date_range(self.since, self.until):
                replies_totals = [
                    replies_totals_by_partner.get(l, {}).get(day, 0)
                    for l in partners
                ]
                cases_opened_totals = [
                    cases_opened_by_partner.get(l, {}).get(day, 0)
                    for l in partners
                ]
                cases_closed_totals = [
                    cases_closed_by_partner.get(l, {}).get(day, 0)
                    for l in partners
                ]
                replied_averages = [
                    replied_averages_by_partner.get(l, {}).get(day, 0)
                    for l in partners
                ]
                closed_averages = [
                    closed_averages_by_partner.get(l, {}).get(day, 0)
                    for l in partners
                ]
                self.write_row(replies_sheet, row, [day] + replies_totals)
                self.write_row(cases_opened_sheet, row,
                               [day] + cases_opened_totals)
                self.write_row(cases_closed_sheet, row,
                               [day] + cases_closed_totals)
                self.write_row(ave_sheet, row, [day] + replied_averages)
                self.write_row(ave_closed_sheet, row, [day] + closed_averages)
                row += 1
コード例 #16
0
ファイル: models.py プロジェクト: praekelt/casepro
 def get_labels(self):
     return self.labels.filter(is_active=True) if self.is_restricted else Label.get_all(self.org)
コード例 #17
0
ファイル: forms.py プロジェクト: praekelt/casepro
    def __init__(self, *args, **kwargs):
        org = kwargs.pop('org')
        super(PartnerForm, self).__init__(*args, **kwargs)

        self.fields['labels'].queryset = Label.get_all(org).order_by('name')
コード例 #18
0
    def __init__(self, *args, **kwargs):
        org = kwargs.pop('org')

        super(BasePartnerForm, self).__init__(*args, **kwargs)

        self.fields['labels'].queryset = Label.get_all(org).order_by('name')
コード例 #19
0
ファイル: forms.py プロジェクト: psychomantys/casepro
    def __init__(self, *args, **kwargs):
        org = kwargs.pop("org")

        super(BasePartnerForm, self).__init__(*args, **kwargs)

        self.fields["labels"].queryset = Label.get_all(org).order_by("name")