Skip to content

Commit

Permalink
Merge pull request #737 from readthedocs/davidfischer/advertiser-topi…
Browse files Browse the repository at this point in the history
…c-report

Advertiser topic report
  • Loading branch information
davidfischer committed Jun 2, 2023
2 parents 5302e46 + bafb30c commit 357554a
Show file tree
Hide file tree
Showing 6 changed files with 92 additions and 3 deletions.
7 changes: 7 additions & 0 deletions adserver/templates/adserver/base.html
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,13 @@ <h6 class="text-muted">{{ advertiser }}</h6>
<span>{% trans 'Keywords' %}</span>
</a>
</li>

<li class="nav-item">
<a class="nav-link" href="{% url 'advertiser_topic_report' advertiser.slug %}" data-toggle="tooltip" title="{% trans 'This report is not useful for all advertisers. The link is only shown to staff.' %}">
<span class="fa fa-lock fa-fw ml-4 text-muted" aria-hidden="true"></span>
<span>{% trans 'Topics' %}</span>
</a>
</li>
{% endif %}

<li class="nav-item">
Expand Down
38 changes: 38 additions & 0 deletions adserver/templates/adserver/reports/advertiser-topic.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
{% extends "adserver/reports/advertiser.html" %}
{% load humanize %}
{% load i18n %}
{% load metabase %}


{% block title %}{% trans 'Advertiser Topic Report' %} - {{ advertiser }}{% endblock %}


{% block heading %}
{% blocktrans %}Advertiser Topic Report for {{ advertiser }}{% endblocktrans %}
{% endblock heading %}

{% block breadcrumbs %}
{{ block.super }}
<li class="breadcrumb-item active">{% trans 'Topic Report' %}</li>
{% endblock breadcrumbs %}


{% block explainer %}
<section class="mb-5">
<h3>{% trans 'About this report' %}</h3>
<p>{% trans 'This report shows your performance by topic.' %}</p>
<em>{% trans 'This report may include topics that you do not target with your campaigns. That is because we may categorize pages as being about more than one topic. All previous days data is complete.' %}</em>
</section>
{% endblock explainer %}


{% block report %}{% endblock report %}


{% block summary %}
<div class="row mb-5">
<div class="col min-vh-50">
{% metabase_question_embed metabase_advertiser_topics advertiser_slug=advertiser.slug start_date=start_date end_date=end_date %}
</div>
</div>
{% endblock summary %}
13 changes: 13 additions & 0 deletions adserver/tests/test_reports.py
Original file line number Diff line number Diff line change
Expand Up @@ -464,6 +464,19 @@ def test_advertiser_keyword_report(self):
resp = self.client.get(url)
self.assertContains(resp, "Advertiser Keyword Report")

def test_advertiser_topic_report(self):
url = reverse("advertiser_topic_report", args=[self.advertiser1.slug])

# Anonymous
resp = self.client.get(url)
self.assertEqual(resp.status_code, 302)
self.assertTrue(resp["location"].startswith("/accounts/login/"))

self.client.force_login(self.staff_user)

resp = self.client.get(url)
self.assertContains(resp, "Advertiser Topic Report")

def test_publisher_report_access(self):
url = reverse("publisher_report", args=[self.publisher1.slug])
url2 = reverse("publisher_report", args=[self.publisher2.slug])
Expand Down
12 changes: 9 additions & 3 deletions adserver/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
from .views import AdvertiserPublisherReportView
from .views import AdvertiserReportView
from .views import AdvertiserStripePortalView
from .views import AdvertiserTopicReportView
from .views import AdViewProxyView
from .views import AdViewTimeProxyView
from .views import ApiTokenCreateView
Expand Down Expand Up @@ -168,15 +169,20 @@
AdvertiserPublisherReportView.as_view(),
name="advertiser_publisher_report",
),
path(
r"advertiser/<slug:advertiser_slug>/report/publishers.csv",
AdvertiserPublisherReportView.as_view(export=True),
name="advertiser_publisher_report_export",
),
path(
r"advertiser/<slug:advertiser_slug>/report/keywords/",
AdvertiserKeywordReportView.as_view(),
name="advertiser_keyword_report",
),
path(
r"advertiser/<slug:advertiser_slug>/report/publishers.csv",
AdvertiserPublisherReportView.as_view(export=True),
name="advertiser_publisher_report_export",
r"advertiser/<slug:advertiser_slug>/report/topics/",
AdvertiserTopicReportView.as_view(),
name="advertiser_topic_report",
),
path(
r"advertiser/<slug:advertiser_slug>/flights/",
Expand Down
24 changes: 24 additions & 0 deletions adserver/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -1272,6 +1272,30 @@ def get_context_data(self, **kwargs):
return context


class AdvertiserTopicReportView(AdvertiserAccessMixin, BaseReportView):

"""A report for an advertiser broken down by topic."""

template_name = "adserver/reports/advertiser-topic.html"

def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)

advertiser_slug = kwargs.get("advertiser_slug", "")
advertiser = get_object_or_404(Advertiser, slug=advertiser_slug)

context.update(
{
"advertiser": advertiser,
"metabase_advertiser_topics": settings.METABASE_QUESTIONS.get(
"ADVERTISER_TOPIC_PERFORMANCE"
),
}
)

return context


class StaffAdvertiserReportView(BaseReportView):

"""A report aggregating all advertisers."""
Expand Down
1 change: 1 addition & 0 deletions config/settings/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -445,6 +445,7 @@
"ADVERTISER_GEO_REPORT": 200,
"PUBLISHER_KEYWORD_REPORT": 318,
"PUBLISHER_GEO_REPORT": 319,
"ADVERTISER_TOPIC_PERFORMANCE": 366,
}
METABASE_DASHBOARDS = {
"ADVERTISER_FIGURES": 80,
Expand Down

0 comments on commit 357554a

Please sign in to comment.