1803 lines
67 KiB
Python
1803 lines
67 KiB
Python
import datetime
|
|
from unittest import mock
|
|
|
|
import pytest
|
|
|
|
from lingo.invoicing.models import (
|
|
Campaign,
|
|
DraftInvoice,
|
|
DraftInvoiceLine,
|
|
InjectedLine,
|
|
Invoice,
|
|
InvoiceLine,
|
|
Pool,
|
|
Regie,
|
|
)
|
|
from tests.utils import login
|
|
|
|
pytestmark = pytest.mark.django_db
|
|
|
|
|
|
def test_add_campaign(app, admin_user):
|
|
regie = Regie.objects.create(label='Foo')
|
|
other_regie = Regie.objects.create(label='Other Foo')
|
|
Campaign.objects.create(
|
|
regie=other_regie,
|
|
date_start=datetime.date(2022, 9, 1),
|
|
date_end=datetime.date(2022, 10, 1),
|
|
date_issue=datetime.date(2022, 10, 31),
|
|
)
|
|
|
|
app = login(app)
|
|
resp = app.get('/manage/')
|
|
resp = resp.click('Invoicing')
|
|
resp = resp.click(href='/manage/invoicing/regies/')
|
|
resp = resp.click(href='/manage/invoicing/regie/%s/' % regie.pk)
|
|
resp = resp.click('New campaign')
|
|
resp.form['date_start'] = '2022-09-01'
|
|
resp.form['date_end'] = '2022-10-01'
|
|
resp.form['date_issue'] = '2022-10-31'
|
|
resp = resp.form.submit()
|
|
campaign = Campaign.objects.latest('pk')
|
|
assert resp.location.endswith('/manage/invoicing/regie/%s/campaign/%s/' % (regie.pk, campaign.pk))
|
|
assert campaign.regie == regie
|
|
assert campaign.date_start == datetime.date(2022, 9, 1)
|
|
assert campaign.date_end == datetime.date(2022, 10, 1)
|
|
assert campaign.date_issue == datetime.date(2022, 10, 31)
|
|
|
|
resp = app.get('/manage/invoicing/regie/%s/campaign/add/' % regie.pk)
|
|
resp.form['date_start'] = '2022-08-31'
|
|
resp.form['date_end'] = '2022-09-02'
|
|
resp.form['date_issue'] = '2022-10-31'
|
|
resp = resp.form.submit()
|
|
assert resp.context['form'].errors['__all__'] == [
|
|
'Another campaign overlapping this period already exists.'
|
|
]
|
|
resp.form['date_end'] = '2022-09-01'
|
|
resp = resp.form.submit()
|
|
campaign = Campaign.objects.latest('pk')
|
|
assert campaign.date_start == datetime.date(2022, 8, 31)
|
|
assert campaign.date_end == datetime.date(2022, 9, 1)
|
|
assert campaign.date_issue == datetime.date(2022, 10, 31)
|
|
|
|
resp = app.get('/manage/invoicing/regie/%s/campaign/add/' % regie.pk)
|
|
resp.form['date_start'] = '2022-09-30'
|
|
resp.form['date_end'] = '2022-10-02'
|
|
resp.form['date_issue'] = '2022-10-31'
|
|
resp = resp.form.submit()
|
|
assert resp.context['form'].errors['__all__'] == [
|
|
'Another campaign overlapping this period already exists.'
|
|
]
|
|
resp.form['date_start'] = '2022-10-01'
|
|
resp = resp.form.submit()
|
|
campaign = Campaign.objects.latest('pk')
|
|
assert campaign.regie == regie
|
|
assert campaign.date_start == datetime.date(2022, 10, 1)
|
|
assert campaign.date_end == datetime.date(2022, 10, 2)
|
|
assert campaign.date_issue == datetime.date(2022, 10, 31)
|
|
|
|
app.get('/manage/invoicing/regie/%s/campaign/add/' % 0, status=404)
|
|
|
|
|
|
def test_detail_campaign(app, admin_user):
|
|
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),
|
|
)
|
|
pool1 = Pool.objects.create(
|
|
campaign=campaign,
|
|
draft=True,
|
|
status='completed',
|
|
)
|
|
pool2 = Pool.objects.create(
|
|
campaign=campaign,
|
|
draft=True,
|
|
status='registered',
|
|
)
|
|
|
|
app = login(app)
|
|
resp = app.get(url='/manage/invoicing/regie/%s/campaign/%s/' % (regie.pk, campaign.pk))
|
|
assert '/manage/invoicing/regie/%s/campaign/%s/edit/' % (regie.pk, campaign.pk) not in resp
|
|
assert '/manage/invoicing/regie/%s/campaign/%s/delete/' % (regie.pk, campaign.pk) not in resp
|
|
assert '/manage/invoicing/regie/%s/campaign/%s/pool/%s/' % (regie.pk, campaign.pk, pool1.pk) in resp
|
|
assert '/manage/invoicing/regie/%s/campaign/%s/pool/%s/' % (regie.pk, campaign.pk, pool2.pk) in resp
|
|
assert '/manage/invoicing/regie/%s/campaign/%s/pool/add/' % (regie.pk, campaign.pk) not in resp
|
|
|
|
pool2.status = 'running'
|
|
pool2.save()
|
|
resp = app.get('/manage/invoicing/regie/%s/campaign/%s/' % (regie.pk, campaign.pk))
|
|
assert '/manage/invoicing/regie/%s/campaign/%s/edit/' % (regie.pk, campaign.pk) not in resp
|
|
assert '/manage/invoicing/regie/%s/campaign/%s/delete/' % (regie.pk, campaign.pk) not in resp
|
|
assert '/manage/invoicing/regie/%s/campaign/%s/pool/%s/' % (regie.pk, campaign.pk, pool1.pk) in resp
|
|
assert '/manage/invoicing/regie/%s/campaign/%s/pool/%s/' % (regie.pk, campaign.pk, pool2.pk) in resp
|
|
assert '/manage/invoicing/regie/%s/campaign/%s/pool/add/' % (regie.pk, campaign.pk) not in resp
|
|
|
|
pool2.status = 'failed'
|
|
pool2.save()
|
|
resp = app.get('/manage/invoicing/regie/%s/campaign/%s/' % (regie.pk, campaign.pk))
|
|
assert '/manage/invoicing/regie/%s/campaign/%s/edit/' % (regie.pk, campaign.pk) in resp
|
|
assert '/manage/invoicing/regie/%s/campaign/%s/delete/' % (regie.pk, campaign.pk) in resp
|
|
assert '/manage/invoicing/regie/%s/campaign/%s/pool/%s/' % (regie.pk, campaign.pk, pool1.pk) in resp
|
|
assert '/manage/invoicing/regie/%s/campaign/%s/pool/%s/' % (regie.pk, campaign.pk, pool2.pk) in resp
|
|
assert '/manage/invoicing/regie/%s/campaign/%s/pool/add/' % (regie.pk, campaign.pk) in resp
|
|
|
|
pool3 = Pool.objects.create(
|
|
campaign=campaign,
|
|
draft=False,
|
|
)
|
|
resp = app.get('/manage/invoicing/regie/%s/campaign/%s/' % (regie.pk, campaign.pk))
|
|
assert '/manage/invoicing/regie/%s/campaign/%s/edit/' % (regie.pk, campaign.pk) not in resp
|
|
assert '/manage/invoicing/regie/%s/campaign/%s/delete/' % (regie.pk, campaign.pk) not in resp
|
|
assert '/manage/invoicing/regie/%s/campaign/%s/pool/%s/' % (regie.pk, campaign.pk, pool1.pk) in resp
|
|
assert '/manage/invoicing/regie/%s/campaign/%s/pool/%s/' % (regie.pk, campaign.pk, pool2.pk) in resp
|
|
assert '/manage/invoicing/regie/%s/campaign/%s/pool/%s/' % (regie.pk, campaign.pk, pool3.pk) in resp
|
|
assert '/manage/invoicing/regie/%s/campaign/%s/pool/add/' % (regie.pk, campaign.pk) not in resp
|
|
|
|
line = DraftInvoiceLine.objects.create(
|
|
event_date=datetime.date(2022, 9, 1),
|
|
quantity=1,
|
|
unit_amount=1,
|
|
total_amount=1,
|
|
status='success',
|
|
pool=pool1,
|
|
)
|
|
resp = app.get('/manage/invoicing/regie/%s/campaign/%s/' % (regie.pk, campaign.pk))
|
|
assert '<span class="meta meta-success">1</span>' in resp
|
|
assert 'meta-warning' not in resp
|
|
assert 'meta-error' not in resp
|
|
line.status = 'error'
|
|
line.save()
|
|
resp = app.get('/manage/invoicing/regie/%s/campaign/%s/' % (regie.pk, campaign.pk))
|
|
assert 'meta-success' not in resp
|
|
assert 'meta-warning' not in resp
|
|
assert '<span class="meta meta-error">1</span>' in resp
|
|
line.status = 'warning'
|
|
line.save()
|
|
resp = app.get('/manage/invoicing/regie/%s/campaign/%s/' % (regie.pk, campaign.pk))
|
|
assert 'meta-success' not in resp
|
|
assert '<span class="meta meta-warning">1</span>' in resp
|
|
assert 'meta-error' not in resp
|
|
line.delete()
|
|
resp = app.get('/manage/invoicing/regie/%s/campaign/%s/' % (regie.pk, campaign.pk))
|
|
assert 'meta-success' not in resp
|
|
assert 'meta-warning' not in resp
|
|
assert 'meta-error' not in resp
|
|
|
|
line = InvoiceLine.objects.create(
|
|
event_date=datetime.date(2022, 9, 1),
|
|
quantity=1,
|
|
unit_amount=1,
|
|
total_amount=1,
|
|
status='success',
|
|
pool=pool1,
|
|
)
|
|
resp = app.get('/manage/invoicing/regie/%s/campaign/%s/' % (regie.pk, campaign.pk))
|
|
assert '<span class="meta meta-success">1</span>' in resp
|
|
assert 'meta-warning' not in resp
|
|
assert 'meta-error' not in resp
|
|
line.status = 'error'
|
|
line.save()
|
|
resp = app.get('/manage/invoicing/regie/%s/campaign/%s/' % (regie.pk, campaign.pk))
|
|
assert 'meta-success' not in resp
|
|
assert 'meta-warning' not in resp
|
|
assert '<span class="meta meta-error">1</span>' in resp
|
|
line.status = 'warning'
|
|
line.save()
|
|
resp = app.get('/manage/invoicing/regie/%s/campaign/%s/' % (regie.pk, campaign.pk))
|
|
assert 'meta-success' not in resp
|
|
assert '<span class="meta meta-warning">1</span>' in resp
|
|
assert 'meta-error' not in resp
|
|
line.status = 'error'
|
|
line.error_status = 'ignored'
|
|
line.save()
|
|
resp = app.get('/manage/invoicing/regie/%s/campaign/%s/' % (regie.pk, campaign.pk))
|
|
assert 'meta-success' not in resp
|
|
assert 'meta-warning' not in resp
|
|
assert '<span class="meta meta-error">1</span>' not in resp
|
|
line.error_status = 'fixed'
|
|
line.save()
|
|
resp = app.get('/manage/invoicing/regie/%s/campaign/%s/' % (regie.pk, campaign.pk))
|
|
assert 'meta-success' not in resp
|
|
assert 'meta-warning' not in resp
|
|
assert '<span class="meta meta-error">1</span>' not in resp
|
|
|
|
app.get('/manage/invoicing/regie/%s/campaign/%s/' % (0, campaign.pk), status=404)
|
|
|
|
|
|
def test_edit_campaign(app, admin_user):
|
|
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),
|
|
)
|
|
Campaign.objects.create(
|
|
regie=regie,
|
|
date_start=datetime.date(2022, 10, 1),
|
|
date_end=datetime.date(2022, 11, 1),
|
|
date_issue=datetime.date(2022, 11, 30),
|
|
)
|
|
other_regie = Regie.objects.create(label='Other Foo')
|
|
Campaign.objects.create(
|
|
regie=other_regie,
|
|
date_start=datetime.date(2022, 9, 1),
|
|
date_end=datetime.date(2022, 10, 1),
|
|
date_issue=datetime.date(2022, 10, 31),
|
|
)
|
|
|
|
app = login(app)
|
|
resp = app.get('/manage/invoicing/regie/%s/campaign/%s/edit/' % (regie.pk, campaign.pk))
|
|
resp.form['date_start'] = '2022-09-30'
|
|
resp.form['date_end'] = '2022-10-02'
|
|
resp.form['date_issue'] = '2022-12-31'
|
|
resp = resp.form.submit()
|
|
assert resp.context['form'].errors['__all__'] == [
|
|
'Another campaign overlapping this period already exists.'
|
|
]
|
|
resp.form['date_end'] = '2022-10-01'
|
|
resp = resp.form.submit()
|
|
assert resp.location.endswith('/manage/invoicing/regie/%s/campaign/%s/' % (regie.pk, campaign.pk))
|
|
campaign.refresh_from_db()
|
|
assert campaign.date_start == datetime.date(2022, 9, 30)
|
|
assert campaign.date_end == datetime.date(2022, 10, 1)
|
|
assert campaign.date_issue == datetime.date(2022, 12, 31)
|
|
|
|
resp = app.get('/manage/invoicing/regie/%s/campaign/%s/edit/' % (regie.pk, campaign.pk))
|
|
resp.form['date_start'] = '2022-10-31'
|
|
resp.form['date_end'] = '2022-11-02'
|
|
resp.form['date_issue'] = '2022-12-31'
|
|
resp = resp.form.submit()
|
|
assert resp.context['form'].errors['__all__'] == [
|
|
'Another campaign overlapping this period already exists.'
|
|
]
|
|
resp.form['date_start'] = '2022-11-01'
|
|
resp = resp.form.submit()
|
|
campaign.refresh_from_db()
|
|
assert campaign.date_start == datetime.date(2022, 11, 1)
|
|
assert campaign.date_end == datetime.date(2022, 11, 2)
|
|
assert campaign.date_issue == datetime.date(2022, 12, 31)
|
|
|
|
pool = Pool.objects.create(
|
|
campaign=campaign,
|
|
draft=True,
|
|
status='completed',
|
|
)
|
|
app.get('/manage/invoicing/regie/%s/campaign/%s/edit/' % (regie.pk, campaign.pk))
|
|
|
|
pool.status = 'failed'
|
|
pool.save()
|
|
app.get('/manage/invoicing/regie/%s/campaign/%s/edit/' % (regie.pk, campaign.pk))
|
|
|
|
app.get('/manage/invoicing/regie/%s/campaign/%s/edit/' % (0, campaign.pk), status=404)
|
|
|
|
pool.status = 'registered'
|
|
pool.save()
|
|
app.get('/manage/invoicing/regie/%s/campaign/%s/edit/' % (regie.pk, campaign.pk), status=404)
|
|
|
|
pool.status = 'running'
|
|
pool.save()
|
|
app.get('/manage/invoicing/regie/%s/campaign/%s/edit/' % (regie.pk, campaign.pk), status=404)
|
|
|
|
pool.status = 'completed'
|
|
pool.draft = False
|
|
pool.save()
|
|
app.get('/manage/invoicing/regie/%s/campaign/%s/edit/' % (regie.pk, campaign.pk), status=404)
|
|
|
|
|
|
def test_delete_campaign(app, admin_user):
|
|
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),
|
|
)
|
|
|
|
app = login(app)
|
|
resp = app.get('/manage/invoicing/regie/%s/campaign/%s/delete/' % (regie.pk, campaign.pk))
|
|
resp = resp.form.submit()
|
|
assert Campaign.objects.count() == 0
|
|
assert resp.location.endswith('/manage/invoicing/regie/%s/#open:campaigns' % regie.pk)
|
|
|
|
campaign.save()
|
|
pool = Pool.objects.create(
|
|
campaign=campaign,
|
|
draft=True,
|
|
status='completed',
|
|
)
|
|
invoice = DraftInvoice.objects.create(date_issue=datetime.date.today(), regie=regie, pool=pool)
|
|
DraftInvoiceLine.objects.create(
|
|
event_date=datetime.date(2022, 9, 1),
|
|
invoice=invoice,
|
|
quantity=1,
|
|
unit_amount=1,
|
|
total_amount=1,
|
|
status='success',
|
|
pool=pool,
|
|
)
|
|
resp = app.get('/manage/invoicing/regie/%s/campaign/%s/delete/' % (regie.pk, campaign.pk))
|
|
resp = resp.form.submit()
|
|
assert Campaign.objects.count() == 0
|
|
|
|
campaign.save()
|
|
pool.status = 'failed'
|
|
pool.save()
|
|
app.get('/manage/invoicing/regie/%s/campaign/%s/delete/' % (regie.pk, campaign.pk))
|
|
|
|
app.get('/manage/invoicing/regie/%s/campaign/%s/delete/' % (0, campaign.pk), status=404)
|
|
|
|
pool.status = 'registered'
|
|
pool.save()
|
|
app.get('/manage/invoicing/regie/%s/campaign/%s/delete/' % (regie.pk, campaign.pk), status=404)
|
|
|
|
pool.status = 'running'
|
|
pool.save()
|
|
app.get('/manage/invoicing/regie/%s/campaign/%s/delete/' % (regie.pk, campaign.pk), status=404)
|
|
|
|
pool.status = 'completed'
|
|
pool.draft = False
|
|
pool.save()
|
|
app.get('/manage/invoicing/regie/%s/campaign/%s/delete/' % (regie.pk, campaign.pk), status=404)
|
|
|
|
|
|
def test_add_pool(app, admin_user):
|
|
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),
|
|
)
|
|
|
|
app = login(app)
|
|
resp = app.get('/manage/invoicing/regie/%s/campaign/%s/pool/add/' % (regie.pk, campaign.pk))
|
|
with mock.patch.object(Campaign, 'generate', autospec=True) as mock_generate:
|
|
resp = resp.form.submit()
|
|
assert resp.location.endswith(
|
|
'/manage/invoicing/regie/%s/campaign/%s/#open:pools' % (regie.pk, campaign.pk)
|
|
)
|
|
assert mock_generate.call_args_list == [mock.call(campaign)]
|
|
|
|
pool = Pool.objects.create(
|
|
campaign=campaign,
|
|
draft=True,
|
|
status='failed',
|
|
)
|
|
app.get('/manage/invoicing/regie/%s/campaign/%s/pool/add/' % (regie.pk, campaign.pk))
|
|
|
|
pool.status = 'completed'
|
|
pool.save()
|
|
app.get('/manage/invoicing/regie/%s/campaign/%s/pool/add/' % (regie.pk, campaign.pk))
|
|
|
|
app.get('/manage/invoicing/regie/%s/campaign/%s/pool/add/' % (0, campaign.pk), status=404)
|
|
|
|
pool.status = 'registered'
|
|
pool.save()
|
|
app.get('/manage/invoicing/regie/%s/campaign/%s/pool/add/' % (regie.pk, campaign.pk), status=404)
|
|
|
|
pool.status = 'running'
|
|
pool.save()
|
|
app.get('/manage/invoicing/regie/%s/campaign/%s/pool/add/' % (regie.pk, campaign.pk), status=404)
|
|
|
|
pool.status = 'completed'
|
|
pool.draft = False
|
|
pool.save()
|
|
app.get('/manage/invoicing/regie/%s/campaign/%s/pool/add/' % (regie.pk, campaign.pk), status=404)
|
|
|
|
|
|
def test_promote_pool(app, admin_user):
|
|
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=True,
|
|
status='completed',
|
|
)
|
|
|
|
app = login(app)
|
|
resp = app.get(
|
|
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/promote/' % (regie.pk, campaign.pk, pool.pk)
|
|
)
|
|
with mock.patch.object(Pool, 'promote', autospec=True) as mock_promote:
|
|
resp = resp.form.submit()
|
|
assert resp.location.endswith(
|
|
'/manage/invoicing/regie/%s/campaign/%s/#open:pools' % (regie.pk, campaign.pk)
|
|
)
|
|
assert mock_promote.call_args_list == [mock.call(pool)]
|
|
|
|
app.get('/manage/invoicing/regie/%s/campaign/%s/pool/%s/promote/' % (0, campaign.pk, pool.pk), status=404)
|
|
|
|
pool.status = 'registered'
|
|
pool.save()
|
|
app.get(
|
|
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/promote/' % (regie.pk, campaign.pk, pool.pk),
|
|
status=404,
|
|
)
|
|
|
|
pool.status = 'running'
|
|
pool.save()
|
|
app.get(
|
|
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/promote/' % (regie.pk, campaign.pk, pool.pk),
|
|
status=404,
|
|
)
|
|
|
|
pool.status = 'failed'
|
|
pool.save()
|
|
app.get(
|
|
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/promote/' % (regie.pk, campaign.pk, pool.pk),
|
|
status=404,
|
|
)
|
|
|
|
pool.status = 'completed'
|
|
pool.draft = False
|
|
pool.save()
|
|
app.get(
|
|
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/promote/' % (regie.pk, campaign.pk, pool.pk),
|
|
status=404,
|
|
)
|
|
|
|
pool.draft = True
|
|
pool.save()
|
|
resp = app.get(
|
|
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/promote/' % (regie.pk, campaign.pk, pool.pk)
|
|
)
|
|
resp.form.submit()
|
|
|
|
assert Pool.objects.filter(draft=False).exists()
|
|
|
|
# not the last
|
|
app.get(
|
|
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/promote/' % (regie.pk, campaign.pk, pool.pk),
|
|
status=404,
|
|
)
|
|
|
|
|
|
def test_detail_pool(app, admin_user):
|
|
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),
|
|
)
|
|
campaign2 = Campaign.objects.create(
|
|
regie=regie,
|
|
date_start=datetime.date(2022, 10, 1),
|
|
date_end=datetime.date(2022, 11, 1),
|
|
date_issue=datetime.date(2022, 11, 30),
|
|
)
|
|
pool = Pool.objects.create(
|
|
campaign=campaign,
|
|
draft=True,
|
|
status='completed',
|
|
)
|
|
|
|
app = login(app)
|
|
resp = app.get('/manage/invoicing/regie/%s/campaign/%s/pool/%s/' % (regie.pk, campaign.pk, pool.pk))
|
|
assert '/manage/invoicing/regie/%s/campaign/%s/pool/%s/delete/' % (regie.pk, campaign.pk, pool.pk) in resp
|
|
assert (
|
|
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/promote/' % (regie.pk, campaign.pk, pool.pk) in resp
|
|
)
|
|
|
|
app.get('/manage/invoicing/regie/%s/campaign/%s/pool/%s/' % (0, campaign.pk, pool.pk), status=404)
|
|
app.get('/manage/invoicing/regie/%s/campaign/%s/pool/%s/' % (regie.pk, 0, pool.pk), status=404)
|
|
app.get('/manage/invoicing/regie/%s/campaign/%s/pool/%s/' % (regie.pk, campaign2.pk, pool.pk), status=404)
|
|
app.get('/manage/invoicing/regie/%s/campaign/%s/pool/%s/' % (regie.pk, campaign.pk, 0), status=404)
|
|
|
|
pool.draft = False
|
|
pool.save()
|
|
resp = app.get('/manage/invoicing/regie/%s/campaign/%s/pool/%s/' % (regie.pk, campaign.pk, pool.pk))
|
|
assert (
|
|
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/delete/' % (regie.pk, campaign.pk, pool.pk)
|
|
not in resp
|
|
)
|
|
assert (
|
|
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/promote/' % (regie.pk, campaign.pk, pool.pk)
|
|
not in resp
|
|
)
|
|
|
|
pool.draft = True
|
|
pool.status = 'registered'
|
|
pool.save()
|
|
resp = app.get('/manage/invoicing/regie/%s/campaign/%s/pool/%s/' % (regie.pk, campaign.pk, pool.pk))
|
|
assert (
|
|
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/delete/' % (regie.pk, campaign.pk, pool.pk)
|
|
not in resp
|
|
)
|
|
assert (
|
|
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/promote/' % (regie.pk, campaign.pk, pool.pk)
|
|
not in resp
|
|
)
|
|
|
|
pool.status = 'running'
|
|
pool.save()
|
|
resp = app.get('/manage/invoicing/regie/%s/campaign/%s/pool/%s/' % (regie.pk, campaign.pk, pool.pk))
|
|
assert (
|
|
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/delete/' % (regie.pk, campaign.pk, pool.pk)
|
|
not in resp
|
|
)
|
|
assert (
|
|
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/promote/' % (regie.pk, campaign.pk, pool.pk)
|
|
not in resp
|
|
)
|
|
|
|
pool.status = 'failed'
|
|
pool.save()
|
|
resp = app.get('/manage/invoicing/regie/%s/campaign/%s/pool/%s/' % (regie.pk, campaign.pk, pool.pk))
|
|
assert '/manage/invoicing/regie/%s/campaign/%s/pool/%s/delete/' % (regie.pk, campaign.pk, pool.pk) in resp
|
|
assert (
|
|
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/promote/' % (regie.pk, campaign.pk, pool.pk)
|
|
not in resp
|
|
)
|
|
|
|
pool.status = 'completed'
|
|
pool.save()
|
|
Pool.objects.create(
|
|
campaign=pool.campaign,
|
|
)
|
|
resp = app.get('/manage/invoicing/regie/%s/campaign/%s/pool/%s/' % (regie.pk, campaign.pk, pool.pk))
|
|
assert '/manage/invoicing/regie/%s/campaign/%s/pool/%s/delete/' % (regie.pk, campaign.pk, pool.pk) in resp
|
|
assert (
|
|
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/promote/' % (regie.pk, campaign.pk, pool.pk)
|
|
not in resp
|
|
) # not the last
|
|
|
|
line = DraftInvoiceLine.objects.create(
|
|
event_date=datetime.date(2022, 9, 1),
|
|
quantity=1,
|
|
unit_amount=1,
|
|
total_amount=1,
|
|
status='success',
|
|
pool=pool,
|
|
)
|
|
resp = app.get('/manage/invoicing/regie/%s/campaign/%s/pool/%s/' % (regie.pk, campaign.pk, pool.pk))
|
|
assert '<span class="meta meta-success">1</span>' in resp
|
|
assert 'meta-warning' not in resp
|
|
assert 'meta-error' not in resp
|
|
line.status = 'error'
|
|
line.save()
|
|
resp = app.get('/manage/invoicing/regie/%s/campaign/%s/pool/%s/' % (regie.pk, campaign.pk, pool.pk))
|
|
assert 'meta-success' not in resp
|
|
assert 'meta-warning' not in resp
|
|
assert '<span class="meta meta-error">1</span>' in resp
|
|
line.status = 'warning'
|
|
line.save()
|
|
resp = app.get('/manage/invoicing/regie/%s/campaign/%s/pool/%s/' % (regie.pk, campaign.pk, pool.pk))
|
|
assert 'meta-success' not in resp
|
|
assert '<span class="meta meta-warning">1</span>' in resp
|
|
assert 'meta-error' not in resp
|
|
line.delete()
|
|
resp = app.get('/manage/invoicing/regie/%s/campaign/%s/pool/%s/' % (regie.pk, campaign.pk, pool.pk))
|
|
assert 'meta-success' not in resp
|
|
assert 'meta-warning' not in resp
|
|
assert 'meta-error' not in resp
|
|
|
|
pool.draft = False
|
|
pool.save()
|
|
line = InvoiceLine.objects.create(
|
|
event_date=datetime.date(2022, 9, 1),
|
|
quantity=1,
|
|
unit_amount=1,
|
|
total_amount=1,
|
|
status='success',
|
|
pool=pool,
|
|
)
|
|
resp = app.get('/manage/invoicing/regie/%s/campaign/%s/pool/%s/' % (regie.pk, campaign.pk, pool.pk))
|
|
assert '<span class="meta meta-success">1</span>' in resp
|
|
assert 'meta-warning' not in resp
|
|
assert 'meta-error' not in resp
|
|
line.status = 'error'
|
|
line.save()
|
|
resp = app.get('/manage/invoicing/regie/%s/campaign/%s/pool/%s/' % (regie.pk, campaign.pk, pool.pk))
|
|
assert 'meta-success' not in resp
|
|
assert 'meta-warning' not in resp
|
|
assert '<span class="meta meta-error">1</span>' in resp
|
|
line.status = 'warning'
|
|
line.save()
|
|
resp = app.get('/manage/invoicing/regie/%s/campaign/%s/pool/%s/' % (regie.pk, campaign.pk, pool.pk))
|
|
assert 'meta-success' not in resp
|
|
assert '<span class="meta meta-warning">1</span>' in resp
|
|
assert 'meta-error' not in resp
|
|
|
|
|
|
@pytest.mark.parametrize('draft', [True, False])
|
|
def test_detail_pool_invoices(app, admin_user, draft):
|
|
invoice_model = DraftInvoice if draft else Invoice
|
|
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',
|
|
)
|
|
invoice1 = invoice_model.objects.create(
|
|
date_issue=datetime.date.today(),
|
|
regie=regie,
|
|
pool=pool,
|
|
payer_external_id='payer:1',
|
|
payer_first_name='First1',
|
|
payer_last_name='Name1',
|
|
payer_demat=True,
|
|
payer_direct_debit=False,
|
|
)
|
|
invoice2 = invoice_model.objects.create(
|
|
date_issue=datetime.date.today(),
|
|
regie=regie,
|
|
pool=pool,
|
|
payer_external_id='payer:2',
|
|
payer_first_name='First2',
|
|
payer_last_name='Name2',
|
|
payer_demat=False,
|
|
payer_direct_debit=True,
|
|
)
|
|
if not draft:
|
|
invoice1.set_number()
|
|
invoice1.save()
|
|
invoice2.set_number()
|
|
invoice2.save()
|
|
|
|
line11 = line_model.objects.create(
|
|
event_date=datetime.date(2022, 9, 1),
|
|
invoice=invoice1,
|
|
quantity=1,
|
|
unit_amount=1,
|
|
total_amount=1,
|
|
status='success',
|
|
pool=pool,
|
|
label='Label 11',
|
|
user_external_id='user:1',
|
|
user_first_name='User1',
|
|
user_last_name='Name1',
|
|
)
|
|
line12 = line_model.objects.create(
|
|
event_date=datetime.date(2022, 9, 2),
|
|
invoice=invoice1,
|
|
quantity=1,
|
|
unit_amount=2,
|
|
total_amount=2,
|
|
status='success',
|
|
pool=pool,
|
|
label='Label 12',
|
|
user_external_id='user:2',
|
|
user_first_name='User2',
|
|
user_last_name='Name2',
|
|
)
|
|
line13 = line_model.objects.create(
|
|
event_date=datetime.date(2022, 9, 3),
|
|
invoice=invoice1,
|
|
quantity=1,
|
|
unit_amount=3,
|
|
total_amount=3,
|
|
status='success',
|
|
pool=pool,
|
|
label='Label 13',
|
|
user_external_id='user:1',
|
|
user_first_name='User1',
|
|
user_last_name='Name1',
|
|
)
|
|
|
|
orphan_line = line_model.objects.create(
|
|
event_date=datetime.date(2022, 9, 1),
|
|
quantity=1,
|
|
unit_amount=42,
|
|
total_amount=42,
|
|
status='failed',
|
|
pool=pool,
|
|
label='Label 14',
|
|
user_external_id='user:1',
|
|
user_first_name='User1',
|
|
user_last_name='Name1',
|
|
)
|
|
|
|
line21 = line_model.objects.create(
|
|
event_date=datetime.date(2022, 9, 1),
|
|
invoice=invoice2,
|
|
quantity=1,
|
|
unit_amount=1,
|
|
total_amount=1,
|
|
status='success',
|
|
pool=pool,
|
|
label='Label 21',
|
|
user_external_id='user:1',
|
|
user_first_name='User1',
|
|
user_last_name='Name1',
|
|
)
|
|
|
|
app = login(app)
|
|
resp = app.get('/manage/invoicing/regie/%s/campaign/%s/pool/%s/' % (regie.pk, campaign.pk, pool.pk))
|
|
assert '#%s' % orphan_line.pk not in resp
|
|
if draft:
|
|
assert (
|
|
resp.pyquery('li[data-invoice-id="%s"]' % invoice1.pk).text()
|
|
== 'Invoice TEMPORARY-%s addressed to First1 Name1 (payer:1), amount 6.00€, demat: yes, direct debit: no'
|
|
% invoice1.pk
|
|
)
|
|
else:
|
|
assert resp.pyquery(
|
|
'li[data-invoice-id="%s"]' % invoice1.pk
|
|
).text() == 'Invoice F%02s-%s-0000001 addressed to First1 Name1 (payer:1), amount 6.00€, demat: yes, direct debit: no' % (
|
|
regie.pk,
|
|
invoice1.created_at.strftime('%y-%m'),
|
|
)
|
|
lines_url = resp.pyquery('li[data-invoice-id="%s"]' % invoice1.pk).attr('data-invoice-lines-url')
|
|
assert lines_url == '/manage/invoicing/ajax/regie/%s/campaign/%s/pool/%s/invoice/%s/lines/' % (
|
|
regie.pk,
|
|
campaign.pk,
|
|
pool.pk,
|
|
invoice1.pk,
|
|
)
|
|
lines_resp = app.get(lines_url)
|
|
assert len(lines_resp.pyquery('li')) == 3
|
|
assert (
|
|
lines_resp.pyquery('li:nth-child(1)').text()
|
|
== '#%s User1 Name1 (user:1) - 01/09/2022 - Label 11 (1.00)' % line11.pk
|
|
)
|
|
assert (
|
|
lines_resp.pyquery('li:nth-child(2)').text()
|
|
== '#%s User1 Name1 (user:1) - 03/09/2022 - Label 13 (3.00)' % line13.pk
|
|
)
|
|
assert (
|
|
lines_resp.pyquery('li:nth-child(3)').text()
|
|
== '#%s User2 Name2 (user:2) - 02/09/2022 - Label 12 (2.00)' % line12.pk
|
|
)
|
|
if draft:
|
|
assert (
|
|
resp.pyquery('li[data-invoice-id="%s"]' % invoice2.pk).text()
|
|
== 'Invoice TEMPORARY-%s addressed to First2 Name2 (payer:2), amount 1.00€, demat: no, direct debit: yes'
|
|
% invoice2.pk
|
|
)
|
|
else:
|
|
assert resp.pyquery(
|
|
'li[data-invoice-id="%s"]' % invoice2.pk
|
|
).text() == 'Invoice F%02d-%s-0000002 addressed to First2 Name2 (payer:2), amount 1.00€, demat: no, direct debit: yes' % (
|
|
regie.pk,
|
|
invoice2.created_at.strftime('%y-%m'),
|
|
)
|
|
lines_url = resp.pyquery('li[data-invoice-id="%s"]' % invoice2.pk).attr('data-invoice-lines-url')
|
|
assert lines_url == '/manage/invoicing/ajax/regie/%s/campaign/%s/pool/%s/invoice/%s/lines/' % (
|
|
regie.pk,
|
|
campaign.pk,
|
|
pool.pk,
|
|
invoice2.pk,
|
|
)
|
|
lines_resp = app.get(lines_url)
|
|
assert len(lines_resp.pyquery('li')) == 1
|
|
assert (
|
|
lines_resp.pyquery('li:nth-child(1)').text()
|
|
== '#%s User1 Name1 (user:1) - 01/09/2022 - Label 21 (1.00)' % line21.pk
|
|
)
|
|
|
|
# test filters
|
|
if draft:
|
|
resp = app.get(
|
|
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/' % (regie.pk, campaign.pk, pool.pk),
|
|
params={'pk': invoice1.pk},
|
|
)
|
|
assert len(resp.pyquery('li.invoice')) == 1
|
|
else:
|
|
resp = app.get(
|
|
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/' % (regie.pk, campaign.pk, pool.pk),
|
|
params={'number': invoice1.formatted_number},
|
|
)
|
|
assert len(resp.pyquery('li.invoice')) == 1
|
|
resp = app.get(
|
|
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/' % (regie.pk, campaign.pk, pool.pk),
|
|
params={'number': invoice1.created_at.strftime('%y-%m')},
|
|
)
|
|
assert len(resp.pyquery('li.invoice')) == 2
|
|
resp = app.get(
|
|
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/' % (regie.pk, campaign.pk, pool.pk),
|
|
params={'payer_external_id': 'payer:1'},
|
|
)
|
|
assert len(resp.pyquery('li.invoice')) == 1
|
|
resp = app.get(
|
|
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/' % (regie.pk, campaign.pk, pool.pk),
|
|
params={'payer_external_id': 'payer:2'},
|
|
)
|
|
assert len(resp.pyquery('li.invoice')) == 1
|
|
resp = app.get(
|
|
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/' % (regie.pk, campaign.pk, pool.pk),
|
|
params={'payer_first_name': 'first'},
|
|
)
|
|
assert len(resp.pyquery('li.invoice')) == 2
|
|
resp = app.get(
|
|
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/' % (regie.pk, campaign.pk, pool.pk),
|
|
params={'payer_first_name': 'first1'},
|
|
)
|
|
assert len(resp.pyquery('li.invoice')) == 1
|
|
resp = app.get(
|
|
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/' % (regie.pk, campaign.pk, pool.pk),
|
|
params={'payer_last_name': 'name'},
|
|
)
|
|
assert len(resp.pyquery('li.invoice')) == 2
|
|
resp = app.get(
|
|
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/' % (regie.pk, campaign.pk, pool.pk),
|
|
params={'payer_last_name': 'name1'},
|
|
)
|
|
assert len(resp.pyquery('li.invoice')) == 1
|
|
resp = app.get(
|
|
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/' % (regie.pk, campaign.pk, pool.pk),
|
|
params={'payer_demat': True},
|
|
)
|
|
assert len(resp.pyquery('li.invoice')) == 1
|
|
resp = app.get(
|
|
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/' % (regie.pk, campaign.pk, pool.pk),
|
|
params={'payer_direct_debit': True},
|
|
)
|
|
assert len(resp.pyquery('li.invoice')) == 1
|
|
resp = app.get(
|
|
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/' % (regie.pk, campaign.pk, pool.pk),
|
|
params={'user_external_id': 'user:1'},
|
|
)
|
|
assert len(resp.pyquery('li.invoice')) == 2
|
|
resp = app.get(
|
|
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/' % (regie.pk, campaign.pk, pool.pk),
|
|
params={'user_external_id': 'user:2'},
|
|
)
|
|
assert len(resp.pyquery('li.invoice')) == 1
|
|
resp = app.get(
|
|
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/' % (regie.pk, campaign.pk, pool.pk),
|
|
params={'user_first_name': 'user'},
|
|
)
|
|
assert len(resp.pyquery('li.invoice')) == 2
|
|
resp = app.get(
|
|
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/' % (regie.pk, campaign.pk, pool.pk),
|
|
params={'user_first_name': 'user2'},
|
|
)
|
|
assert len(resp.pyquery('li.invoice')) == 1
|
|
resp = app.get(
|
|
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/' % (regie.pk, campaign.pk, pool.pk),
|
|
params={'user_last_name': 'name'},
|
|
)
|
|
assert len(resp.pyquery('li.invoice')) == 2
|
|
resp = app.get(
|
|
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/' % (regie.pk, campaign.pk, pool.pk),
|
|
params={'user_last_name': 'name1'},
|
|
)
|
|
assert len(resp.pyquery('li.invoice')) == 2
|
|
|
|
|
|
def test_journal_pool(app, admin_user):
|
|
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),
|
|
)
|
|
campaign2 = Campaign.objects.create(
|
|
regie=regie,
|
|
date_start=datetime.date(2022, 10, 1),
|
|
date_end=datetime.date(2022, 11, 1),
|
|
date_issue=datetime.date(2022, 11, 30),
|
|
)
|
|
pool = Pool.objects.create(
|
|
campaign=campaign,
|
|
draft=True,
|
|
status='completed',
|
|
)
|
|
|
|
app = login(app)
|
|
resp = app.get(
|
|
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/journal/' % (regie.pk, campaign.pk, pool.pk)
|
|
)
|
|
assert '/manage/invoicing/regie/%s/campaign/%s/pool/%s/delete/' % (regie.pk, campaign.pk, pool.pk) in resp
|
|
|
|
app.get('/manage/invoicing/regie/%s/campaign/%s/pool/%s/journal/' % (0, campaign.pk, pool.pk), status=404)
|
|
app.get('/manage/invoicing/regie/%s/campaign/%s/pool/%s/journal/' % (regie.pk, 0, pool.pk), status=404)
|
|
app.get(
|
|
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/journal/' % (regie.pk, campaign2.pk, pool.pk),
|
|
status=404,
|
|
)
|
|
app.get(
|
|
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/journal/' % (regie.pk, campaign.pk, 0), status=404
|
|
)
|
|
|
|
pool.draft = False
|
|
pool.save()
|
|
resp = app.get(
|
|
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/journal/' % (regie.pk, campaign.pk, pool.pk)
|
|
)
|
|
assert (
|
|
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/delete/' % (regie.pk, campaign.pk, pool.pk)
|
|
not in resp
|
|
)
|
|
|
|
pool.draft = True
|
|
pool.status = 'registered'
|
|
pool.save()
|
|
resp = app.get(
|
|
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/journal/' % (regie.pk, campaign.pk, pool.pk)
|
|
)
|
|
assert (
|
|
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/delete/' % (regie.pk, campaign.pk, pool.pk)
|
|
not in resp
|
|
)
|
|
|
|
pool.status = 'running'
|
|
pool.save()
|
|
resp = app.get(
|
|
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/journal/' % (regie.pk, campaign.pk, pool.pk)
|
|
)
|
|
assert (
|
|
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/delete/' % (regie.pk, campaign.pk, pool.pk)
|
|
not in resp
|
|
)
|
|
|
|
pool.status = 'failed'
|
|
pool.save()
|
|
resp = app.get(
|
|
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/journal/' % (regie.pk, campaign.pk, pool.pk)
|
|
)
|
|
assert '/manage/invoicing/regie/%s/campaign/%s/pool/%s/delete/' % (regie.pk, campaign.pk, pool.pk) in resp
|
|
|
|
line = DraftInvoiceLine.objects.create(
|
|
event_date=datetime.date(2022, 9, 1),
|
|
quantity=1,
|
|
unit_amount=1,
|
|
total_amount=1,
|
|
status='success',
|
|
pool=pool,
|
|
)
|
|
resp = app.get(
|
|
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/journal/' % (regie.pk, campaign.pk, pool.pk)
|
|
)
|
|
assert '<span class="meta meta-success">1</span>' in resp
|
|
assert 'meta-warning' not in resp
|
|
assert 'meta-error' not in resp
|
|
line.status = 'error'
|
|
line.save()
|
|
resp = app.get(
|
|
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/journal/' % (regie.pk, campaign.pk, pool.pk)
|
|
)
|
|
assert 'meta-success' not in resp
|
|
assert 'meta-warning' not in resp
|
|
assert '<span class="meta meta-error">1</span>' in resp
|
|
line.status = 'warning'
|
|
line.save()
|
|
resp = app.get(
|
|
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/journal/' % (regie.pk, campaign.pk, pool.pk)
|
|
)
|
|
assert 'meta-success' not in resp
|
|
assert '<span class="meta meta-warning">1</span>' in resp
|
|
assert 'meta-error' not in resp
|
|
line.delete()
|
|
resp = app.get(
|
|
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/journal/' % (regie.pk, campaign.pk, pool.pk)
|
|
)
|
|
assert 'meta-success' not in resp
|
|
assert 'meta-warning' not in resp
|
|
assert 'meta-error' not in resp
|
|
|
|
pool.draft = False
|
|
pool.save()
|
|
line = InvoiceLine.objects.create(
|
|
event_date=datetime.date(2022, 9, 1),
|
|
quantity=1,
|
|
unit_amount=1,
|
|
total_amount=1,
|
|
status='success',
|
|
pool=pool,
|
|
)
|
|
resp = app.get(
|
|
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/journal/' % (regie.pk, campaign.pk, pool.pk)
|
|
)
|
|
assert '<span class="meta meta-success">1</span>' in resp
|
|
assert 'meta-warning' not in resp
|
|
assert 'meta-error' not in resp
|
|
line.status = 'error'
|
|
line.save()
|
|
resp = app.get(
|
|
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/journal/' % (regie.pk, campaign.pk, pool.pk)
|
|
)
|
|
assert 'meta-success' not in resp
|
|
assert 'meta-warning' not in resp
|
|
assert '<span class="meta meta-error">1</span>' in resp
|
|
line.status = 'warning'
|
|
line.save()
|
|
resp = app.get(
|
|
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/journal/' % (regie.pk, campaign.pk, pool.pk)
|
|
)
|
|
assert 'meta-success' not in resp
|
|
assert '<span class="meta meta-warning">1</span>' in resp
|
|
assert 'meta-error' not in resp
|
|
line.status = 'error'
|
|
line.error_status = 'ignored'
|
|
line.save()
|
|
resp = app.get(
|
|
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/journal/' % (regie.pk, campaign.pk, pool.pk)
|
|
)
|
|
assert 'meta-success' not in resp
|
|
assert 'meta-warning' not in resp
|
|
assert '<span class="meta meta-error">1</span>' not in resp
|
|
line.error_status = 'fixed'
|
|
line.save()
|
|
resp = app.get(
|
|
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/journal/' % (regie.pk, campaign.pk, pool.pk)
|
|
)
|
|
assert 'meta-success' not in resp
|
|
assert 'meta-warning' not in resp
|
|
assert '<span class="meta meta-error">1</span>' not in resp
|
|
|
|
|
|
@pytest.mark.parametrize('draft', [True, False])
|
|
def test_journal_pool_lines(app, admin_user, draft):
|
|
invoice_model = DraftInvoice if draft else Invoice
|
|
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',
|
|
)
|
|
invoice1 = invoice_model.objects.create(
|
|
date_issue=datetime.date.today(), regie=regie, pool=pool, payer_external_id='payer:1'
|
|
)
|
|
invoice2 = invoice_model.objects.create(
|
|
date_issue=datetime.date.today(), regie=regie, pool=pool, payer_external_id='payer:2'
|
|
)
|
|
if not draft:
|
|
invoice1.set_number()
|
|
invoice1.save()
|
|
invoice2.set_number()
|
|
invoice2.save()
|
|
|
|
lines = [
|
|
line_model.objects.create(
|
|
event_date=datetime.date(2022, 9, 1),
|
|
invoice=invoice1,
|
|
quantity=1,
|
|
unit_amount=1,
|
|
total_amount=1,
|
|
status='success',
|
|
pool=pool,
|
|
pricing_data={'foo': 'bar'},
|
|
event={'event': 'foobar'},
|
|
user_external_id='user:1',
|
|
user_first_name='First1',
|
|
user_last_name='Last1',
|
|
payer_external_id='payer:1',
|
|
payer_first_name='First1',
|
|
payer_last_name='Last1',
|
|
payer_demat=True,
|
|
payer_direct_debit=False,
|
|
),
|
|
]
|
|
errors = [
|
|
('AgendaPricingNotFound', {}),
|
|
('CriteriaConditionNotFound', {'category': 'cat-foo'}),
|
|
('MultipleDefaultCriteriaCondition', {'category': 'cat-foo'}),
|
|
('PricingDataError', {'criterias': {'qf': 'qf-1', 'foo': 'bar'}}),
|
|
('PricingDataFormatError', {'pricing': 'foobar', 'wanted': 'decimal'}),
|
|
('PricingUnknownCheckStatusError', {'status': 'unknown'}),
|
|
('PricingEventNotCheckedError', {}),
|
|
('PricingBookingNotCheckedError', {}),
|
|
('PricingMultipleBookingError', {}),
|
|
('PricingBookingCheckTypeError', {'reason': 'not-found'}),
|
|
(
|
|
'PricingBookingCheckTypeError',
|
|
{
|
|
'check_type_group': 'foo-bar',
|
|
'check_type': 'foo-reason',
|
|
'reason': 'not-configured',
|
|
},
|
|
),
|
|
(
|
|
'PricingBookingCheckTypeError',
|
|
{'check_type_group': 'foo-bar', 'check_type': 'foo-reason', 'reason': 'wrong-kind'},
|
|
),
|
|
('PayerError', {'reason': 'empty-template'}),
|
|
('PayerError', {'reason': 'empty-result'}),
|
|
('PayerError', {'reason': 'syntax-error'}),
|
|
('PayerError', {'reason': 'variable-error'}),
|
|
('PayerDataError', {'key': 'foo', 'reason': 'empty-template'}),
|
|
('PayerDataError', {'key': 'foo', 'reason': 'empty-result'}),
|
|
('PayerDataError', {'key': 'foo', 'reason': 'syntax-error'}),
|
|
('PayerDataError', {'key': 'foo', 'reason': 'variable-error'}),
|
|
('PayerDataError', {'key': 'foo', 'reason': 'not-a-boolean'}),
|
|
]
|
|
for error, error_details in errors:
|
|
lines.append(
|
|
line_model.objects.create(
|
|
event_date=datetime.date(2022, 9, 1),
|
|
quantity=1,
|
|
unit_amount=1,
|
|
total_amount=1,
|
|
status='warning' if error == 'AgendaPricingNotFound' else 'error',
|
|
pool=pool,
|
|
pricing_data={
|
|
'error': error,
|
|
'error_details': error_details,
|
|
},
|
|
event={'event': 'foobar'},
|
|
user_external_id='user:1',
|
|
user_first_name='First1',
|
|
user_last_name='Last1',
|
|
payer_external_id='payer:2',
|
|
payer_first_name='First2',
|
|
payer_last_name='Last2',
|
|
payer_demat=False,
|
|
payer_direct_debit=True,
|
|
)
|
|
)
|
|
if not draft:
|
|
lines[-1].error_status = 'ignored'
|
|
lines[-1].save()
|
|
lines[-2].error_status = 'fixed'
|
|
lines[-2].save()
|
|
|
|
injected_line = InjectedLine.objects.create(
|
|
event_date=datetime.date(2022, 9, 1),
|
|
quantity=1,
|
|
unit_amount=1,
|
|
total_amount=1,
|
|
user_external_id='user:2',
|
|
payer_external_id='payer:2',
|
|
payer_first_name='First2',
|
|
payer_last_name='Last2',
|
|
payer_demat=False,
|
|
payer_direct_debit=True,
|
|
regie=regie,
|
|
)
|
|
lines.append(
|
|
line_model.objects.create(
|
|
event_date=datetime.date(2022, 9, 1),
|
|
invoice=invoice2,
|
|
quantity=1,
|
|
unit_amount=1,
|
|
total_amount=1,
|
|
status='success',
|
|
pool=pool,
|
|
pricing_data={'foo': 'bar'},
|
|
event={'event': 'foobar2'},
|
|
user_external_id='user:2',
|
|
user_first_name='First2',
|
|
user_last_name='Last2',
|
|
payer_external_id='payer:2',
|
|
payer_first_name='First2',
|
|
payer_last_name='Last2',
|
|
payer_demat=False,
|
|
payer_direct_debit=True,
|
|
from_injected_line=injected_line,
|
|
),
|
|
)
|
|
|
|
def format_status(value):
|
|
return (' '.join([v.strip() for v in value.split('\n')])).strip()
|
|
|
|
if draft:
|
|
error_links = ''
|
|
else:
|
|
error_links = ' ignore - mark as fixed'
|
|
|
|
app = login(app)
|
|
resp = app.get(
|
|
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/journal/' % (regie.pk, campaign.pk, pool.pk)
|
|
)
|
|
assert format_status(resp.pyquery('tr[data-line-id="%s"] td.status' % lines[0].pk).text()) == 'Success'
|
|
assert (
|
|
resp.pyquery('tr[data-details-for-line-id="%s"] td pre' % lines[0].pk).text().strip()
|
|
== "{'foo': 'bar'} {'event': 'foobar'}"
|
|
)
|
|
assert (
|
|
format_status(resp.pyquery('tr[data-line-id="%s"] td.status' % lines[1].pk).text())
|
|
== 'Warning (Agenda pricing not found)'
|
|
)
|
|
assert (
|
|
resp.pyquery('tr[data-details-for-line-id="%s"] td pre' % lines[1].pk).text().strip()
|
|
== "{'error': 'AgendaPricingNotFound', 'error_details': {}} {'event': 'foobar'}"
|
|
)
|
|
assert (
|
|
format_status(resp.pyquery('tr[data-line-id="%s"] td.status' % lines[2].pk).text())
|
|
== 'Error (No matching criteria for category: cat-foo)%s' % error_links
|
|
)
|
|
assert (
|
|
resp.pyquery('tr[data-details-for-line-id="%s"] td pre' % lines[2].pk).text().strip()
|
|
== "{'error': 'CriteriaConditionNotFound', 'error_details': {'category': 'cat-foo'}} {'event': 'foobar'}"
|
|
)
|
|
assert (
|
|
format_status(resp.pyquery('tr[data-line-id="%s"] td.status' % lines[3].pk).text())
|
|
== 'Error (Multiple default criteria found for category: cat-foo)%s' % error_links
|
|
)
|
|
assert (
|
|
resp.pyquery('tr[data-details-for-line-id="%s"] td pre' % lines[3].pk).text().strip()
|
|
== "{'error': 'MultipleDefaultCriteriaCondition', 'error_details': {'category': 'cat-foo'}} {'event': 'foobar'}"
|
|
)
|
|
assert (
|
|
format_status(resp.pyquery('tr[data-line-id="%s"] td.status' % lines[4].pk).text())
|
|
== 'Error (Impossible to determine a pricing for criterias: qf-1 (category: qf), bar (category: foo))%s'
|
|
% error_links
|
|
)
|
|
assert (
|
|
resp.pyquery('tr[data-details-for-line-id="%s"] td pre' % lines[4].pk).text().strip()
|
|
== "{'error': 'PricingDataError', 'error_details': {'criterias': {'foo': 'bar', 'qf': 'qf-1'}}} {'event': 'foobar'}"
|
|
)
|
|
assert (
|
|
format_status(resp.pyquery('tr[data-line-id="%s"] td.status' % lines[5].pk).text())
|
|
== 'Error (Pricing is not a decimal: foobar)%s' % error_links
|
|
)
|
|
assert (
|
|
resp.pyquery('tr[data-details-for-line-id="%s"] td pre' % lines[5].pk).text().strip()
|
|
== "{'error': 'PricingDataFormatError', 'error_details': {'pricing': 'foobar', 'wanted': 'decimal'}} {'event': 'foobar'}"
|
|
)
|
|
assert (
|
|
format_status(resp.pyquery('tr[data-line-id="%s"] td.status' % lines[6].pk).text())
|
|
== 'Error (Unknown check status: unknown)%s' % error_links
|
|
)
|
|
assert (
|
|
resp.pyquery('tr[data-details-for-line-id="%s"] td pre' % lines[6].pk).text().strip()
|
|
== "{'error': 'PricingUnknownCheckStatusError', 'error_details': {'status': 'unknown'}} {'event': 'foobar'}"
|
|
)
|
|
assert (
|
|
format_status(resp.pyquery('tr[data-line-id="%s"] td.status' % lines[7].pk).text())
|
|
== 'Error (Event is not checked)%s' % error_links
|
|
)
|
|
assert (
|
|
resp.pyquery('tr[data-details-for-line-id="%s"] td pre' % lines[7].pk).text().strip()
|
|
== "{'error': 'PricingEventNotCheckedError', 'error_details': {}} {'event': 'foobar'}"
|
|
)
|
|
assert (
|
|
format_status(resp.pyquery('tr[data-line-id="%s"] td.status' % lines[8].pk).text())
|
|
== 'Error (Booking is not checked)%s' % error_links
|
|
)
|
|
assert (
|
|
resp.pyquery('tr[data-details-for-line-id="%s"] td pre' % lines[8].pk).text().strip()
|
|
== "{'error': 'PricingBookingNotCheckedError', 'error_details': {}} {'event': 'foobar'}"
|
|
)
|
|
assert (
|
|
format_status(resp.pyquery('tr[data-line-id="%s"] td.status' % lines[9].pk).text())
|
|
== 'Error (Multiple booking found)%s' % error_links
|
|
)
|
|
assert (
|
|
resp.pyquery('tr[data-details-for-line-id="%s"] td pre' % lines[9].pk).text().strip()
|
|
== "{'error': 'PricingMultipleBookingError', 'error_details': {}} {'event': 'foobar'}"
|
|
)
|
|
assert (
|
|
format_status(resp.pyquery('tr[data-line-id="%s"] td.status' % lines[10].pk).text())
|
|
== 'Error (Check type error: not found)%s' % error_links
|
|
)
|
|
assert (
|
|
resp.pyquery('tr[data-details-for-line-id="%s"] td pre' % lines[10].pk).text().strip()
|
|
== "{'error': 'PricingBookingCheckTypeError', 'error_details': {'reason': 'not-found'}} {'event': 'foobar'}"
|
|
)
|
|
assert (
|
|
format_status(resp.pyquery('tr[data-line-id="%s"] td.status' % lines[11].pk).text())
|
|
== 'Error (Check type error: pricing not configured (group: foo-bar, check type: foo-reason))%s'
|
|
% error_links
|
|
)
|
|
assert (
|
|
resp.pyquery('tr[data-details-for-line-id="%s"] td pre' % lines[11].pk).text().strip()
|
|
== "{'error': 'PricingBookingCheckTypeError', 'error_details': {'check_type': 'foo-reason', "
|
|
"'check_type_group': 'foo-bar', 'reason': 'not-configured'}} {'event': 'foobar'}"
|
|
)
|
|
assert (
|
|
format_status(resp.pyquery('tr[data-line-id="%s"] td.status' % lines[12].pk).text())
|
|
== 'Error (Check type error: wrong kind (group: foo-bar, check type: foo-reason))%s' % error_links
|
|
)
|
|
assert (
|
|
resp.pyquery('tr[data-details-for-line-id="%s"] td pre' % lines[12].pk).text().strip()
|
|
== "{'error': 'PricingBookingCheckTypeError', 'error_details': {'check_type': 'foo-reason', "
|
|
"'check_type_group': 'foo-bar', 'reason': 'wrong-kind'}} {'event': 'foobar'}"
|
|
)
|
|
assert (
|
|
format_status(resp.pyquery('tr[data-line-id="%s"] td.status' % lines[13].pk).text())
|
|
== 'Error (Impossible to determine payer: Template is empty)%s' % error_links
|
|
)
|
|
assert (
|
|
resp.pyquery('tr[data-details-for-line-id="%s"] td pre' % lines[13].pk).text().strip()
|
|
== "{'error': 'PayerError', 'error_details': {'reason': 'empty-template'}} {'event': 'foobar'}"
|
|
)
|
|
assert (
|
|
format_status(resp.pyquery('tr[data-line-id="%s"] td.status' % lines[14].pk).text())
|
|
== 'Error (Impossible to determine payer: Result is empty)%s' % error_links
|
|
)
|
|
assert (
|
|
resp.pyquery('tr[data-details-for-line-id="%s"] td pre' % lines[14].pk).text().strip()
|
|
== "{'error': 'PayerError', 'error_details': {'reason': 'empty-result'}} {'event': 'foobar'}"
|
|
)
|
|
assert (
|
|
format_status(resp.pyquery('tr[data-line-id="%s"] td.status' % lines[15].pk).text())
|
|
== 'Error (Impossible to determine payer: Syntax error)%s' % error_links
|
|
)
|
|
assert (
|
|
resp.pyquery('tr[data-details-for-line-id="%s"] td pre' % lines[15].pk).text().strip()
|
|
== "{'error': 'PayerError', 'error_details': {'reason': 'syntax-error'}} {'event': 'foobar'}"
|
|
)
|
|
assert (
|
|
format_status(resp.pyquery('tr[data-line-id="%s"] td.status' % lines[16].pk).text())
|
|
== 'Error (Impossible to determine payer: Variable error)%s' % error_links
|
|
)
|
|
assert (
|
|
resp.pyquery('tr[data-details-for-line-id="%s"] td pre' % lines[16].pk).text().strip()
|
|
== "{'error': 'PayerError', 'error_details': {'reason': 'variable-error'}} {'event': 'foobar'}"
|
|
)
|
|
assert (
|
|
format_status(resp.pyquery('tr[data-line-id="%s"] td.status' % lines[17].pk).text())
|
|
== 'Error (Impossible to get payer foo: Template is empty)%s' % error_links
|
|
)
|
|
assert (
|
|
resp.pyquery('tr[data-details-for-line-id="%s"] td pre' % lines[17].pk).text().strip()
|
|
== "{'error': 'PayerDataError', 'error_details': {'key': 'foo', 'reason': 'empty-template'}} {'event': 'foobar'}"
|
|
)
|
|
assert (
|
|
format_status(resp.pyquery('tr[data-line-id="%s"] td.status' % lines[18].pk).text())
|
|
== 'Error (Impossible to get payer foo: Result is empty)%s' % error_links
|
|
)
|
|
assert (
|
|
resp.pyquery('tr[data-details-for-line-id="%s"] td pre' % lines[18].pk).text().strip()
|
|
== "{'error': 'PayerDataError', 'error_details': {'key': 'foo', 'reason': 'empty-result'}} {'event': 'foobar'}"
|
|
)
|
|
assert (
|
|
format_status(resp.pyquery('tr[data-line-id="%s"] td.status' % lines[19].pk).text())
|
|
== 'Error (Impossible to get payer foo: Syntax error)%s' % error_links
|
|
)
|
|
assert (
|
|
resp.pyquery('tr[data-details-for-line-id="%s"] td pre' % lines[19].pk).text().strip()
|
|
== "{'error': 'PayerDataError', 'error_details': {'key': 'foo', 'reason': 'syntax-error'}} {'event': 'foobar'}"
|
|
)
|
|
if draft:
|
|
assert (
|
|
format_status(resp.pyquery('tr[data-line-id="%s"] td.status' % lines[20].pk).text())
|
|
== 'Error (Impossible to get payer foo: Variable error)%s' % error_links
|
|
)
|
|
else:
|
|
assert (
|
|
format_status(resp.pyquery('tr[data-line-id="%s"] td.status' % lines[20].pk).text())
|
|
== 'Fixed (Impossible to get payer foo: Variable error) reset'
|
|
)
|
|
assert (
|
|
resp.pyquery('tr[data-details-for-line-id="%s"] td pre' % lines[20].pk).text().strip()
|
|
== "{'error': 'PayerDataError', 'error_details': {'key': 'foo', 'reason': 'variable-error'}} {'event': 'foobar'}"
|
|
)
|
|
if draft:
|
|
assert (
|
|
format_status(resp.pyquery('tr[data-line-id="%s"] td.status' % lines[21].pk).text())
|
|
== 'Error (Impossible to get payer foo: Result is not a boolean)%s' % error_links
|
|
)
|
|
else:
|
|
assert (
|
|
format_status(resp.pyquery('tr[data-line-id="%s"] td.status' % lines[21].pk).text())
|
|
== 'Ignored (Impossible to get payer foo: Result is not a boolean) reset'
|
|
)
|
|
assert (
|
|
resp.pyquery('tr[data-details-for-line-id="%s"] td pre' % lines[21].pk).text().strip()
|
|
== "{'error': 'PayerDataError', 'error_details': {'key': 'foo', 'reason': 'not-a-boolean'}} {'event': 'foobar'}"
|
|
)
|
|
assert (
|
|
format_status(resp.pyquery('tr[data-line-id="%s"] td.status' % lines[22].pk).text())
|
|
== 'Success (Injected)'
|
|
)
|
|
assert (
|
|
resp.pyquery('tr[data-details-for-line-id="%s"] td pre' % lines[22].pk).text().strip()
|
|
== "{'foo': 'bar'} {'event': 'foobar2'}"
|
|
)
|
|
|
|
# test filters
|
|
if draft:
|
|
resp = app.get(
|
|
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/journal/' % (regie.pk, campaign.pk, pool.pk),
|
|
params={'invoice_id': invoice1.pk},
|
|
)
|
|
assert len(resp.pyquery('tr td.status')) == 1
|
|
else:
|
|
resp = app.get(
|
|
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/journal/' % (regie.pk, campaign.pk, pool.pk),
|
|
params={'invoice_number': invoice1.formatted_number},
|
|
)
|
|
assert len(resp.pyquery('tr td.status')) == 1
|
|
resp = app.get(
|
|
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/journal/' % (regie.pk, campaign.pk, pool.pk),
|
|
params={'invoice_number': invoice1.created_at.strftime('%y-%m')},
|
|
)
|
|
assert len(resp.pyquery('tr td.status')) == 2
|
|
resp = app.get(
|
|
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/journal/' % (regie.pk, campaign.pk, pool.pk),
|
|
params={'pk': lines[0].pk},
|
|
)
|
|
assert len(resp.pyquery('tr td.status')) == 1
|
|
resp = app.get(
|
|
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/journal/' % (regie.pk, campaign.pk, pool.pk),
|
|
params={'payer_external_id': 'payer:1'},
|
|
)
|
|
assert len(resp.pyquery('tr td.status')) == 1
|
|
resp = app.get(
|
|
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/journal/' % (regie.pk, campaign.pk, pool.pk),
|
|
params={'payer_external_id': 'payer:2'},
|
|
)
|
|
assert len(resp.pyquery('tr td.status')) == 22
|
|
resp = app.get(
|
|
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/journal/' % (regie.pk, campaign.pk, pool.pk),
|
|
params={'payer_first_name': 'first'},
|
|
)
|
|
assert len(resp.pyquery('tr td.status')) == 23
|
|
resp = app.get(
|
|
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/journal/' % (regie.pk, campaign.pk, pool.pk),
|
|
params={'payer_first_name': 'first1'},
|
|
)
|
|
assert len(resp.pyquery('tr td.status')) == 1
|
|
resp = app.get(
|
|
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/journal/' % (regie.pk, campaign.pk, pool.pk),
|
|
params={'payer_last_name': 'last'},
|
|
)
|
|
assert len(resp.pyquery('tr td.status')) == 23
|
|
resp = app.get(
|
|
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/journal/' % (regie.pk, campaign.pk, pool.pk),
|
|
params={'payer_last_name': 'last1'},
|
|
)
|
|
assert len(resp.pyquery('tr td.status')) == 1
|
|
resp = app.get(
|
|
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/journal/' % (regie.pk, campaign.pk, pool.pk),
|
|
params={'payer_demat': True},
|
|
)
|
|
assert len(resp.pyquery('tr td.status')) == 1
|
|
resp = app.get(
|
|
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/journal/' % (regie.pk, campaign.pk, pool.pk),
|
|
params={'payer_direct_debit': True},
|
|
)
|
|
assert len(resp.pyquery('tr td.status')) == 22
|
|
resp = app.get(
|
|
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/journal/' % (regie.pk, campaign.pk, pool.pk),
|
|
params={'user_external_id': 'user:1'},
|
|
)
|
|
assert len(resp.pyquery('tr td.status')) == 22
|
|
resp = app.get(
|
|
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/journal/' % (regie.pk, campaign.pk, pool.pk),
|
|
params={'user_external_id': 'user:2'},
|
|
)
|
|
assert len(resp.pyquery('tr td.status')) == 1
|
|
resp = app.get(
|
|
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/journal/' % (regie.pk, campaign.pk, pool.pk),
|
|
params={'user_first_name': 'first'},
|
|
)
|
|
assert len(resp.pyquery('tr td.status')) == 23
|
|
resp = app.get(
|
|
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/journal/' % (regie.pk, campaign.pk, pool.pk),
|
|
params={'user_first_name': 'first1'},
|
|
)
|
|
assert len(resp.pyquery('tr td.status')) == 22
|
|
resp = app.get(
|
|
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/journal/' % (regie.pk, campaign.pk, pool.pk),
|
|
params={'user_last_name': 'last'},
|
|
)
|
|
assert len(resp.pyquery('tr td.status')) == 23
|
|
resp = app.get(
|
|
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/journal/' % (regie.pk, campaign.pk, pool.pk),
|
|
params={'user_last_name': 'last1'},
|
|
)
|
|
assert len(resp.pyquery('tr td.status')) == 22
|
|
resp = app.get(
|
|
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/journal/' % (regie.pk, campaign.pk, pool.pk),
|
|
params={'status': 'success'},
|
|
)
|
|
assert len(resp.pyquery('tr td.status')) == 2
|
|
resp = app.get(
|
|
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/journal/' % (regie.pk, campaign.pk, pool.pk),
|
|
params={'status': 'success_injected'},
|
|
)
|
|
assert len(resp.pyquery('tr td.status')) == 1
|
|
resp = app.get(
|
|
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/journal/' % (regie.pk, campaign.pk, pool.pk),
|
|
params={'status': 'warning'},
|
|
)
|
|
assert len(resp.pyquery('tr td.status')) == 1
|
|
resp = app.get(
|
|
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/journal/' % (regie.pk, campaign.pk, pool.pk),
|
|
params={'status': 'error'},
|
|
)
|
|
assert len(resp.pyquery('tr td.status')) == 20
|
|
if not draft:
|
|
resp = app.get(
|
|
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/journal/' % (regie.pk, campaign.pk, pool.pk),
|
|
params={'status': 'error_todo'},
|
|
)
|
|
assert len(resp.pyquery('tr td.status')) == 18
|
|
resp = app.get(
|
|
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/journal/' % (regie.pk, campaign.pk, pool.pk),
|
|
params={'status': 'error_ignored'},
|
|
)
|
|
assert len(resp.pyquery('tr td.status')) == 1
|
|
resp = app.get(
|
|
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/journal/' % (regie.pk, campaign.pk, pool.pk),
|
|
params={'status': 'error_fixed'},
|
|
)
|
|
assert len(resp.pyquery('tr td.status')) == 1
|
|
|
|
|
|
def test_delete_pool(app, admin_user):
|
|
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),
|
|
)
|
|
campaign2 = Campaign.objects.create(
|
|
regie=regie,
|
|
date_start=datetime.date(2022, 10, 1),
|
|
date_end=datetime.date(2022, 11, 1),
|
|
date_issue=datetime.date(2022, 11, 30),
|
|
)
|
|
pool = Pool.objects.create(
|
|
campaign=campaign,
|
|
draft=True,
|
|
status='completed',
|
|
)
|
|
invoice = DraftInvoice.objects.create(date_issue=datetime.date.today(), regie=regie, pool=pool)
|
|
DraftInvoiceLine.objects.create(
|
|
event_date=datetime.date(2022, 9, 1),
|
|
invoice=invoice,
|
|
quantity=1,
|
|
unit_amount=1,
|
|
total_amount=1,
|
|
status='success',
|
|
pool=pool,
|
|
)
|
|
|
|
app = login(app)
|
|
resp = app.get(
|
|
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/delete/' % (regie.pk, campaign.pk, pool.pk)
|
|
)
|
|
resp = resp.form.submit()
|
|
assert Pool.objects.count() == 0
|
|
assert resp.location.endswith(
|
|
'/manage/invoicing/regie/%s/campaign/%s/#open:pools' % (regie.pk, campaign.pk)
|
|
)
|
|
|
|
pool.draft = True
|
|
pool.save()
|
|
app.get('/manage/invoicing/regie/%s/campaign/%s/pool/%s/delete/' % (0, campaign.pk, pool.pk), status=404)
|
|
app.get('/manage/invoicing/regie/%s/campaign/%s/pool/%s/delete/' % (regie.pk, 0, pool.pk), status=404)
|
|
app.get(
|
|
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/delete/' % (regie.pk, campaign2.pk, pool.pk),
|
|
status=404,
|
|
)
|
|
app.get('/manage/invoicing/regie/%s/campaign/%s/pool/%s/delete/' % (regie.pk, campaign.pk, 0), status=404)
|
|
|
|
pool.status = 'registered'
|
|
pool.save()
|
|
app.get(
|
|
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/delete/' % (regie.pk, campaign.pk, pool.pk),
|
|
status=404,
|
|
)
|
|
|
|
pool.status = 'running'
|
|
pool.save()
|
|
app.get(
|
|
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/delete/' % (regie.pk, campaign.pk, pool.pk),
|
|
status=404,
|
|
)
|
|
|
|
pool.draft = False
|
|
pool.status = 'error'
|
|
pool.save()
|
|
app.get(
|
|
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/delete/' % (regie.pk, campaign.pk, pool.pk),
|
|
status=404,
|
|
)
|
|
|
|
pool.draft = True
|
|
pool.save()
|
|
app.get('/manage/invoicing/regie/%s/campaign/%s/pool/%s/delete/' % (regie.pk, campaign.pk, pool.pk))
|
|
|
|
|
|
def test_set_error_status_line(app, admin_user):
|
|
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=False,
|
|
status='completed',
|
|
)
|
|
line = InvoiceLine.objects.create(
|
|
event_date=datetime.date(2022, 9, 1),
|
|
quantity=1,
|
|
unit_amount=1,
|
|
total_amount=1,
|
|
status='success',
|
|
pool=pool,
|
|
)
|
|
|
|
app = login(app)
|
|
resp = app.get(
|
|
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/journal/' % (regie.pk, campaign.pk, pool.pk)
|
|
)
|
|
assert (
|
|
'/manage/invoicing/ajax/regie/%s/campaign/%s/pool/%s/line/%s/reset/'
|
|
% (regie.pk, campaign.pk, pool.pk, line.pk)
|
|
not in resp
|
|
)
|
|
assert (
|
|
'/manage/invoicing/ajax/regie/%s/campaign/%s/pool/%s/line/%s/ignore/'
|
|
% (regie.pk, campaign.pk, pool.pk, line.pk)
|
|
not in resp
|
|
)
|
|
assert (
|
|
'/manage/invoicing/ajax/regie/%s/campaign/%s/pool/%s/line/%s/fix/'
|
|
% (regie.pk, campaign.pk, pool.pk, line.pk)
|
|
not in resp
|
|
)
|
|
app.get(
|
|
'/manage/invoicing/ajax/regie/%s/campaign/%s/pool/%s/line/%s/reset/'
|
|
% (regie.pk, campaign.pk, pool.pk, line.pk),
|
|
status=404,
|
|
)
|
|
app.get(
|
|
'/manage/invoicing/ajax/regie/%s/campaign/%s/pool/%s/line/%s/ignore/'
|
|
% (regie.pk, campaign.pk, pool.pk, line.pk),
|
|
status=404,
|
|
)
|
|
app.get(
|
|
'/manage/invoicing/ajax/regie/%s/campaign/%s/pool/%s/line/%s/fix/'
|
|
% (regie.pk, campaign.pk, pool.pk, line.pk),
|
|
status=404,
|
|
)
|
|
|
|
line.status = 'warning'
|
|
line.save()
|
|
resp = app.get(
|
|
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/journal/' % (regie.pk, campaign.pk, pool.pk)
|
|
)
|
|
assert (
|
|
'/manage/invoicing/ajax/regie/%s/campaign/%s/pool/%s/line/%s/reset/'
|
|
% (regie.pk, campaign.pk, pool.pk, line.pk)
|
|
not in resp
|
|
)
|
|
assert (
|
|
'/manage/invoicing/ajax/regie/%s/campaign/%s/pool/%s/line/%s/ignore/'
|
|
% (regie.pk, campaign.pk, pool.pk, line.pk)
|
|
not in resp
|
|
)
|
|
assert (
|
|
'/manage/invoicing/ajax/regie/%s/campaign/%s/pool/%s/line/%s/fix/'
|
|
% (regie.pk, campaign.pk, pool.pk, line.pk)
|
|
not in resp
|
|
)
|
|
app.get(
|
|
'/manage/invoicing/ajax/regie/%s/campaign/%s/pool/%s/line/%s/reset/'
|
|
% (regie.pk, campaign.pk, pool.pk, line.pk),
|
|
status=404,
|
|
)
|
|
app.get(
|
|
'/manage/invoicing/ajax/regie/%s/campaign/%s/pool/%s/line/%s/ignore/'
|
|
% (regie.pk, campaign.pk, pool.pk, line.pk),
|
|
status=404,
|
|
)
|
|
app.get(
|
|
'/manage/invoicing/ajax/regie/%s/campaign/%s/pool/%s/line/%s/fix/'
|
|
% (regie.pk, campaign.pk, pool.pk, line.pk),
|
|
status=404,
|
|
)
|
|
|
|
line.status = 'error'
|
|
line.save()
|
|
resp = app.get(
|
|
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/journal/' % (regie.pk, campaign.pk, pool.pk)
|
|
)
|
|
assert (
|
|
'/manage/invoicing/ajax/regie/%s/campaign/%s/pool/%s/line/%s/reset/'
|
|
% (regie.pk, campaign.pk, pool.pk, line.pk)
|
|
not in resp
|
|
)
|
|
assert (
|
|
'/manage/invoicing/ajax/regie/%s/campaign/%s/pool/%s/line/%s/ignore/'
|
|
% (regie.pk, campaign.pk, pool.pk, line.pk)
|
|
in resp
|
|
)
|
|
assert (
|
|
'/manage/invoicing/ajax/regie/%s/campaign/%s/pool/%s/line/%s/fix/'
|
|
% (regie.pk, campaign.pk, pool.pk, line.pk)
|
|
in resp
|
|
)
|
|
|
|
line.error_status = 'ignored'
|
|
line.save()
|
|
resp = app.get(
|
|
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/journal/' % (regie.pk, campaign.pk, pool.pk)
|
|
)
|
|
assert (
|
|
'/manage/invoicing/ajax/regie/%s/campaign/%s/pool/%s/line/%s/reset/'
|
|
% (regie.pk, campaign.pk, pool.pk, line.pk)
|
|
in resp
|
|
)
|
|
assert (
|
|
'/manage/invoicing/ajax/regie/%s/campaign/%s/pool/%s/line/%s/ignore/'
|
|
% (regie.pk, campaign.pk, pool.pk, line.pk)
|
|
not in resp
|
|
)
|
|
assert (
|
|
'/manage/invoicing/ajax/regie/%s/campaign/%s/pool/%s/line/%s/fix/'
|
|
% (regie.pk, campaign.pk, pool.pk, line.pk)
|
|
not in resp
|
|
)
|
|
|
|
line.error_status = 'fixed'
|
|
line.save()
|
|
resp = app.get(
|
|
'/manage/invoicing/regie/%s/campaign/%s/pool/%s/journal/' % (regie.pk, campaign.pk, pool.pk)
|
|
)
|
|
assert (
|
|
'/manage/invoicing/ajax/regie/%s/campaign/%s/pool/%s/line/%s/reset/'
|
|
% (regie.pk, campaign.pk, pool.pk, line.pk)
|
|
in resp
|
|
)
|
|
assert (
|
|
'/manage/invoicing/ajax/regie/%s/campaign/%s/pool/%s/line/%s/ignore/'
|
|
% (regie.pk, campaign.pk, pool.pk, line.pk)
|
|
not in resp
|
|
)
|
|
assert (
|
|
'/manage/invoicing/ajax/regie/%s/campaign/%s/pool/%s/line/%s/fix/'
|
|
% (regie.pk, campaign.pk, pool.pk, line.pk)
|
|
not in resp
|
|
)
|
|
|
|
app.get(
|
|
'/manage/invoicing/ajax/regie/%s/campaign/%s/pool/%s/line/%s/reset/'
|
|
% (regie.pk, campaign.pk, pool.pk, line.pk)
|
|
)
|
|
line.refresh_from_db()
|
|
assert line.error_status == ''
|
|
|
|
app.get(
|
|
'/manage/invoicing/ajax/regie/%s/campaign/%s/pool/%s/line/%s/ignore/'
|
|
% (regie.pk, campaign.pk, pool.pk, line.pk)
|
|
)
|
|
line.refresh_from_db()
|
|
assert line.error_status == 'ignored'
|
|
|
|
app.get(
|
|
'/manage/invoicing/ajax/regie/%s/campaign/%s/pool/%s/line/%s/fix/'
|
|
% (regie.pk, campaign.pk, pool.pk, line.pk)
|
|
)
|
|
line.refresh_from_db()
|
|
assert line.error_status == 'fixed'
|
|
|
|
app.get(
|
|
'/manage/invoicing/ajax/regie/%s/campaign/%s/pool/%s/line/%s/reset/'
|
|
% (0, campaign.pk, pool.pk, line.pk),
|
|
status=404,
|
|
)
|
|
app.get(
|
|
'/manage/invoicing/ajax/regie/%s/campaign/%s/pool/%s/line/%s/reset/'
|
|
% (regie.pk, 0, pool.pk, line.pk),
|
|
status=404,
|
|
)
|
|
app.get(
|
|
'/manage/invoicing/ajax/regie/%s/campaign/%s/pool/%s/line/%s/reset/'
|
|
% (regie.pk, campaign.pk, 0, line.pk),
|
|
status=404,
|
|
)
|
|
app.get(
|
|
'/manage/invoicing/ajax/regie/%s/campaign/%s/pool/%s/line/%s/reset/'
|
|
% (regie.pk, campaign.pk, pool.pk, 0),
|
|
status=404,
|
|
)
|