From 3187e373a3ebb38a4a7ee2b20e4551ee6fb06ed0 Mon Sep 17 00:00:00 2001
From: Tom Teichler <tom.teichler@teckids.org>
Date: Sun, 6 Mar 2022 22:34:00 +0100
Subject: [PATCH] Fixup models add create migration

---
 aleksis/apps/tezor/migrations/0001_initial.py | 94 +++++++++++++++++++
 aleksis/apps/tezor/models/base.py             |  2 +-
 aleksis/apps/tezor/models/invoice.py          | 14 +--
 3 files changed, 103 insertions(+), 7 deletions(-)
 create mode 100644 aleksis/apps/tezor/migrations/0001_initial.py

diff --git a/aleksis/apps/tezor/migrations/0001_initial.py b/aleksis/apps/tezor/migrations/0001_initial.py
new file mode 100644
index 0000000..1671617
--- /dev/null
+++ b/aleksis/apps/tezor/migrations/0001_initial.py
@@ -0,0 +1,94 @@
+# Generated by Django 3.2.12 on 2022-03-06 21:33
+
+import aleksis.core.mixins
+import django.contrib.sites.managers
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+    initial = True
+
+    dependencies = [
+        ('sites', '0002_alter_domain_unique'),
+        ('contenttypes', '0002_remove_content_type_name'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='Client',
+            fields=[
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('extended_data', models.JSONField(default=dict, editable=False)),
+                ('name', models.CharField(max_length=255, verbose_name='Name')),
+                ('site', models.ForeignKey(default=1, editable=False, on_delete=django.db.models.deletion.CASCADE, to='sites.site')),
+            ],
+            managers=[
+                ('objects', django.contrib.sites.managers.CurrentSiteManager()),
+            ],
+        ),
+        migrations.CreateModel(
+            name='InvoiceGroup',
+            fields=[
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('extended_data', models.JSONField(default=dict, editable=False)),
+                ('name', models.CharField(max_length=255, verbose_name='Invoice group name')),
+                ('template_name', models.CharField(blank=True, max_length=255, verbose_name='Template to render invoices with as PDF')),
+                ('client', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='invoice_groups', to='tezor.client', verbose_name='Linked client')),
+                ('site', models.ForeignKey(default=1, editable=False, on_delete=django.db.models.deletion.CASCADE, to='sites.site')),
+            ],
+            managers=[
+                ('objects', django.contrib.sites.managers.CurrentSiteManager()),
+            ],
+        ),
+        migrations.CreateModel(
+            name='Invoice',
+            fields=[
+                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('variant', models.CharField(max_length=255)),
+                ('status', models.CharField(choices=[('waiting', 'Waiting for confirmation'), ('preauth', 'Pre-authorized'), ('confirmed', 'Confirmed'), ('rejected', 'Rejected'), ('refunded', 'Refunded'), ('error', 'Error'), ('input', 'Input')], default='waiting', max_length=10)),
+                ('fraud_status', models.CharField(choices=[('unknown', 'Unknown'), ('accept', 'Passed'), ('reject', 'Rejected'), ('review', 'Review')], default='unknown', max_length=10, verbose_name='fraud check')),
+                ('fraud_message', models.TextField(blank=True, default='')),
+                ('created', models.DateTimeField(auto_now_add=True)),
+                ('modified', models.DateTimeField(auto_now=True)),
+                ('transaction_id', models.CharField(blank=True, max_length=255)),
+                ('currency', models.CharField(max_length=10)),
+                ('total', models.DecimalField(decimal_places=2, default='0.0', max_digits=9)),
+                ('delivery', models.DecimalField(decimal_places=2, default='0.0', max_digits=9)),
+                ('tax', models.DecimalField(decimal_places=2, default='0.0', max_digits=9)),
+                ('description', models.TextField(blank=True, default='')),
+                ('billing_first_name', models.CharField(blank=True, max_length=256)),
+                ('billing_last_name', models.CharField(blank=True, max_length=256)),
+                ('billing_address_1', models.CharField(blank=True, max_length=256)),
+                ('billing_address_2', models.CharField(blank=True, max_length=256)),
+                ('billing_city', models.CharField(blank=True, max_length=256)),
+                ('billing_postcode', models.CharField(blank=True, max_length=256)),
+                ('billing_country_code', models.CharField(blank=True, max_length=2)),
+                ('billing_country_area', models.CharField(blank=True, max_length=256)),
+                ('billing_email', models.EmailField(blank=True, max_length=254)),
+                ('customer_ip_address', models.GenericIPAddressField(blank=True, null=True)),
+                ('extra_data', models.TextField(blank=True, default='')),
+                ('message', models.TextField(blank=True, default='')),
+                ('token', models.CharField(blank=True, default='', max_length=36)),
+                ('captured_amount', models.DecimalField(decimal_places=2, default='0.0', max_digits=9)),
+                ('number', models.CharField(max_length=255, verbose_name='Invoice number')),
+                ('for_object_id', models.PositiveIntegerField()),
+                ('for_content_type', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='contenttypes.contenttype')),
+                ('group', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='invoices', to='tezor.invoicegroup', verbose_name='Invoice group')),
+            ],
+            bases=(models.Model, aleksis.core.mixins.PureDjangoModel),
+        ),
+        migrations.AddConstraint(
+            model_name='invoicegroup',
+            constraint=models.UniqueConstraint(fields=('client', 'name'), name='group_uniq_per_client'),
+        ),
+        migrations.AddConstraint(
+            model_name='invoice',
+            constraint=models.UniqueConstraint(fields=('transaction_id', 'group'), name='number_uniq_per_group'),
+        ),
+        migrations.AddConstraint(
+            model_name='client',
+            constraint=models.UniqueConstraint(fields=('name', 'site'), name='uniq_client_per_site'),
+        ),
+    ]
diff --git a/aleksis/apps/tezor/models/base.py b/aleksis/apps/tezor/models/base.py
index e8feec9..7c18153 100644
--- a/aleksis/apps/tezor/models/base.py
+++ b/aleksis/apps/tezor/models/base.py
@@ -5,7 +5,7 @@ from aleksis.core.mixins import ExtensibleModel
 
 
 class Client(ExtensibleModel):
-    name = models.CharField(verbose_name=_("Name"))
+    name = models.CharField(verbose_name=_("Name"), max_length=255)
 
     class Meta:
         constraints = [
diff --git a/aleksis/apps/tezor/models/invoice.py b/aleksis/apps/tezor/models/invoice.py
index c291a1b..356aa4b 100644
--- a/aleksis/apps/tezor/models/invoice.py
+++ b/aleksis/apps/tezor/models/invoice.py
@@ -9,16 +9,16 @@ from payments.models import BasePayment
 
 from aleksis.core.mixins import ExtensibleModel, PureDjangoModel
 
-from .base import Client, Subject
+from .base import Client
 
 
 class InvoiceGroup(ExtensibleModel):
     name = models.CharField(verbose_name=_("Invoice group name"), max_length=255)
     client = models.ForeignKey(
-        Client, verbose_name=_("Linked client"), related_name="invoice_groups"
+        Client, verbose_name=_("Linked client"), related_name="invoice_groups", on_delete=models.SET_NULL, null=True
     )
 
-    template_name = models.CharField(verbose_name=_("Template to render invoices with as PDF"), blank=True)
+    template_name = models.CharField(verbose_name=_("Template to render invoices with as PDF"), blank=True, max_length=255)
 
     class Meta:
         constraints = [
@@ -28,12 +28,14 @@ class InvoiceGroup(ExtensibleModel):
 
 class Invoice(BasePayment, PureDjangoModel):
     group = models.ForeignKey(
-        InvoiceGroup, verbose_name=_("Invoice group"), related_name="invoices"
+        InvoiceGroup, verbose_name=_("Invoice group"), related_name="invoices", on_delete=models.SET_NULL, null=True
     )
 
-    for_content_type = models.ForeignKey(ContetType, on_delete=models.SET_NULL)
+    number = models.CharField(verbose_name=_("Invoice number"), max_length=255)
+
+    for_content_type = models.ForeignKey(ContentType, on_delete=models.SET_NULL, null=True)
     for_object_id = models.PositiveIntegerField()
-    for_object = GenericForeignKey("content_type", "object_id")
+    for_object = GenericForeignKey("for_content_type", "for_object_id")
 
     def get_purchased_items(self):
         return self.for_object.get_purchased_items()
-- 
GitLab