e64e4238e352ac208d4775491a8b017ff81ee777
[cas.git] / src / emails / models.py
1 from django.db import models
2 from django.utils.translation import ugettext_lazy as _
3 from . import BASE_DOMAINS
4
5
6
7 class Alias(models.Model):
8     source = models.EmailField(_('source'), db_index=True)
9     destination = models.EmailField(_('destination'))
10     mode = models.CharField(
11         _('mode'), max_length=255, default='', blank=True, choices=[
12             ('', _('Forward everything')),
13             ('@FORWARD', _('Do not forward e-mail marked as spam.'))
14         ])
15
16     class Meta:
17         verbose_name = _('alias')
18         verbose_name_plural = _('aliases')
19         ordering = ('source', 'destination')
20
21     def __str__(self):
22         return '{} -> {}'.format(self.source, self.destination)
23
24     @classmethod
25     def get_from_user(cls, user):
26         lookups = ["{}@{}".format(user.username, domain) for domain in BASE_DOMAINS]
27         return cls.objects.filter(source__in=lookups)
28
29     @classmethod
30     def get_to_user(cls, user):
31         lookups = ["{}@{}".format(user.username, domain) for domain in BASE_DOMAINS]
32         return cls.objects.filter(destination__in=lookups)
33
34
35 class AliasUsage(models.Model):
36     alias = models.ForeignKey(Alias, models.CASCADE, _('alias'))
37     date = models.DateField(_('date'), auto_now_add=True)
38     count = models.PositiveSmallIntegerField(_('count'))
39
40     class Meta:
41         unique_together = (('alias', 'date'),)
42         verbose_name = _('alias usage')
43         verbose_name_plural = _('alias usage')