def get_global_pretranslation_quality()

in pontoon/insights/utils.py [0:0]


def get_global_pretranslation_quality(category, id):
    start_date = get_insight_start_date()

    sync_user = User.objects.get(email="pontoon-sync@example.com").pk

    pretranslation_users = User.objects.filter(
        email__in=[
            "pontoon-tm@example.com",
            "pontoon-gt@example.com",
        ]
    ).values_list("pk", flat=True)

    actions = (
        ActionLog.objects.filter(
            created_at__gte=start_date,
            action_type__in=["translation:approved", "translation:rejected"],
            translation__user__in=pretranslation_users,
        )
        .exclude(performed_by=sync_user)
        # Truncate to month and add to select list
        .annotate(month=TruncMonth("created_at"))
        # Group By month and locale
        .values("month", f"translation__{category}")
        # Select the sum of the grouping
        .annotate(
            pretranslations_approved_sum=Count(
                "id", filter=Q(action_type="translation:approved")
            )
        )
        .annotate(
            pretranslations_rejected_sum=Count(
                "id", filter=Q(action_type="translation:rejected")
            )
        )
        # Select month and values
        .values(
            "month",
            f"translation__{category}__{id}",
            f"translation__{category}__name",
            "pretranslations_approved_sum",
            "pretranslations_rejected_sum",
        )
        .order_by("month")
    )

    data = {
        "all": {
            "name": "All",
            "approval_rate": [None] * 12,
        }
    }

    approved = "pretranslations_approved_sum"
    rejected = "pretranslations_rejected_sum"

    totals = [
        {
            approved: 0,
            rejected: 0,
        }
        for x in range(0, 12)
    ]

    for action in actions:
        key = action[f"translation__{category}__{id}"]
        name = action[f"translation__{category}__name"]
        month_index = relativedelta(
            action["month"].replace(tzinfo=None), start_date
        ).months

        if category == "locale":
            name = f"{name} · {key}"

        item = data.setdefault(
            key,
            {
                "name": name,
                "approval_rate": [None] * 12,
            },
        )
        item["approval_rate"][month_index] = get_approval_rate(action)
        totals[month_index][approved] += action[approved]
        totals[month_index][rejected] += action[rejected]

    # Monthly totals across the entire category
    total_approval_rates = data["all"]["approval_rate"]
    for idx, _ in enumerate(total_approval_rates):
        total_approval_rates[idx] = get_approval_rate(totals[idx])
    total_approval_rates = [
        get_approval_rate(totals[idx]) for idx, _ in enumerate(total_approval_rates)
    ]

    return {
        "dates": sorted(list({convert_to_unix_time(x["month"]) for x in actions})),
        "dataset": json.dumps([v for _, v in data.items()]),
    }