1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
from django.db import models
import json
from postgresqleu.util.fields import PdfBinaryField
class DigisignProvider(models.Model):
name = models.CharField(max_length=100, null=False, blank=False, unique=True)
displayname = models.CharField(max_length=100, null=False, blank=False)
classname = models.CharField(max_length=200, null=False, blank=False, verbose_name="Implementation class")
active = models.BooleanField(null=False, blank=False, default=False)
config = models.JSONField(blank=False, null=False, default=dict)
def __str__(self):
return self.name
class Meta:
ordering = ('name', )
def get_implementation(self):
pieces = self.classname.split('.')
modname = '.'.join(pieces[:-1])
classname = pieces[-1]
mod = __import__(modname, fromlist=[classname, ])
return getattr(mod, classname)(self.id, self)
@property
def implementation(self):
return self.get_implementation()
class DigisignDocument(models.Model):
provider = models.ForeignKey(DigisignProvider, null=False, blank=False, on_delete=models.CASCADE)
documentid = models.CharField(max_length=100, null=False, blank=True)
handler = models.CharField(max_length=32, null=False, blank=True)
firstsigned = models.DateTimeField(null=True, blank=True)
completed = models.DateTimeField(null=True, blank=True)
class Meta:
unique_together = (
('documentid', 'provider'),
)
@property
def has_completed_pdf(self):
return self.digisigncompleteddocument is not None
class DigisignCompletedDocument(models.Model):
document = models.OneToOneField(DigisignDocument, null=False, blank=False, on_delete=models.CASCADE)
completedpdf = PdfBinaryField(null=False, blank=True, max_length=1000000, verbose_name='Document PDF')
class DigisignLog(models.Model):
provider = models.ForeignKey(DigisignProvider, null=False, blank=False, on_delete=models.CASCADE)
document = models.ForeignKey(DigisignDocument, null=True, blank=True, on_delete=models.CASCADE)
time = models.DateTimeField(auto_now_add=True, db_index=True)
event = models.CharField(max_length=200, null=False, blank=False)
text = models.CharField(max_length=1000, null=False, blank=False)
fulldata = models.JSONField(null=False, blank=False, default=dict)
class Meta:
ordering = ('time', )
indexes = [
models.Index(fields=('document', '-time'))
]
@property
def fulldata_pretty(self):
return json.dumps(self.fulldata, indent=2)
|