invoicing: a final pool can be deleted (#75558) #43
|
@ -15,7 +15,7 @@
|
|||
</h2>
|
||||
<span class="actions">
|
||||
<a href="{% url 'lingo-manager-invoicing-pool-journal' regie_pk=regie.pk pk=object.pk pool_pk=pool.pk %}">{% trans "Journal" %}</a>
|
||||
{% if pool.draft and pool.status != 'registered' and pool.status != 'running' %}
|
||||
{% if pool.status != 'registered' and pool.status != 'running' %}
|
||||
<a href="{% url 'lingo-manager-invoicing-pool-delete' regie_pk=regie.pk pk=object.pk pool_pk=pool.pk %}" rel="popup">{% trans "Delete" %}</a>
|
||||
{% endif %}
|
||||
{% if not object.invalid and pool.draft and pool.status == 'completed' and pool.is_last %}
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
{% if pool.error_count %}<span class="meta meta-error">{{ pool.error_count }}</span>{% endif %}
|
||||
{{ pool.created_at|date:"DATETIME_FORMAT" }}
|
||||
</h2>
|
||||
{% if pool.draft and pool.status != 'registered' and pool.status != 'running' %}
|
||||
{% if pool.status != 'registered' and pool.status != 'running' %}
|
||||
<span class="actions">
|
||||
<a href="{% url 'lingo-manager-invoicing-pool-delete' regie_pk=regie.pk pk=object.pk pool_pk=pool.pk %}" rel="popup">{% trans "Delete" %}</a>
|
||||
</span>
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
{% block content %}
|
||||
<form method="post">
|
||||
{% csrf_token %}
|
||||
<p>{% trans "Are you sure you want to promote this pool ? This action is irreversible." %}</p>
|
||||
<p>{% trans "Are you sure you want to promote this pool ?" %}</p>
|
||||
<div class="buttons">
|
||||
<button class="submit-button">{% trans "Promote" %}</button>
|
||||
<a class="cancel" href="{% url 'lingo-manager-invoicing-pool-detail' regie_pk=regie.pk pk=object.pk pool_pk=pool.pk %}">{% trans 'Cancel' %}</a>
|
||||
|
|
|
@ -555,22 +555,25 @@ class PoolDeleteView(DeleteView):
|
|||
def dispatch(self, request, *args, **kwargs):
|
||||
self.regie = get_object_or_404(Regie, pk=kwargs['regie_pk'])
|
||||
self.campaign = get_object_or_404(
|
||||
Campaign.objects.filter(regie=self.regie)
|
||||
.exclude(pool__draft=False)
|
||||
.exclude(pool__status__in=['registered', 'running']),
|
||||
Campaign.objects.filter(regie=self.regie).exclude(pool__status__in=['registered', 'running']),
|
||||
pk=kwargs['pk'],
|
||||
)
|
||||
return super().dispatch(request, *args, **kwargs)
|
||||
|
||||
def get_queryset(self):
|
||||
return self.campaign.pool_set.filter(draft=True)
|
||||
return self.campaign.pool_set.all()
|
||||
|
||||
def delete(self, request, *args, **kwargs):
|
||||
self.object = self.get_object()
|
||||
if self.object.is_last:
|
||||
if self.object.is_last and self.object.draft:
|
||||
pmarillonnet marked this conversation as resolved
Outdated
|
||||
self.campaign.mark_as_invalid()
|
||||
DraftInvoiceLine.objects.filter(pool=self.object).delete()
|
||||
DraftInvoice.objects.filter(pool=self.object).delete()
|
||||
invoice_model = Invoice
|
||||
line_model = InvoiceLine
|
||||
if self.object.draft:
|
||||
invoice_model = DraftInvoice
|
||||
line_model = DraftInvoiceLine
|
||||
line_model.objects.filter(pool=self.object).delete()
|
||||
invoice_model.objects.filter(pool=self.object).delete()
|
||||
return super().delete(request, *args, **kwargs)
|
||||
|
||||
def get_success_url(self):
|
||||
|
|
|
@ -803,10 +803,7 @@ def test_detail_pool(app, admin_user):
|
|||
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/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
|
||||
|
@ -1232,10 +1229,7 @@ def test_journal_pool(app, admin_user):
|
|||
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
|
||||
)
|
||||
assert '/manage/invoicing/regie/%s/campaign/%s/pool/%s/delete/' % (regie.pk, campaign.pk, pool.pk) in resp
|
||||
|
||||
pool.draft = True
|
||||
pool.status = 'registered'
|
||||
|
@ -1947,7 +1941,7 @@ def test_delete_pool(app, admin_user):
|
|||
assert campaign.invalid is True
|
||||
|
||||
pool.save()
|
||||
Pool.objects.create(
|
||||
pool2 = Pool.objects.create(
|
||||
campaign=campaign,
|
||||
draft=True,
|
||||
status='completed',
|
||||
|
@ -1963,6 +1957,7 @@ def test_delete_pool(app, admin_user):
|
|||
# pool is not the last, don't invalidate the campaign
|
||||
assert campaign.invalid is False
|
||||
|
||||
pool2.delete()
|
||||
pool.draft = True
|
||||
pool.save()
|
||||
app.get('/manage/invoicing/regie/%s/campaign/%s/pool/%s/delete/' % (0, campaign.pk, pool.pk), status=404)
|
||||
|
@ -1990,12 +1985,25 @@ def test_delete_pool(app, admin_user):
|
|||
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,
|
||||
invoice = Invoice.objects.create(date_issue=datetime.date.today(), regie=regie, pool=pool)
|
||||
InvoiceLine.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/pool/%s/delete/' % (regie.pk, campaign.pk, pool.pk),
|
||||
)
|
||||
resp.form.submit()
|
||||
assert Pool.objects.count() == 0
|
||||
campaign.refresh_from_db()
|
||||
# pool is not draft, don't invalidate the campaign
|
||||
assert campaign.invalid is False
|
||||
|
||||
pool.draft = True
|
||||
pool.save()
|
||||
app.get('/manage/invoicing/regie/%s/campaign/%s/pool/%s/delete/' % (regie.pk, campaign.pk, pool.pk))
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Pas compris pourquoi on restreint le cas où la campagne devient invalide.
Intuitivement on pourrait se dire qu’à partir du moment où il y a eu suppression, ça invalide la campagne dans tous les cas, que le pool soit un brouillon ou non. Je loupe un truc ?
On ne peut promouvoir le dernier draft que si la campagne est valide.
Si on supprime le pool définitif, le dernier draft est toujours valide (et la campagne aussi), parce que rien n'a pu changer: ni les pointages, ni les params de date ou d'agenda de la campagne.
En faisant des tests de suppression du pool définitif en local, j'avais alors une campagne invalide et il me fallait relancer un draft pour pouvoir le promouvoir. Et ça n'était pas nécessaire.
Ah oui ok, c’est plus clair, merci.