invoicing: add links to agenda & event on pool journal (#75554) #39

Merged
lguerin merged 1 commits from wip/75554-line-links into main 2023-04-03 16:36:39 +02:00
3 changed files with 78 additions and 11 deletions

View File

@ -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'])

View File

@ -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>

View File

@ -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(