Skip to content

Commit da6484c

Browse files
committed
Merge branch 'main' into copilot/add-crm-view-income-tracking
2 parents c47f9a8 + b44d885 commit da6484c

File tree

4 files changed

+36
-9
lines changed

4 files changed

+36
-9
lines changed

weblate_web/crm/templates/crm/index.html

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,19 @@
178178
aria-describedby="row-invoices">{% translate "View" %}</a>
179179
</td>
180180
</tr>
181+
<tr>
182+
<th scope="row" id="row-invoices">
183+
<a href="{% url 'crm:service-list' kind="premium" %}">Premium support services</a>
184+
</th>
185+
186+
<td></td>
187+
188+
<td>
189+
<a href="{% url 'crm:service-list' kind="premium" %}"
190+
class="viewlink"
191+
aria-describedby="row-invoices">{% translate "View" %}</a>
192+
</td>
193+
</tr>
181194
</table>
182195
{% endif %}
183196
{% if perms.invoices.view_income %}

weblate_web/crm/tests.py

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from datetime import timedelta
1+
from datetime import date, timedelta
22
from decimal import Decimal
33

44
import responses
@@ -8,6 +8,7 @@
88
from django.utils import timezone
99

1010
from weblate_web.invoices.models import (
11+
Currency,
1112
Discount,
1213
Invoice,
1314
InvoiceCategory,
@@ -229,8 +230,8 @@ def create_test_invoice(self, year, month, category, amount):
229230
kind=InvoiceKind.INVOICE,
230231
category=category,
231232
customer=self.customer,
232-
issue_date=timezone.datetime(year, month, 15).date(),
233-
currency=0, # EUR
233+
issue_date=date(year, month, 15),
234+
currency=Currency.EUR,
234235
)
235236
invoice.invoiceitem_set.create(
236237
description="Test item", quantity=1, unit_price=amount
@@ -305,8 +306,8 @@ def test_income_filters_only_invoices(self):
305306
kind=InvoiceKind.INVOICE,
306307
category=InvoiceCategory.HOSTING,
307308
customer=self.customer,
308-
issue_date=timezone.datetime(current_year, 1, 15).date(),
309-
currency=0,
309+
issue_date=date(current_year, 1, 15),
310+
currency=Currency.EUR,
310311
)
311312
invoice.invoiceitem_set.create(
312313
description="Invoice item", quantity=1, unit_price=Decimal(1000)
@@ -317,8 +318,8 @@ def test_income_filters_only_invoices(self):
317318
kind=InvoiceKind.QUOTE,
318319
category=InvoiceCategory.HOSTING,
319320
customer=self.customer,
320-
issue_date=timezone.datetime(current_year, 1, 15).date(),
321-
currency=0,
321+
issue_date=date(current_year, 1, 15),
322+
currency=Currency.EUR,
322323
)
323324
quote.invoiceitem_set.create(
324325
description="Quote item", quantity=1, unit_price=Decimal(5000)

weblate_web/crm/views.py

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727

2828
if TYPE_CHECKING:
2929
from collections.abc import Callable
30+
from uuid import UUID
3031

3132
from django.http import HttpRequest
3233

@@ -76,6 +77,8 @@ def get_title(self) -> str:
7677
return "Extended support services"
7778
case "dedicated":
7879
return "Dedicated hosting services"
80+
case "premium":
81+
return "Premium support services"
7982
raise ValueError(self.kwargs["kind"])
8083

8184
def get_context_data(self, **kwargs):
@@ -109,7 +112,15 @@ def get_queryset(self):
109112
).distinct()
110113
case "dedicated":
111114
return qs.filter(
112-
subscription__package__category=PackageCategory.PACKAGE_DEDICATED
115+
subscription__package__category=PackageCategory.PACKAGE_DEDICATED,
116+
subscription__expires__gte=timezone.now(),
117+
subscription__enabled=True,
118+
).distinct()
119+
case "premium":
120+
return qs.filter(
121+
subscription__package__name="premium",
122+
subscription__expires__gte=timezone.now(),
123+
subscription__enabled=True,
113124
).distinct()
114125
raise ValueError(self.kwargs["kind"])
115126

@@ -575,7 +586,7 @@ def filter_by_month(inv: Invoice, idx: int) -> bool:
575586

576587
def _get_invoices_and_totals(
577588
self, year: int, month: int | None = None
578-
) -> tuple[list[Invoice], dict[int, Decimal]]:
589+
) -> tuple[list[Invoice], dict[UUID, Decimal]]:
579590
"""Fetch invoices and pre-calculate totals (shared helper)."""
580591
query = Invoice.objects.filter(kind=InvoiceKind.INVOICE, issue_date__year=year)
581592
if month:

weblate_web/templates/support.html

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ <h2>{% translate "Extended self-hosted support" %}</h2>
9393
<li>{% translate "Issues in your environment fixed immediately." %}</li>
9494
<li>{% translate "Priority e-mail support." %}</li>
9595
<li>{% translate "Only available with the installation package" %}</li>
96+
<li>{% translate "Be prepared with security notifications prior to the fix publication." %}</li>
9697
</ul>
9798
<a href="{% url 'subscription-new' %}?plan=extended"
9899
class="format-item bottom-left">{{ extended_support_package.price|price_format }}<span>{% translate "annually" %}</span></a>
@@ -110,6 +111,7 @@ <h2>{% translate "Premium self-hosted support" %}</h2>
110111
<li>{% translate "Issues in your environment fixed immediately." %}</li>
111112
<li>{% translate "Priority e-mail support." %}</li>
112113
<li>{% translate "Next business day support response guaranteed." %}</li>
114+
<li>{% translate "Be prepared with security notifications prior to the fix publication." %}</li>
113115
</ul>
114116
<a href="{% url 'subscription-new' %}?plan=premium"
115117
class="format-item bottom-left">{{ premium_support_package.price|price_format }}<span>{% translate "annually" %}</span></a>

0 commit comments

Comments
 (0)