Skip to content

Commit

Permalink
feat: associate an opportunity id with a subscription license
Browse files Browse the repository at this point in the history
  • Loading branch information
muhammad-ammar committed Sep 18, 2023
1 parent 65f6466 commit 29cd7c8
Show file tree
Hide file tree
Showing 3 changed files with 134 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
# Generated by Django 3.2.21 on 2023-09-15 07:22

import django.core.validators
from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('subscriptions', '0056_auto_20230530_1901'),
]

operations = [
migrations.AlterField(
model_name='historicalsubscriptionplan',
name='salesforce_opportunity_id',
field=models.CharField(blank=True, help_text='Deprecated -- 18 character value, derived from Salesforce Opportunity record.', max_length=18, null=True, validators=[django.core.validators.MinLengthValidator(18)]),
),
migrations.AlterField(
model_name='historicalsubscriptionplan',
name='salesforce_opportunity_line_item',
field=models.CharField(blank=True, help_text='18 character value -- Locate the appropriate Salesforce Opportunity Line Item record and copy it here.', max_length=18, null=True, validators=[django.core.validators.MinLengthValidator(18)]),
),
migrations.AlterField(
model_name='historicalsubscriptionplanrenewal',
name='salesforce_opportunity_id',
field=models.CharField(help_text='Locate the appropriate Salesforce Opportunity record and copy the Opportunity ID field (18 characters). Note that this is not the same Salesforce Opportunity ID associated with the linked subscription.', max_length=18, validators=[django.core.validators.MinLengthValidator(18)], verbose_name='Salesforce Opportunity Line Item'),
),
migrations.AlterField(
model_name='subscriptionplan',
name='salesforce_opportunity_id',
field=models.CharField(blank=True, help_text='Deprecated -- 18 character value, derived from Salesforce Opportunity record.', max_length=18, null=True, validators=[django.core.validators.MinLengthValidator(18)]),
),
migrations.AlterField(
model_name='subscriptionplan',
name='salesforce_opportunity_line_item',
field=models.CharField(blank=True, help_text='18 character value -- Locate the appropriate Salesforce Opportunity Line Item record and copy it here.', max_length=18, null=True, validators=[django.core.validators.MinLengthValidator(18)]),
),
migrations.AlterField(
model_name='subscriptionplanrenewal',
name='salesforce_opportunity_id',
field=models.CharField(help_text='Locate the appropriate Salesforce Opportunity record and copy the Opportunity ID field (18 characters). Note that this is not the same Salesforce Opportunity ID associated with the linked subscription.', max_length=18, validators=[django.core.validators.MinLengthValidator(18)], verbose_name='Salesforce Opportunity Line Item'),
),
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
# Generated by Django 3.2.21 on 2023-09-18 04:32

import django.core.validators
from django.db import migrations, models
import django.db.models.deletion
import django.utils.timezone
import model_utils.fields


class Migration(migrations.Migration):

dependencies = [
('subscriptions', '0057_auto_20230915_0722'),
]

operations = [
migrations.CreateModel(
name='SubscriptionLicenseSourceType',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')),
('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')),
('name', models.CharField(max_length=64)),
('slug', models.SlugField(max_length=30, unique=True)),
],
options={
'abstract': False,
},
),
migrations.CreateModel(
name='SubscriptionLicenseSource',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('created', model_utils.fields.AutoCreatedField(default=django.utils.timezone.now, editable=False, verbose_name='created')),
('modified', model_utils.fields.AutoLastModifiedField(default=django.utils.timezone.now, editable=False, verbose_name='modified')),
('source_id', models.CharField(help_text='18 character value -- Salesforce Opportunity ID', max_length=18, validators=[django.core.validators.MinLengthValidator(18)])),
('license', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='source', to='subscriptions.license')),
('source_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='subscriptions.subscriptionlicensesourcetype')),
],
options={
'abstract': False,
},
),
]
46 changes: 46 additions & 0 deletions license_manager/apps/subscriptions/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -1291,6 +1291,52 @@ def _clean_up_duplicate_licenses(cls, duplicate_licenses):
return sorted_licenses[0]


class SubscriptionLicenseSourceType(TimeStampedModel):
"""
Subscription License Source Type
.. no_pii:
"""

AMT = 'AMT'

name = models.CharField(max_length=64)
slug = models.SlugField(max_length=30, unique=True)

@classmethod
def get_source_type(cls, source_slug):
"""
Retrieve the source type based on the slug.
"""
try:
return cls.objects.get(slug=source_slug)
except SubscriptionLicenseSourceType.DoesNotExist:
return None

Check warning on line 1314 in license_manager/apps/subscriptions/models.py

View check run for this annotation

Codecov / codecov/patch

license_manager/apps/subscriptions/models.py#L1311-L1314

Added lines #L1311 - L1314 were not covered by tests

def __str__(self):
"""
String representation of the source.
"""
return "SubscriptionLicenseSourceType: {name}, Slug: {slug}".format(name=self.name, slug=self.slug)

Check warning on line 1320 in license_manager/apps/subscriptions/models.py

View check run for this annotation

Codecov / codecov/patch

license_manager/apps/subscriptions/models.py#L1320

Added line #L1320 was not covered by tests


class SubscriptionLicenseSource(TimeStampedModel):

license = models.OneToOneField(
License,
related_name='source',
on_delete=models.CASCADE,
)
source_id = models.CharField(
max_length=SALESFORCE_ID_LENGTH,
validators=[MinLengthValidator(SALESFORCE_ID_LENGTH)],
help_text=_(
"18 character value -- Salesforce Opportunity ID"
)
)
source_type = models.ForeignKey(SubscriptionLicenseSourceType, on_delete=models.CASCADE)


class SubscriptionsFeatureRole(UserRole):
"""
User role definitions specific to subscriptions.
Expand Down

0 comments on commit 29cd7c8

Please sign in to comment.