From 94582a2d96baca305350dacd4ab78c8cb2941dff Mon Sep 17 00:00:00 2001 From: Krophil Date: Mon, 21 Aug 2017 21:29:33 +0200 Subject: [PATCH 1/2] Free subscription for jewels --- locale/fr/LC_MESSAGES/django.po | 105 +++++++++++++++++++++++++++++++- sith/settings.py | 5 ++ subscription/models.py | 9 +-- 3 files changed, 114 insertions(+), 5 deletions(-) diff --git a/locale/fr/LC_MESSAGES/django.po b/locale/fr/LC_MESSAGES/django.po index 5e4bde8d..3c6dc530 100644 --- a/locale/fr/LC_MESSAGES/django.po +++ b/locale/fr/LC_MESSAGES/django.po @@ -1365,8 +1365,15 @@ msgid "Notices" msgstr "Information" #: com/templates/com/news_admin_list.jinja:14 +<<<<<<< 02b317eeb9274ad44a74856c412b3a2a0e8eda msgid "Displayed notices" msgstr "Informations affichées" +======= +#, fuzzy +#| msgid "Legal notices" +msgid "Displayed notices" +msgstr "Mentions légales" +>>>>>>> Free subscription for jewels #: com/templates/com/news_admin_list.jinja:18 #: com/templates/com/news_admin_list.jinja:47 @@ -1435,8 +1442,15 @@ msgid "Remove" msgstr "Retirer" #: com/templates/com/news_admin_list.jinja:43 +<<<<<<< 02b317eee8b9274ad44a74856c412b3a2a0e8eda msgid "Notices to moderate" msgstr "Informations à modérer" +======= +#, fuzzy +#| msgid "New files to be moderated" +msgid "Notices to moderate" +msgstr "Nouveaux fichiers à modérer" +>>>>>>> Free subscription for jewels #: com/templates/com/news_admin_list.jinja:72 msgid "Weeklies" @@ -1444,7 +1458,11 @@ msgstr "Nouvelles hebdomadaires" #: com/templates/com/news_admin_list.jinja:74 msgid "Displayed weeklies" +<<<<<<< 02b317eee8b9274ad44a74856c412b3a2a0e8eda msgstr "Nouvelles hebdomadaires affichées" +======= +msgstr "" +>>>>>>> Free subscription for jewels #: com/templates/com/news_admin_list.jinja:84 #: com/templates/com/news_admin_list.jinja:124 @@ -1453,8 +1471,15 @@ msgid "Dates" msgstr "Dates" #: com/templates/com/news_admin_list.jinja:115 +<<<<<<< 02b317eee8b9274ad44a74856c412b3a2a0e8eda msgid "Weeklies to moderate" msgstr "Nouvelles hebdomadaires à modérer" +======= +#, fuzzy +#| msgid "New files to be moderated" +msgid "Weeklies to moderate" +msgstr "Nouveaux fichiers à modérer" +>>>>>>> Free subscription for jewels #: com/templates/com/news_admin_list.jinja:156 msgid "Calls" @@ -1462,11 +1487,21 @@ msgstr "Appels" #: com/templates/com/news_admin_list.jinja:158 msgid "Displayed calls" +<<<<<<< 02b317eee8b9274ad44a74856c412b3a2a0e8eda msgstr "Appels affichés" #: com/templates/com/news_admin_list.jinja:193 msgid "Calls to moderate" msgstr "Appels à modérer" +======= +msgstr "" + +#: com/templates/com/news_admin_list.jinja:193 +#, fuzzy +#| msgid "is moderated" +msgid "Calls to moderate" +msgstr "est modéré" +>>>>>>> Free subscription for jewels #: com/templates/com/news_admin_list.jinja:228 msgid "Events" @@ -1474,11 +1509,21 @@ msgstr "Événements" #: com/templates/com/news_admin_list.jinja:230 msgid "Displayed events" +<<<<<<< 02b317eee8b9274ad44a74856c412b3a2a0e8eda msgstr "Événements affichés" #: com/templates/com/news_admin_list.jinja:265 msgid "Events to moderate" msgstr "Événements à modérer" +======= +msgstr "" + +#: com/templates/com/news_admin_list.jinja:265 +#, fuzzy +#| msgid "is moderated" +msgid "Events to moderate" +msgstr "est modéré" +>>>>>>> Free subscription for jewels #: com/templates/com/news_detail.jinja:10 msgid "Back to news" @@ -4077,12 +4122,20 @@ msgid "Washing and drying" msgstr "Lavage et séchage" #: launderette/templates/launderette/launderette_book.jinja:27 +<<<<<<< 02b317eee8b9274ad44a74856c412b3a2a0e8eda #: sith/settings.py:541 +======= +#: sith/settings.py:544 +>>>>>>> Free subscription for jewels msgid "Washing" msgstr "Lavage" #: launderette/templates/launderette/launderette_book.jinja:31 +<<<<<<< 02b317eee8b9274ad44a74856c412b3a2a0e8eda #: sith/settings.py:541 +======= +#: sith/settings.py:544 +>>>>>>> Free subscription for jewels msgid "Drying" msgstr "Séchage" @@ -4387,8 +4440,9 @@ msgstr "Membre de Sbarro ou de l'ESTA, 15 €" #: sith/settings.py:483 msgid "One semester Welcome Week" -msgstr "Un semestre - Welcome Week 0 €" +msgstr "Un semestre Welcome Week" +<<<<<<< 02b317eee8b9274ad44a74856c412b3a2a0e8eda #: sith/settings.py:505 msgid "President" msgstr "Président" @@ -4422,6 +4476,45 @@ msgid "Active member" msgstr "Membre actif" #: sith/settings.py:513 +======= +#: sith/settings.py:487 +msgid "Two month for free" +msgstr "Deux mois gratuits" + +#: sith/settings.py:509 +msgid "President" +msgstr "Président" + +#: sith/settings.py:510 +msgid "Vice-President" +msgstr "Vice-Président" + +#: sith/settings.py:511 +msgid "Treasurer" +msgstr "Trésorier" + +#: sith/settings.py:512 +msgid "Communication supervisor" +msgstr "Responsable communication" + +#: sith/settings.py:513 +msgid "Secretary" +msgstr "Secrétaire" + +#: sith/settings.py:514 +msgid "IT supervisor" +msgstr "Responsable info" + +#: sith/settings.py:515 +msgid "Board member" +msgstr "Membre du bureau" + +#: sith/settings.py:516 +msgid "Active member" +msgstr "Membre actif" + +#: sith/settings.py:517 +>>>>>>> Free subscription for jewels msgid "Curious" msgstr "Curieux" @@ -4445,12 +4538,22 @@ msgstr "Nouvelles photos/albums à modérer dans le SAS" msgid "You've been identified on some pictures" msgstr "Vous avez été identifié sur des photos" +<<<<<<< 02b317eee8b9274ad44a74856c412b3a2a0e8eda #: sith/settings.py:553 +======= +#: sith/settings.py:551 + +>>>>>>> Free subscription for jewels #, python-format msgid "You just refilled of %s €" msgstr "Vous avez rechargé votre compte de %s €" +<<<<<<< 02b317eee8b9274ad44a74856c412b3a2a0e8eda #: sith/settings.py:554 +======= +#: sith/settings.py:552 +#: sith/settings.py:556 +>>>>>>> Free subscription for jewels #, python-format msgid "You just bought %s" msgstr "Vous avez acheté %s" diff --git a/sith/settings.py b/sith/settings.py index bbeb59ad..b9e6d8ea 100644 --- a/sith/settings.py +++ b/sith/settings.py @@ -484,6 +484,11 @@ SITH_SUBSCRIPTIONS = { 'price': 0, 'duration': 1, }, + 'deux-mois-pour-bijoux': { + 'name': _('Two month for free'), + 'price': 0, + 'duration': 0.34, + } # To be completed.... } diff --git a/subscription/models.py b/subscription/models.py index 15b7842d..458652c1 100644 --- a/subscription/models.py +++ b/subscription/models.py @@ -104,6 +104,7 @@ class Subscription(models.Model): 'sbarro/esta': 9, 'cursus-alternant': 10, 'welcome-semestre': 11, + 'un-mois': 12, } PAYMENT = { "CHECK": 1, @@ -168,11 +169,11 @@ class Subscription(models.Model): start = Subscription.compute_start(duration=duration) # This can certainly be simplified, but it works like this try: - return start.replace(month=(start.month - 1 + 6 * duration) % 12 + 1, - year=start.year + int(duration / 2) + (1 if start.month > 6 and duration % 2 == 1 else 0)) + return start.replace(month=int((start.month - 1 + 6 * duration) % 12 + 1), + year=int(start.year + int(duration / 2) + (1 if start.month > 6 and duration % 2 == 1 else 0))) except ValueError as e: - return start.replace(day=1, month=(start.month + 6 * duration) % 12 + 1, - year=start.year + int(duration / 2) + (1 if start.month > 6 and duration % 2 == 1 else 0)) + return start.replace(day=1, month=int((start.month + 6 * duration) % 12 + 1), + year=int(start.year + int(duration / 2) + (1 if start.month > 6 and duration % 2 == 1 else 0))) def can_be_edited_by(self, user): return user.is_in_group(settings.SITH_MAIN_BOARD_GROUP) or user.is_root From 3be64d6a8fbafb0e69eef5e2cd1c49c5a182d0ec Mon Sep 17 00:00:00 2001 From: Krophil Date: Tue, 29 Aug 2017 18:26:27 +0200 Subject: [PATCH 2/2] New subscription type for jewels New condition to consider floats in subscriptions --- locale/fr/LC_MESSAGES/django.po | 130 ++++---------------------------- sith/settings.py | 4 +- subscription/models.py | 10 +-- subscription/tests.py | 64 ++++++++++++++-- 4 files changed, 80 insertions(+), 128 deletions(-) diff --git a/locale/fr/LC_MESSAGES/django.po b/locale/fr/LC_MESSAGES/django.po index 3c6dc530..aef25622 100644 --- a/locale/fr/LC_MESSAGES/django.po +++ b/locale/fr/LC_MESSAGES/django.po @@ -1365,15 +1365,8 @@ msgid "Notices" msgstr "Information" #: com/templates/com/news_admin_list.jinja:14 -<<<<<<< 02b317eeb9274ad44a74856c412b3a2a0e8eda msgid "Displayed notices" msgstr "Informations affichées" -======= -#, fuzzy -#| msgid "Legal notices" -msgid "Displayed notices" -msgstr "Mentions légales" ->>>>>>> Free subscription for jewels #: com/templates/com/news_admin_list.jinja:18 #: com/templates/com/news_admin_list.jinja:47 @@ -1442,15 +1435,8 @@ msgid "Remove" msgstr "Retirer" #: com/templates/com/news_admin_list.jinja:43 -<<<<<<< 02b317eee8b9274ad44a74856c412b3a2a0e8eda msgid "Notices to moderate" msgstr "Informations à modérer" -======= -#, fuzzy -#| msgid "New files to be moderated" -msgid "Notices to moderate" -msgstr "Nouveaux fichiers à modérer" ->>>>>>> Free subscription for jewels #: com/templates/com/news_admin_list.jinja:72 msgid "Weeklies" @@ -1458,11 +1444,7 @@ msgstr "Nouvelles hebdomadaires" #: com/templates/com/news_admin_list.jinja:74 msgid "Displayed weeklies" -<<<<<<< 02b317eee8b9274ad44a74856c412b3a2a0e8eda msgstr "Nouvelles hebdomadaires affichées" -======= -msgstr "" ->>>>>>> Free subscription for jewels #: com/templates/com/news_admin_list.jinja:84 #: com/templates/com/news_admin_list.jinja:124 @@ -1471,15 +1453,8 @@ msgid "Dates" msgstr "Dates" #: com/templates/com/news_admin_list.jinja:115 -<<<<<<< 02b317eee8b9274ad44a74856c412b3a2a0e8eda msgid "Weeklies to moderate" msgstr "Nouvelles hebdomadaires à modérer" -======= -#, fuzzy -#| msgid "New files to be moderated" -msgid "Weeklies to moderate" -msgstr "Nouveaux fichiers à modérer" ->>>>>>> Free subscription for jewels #: com/templates/com/news_admin_list.jinja:156 msgid "Calls" @@ -1487,21 +1462,11 @@ msgstr "Appels" #: com/templates/com/news_admin_list.jinja:158 msgid "Displayed calls" -<<<<<<< 02b317eee8b9274ad44a74856c412b3a2a0e8eda msgstr "Appels affichés" #: com/templates/com/news_admin_list.jinja:193 msgid "Calls to moderate" msgstr "Appels à modérer" -======= -msgstr "" - -#: com/templates/com/news_admin_list.jinja:193 -#, fuzzy -#| msgid "is moderated" -msgid "Calls to moderate" -msgstr "est modéré" ->>>>>>> Free subscription for jewels #: com/templates/com/news_admin_list.jinja:228 msgid "Events" @@ -1509,21 +1474,11 @@ msgstr "Événements" #: com/templates/com/news_admin_list.jinja:230 msgid "Displayed events" -<<<<<<< 02b317eee8b9274ad44a74856c412b3a2a0e8eda msgstr "Événements affichés" #: com/templates/com/news_admin_list.jinja:265 msgid "Events to moderate" msgstr "Événements à modérer" -======= -msgstr "" - -#: com/templates/com/news_admin_list.jinja:265 -#, fuzzy -#| msgid "is moderated" -msgid "Events to moderate" -msgstr "est modéré" ->>>>>>> Free subscription for jewels #: com/templates/com/news_detail.jinja:10 msgid "Back to news" @@ -4122,20 +4077,12 @@ msgid "Washing and drying" msgstr "Lavage et séchage" #: launderette/templates/launderette/launderette_book.jinja:27 -<<<<<<< 02b317eee8b9274ad44a74856c412b3a2a0e8eda #: sith/settings.py:541 -======= -#: sith/settings.py:544 ->>>>>>> Free subscription for jewels msgid "Washing" msgstr "Lavage" #: launderette/templates/launderette/launderette_book.jinja:31 -<<<<<<< 02b317eee8b9274ad44a74856c412b3a2a0e8eda #: sith/settings.py:541 -======= -#: sith/settings.py:544 ->>>>>>> Free subscription for jewels msgid "Drying" msgstr "Séchage" @@ -4442,79 +4389,43 @@ msgstr "Membre de Sbarro ou de l'ESTA, 15 €" msgid "One semester Welcome Week" msgstr "Un semestre Welcome Week" -<<<<<<< 02b317eee8b9274ad44a74856c412b3a2a0e8eda -#: sith/settings.py:505 -msgid "President" -msgstr "Président" - -#: sith/settings.py:506 -msgid "Vice-President" -msgstr "Vice-Président" - -#: sith/settings.py:507 -msgid "Treasurer" -msgstr "Trésorier" - -#: sith/settings.py:508 -msgid "Communication supervisor" -msgstr "Responsable communication" - -#: sith/settings.py:509 -msgid "Secretary" -msgstr "Secrétaire" - -#: sith/settings.py:510 -msgid "IT supervisor" -msgstr "Responsable info" - -#: sith/settings.py:511 -msgid "Board member" -msgstr "Membre du bureau" - -#: sith/settings.py:512 -msgid "Active member" -msgstr "Membre actif" - #: sith/settings.py:513 -======= -#: sith/settings.py:487 msgid "Two month for free" msgstr "Deux mois gratuits" -#: sith/settings.py:509 +#: sith/settings.py:510 msgid "President" msgstr "Président" -#: sith/settings.py:510 +#: sith/settings.py:511 msgid "Vice-President" msgstr "Vice-Président" -#: sith/settings.py:511 +#: sith/settings.py:512 msgid "Treasurer" msgstr "Trésorier" -#: sith/settings.py:512 +#: sith/settings.py:513 msgid "Communication supervisor" msgstr "Responsable communication" -#: sith/settings.py:513 +#: sith/settings.py:514 msgid "Secretary" msgstr "Secrétaire" -#: sith/settings.py:514 +#: sith/settings.py:515 msgid "IT supervisor" msgstr "Responsable info" -#: sith/settings.py:515 +#: sith/settings.py:516 msgid "Board member" msgstr "Membre du bureau" -#: sith/settings.py:516 +#: sith/settings.py:517 msgid "Active member" msgstr "Membre actif" #: sith/settings.py:517 ->>>>>>> Free subscription for jewels msgid "Curious" msgstr "Curieux" @@ -4538,47 +4449,38 @@ msgstr "Nouvelles photos/albums à modérer dans le SAS" msgid "You've been identified on some pictures" msgstr "Vous avez été identifié sur des photos" -<<<<<<< 02b317eee8b9274ad44a74856c412b3a2a0e8eda -#: sith/settings.py:553 -======= -#: sith/settings.py:551 - ->>>>>>> Free subscription for jewels +#: sith/settings.py:558 #, python-format msgid "You just refilled of %s €" msgstr "Vous avez rechargé votre compte de %s €" -<<<<<<< 02b317eee8b9274ad44a74856c412b3a2a0e8eda #: sith/settings.py:554 -======= -#: sith/settings.py:552 -#: sith/settings.py:556 ->>>>>>> Free subscription for jewels #, python-format msgid "You just bought %s" msgstr "Vous avez acheté %s" -#: sith/settings.py:555 +#: sith/settings.py:563 +#: sith/settings.py:560 msgid "You have a notification" msgstr "Vous avez une notification" -#: sith/settings.py:559 +#: sith/settings.py:564 msgid "Success!" msgstr "Succès !" -#: sith/settings.py:560 +#: sith/settings.py:565 msgid "Fail!" msgstr "Échec !" -#: sith/settings.py:561 +#: sith/settings.py:566 msgid "You successfully posted an article in the Weekmail" msgstr "Article posté avec succès dans le Weekmail" -#: sith/settings.py:562 +#: sith/settings.py:567 msgid "You successfully edited an article in the Weekmail" msgstr "Article édité avec succès dans le Weekmail" -#: sith/settings.py:563 +#: sith/settings.py:568 msgid "You successfully sent the Weekmail" msgstr "Weekmail envoyé avec succès" diff --git a/sith/settings.py b/sith/settings.py index b9e6d8ea..b7151144 100644 --- a/sith/settings.py +++ b/sith/settings.py @@ -484,10 +484,10 @@ SITH_SUBSCRIPTIONS = { 'price': 0, 'duration': 1, }, - 'deux-mois-pour-bijoux': { + 'deux-mois-essai': { 'name': _('Two month for free'), 'price': 0, - 'duration': 0.34, + 'duration': 0.33, } # To be completed.... } diff --git a/subscription/models.py b/subscription/models.py index 458652c1..8d28488d 100644 --- a/subscription/models.py +++ b/subscription/models.py @@ -104,7 +104,7 @@ class Subscription(models.Model): 'sbarro/esta': 9, 'cursus-alternant': 10, 'welcome-semestre': 11, - 'un-mois': 12, + 'deux-mois-essai': 12, } PAYMENT = { "CHECK": 1, @@ -169,11 +169,11 @@ class Subscription(models.Model): start = Subscription.compute_start(duration=duration) # This can certainly be simplified, but it works like this try: - return start.replace(month=int((start.month - 1 + 6 * duration) % 12 + 1), - year=int(start.year + int(duration / 2) + (1 if start.month > 6 and duration % 2 == 1 else 0))) + return start.replace(month=int(round((start.month - 1 + 6 * duration) % 12 + 1, 0)), + year=int(round(start.year + int(duration / 2) + (1 if int(start.month + 6 * duration) > 12 and (duration % 2 == 1 or duration < 1) else 0), 0))) except ValueError as e: - return start.replace(day=1, month=int((start.month + 6 * duration) % 12 + 1), - year=int(start.year + int(duration / 2) + (1 if start.month > 6 and duration % 2 == 1 else 0))) + return start.replace(day=1, month=int(round((start.month + 6 * duration) % 12 + 1, 0)), + year=int(round(start.year + int(duration / 2) + (1 if int(start.month + 6 * duration) > 12 and (duration % 2 == 1 or duration < 1) else 0), 0))) def can_be_edited_by(self, user): return user.is_in_group(settings.SITH_MAIN_BOARD_GROUP) or user.is_root diff --git a/subscription/tests.py b/subscription/tests.py index 4c27c242..49ae423b 100644 --- a/subscription/tests.py +++ b/subscription/tests.py @@ -26,16 +26,23 @@ from unittest import mock from django.test import TestCase from subscription.models import Subscription +from core.models import User +from django.conf import settings +from datetime import datetime +from django.core.management import call_command + class FakeDate(date): """A fake replacement for date that can be mocked for testing.""" def __new__(cls, *args, **kwargs): return date.__new__(date, *args, **kwargs) + def date_mock_today(year, month, day): FakeDate.today = classmethod(lambda cls: date(year, month, day)) -class SubscribtionTest(TestCase): + +class SubscriptionTest(TestCase): @mock.patch('subscription.models.date', FakeDate) def test_start_dates_sliding_without_start(self): @@ -46,9 +53,9 @@ class SubscribtionTest(TestCase): def test_start_dates_sliding_with_start(self): self.assertTrue(Subscription.compute_start(date(2015, 5, 17), 1) == - date(2015, 5, 17)) + date(2015, 5, 17)) self.assertTrue(Subscription.compute_start(date(2015, 5, 17), 2) == - date(2015, 5, 17)) + date(2015, 5, 17)) @mock.patch('subscription.models.date', FakeDate) def test_start_dates_not_sliding_without_start(self): @@ -60,10 +67,8 @@ class SubscribtionTest(TestCase): self.assertTrue(Subscription.compute_start(duration=4) == date(2015, 8, 15)) def test_start_dates_not_sliding_with_start(self): - self.assertTrue(Subscription.compute_start(date(2015, 5, 17), 3) == - date(2015, 2, 15)) - self.assertTrue(Subscription.compute_start(date(2015, 1, 11), 3) == - date(2014, 8, 15)) + self.assertTrue(Subscription.compute_start(date(2015, 5, 17), 3) == date(2015, 2, 15)) + self.assertTrue(Subscription.compute_start(date(2015, 1, 11), 3) == date(2014, 8, 15)) @mock.patch('subscription.models.date', FakeDate) def test_end_dates_sliding(self): @@ -81,9 +86,54 @@ class SubscribtionTest(TestCase): d = Subscription.compute_end(duration=4) self.assertTrue(d == date(2017, 8, 15)) + @mock.patch('subscription.models.date', FakeDate) + def test_end_dates_with_float(self): + date_mock_today(2015, 9, 18) + d = Subscription.compute_end(duration=0.33) + self.assertTrue(d == date(2015, 11, 18)) + d = Subscription.compute_end(duration=0.67) + self.assertTrue(d == date(2016, 1, 18)) + d = Subscription.compute_end(duration=0.5) + self.assertTrue(d == date(2015, 12, 18)) + def test_end_dates_not_sliding_with_start(self): d = Subscription.compute_end(duration=3, start=date(2015, 9, 18)) self.assertTrue(d == date(2017, 3, 18)) d = Subscription.compute_end(duration=4, start=date(2015, 9, 18)) self.assertTrue(d == date(2017, 9, 18)) + +class DecimalDurationTest(TestCase): + def setUp(self): + call_command("populate") + self.user = User.objects.filter(username="public").first() + + def test_duration_two_months(self): + + s = Subscription(member=User.objects.filter(pk=self.user.pk).first(), subscription_type=list(settings.SITH_SUBSCRIPTIONS.keys())[3], + payment_method=settings.SITH_SUBSCRIPTION_PAYMENT_METHOD[0]) + s.subscription_start = date(2017, 8, 29) + s.subscription_end = s.compute_end(duration=0.33, + start=s.subscription_start) + s.save() + self.assertTrue(s.subscription_end == date(2017, 10, 29)) + + def test_duration_three_months(self): + + s = Subscription(member=User.objects.filter(pk=self.user.pk).first(), subscription_type=list(settings.SITH_SUBSCRIPTIONS.keys())[3], + payment_method=settings.SITH_SUBSCRIPTION_PAYMENT_METHOD[0]) + s.subscription_start = date(2017, 8, 29) + s.subscription_end = s.compute_end(duration=0.5, + start=s.subscription_start) + s.save() + self.assertTrue(s.subscription_end == date(2017, 11, 29)) + + def test_duration_four_months(self): + + s = Subscription(member=User.objects.filter(pk=self.user.pk).first(), subscription_type=list(settings.SITH_SUBSCRIPTIONS.keys())[3], + payment_method=settings.SITH_SUBSCRIPTION_PAYMENT_METHOD[0]) + s.subscription_start = date(2017, 8, 29) + s.subscription_end = s.compute_end(duration=0.67, + start=s.subscription_start) + s.save() + self.assertTrue(s.subscription_end == date(2017, 12, 29))