8
0
Fork 0
mirror of https://gitlab2.federez.net/re2o/re2o synced 2024-11-05 17:36:27 +00:00

Merge branch '348-mutliple-cotisations' into 'dev'

Resolve "Mutliple cotisations bought in an invoice are calculated in the wrong order"

See merge request re2o/re2o!637
This commit is contained in:
faercol 2024-03-02 18:49:57 +00:00
commit a7d2fc9f98
2 changed files with 13 additions and 1 deletions

View file

@ -125,9 +125,13 @@ class NewFactureTests(TestCase):
self.assertEqual(response.status_code, 302)
self.assertEqual(response.url, "/users/profil/%d" % self.user.pk)
invoice = self.user.facture_set.first()
cotisations = invoice.get_subscription()
delta = relativedelta(self.user.end_connexion(), date)
delta.microseconds = 0
self.assertEqual(delta, relativedelta(months=1, days=7))
# Check that the cotisations are sorted
self.assertEqual(relativedelta(cotisations[0].date_end_con, cotisations[0].date_start_con), relativedelta(months=1))
self.assertEqual(relativedelta(cotisations[1].date_end_con, cotisations[1].date_start_con), relativedelta(days=7))
def test_several_articles_creates_several_purchases(self):
data = {

View file

@ -75,6 +75,8 @@ def new_facture(request, user, userid):
A bit of JS is used in the template to add articles in a fancier way.
If everything is correct, save each one of the articles, save the
purchase object associated and finally the newly created invoice.
Each article is created and save sorted by the number of month-length
membership or connection they offer, to solve duration ambiguities.
"""
invoice = Facture(user=user)
# The template needs the list of articles (for the JS part)
@ -98,7 +100,13 @@ def new_facture(request, user, userid):
# Building a purchase for each article sold
purchases = []
total_price = 0
for art_item in articles:
# We sort articles by number of months of subscription in them, to solve month + day ambiguities issues
sorted_articles = sorted(
articles,
key=lambda art: max(art.cleaned_data["article"].duration_membership, art.cleaned_data["article"].duration_connection),
reverse=True
)
for art_item in sorted_articles:
if art_item.cleaned_data:
article = art_item.cleaned_data["article"]
quantity = art_item.cleaned_data["quantity"]