Make recurring_period an Enum, VMProduct a Product, initial wire for

order
This commit is contained in:
fnux 2020-02-27 17:13:56 +01:00
commit b2fe5014d8
6 changed files with 113 additions and 24 deletions

View file

@ -0,0 +1,30 @@
# Generated by Django 3.0.3 on 2020-02-27 15:32
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('uncloud_pay', '0004_auto_20200227_1532'),
('uncloud_vm', '0004_vmsnapshotproduct'),
]
operations = [
migrations.AddField(
model_name='vmproduct',
name='order',
field=models.ForeignKey(editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, to='uncloud_pay.Order'),
),
migrations.AddField(
model_name='vmproduct',
name='status',
field=models.CharField(choices=[('pending', 'Pending'), ('being_created', 'Being created'), ('active', 'Active'), ('deleted', 'Deleted')], default='pending', max_length=256),
),
migrations.AlterField(
model_name='vmsnapshotproduct',
name='order',
field=models.ForeignKey(editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, to='uncloud_pay.Order'),
),
]

View file

@ -2,7 +2,7 @@ from django.db import models
from django.contrib.auth import get_user_model
import uuid
from uncloud_pay.models import Product
from uncloud_pay.models import Product, RecurringPeriod
class VMHost(models.Model):
@ -32,22 +32,25 @@ class VMHost(models.Model):
)
class VMProduct(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)
class VMProduct(Product):
vmhost = models.ForeignKey(VMHost,
on_delete=models.CASCADE,
editable=False,
blank=True,
null=True)
description = "Virtual Machine"
cores = models.IntegerField()
ram_in_gb = models.FloatField()
@property
def recurring_price(self, recurring_period=RecurringPeriod.PER_MONTH):
if recurring_period == RecurringPeriod.PER_MONTH:
# TODO: move magic numbers in variables
return self.cores * 3 + self.ram_in_gb * 2
else:
raise Exception('Invalid recurring period for VM Product pricing.')
class VMWithOSProduct(VMProduct):
pass