remove uuid primary key

Signed-off-by: Nico Schottelius <nico@nico-notebook.schottelius.org>
This commit is contained in:
Nico Schottelius 2020-06-21 14:35:12 +02:00
commit 1e68539ed8
53 changed files with 186 additions and 1249 deletions

File diff suppressed because one or more lines are too long

View file

@ -1,27 +0,0 @@
# Generated by Django 3.0.3 on 2020-03-05 15:24
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('uncloud_pay', '0001_initial'),
]
operations = [
migrations.RenameField(
model_name='paymentmethod',
old_name='stripe_card_id',
new_name='stripe_payment_method_id',
),
migrations.AddField(
model_name='paymentmethod',
name='stripe_setup_intent_id',
field=models.CharField(blank=True, max_length=32, null=True),
),
migrations.AlterUniqueTogether(
name='paymentmethod',
unique_together=set(),
),
]

View file

@ -1,18 +0,0 @@
# Generated by Django 3.0.3 on 2020-03-05 13:54
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('uncloud_pay', '0002_auto_20200305_1524'),
]
operations = [
migrations.AlterField(
model_name='paymentmethod',
name='primary',
field=models.BooleanField(default=False, editable=False),
),
]

View file

@ -1,23 +0,0 @@
# Generated by Django 3.0.5 on 2020-04-09 12:25
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('uncloud_pay', '0003_auto_20200305_1354'),
]
operations = [
migrations.AlterField(
model_name='order',
name='recurring_period',
field=models.CharField(choices=[('ONCE', 'Onetime'), ('YEAR', 'Per Year'), ('MONTH', 'Per Month'), ('MINUTE', 'Per Minute'), ('WEEK', 'Per Week'), ('DAY', 'Per Day'), ('HOUR', 'Per Hour'), ('SECOND', 'Per Second')], default='MONTH', max_length=32),
),
migrations.AlterField(
model_name='order',
name='starting_date',
field=models.DateTimeField(),
),
]

View file

@ -1,18 +0,0 @@
# Generated by Django 3.0.5 on 2020-04-13 09:24
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('uncloud_pay', '0004_auto_20200409_1225'),
]
operations = [
migrations.AlterField(
model_name='order',
name='recurring_period',
field=models.CharField(choices=[('ONCE', 'Onetime'), ('YEAR', 'Per Year'), ('MONTH', 'Per Month'), ('WEEK', 'Per Week'), ('DAY', 'Per Day'), ('HOUR', 'Per Hour'), ('MINUTE', 'Per Minute'), ('SECOND', 'Per Second')], default='MONTH', max_length=32),
),
]

View file

@ -1,31 +0,0 @@
# Generated by Django 3.0.5 on 2020-04-15 10:03
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('uncloud_pay', '0005_auto_20200413_0924'),
]
operations = [
migrations.CreateModel(
name='VATRate',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('start_date', models.DateField(blank=True, null=True)),
('stop_date', models.DateField(blank=True, null=True)),
('territory_codes', models.TextField(blank=True, default='')),
('currency_code', models.CharField(max_length=10)),
('rate', models.FloatField()),
('rate_type', models.TextField(blank=True, default='')),
('description', models.TextField(blank=True, default='')),
],
),
migrations.AlterField(
model_name='order',
name='recurring_period',
field=models.CharField(choices=[('ONCE', 'Onetime'), ('YEAR', 'Per Year'), ('MONTH', 'Per Month'), ('WEEK', 'Per Week'), ('DAY', 'Per Day'), ('HOUR', 'Per Hour'), ('MINUTE', 'Per Minute'), ('SECOND', 'Per Second')], default='MONTH', max_length=32),
),
]

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -1,19 +0,0 @@
# Generated by Django 3.0.5 on 2020-05-02 19:21
from django.db import migrations, models
import django.utils.timezone
class Migration(migrations.Migration):
dependencies = [
('uncloud_pay', '0007_auto_20200418_0737'),
]
operations = [
migrations.AlterField(
model_name='order',
name='starting_date',
field=models.DateTimeField(default=django.utils.timezone.now),
),
]

View file

@ -1,47 +0,0 @@
# Generated by Django 3.0.5 on 2020-05-02 20:47
from django.conf import settings
import django.core.validators
from django.db import migrations, models
import django.db.models.deletion
import django.utils.timezone
import uuid
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('uncloud_pay', '0008_auto_20200502_1921'),
]
operations = [
migrations.AddField(
model_name='order',
name='one_time_price',
field=models.DecimalField(decimal_places=2, default=0.0, max_digits=10, validators=[django.core.validators.MinValueValidator(0)]),
),
migrations.AddField(
model_name='order',
name='recurring_price',
field=models.DecimalField(decimal_places=2, default=0.0, max_digits=10, validators=[django.core.validators.MinValueValidator(0)]),
),
migrations.AddField(
model_name='order',
name='replaced_by',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='uncloud_pay.Order'),
),
migrations.CreateModel(
name='OrderTimothee',
fields=[
('uuid', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)),
('creation_date', models.DateTimeField(auto_now_add=True)),
('starting_date', models.DateTimeField(default=django.utils.timezone.now)),
('ending_date', models.DateTimeField(blank=True, null=True)),
('recurring_period', models.CharField(choices=[('ONCE', 'Onetime'), ('YEAR', 'Per Year'), ('MONTH', 'Per Month'), ('WEEK', 'Per Week'), ('DAY', 'Per Day'), ('HOUR', 'Per Hour'), ('MINUTE', 'Per Minute'), ('SECOND', 'Per Second')], default='MONTH', max_length=32)),
('bill', models.ManyToManyField(blank=True, editable=False, to='uncloud_pay.Bill')),
('billing_address', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='uncloud_pay.BillingAddress')),
('owner', models.ForeignKey(editable=False, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
],
),
]

View file

@ -1,19 +0,0 @@
# Generated by Django 3.0.6 on 2020-05-07 10:07
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('uncloud_pay', '0009_auto_20200502_2047'),
]
operations = [
migrations.AddField(
model_name='order',
name='description',
field=models.TextField(default=''),
preserve_default=False,
),
]

View file

@ -1,19 +0,0 @@
# Generated by Django 3.0.6 on 2020-05-07 13:07
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('uncloud_pay', '0010_order_description'),
]
operations = [
migrations.AddField(
model_name='billingaddress',
name='organization',
field=models.CharField(default='', max_length=100),
preserve_default=False,
),
]

View file

@ -1,29 +0,0 @@
# Generated by Django 3.0.6 on 2020-05-08 07:06
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
import uuid
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('uncloud_pay', '0011_billingaddress_organization'),
]
operations = [
migrations.CreateModel(
name='BillNico',
fields=[
('uuid', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)),
('creation_date', models.DateTimeField(auto_now_add=True)),
('starting_date', models.DateTimeField()),
('ending_date', models.DateTimeField()),
('due_date', models.DateField()),
('valid', models.BooleanField(default=True)),
('owner', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
],
),
]

View file

@ -1,24 +0,0 @@
# Generated by Django 3.0.6 on 2020-05-08 14:46
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('uncloud_pay', '0012_billnico'),
]
operations = [
migrations.AddField(
model_name='order',
name='depends_on',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='parent_of', to='uncloud_pay.Order'),
),
migrations.AlterField(
model_name='order',
name='replaced_by',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='supersede', to='uncloud_pay.Order'),
),
]

View file

@ -1,25 +0,0 @@
# Generated by Django 3.0.6 on 2020-05-10 13:53
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
import uuid
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('uncloud_pay', '0013_auto_20200508_1446'),
]
operations = [
migrations.CreateModel(
name='PaymentSettings',
fields=[
('uuid', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)),
('owner', models.OneToOneField(editable=False, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
('primary_billing_address', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='uncloud_pay.BillingAddress')),
],
),
]

View file

@ -1,26 +0,0 @@
# Generated by Django 3.0.6 on 2020-05-23 21:32
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('uncloud_pay', '0014_paymentsettings'),
]
operations = [
migrations.AlterField(
model_name='order',
name='recurring_period',
field=models.CharField(choices=[(31536000, 'Per 365 days'), (2592000, 'Per 30 days'), (604800, 'Per Week'), (86400, 'Per Day'), (3600, 'Per Hour'), (60, 'Per Minute'), (1, 'Per Second'), (0, 'Onetime')], default=2592000, max_length=32),
),
migrations.AlterField(
model_name='ordertimothee',
name='recurring_period',
field=models.CharField(choices=[(31536000, 'Per 365 days'), (2592000, 'Per 30 days'), (604800, 'Per Week'), (86400, 'Per Day'), (3600, 'Per Hour'), (60, 'Per Minute'), (1, 'Per Second'), (0, 'Onetime')], default=2592000, max_length=32),
),
migrations.DeleteModel(
name='PaymentSettings',
),
]

View file

@ -1,23 +0,0 @@
# Generated by Django 3.0.6 on 2020-05-23 21:38
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('uncloud_pay', '0015_auto_20200523_2132'),
]
operations = [
migrations.AlterField(
model_name='order',
name='recurring_period',
field=models.IntegerField(choices=[(31536000, 'Per 365 days'), (2592000, 'Per 30 days'), (604800, 'Per Week'), (86400, 'Per Day'), (3600, 'Per Hour'), (60, 'Per Minute'), (1, 'Per Second'), (0, 'Onetime')], default=2592000),
),
migrations.AlterField(
model_name='ordertimothee',
name='recurring_period',
field=models.IntegerField(choices=[(31536000, 'Per 365 days'), (2592000, 'Per 30 days'), (604800, 'Per Week'), (86400, 'Per Day'), (3600, 'Per Hour'), (60, 'Per Minute'), (1, 'Per Second'), (0, 'Onetime')], default=2592000),
),
]

View file

@ -1,55 +0,0 @@
# Generated by Django 3.0.6 on 2020-06-21 11:10
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('uncloud_pay', '0016_auto_20200523_2138'),
]
operations = [
migrations.CreateModel(
name='BillRecord',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('usage_count', models.IntegerField(default=1)),
('creation_date', models.DateTimeField(auto_now_add=True)),
('starting_date', models.DateTimeField()),
('ending_date', models.DateTimeField()),
('bill', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='uncloud_pay.Bill')),
],
),
migrations.RemoveField(
model_name='ordertimothee',
name='bill',
),
migrations.RemoveField(
model_name='ordertimothee',
name='billing_address',
),
migrations.RemoveField(
model_name='ordertimothee',
name='owner',
),
migrations.RemoveField(
model_name='order',
name='bill',
),
migrations.RemoveField(
model_name='order',
name='one_time_price',
),
migrations.RemoveField(
model_name='order',
name='recurring_price',
),
migrations.DeleteModel(
name='BillNico',
),
migrations.DeleteModel(
name='OrderTimothee',
),
]

View file

@ -1,25 +0,0 @@
# Generated by Django 3.0.6 on 2020-06-21 11:40
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('uncloud_pay', '0017_auto_20200621_1110'),
]
operations = [
migrations.AddField(
model_name='bill',
name='bill_records',
field=models.ManyToManyField(through='uncloud_pay.BillRecord', to='uncloud_pay.Order'),
),
migrations.AddField(
model_name='billrecord',
name='order',
field=models.ForeignKey(default=0, on_delete=django.db.models.deletion.CASCADE, to='uncloud_pay.Order'),
preserve_default=False,
),
]

View file

@ -1,23 +0,0 @@
# Generated by Django 3.0.6 on 2020-06-21 11:44
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('uncloud_pay', '0018_auto_20200621_1140'),
]
operations = [
migrations.RemoveField(
model_name='bill',
name='uuid',
),
migrations.AddField(
model_name='bill',
name='id',
field=models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'),
preserve_default=False,
),
]

View file

@ -6,7 +6,6 @@ from django.core.validators import MinValueValidator
from django.utils import timezone
from django.core.exceptions import ObjectDoesNotExist, ValidationError
import uuid
import logging
from functools import reduce
import itertools
@ -77,8 +76,6 @@ class StripeCustomer(models.Model):
# Payments and Payment Methods.
class Payment(models.Model):
uuid = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
owner = models.ForeignKey(get_user_model(),
on_delete=models.CASCADE)
@ -115,7 +112,6 @@ class Payment(models.Model):
class PaymentMethod(models.Model):
uuid = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
owner = models.ForeignKey(get_user_model(),
on_delete=models.CASCADE,
editable=False)
@ -198,7 +194,6 @@ class PaymentMethod(models.Model):
# Bills.
class BillingAddress(models.Model):
uuid = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
owner = models.ForeignKey(get_user_model(), on_delete=models.CASCADE)
organization = models.CharField(max_length=100)
@ -208,6 +203,14 @@ class BillingAddress(models.Model):
postal_code = models.CharField(max_length=50)
country = CountryField(blank=True)
vat_number = models.CharField(max_length=100, default="", blank=True)
active = models.BooleanField(default=False)
class Meta:
constraints = [
models.UniqueConstraint(fields=['owner'],
condition=Q(primary=True),
name='one_active_billing_address_per_user')
]
@staticmethod
def get_addresses_for(user):
@ -262,13 +265,13 @@ class Order(models.Model):
bills. Do **NOT** mutate then!
"""
uuid = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
owner = models.ForeignKey(get_user_model(),
on_delete=models.CASCADE,
editable=False)
billing_address = models.ForeignKey(BillingAddress, on_delete=models.CASCADE)
editable=True)
billing_address = models.ForeignKey(BillingAddress,
on_delete=models.CASCADE)
description = models.TextField()
replaced_by = models.ForeignKey('self', on_delete=models.CASCADE, blank=True, null=True)
# TODO: enforce ending_date - starting_date to be larger than recurring_period.
creation_date = models.DateTimeField(auto_now_add=True)
@ -276,20 +279,6 @@ class Order(models.Model):
ending_date = models.DateTimeField(blank=True,
null=True)
# bill_records = models.ManyToManyField(BillRecord,
# editable=False,
# blank=True)
@property
def count_billed(self):
"""
How many times this order was billed so far.
This logic is mainly thought to be for recurring bills, but also works for one time bills
"""
return sum([ br.usage_count for br in self.bill_records.all() ])
recurring_period = models.IntegerField(choices = RecurringPeriod.choices,
default = RecurringPeriod.PER_30D)
@ -315,6 +304,16 @@ class Order(models.Model):
blank=True,
null=True)
@property
def count_billed(self):
"""
How many times this order was billed so far.
This logic is mainly thought to be for recurring bills, but also works for one time bills
"""
return sum([ br.usage_count for br in self.bill_records.all() ])
def active_before(self, ending_date):
# Was this order started before the specified ending date?
if self.starting_date <= ending_date:
@ -366,13 +365,6 @@ class Order(models.Model):
owner=product.owner,
**kwargs)
def __str__(self):
return "Order {} created at {}, {}->{}, recurring period {}. One time price {}, recurring price {}".format(
self.uuid, self.creation_date,
self.starting_date, self.ending_date,
self.recurring_period,
self.one_time_price,
self.recurring_price)
@property
def records(self):
@ -398,8 +390,8 @@ class Order(models.Model):
description=description)
def __str__(self):
return "Order {} created at {}, {}->{}, recurring period {}. Price one time {}, recurring {}".format(
self.uuid, self.creation_date,
return "{} created at {}, {}->{}, recurring period {}. One time price {}, recurring price {}".format(
self.id, self.creation_date,
self.starting_date, self.ending_date,
self.recurring_period,
self.one_time_price,
@ -411,7 +403,6 @@ class Bill(models.Model):
Bill needs to be unique in the triple (owner, year, month)
"""
# uuid = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
owner = models.ForeignKey(get_user_model(),
on_delete=models.CASCADE)
@ -570,7 +561,6 @@ class OrderRecord(models.Model):
# Abstract (= no database representation) class used as parent for products
# (e.g. uncloud_vm.models.VMProduct).
class Product(UncloudModel):
uuid = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
owner = models.ForeignKey(get_user_model(),
on_delete=models.CASCADE,
editable=False)