123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- from django.db import models
- from django.contrib.contenttypes.fields import GenericForeignKey
- from django.contrib.contenttypes.models import ContentType
- from django.core.validators import MaxValueValidator
- class Payment(models.Model):
- TRANSFERT = 0
- WITHDRAWAL = 1
- PAYMENT_CHOICES = (
- (TRANSFERT, 'Virement'),
- (WITHDRAWAL, 'Prélèvement'),
- )
- limit = models.Q(app_label='adhesions', model='Adherent') \
- | models.Q(app_label='services', model='Service')
- reason_type = models.ForeignKey(ContentType, on_delete=models.CASCADE,
- limit_choices_to=limit)
- reason_id = models.PositiveIntegerField()
- reason = GenericForeignKey('reason_type', 'reason_id')
- amount = models.DecimalField(max_digits=9, decimal_places=2, verbose_name='Montant')
- period = models.PositiveIntegerField(validators=[MaxValueValidator(12)],
- verbose_name='Période (mois)')
- payment_method = models.IntegerField(choices=PAYMENT_CHOICES,
- verbose_name='Méthode de paiement')
- date = models.DateField(verbose_name='Date de paiement ou de début de paiement')
- class Meta:
- verbose_name = 'paiement'
- def reason_verbose(self):
- if self.reason_type.app_label == 'adhesions':
- return 'Cotisation de %s' % self.reason
- if self.reason_type.app_label == 'services':
- return 'Service %s' % self.reason
- reason_verbose.short_description = 'Paiement'
- def __str__(self):
- s = str(self.amount) + '€'
- if self.period:
- if self.period == 1:
- s += '/mois'
- elif self.period == 12:
- s += '/an'
- else:
- s += '/%d mois' % self.period
- if self.payment_method == self.TRANSFERT:
- s += ' (virement)'
- elif self.payment_method == self.WITHDRAWAL:
- s += ' (prélèvement)'
- return s
|