diff options
author | Magnus Hagander | 2023-11-14 14:40:23 +0000 |
---|---|---|
committer | Magnus Hagander | 2023-11-14 14:40:23 +0000 |
commit | 1cf692e9e2ee60403261b6c360ec55090fe84dfe (patch) | |
tree | 8e398534aff37c0b5efe3f52f4308aa2aa17f1aa /postgresqleu/digisign | |
parent | 2ab6df0872e54107b1f890d282d66949267595bd (diff) |
Download completed digital contracts and store them in the db
For now, also allow viewing of the contracts from the administrative
interface by organizers, but not yet by the sponsors themselves (no
reason not to, just one step at a time).
Diffstat (limited to 'postgresqleu/digisign')
-rw-r--r-- | postgresqleu/digisign/implementations/signwell.py | 10 | ||||
-rw-r--r-- | postgresqleu/digisign/migrations/0003_digisigncompleteddocument.py | 23 | ||||
-rw-r--r-- | postgresqleu/digisign/models.py | 11 | ||||
-rw-r--r-- | postgresqleu/digisign/util.py | 5 |
4 files changed, 48 insertions, 1 deletions
diff --git a/postgresqleu/digisign/implementations/signwell.py b/postgresqleu/digisign/implementations/signwell.py index 6b1df6c3..fd82a4b4 100644 --- a/postgresqleu/digisign/implementations/signwell.py +++ b/postgresqleu/digisign/implementations/signwell.py @@ -7,7 +7,7 @@ from django.conf import settings from postgresqleu.util.widgets import StaticTextWidget from postgresqleu.digisign.backendforms import BackendProviderForm -from postgresqleu.digisign.models import DigisignDocument, DigisignLog +from postgresqleu.digisign.models import DigisignDocument, DigisignCompletedDocument, DigisignLog from postgresqleu.digisign.util import digisign_handlers import base64 @@ -281,6 +281,14 @@ class Signwell(BaseProvider): }, timeout=10) time.sleep(10) + def fetch_completed(self, doc): + print("Fetching completed document {}".format(doc.documentid)) + r = requests.get('https://www.signwell.com/api/v1/documents/{}/completed_pdf/'.format(doc.documentid), headers={ + 'X-Api-Key': self.provider.config.get('apikey'), + }, timeout=60) + r.raise_for_status() + DigisignCompletedDocument(document=doc, completedpdf=r.content).save() + def process_webhook(self, request): if 'application/json' not in request.META['CONTENT_TYPE']: return HttpResponse("Invalid content type", status=400) diff --git a/postgresqleu/digisign/migrations/0003_digisigncompleteddocument.py b/postgresqleu/digisign/migrations/0003_digisigncompleteddocument.py new file mode 100644 index 00000000..4c8d531a --- /dev/null +++ b/postgresqleu/digisign/migrations/0003_digisigncompleteddocument.py @@ -0,0 +1,23 @@ +# Generated by Django 3.2.14 on 2023-11-14 13:54 + +from django.db import migrations, models +import django.db.models.deletion +import postgresqleu.util.fields + + +class Migration(migrations.Migration): + + dependencies = [ + ('digisign', '0002_contract_dates'), + ] + + operations = [ + migrations.CreateModel( + name='DigisignCompletedDocument', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('completedpdf', postgresqleu.util.fields.PdfBinaryField(blank=True, max_length=1000000, verbose_name='Document PDF')), + ('document', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to='digisign.digisigndocument')), + ], + ), + ] diff --git a/postgresqleu/digisign/models.py b/postgresqleu/digisign/models.py index 6d14f2dd..fd0cc0ba 100644 --- a/postgresqleu/digisign/models.py +++ b/postgresqleu/digisign/models.py @@ -2,6 +2,8 @@ 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) @@ -40,6 +42,15 @@ class DigisignDocument(models.Model): ('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) diff --git a/postgresqleu/digisign/util.py b/postgresqleu/digisign/util.py index f8809737..81e38e09 100644 --- a/postgresqleu/digisign/util.py +++ b/postgresqleu/digisign/util.py @@ -1,5 +1,9 @@ from django.utils import timezone +from datetime import timedelta + +from postgresqleu.scheduler.util import trigger_immediate_job_run + digisign_providers = { 'postgresqleu.digisign.implementations.signwell.Signwell': (), @@ -24,6 +28,7 @@ class DigisignHandlerBase: def completed(self): self.doc.completed = timezone.now() self.doc.save(update_fields=['completed', ]) + trigger_immediate_job_run('digisign_fetch_completed', timedelta(minutes=1)) def expired(self): pass |