Esempio n. 1
0
        def get(self, request, *args, **kwargs):
            org = request.org
            partner_id = request.GET.get("partner")
            non_partner = str_to_bool(self.request.GET.get("non_partner", ""))
            with_activity = str_to_bool(
                self.request.GET.get("with_activity", ""))

            if non_partner:
                users = org.administrators.all()
            elif partner_id:
                users = Partner.objects.get(org=org, pk=partner_id).get_users()
            else:
                users = org.get_users()

            users = list(users.order_by("profile__full_name"))

            # get reply statistics
            if with_activity:
                replies_total = TotalCount.get_by_user(
                    org, users, DailyCount.TYPE_REPLIES).scope_totals()
                replies_this_month = DailyCount.get_by_user(
                    org, users, DailyCount.TYPE_REPLIES,
                    *month_range(0)).scope_totals()
                replies_last_month = DailyCount.get_by_user(
                    org, users, DailyCount.TYPE_REPLIES,
                    *month_range(-1)).scope_totals()

                cases_total = TotalCount.get_by_user(
                    org, users, DailyCount.TYPE_CASE_OPENED).scope_totals()
                cases_opened_this_month = DailyCount.get_by_user(
                    org, users, DailyCount.TYPE_CASE_OPENED,
                    *month_range(0)).scope_totals()
                cases_closed_this_month = DailyCount.get_by_user(
                    org, users, DailyCount.TYPE_CASE_CLOSED,
                    *month_range(0)).scope_totals()

            def as_json(user):
                obj = user.as_json(full=True, org=org)
                if with_activity:
                    obj.update({
                        "replies": {
                            "this_month": replies_this_month.get(user, 0),
                            "last_month": replies_last_month.get(user, 0),
                            "total": replies_total.get(user, 0),
                        },
                        "cases": {
                            "opened_this_month":
                            cases_opened_this_month.get(user, 0),
                            "closed_this_month":
                            cases_closed_this_month.get(user, 0),
                            "total":
                            cases_total.get(user, 0),
                        },
                    })

                return obj

            return JsonResponse({"results": [as_json(u) for u in users]})
Esempio n. 2
0
        def get(self, request, *args, **kwargs):
            with_activity = str_to_bool(
                self.request.GET.get("with_activity", ""))
            labels = list(
                Label.get_all(self.request.org,
                              self.request.user).order_by("name"))
            Label.bulk_cache_initialize(labels)

            if with_activity:
                # get message statistics
                this_month = DailyCount.get_by_label(
                    labels, DailyCount.TYPE_INCOMING,
                    *month_range(0)).scope_totals()
                last_month = DailyCount.get_by_label(
                    labels, DailyCount.TYPE_INCOMING,
                    *month_range(-1)).scope_totals()

            def as_json(label):
                obj = label.as_json()
                if with_activity:
                    obj["activity"] = {
                        "this_month": this_month.get(label, 0),
                        "last_month": last_month.get(label, 0)
                    }
                return obj

            return JsonResponse({"results": [as_json(l) for l in labels]})
Esempio n. 3
0
 def render_to_response(self, context, **response_kwargs):
     if self.request.is_ajax():
         with_activity = str_to_bool(
             self.request.GET.get("with_activity", ""))
         return self.render_as_json(context["object_list"],
                                    with_activity)
     else:
         return super(PartnerCRUDL.List,
                      self).render_to_response(context,
                                               **response_kwargs)
Esempio n. 4
0
        def get(self, request, *args, **kwargs):
            with_activity = str_to_bool(self.request.GET.get('with_activity', ''))
            labels = Label.get_all(self.request.org, self.request.user).order_by('name')

            if with_activity:
                # get message statistics
                this_month = DailyCount.get_by_label(labels, DailyCount.TYPE_INCOMING, *month_range(0)).scope_totals()
                last_month = DailyCount.get_by_label(labels, DailyCount.TYPE_INCOMING, *month_range(-1)).scope_totals()

            def as_json(label):
                obj = label.as_json()
                if with_activity:
                    obj['messages'] = {
                        'this_month': this_month.get(label, 0),
                        'last_month': last_month.get(label, 0),
                    }
                return obj

            return JsonResponse({'results': [as_json(l) for l in labels]})
Esempio n. 5
0
    def derive_search(self):
        """
        Collects and prepares message search parameters into JSON serializable dict
        """
        folder = MessageFolder[self.request.GET["folder"]]
        label_id = self.request.GET.get("label", None)
        include_archived = str_to_bool(self.request.GET.get("archived", ""))
        text = self.request.GET.get("text", None)
        contact_id = self.request.GET.get("contact", None)
        after = parse_iso8601(self.request.GET.get("after", None))
        before = parse_iso8601(self.request.GET.get("before", None))

        return {
            "folder": folder,
            "label": label_id,
            "include_archived":
            include_archived,  # only applies to flagged folder
            "text": text,
            "contact": contact_id,
            "after": after,
            "before": before,
        }
Esempio n. 6
0
    def derive_search(self):
        """
        Collects and prepares message search parameters into JSON serializable dict
        """
        folder = MessageFolder[self.request.GET['folder']]
        label_id = self.request.GET.get('label', None)
        include_archived = str_to_bool(self.request.GET.get('archived', ''))
        text = self.request.GET.get('text', None)
        contact_id = self.request.GET.get('contact', None)
        group_ids = parse_csv(self.request.GET.get('groups', ''), as_ints=True)
        after = parse_iso8601(self.request.GET.get('after', None))
        before = parse_iso8601(self.request.GET.get('before', None))

        return {
            'folder': folder,
            'label': label_id,
            'include_archived': include_archived,  # only applies to flagged folder
            'text': text,
            'contact': contact_id,
            'groups': group_ids,
            'after': after,
            'before': before
        }
Esempio n. 7
0
        def get(self, request, *args, **kwargs):
            org = request.org
            partner_id = request.GET.get('partner')
            non_partner = str_to_bool(self.request.GET.get('non_partner', ''))
            with_activity = str_to_bool(
                self.request.GET.get('with_activity', ''))

            if non_partner:
                users = org.administrators.all()
            elif partner_id:
                users = Partner.objects.get(org=org, pk=partner_id).get_users()
            else:
                users = org.get_users()

            users = list(users.order_by('profile__full_name'))

            # get reply statistics
            if with_activity:
                replies_total = DailyCount.get_by_user(org, users,
                                                       DailyCount.TYPE_REPLIES,
                                                       None,
                                                       None).scope_totals()
                replies_this_month = DailyCount.get_by_user(
                    org, users, DailyCount.TYPE_REPLIES,
                    *month_range(0)).scope_totals()
                replies_last_month = DailyCount.get_by_user(
                    org, users, DailyCount.TYPE_REPLIES,
                    *month_range(-1)).scope_totals()

                cases_total = DailyCount.get_by_user(
                    org, users, DailyCount.TYPE_CASE_OPENED, None,
                    None).scope_totals()
                cases_opened_this_month = DailyCount.get_by_user(
                    org, users, DailyCount.TYPE_CASE_OPENED,
                    *month_range(0)).scope_totals()
                cases_closed_this_month = DailyCount.get_by_user(
                    org, users, DailyCount.TYPE_CASE_CLOSED,
                    *month_range(0)).scope_totals()

            def as_json(user):
                obj = user.as_json(full=True, org=org)
                if with_activity:
                    obj.update({
                        'replies': {
                            'this_month': replies_this_month.get(user, 0),
                            'last_month': replies_last_month.get(user, 0),
                            'total': replies_total.get(user, 0)
                        },
                        'cases': {
                            'opened_this_month':
                            cases_opened_this_month.get(user, 0),
                            'closed_this_month':
                            cases_closed_this_month.get(user, 0),
                            'total':
                            cases_total.get(user, 0)
                        },
                    })

                return obj

            return JsonResponse({'results': [as_json(u) for u in users]})
Esempio n. 8
0
 def render_to_response(self, context, **response_kwargs):
     if self.request.is_ajax():
         with_activity = str_to_bool(self.request.GET.get('with_activity', ''))
         return self.render_as_json(context['object_list'], with_activity)
     else:
         return super(PartnerCRUDL.List, self).render_to_response(context, **response_kwargs)