invoicing: add links to agenda & event on pool journal (#75554) #39
|
@ -466,6 +466,17 @@ class AbstractInvoiceLine(models.Model):
|
|||
or error_class
|
||||
)
|
||||
|
||||
def get_chrono_event_url(self):
|
||||
if not settings.KNOWN_SERVICES.get('chrono'):
|
||||
return
|
||||
chrono = list(settings.KNOWN_SERVICES['chrono'].values())[0]
|
||||
chrono_url = chrono.get('url')
|
||||
if not chrono_url:
|
||||
return
|
||||
if not self.event.get('agenda') or not self.event.get('slug'):
|
||||
return
|
||||
return '%smanage/agendas/%s/events/%s/' % (chrono_url, self.event['agenda'], self.event['slug'])
|
||||
|
||||
|
||||
class DraftInvoiceLine(AbstractInvoiceLine):
|
||||
invoice = models.ForeignKey(DraftInvoice, on_delete=models.PROTECT, null=True, related_name='lines')
|
||||
|
@ -484,14 +495,3 @@ class InvoiceLine(AbstractInvoiceLine):
|
|||
],
|
||||
blank=True,
|
||||
)
|
||||
|
||||
def get_chrono_event_url(self):
|
||||
if not settings.KNOWN_SERVICES.get('chrono'):
|
||||
return
|
||||
chrono = list(settings.KNOWN_SERVICES['chrono'].values())[0]
|
||||
chrono_url = chrono.get('url')
|
||||
if not chrono_url:
|
||||
return
|
||||
if not self.event.get('agenda') or not self.event.get('slug'):
|
||||
return
|
||||
return '%smanage/agendas/%s/events/%s/' % (chrono_url, self.event['agenda'], self.event['slug'])
|
||||
|
|
|
@ -11,6 +11,13 @@
|
|||
{{ line.event_date|date:"d/m/Y" }} - {{ line.label }}
|
||||
<br />
|
||||
({{ line.slug }})
|
||||
{% if line.event.agenda %}
|
||||
<br />
|
||||
<a href="{% url 'lingo-manager-agenda-detail-redirect' line.event.agenda %}">{% trans "see agenda" %}</a>
|
||||
{% with line.get_chrono_event_url as event_url %}
|
||||
{% if event_url %}- <a href="{{ event_url }}">{% trans "see event" %}</a>{% endif %}
|
||||
{% endwith %}
|
||||
{% endif %}
|
||||
</td>
|
||||
<td>{{ line.quantity }}</td>
|
||||
<td>{{ line.unit_amount }}</td>
|
||||
|
|
|
@ -1713,6 +1713,66 @@ def test_journal_pool_lines(app, admin_user, draft):
|
|||
assert len(resp.pyquery('tr td.status')) == 1
|
||||
|
||||
|
||||
@pytest.mark.parametrize('draft', [True, False])
|
||||
def test_journal_pool_lines_link(settings, app, admin_user, draft):
|
||||
settings.KNOWN_SERVICES = {}
|
||||
|
||||
line_model = DraftInvoiceLine if draft else InvoiceLine
|
||||
|
||||
regie = Regie.objects.create(label='Foo')
|
||||
campaign = Campaign.objects.create(
|
||||
regie=regie,
|
||||
date_start=datetime.date(2022, 9, 1),
|
||||
date_end=datetime.date(2022, 10, 1),
|
||||
date_issue=datetime.date(2022, 10, 31),
|
||||
)
|
||||
pool = Pool.objects.create(
|
||||
campaign=campaign,
|
||||
draft=draft,
|
||||
status='completed',
|
||||
)
|
||||
|
||||
line = line_model.objects.create(
|
||||
event_date=datetime.date(2022, 9, 1),
|
||||
quantity=1,
|
||||
unit_amount=1,
|
||||
total_amount=1,
|
||||
pool=pool,
|
||||
)
|
||||
|
||||
app = login(app)
|
||||
resp = app.get(
|
||||
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/journal/' % (regie.pk, campaign.pk, pool.pk)
|
||||
)
|
||||
assert 'see agenda' not in resp
|
||||
assert 'see event' not in resp
|
||||
|
||||
line.event = {
|
||||
'agenda': 'foobar',
|
||||
}
|
||||
line.save()
|
||||
resp = app.get(
|
||||
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/journal/' % (regie.pk, campaign.pk, pool.pk)
|
||||
)
|
||||
assert '<a href="/manage/pricing/agenda/foobar/">see agenda</a>' in resp
|
||||
assert 'see event' not in resp
|
||||
|
||||
line.event['slug'] = 'bazbaz'
|
||||
line.save()
|
||||
resp = app.get(
|
||||
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/journal/' % (regie.pk, campaign.pk, pool.pk)
|
||||
)
|
||||
assert '<a href="/manage/pricing/agenda/foobar/">see agenda</a>' in resp
|
||||
assert 'see event' not in resp
|
||||
|
||||
settings.KNOWN_SERVICES['chrono'] = {'default': {'url': 'https://chrono.dev/'}}
|
||||
resp = app.get(
|
||||
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/journal/' % (regie.pk, campaign.pk, pool.pk)
|
||||
)
|
||||
assert '<a href="/manage/pricing/agenda/foobar/">see agenda</a>' in resp
|
||||
assert '<a href="https://chrono.dev/manage/agendas/foobar/events/bazbaz/">see event</a>' in resp
|
||||
|
||||
|
||||
def test_delete_pool(app, admin_user):
|
||||
regie = Regie.objects.create(label='Foo')
|
||||
campaign = Campaign.objects.create(
|
||||
|
|
Loading…
Reference in New Issue