summaryrefslogtreecommitdiff
path: root/postgresqleu/digisign/models.py
blob: fd0cc0ba15d4224ee16c4c3039742afc8bb6b279 (plain)
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)