示例#1
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
示例#2
0
    def create_orgs(self, superuser, org_names, group_names, field_specs, partner_specs, password):
        """
        Creates the orgs
        """
        self._log(f"Creating {len(org_names)} orgs... ")

        orgs = []
        for o, org_name in enumerate(org_names):
            org = Org.objects.create(
                name=org_name,
                timezone=pytz.timezone(random.choice(pytz.all_timezones)),
                subdomain=org_name.lower(),
                created_on=timezone.now(),
                created_by=superuser,
                modified_by=superuser,
            )
            orgs.append(org)

            # create administrator user for this org
            Profile.create_org_user(
                org, "Adam", f"admin{o+1}@unicef.org", password, change_password=False, must_use_faq=False
            )

            for group_name in group_names:
                Group.objects.create(org=org, uuid=str(uuid4()), name=group_name)

            for field_spec in field_specs:
                Field.objects.create(
                    org=org, label=field_spec["label"], key=field_spec["key"], value_type=field_spec["value_type"]
                )

            label_names = set()
            for partner_spec in partner_specs:
                label_names.update(partner_spec["labels"])

            for label_name in sorted(label_names):
                tests = [ContainsTest([label_name.lower()], Quantifier.ANY)]
                Label.create(org, label_name, f"Messages about {label_name}", tests, is_synced=False)

            for p, partner_spec in enumerate(partner_specs):
                labels = Label.objects.filter(org=org, name__in=partner_spec["labels"])
                partner = Partner.create(
                    org,
                    partner_spec["name"],
                    partner_spec["description"],
                    primary_contact=None,
                    restricted=True,
                    labels=labels,
                )

                for user_spec in partner_spec["users"]:
                    email = f"{user_spec['name'].lower()}{o + 1}@{partner_spec['name'].lower()}.com"
                    Profile.create_partner_user(org, partner, user_spec["role"], user_spec["name"], email, password)

        self._log(self.style.SUCCESS("OK") + "\n")
        return orgs
示例#3
0
def record_incoming_labelling(sender, instance, action, reverse, model, pk_set,
                              **kwargs):
    day = datetime_to_date(instance.created_on, instance.org)

    if action == 'post_add':
        for label_id in pk_set:
            DailyCount.record_item(day, DailyCount.TYPE_INCOMING,
                                   Label(pk=label_id))
    elif action == 'post_remove':
        for label_id in pk_set:
            DailyCount.record_removal(day, DailyCount.TYPE_INCOMING,
                                      Label(pk=label_id))
    elif action == 'pre_clear':
        for label in instance.labels.all():
            DailyCount.record_removal(day, DailyCount.TYPE_INCOMING, label)
示例#4
0
        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)
示例#5
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}
示例#6
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()
示例#7
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)
示例#8
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
示例#9
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)

        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
示例#10
0
    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)
示例#11
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
示例#12
0
    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
示例#13
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
示例#14
0
        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
示例#15
0
 def get_labels(self):
     return self.labels.filter(is_active=True) if self.is_restricted else Label.get_all(self.org)
示例#16
0
    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
示例#17
0
 def get_labels(self):
     return self.labels.filter(is_active=True) if self.is_restricted else Label.get_all(self.org)
示例#18
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')
示例#19
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')
示例#20
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
示例#21
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")