77 lines
1.8 KiB
Python
77 lines
1.8 KiB
Python
from django.db import models
|
|
from django.contrib.postgres.fields import JSONField
|
|
from logtracker.journal.models import Entry
|
|
import json
|
|
|
|
TYPES = [('<=', 'Arrival'),
|
|
('=>', 'Delivery'),
|
|
('==', 'Defered'),
|
|
('**', 'Failed'),
|
|
('->', 'Additional'),
|
|
('*>', 'Suppressed'),
|
|
('Completed', 'Completed'),
|
|
('Frozen', 'Frozen'),
|
|
('SMTP error', 'SMTP error'),
|
|
]
|
|
|
|
|
|
class Property(models.Model):
|
|
name = models.CharField(max_length=128, unique=True)
|
|
data = JSONField(default=json.loads("{}"))
|
|
|
|
|
|
class Address(models.Model):
|
|
email = models.EmailField(blank=True, null=True)
|
|
|
|
class Meta:
|
|
abstract = True
|
|
ordering = ['email']
|
|
|
|
def email_count(self):
|
|
return self.mail_set.all().count()
|
|
|
|
def pending_count(self):
|
|
return self.mail_set.filter(has_completed=False).count()
|
|
|
|
def error_count(self):
|
|
return self.mail_set.filter(has_error=True).count()
|
|
|
|
def __str__(self):
|
|
return self.email
|
|
|
|
|
|
class Sender(Address):
|
|
pass
|
|
|
|
|
|
class Recipient(Address):
|
|
pass
|
|
|
|
|
|
class Mail(models.Model):
|
|
identifier = models.CharField(max_length=30)
|
|
sender = models.ForeignKey(Sender, null=True)
|
|
recipients = models.ManyToManyField(Recipient)
|
|
has_error = models.BooleanField(default=False)
|
|
has_completed = models.BooleanField(default=False)
|
|
stamp = models.DateTimeField(null=True)
|
|
entries = JSONField(default=json.loads("[]"))
|
|
|
|
def __str__(self):
|
|
return '%s %s' % (self.identifier, self.sender)
|
|
|
|
class Meta:
|
|
indexes = [
|
|
models.Index(fields=['stamp'])
|
|
]
|
|
|
|
@property
|
|
def entries_list(self):
|
|
output = []
|
|
for pk in self.entries:
|
|
try:
|
|
output.append(Entry.objects.get(pk=pk))
|
|
except Entry.DoesNotExist:
|
|
pass
|
|
return output
|