Browse Source

Fix remaining hardcoded date computation (these confuse Django's migration detection)

Baptiste Jonglez 10 years ago
parent
commit
f801f839a3
3 changed files with 15 additions and 13 deletions
  1. 4 9
      coin/billing/models.py
  2. 1 4
      coin/members/models.py
  3. 10 0
      coin/utils.py

+ 4 - 9
coin/billing/models.py

@@ -12,7 +12,7 @@ from django.dispatch import receiver
 from coin.offers.models import OfferSubscription
 from coin.members.models import Member
 from coin.html2pdf import render_as_pdf
-from coin.utils import private_files_storage
+from coin.utils import private_files_storage, start_of_month, end_of_month
 
 
 def next_invoice_number():
@@ -44,9 +44,7 @@ class Invoice(models.Model):
                               verbose_name='Statut')
     date = models.DateField(default=datetime.date.today, null=True)
     date_due = models.DateField(
-        default=(datetime.date(datetime.date.today().year,
-                               datetime.date.today().month + 1, 1) -
-                 datetime.timedelta(days=1)),
+        default=end_of_month,
         null=True,
         verbose_name=u'Date d\'échéance de paiement')
     member = models.ForeignKey(Member, null=True, blank=True, default=None,
@@ -128,16 +126,13 @@ class InvoiceDetail(models.Model):
                                           blank=True, default=None,
                                           verbose_name='Abonnement')
     period_from = models.DateField(
-        default=datetime.date(datetime.date.today().year,
-                              datetime.date.today().month, 1),
+        default=start_of_month,
         null=True,
         blank=True,
         verbose_name=u'Début de période',
         help_text=u'Date de début de période sur laquelle est facturé cet item')
     period_to = models.DateField(
-        default=(datetime.date(datetime.date.today().year,
-                               datetime.date.today().month + 1, 1) -
-                 datetime.timedelta(days=1)),
+        default=end_of_month,
         null=True,
         blank=True,
         verbose_name=u'Fin de période',

+ 1 - 4
coin/members/models.py

@@ -245,9 +245,6 @@ class CryptoKey(models.Model):
         verbose_name = 'clé'
 
 
-def in_one_year():
-    return datetime.date.today() + datetime.timedelta(365)
-
 class MembershipFee(models.Model):
     member = models.ForeignKey('Member', related_name='membership_fees',
                                verbose_name=u'Membre')
@@ -262,7 +259,7 @@ class MembershipFee(models.Model):
     end_date = models.DateField(
         null=False,
         blank=False,
-        default=in_one_year,
+        default=utils.in_one_year,
         verbose_name='Date de fin de cotisation')
 
     def __unicode__(self):

+ 10 - 0
coin/utils.py

@@ -4,6 +4,7 @@ import hashlib
 import binascii
 import base64
 import html2text
+from datetime import date, timedelta
 from django.core.mail import EmailMultiAlternatives
 from django.template import TemplateDoesNotExist
 from django.core.files.storage import FileSystemStorage
@@ -77,6 +78,15 @@ def delete_selected(modeladmin, request, queryset):
 
 delete_selected.short_description = "Supprimer tous les objets sélectionnés."
 
+# Time-related functions
+def in_one_year():
+    return date.today() + timedelta(365)
+
+def start_of_month():
+    return date(date.today().year, date.today().month, 1)
+
+def end_of_month():
+    return date(date.today().year, date.today().month + 1, 1) - timedelta(days=1)
 
 if __name__ == '__main__':
     print(ldap_hash('coin'))