Skip to content

Commit

Permalink
Merge pull request #1323 from glogiotatidis/issue-1310-product-field
Browse files Browse the repository at this point in the history
[Issue #1310] Add ASRSnippet Product field.
  • Loading branch information
glogiotatidis committed Feb 21, 2020
2 parents 59f233b + 8fc6781 commit 59fa454
Show file tree
Hide file tree
Showing 6 changed files with 127 additions and 1 deletion.
1 change: 1 addition & 0 deletions snippets/base/admin/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
admin.site.register(models.ASRSnippet, adminmodels.ASRSnippetAdmin)
admin.site.register(models.Campaign, adminmodels.CampaignAdmin)
admin.site.register(models.Category, adminmodels.CategoryAdmin)
admin.site.register(models.Product, adminmodels.ProductAdmin)
admin.site.register(models.ClientMatchRule, adminmodels.ClientMatchRuleAdmin)
admin.site.register(admin.models.LogEntry, adminmodels.LogEntryAdmin)
admin.site.register(models.SnippetTemplate, adminmodels.SnippetTemplateAdmin)
Expand Down
62 changes: 62 additions & 0 deletions snippets/base/admin/adminmodels.py
Original file line number Diff line number Diff line change
Expand Up @@ -533,6 +533,7 @@ class ASRSnippetAdmin(admin.ModelAdmin):
['jobs__campaign', RelatedDropdownFilter],
TaggitListFilter,
['category', RelatedDropdownFilter],
['product', RelatedDropdownFilter],
filters.ModifiedFilter,
]
search_fields = [
Expand All @@ -541,9 +542,11 @@ class ASRSnippetAdmin(admin.ModelAdmin):
'jobs__campaign__name',
'jobs__targets__name',
'category__name',
'product__name',
]
autocomplete_fields = [
'category',
'product',
]
preserve_filters = True
readonly_fields = [
Expand Down Expand Up @@ -572,6 +575,7 @@ class ASRSnippetAdmin(admin.ModelAdmin):
'tags',
'creator',
'category',
'product',
'preview_url_light_theme',
'preview_url_dark_theme',
)
Expand Down Expand Up @@ -860,6 +864,64 @@ def save_model(self, request, obj, form, change):
super().save_model(request, obj, form, change)


class ProductAdmin(RelatedSnippetsMixin, admin.ModelAdmin):
readonly_fields = [
'created',
'modified',
'creator',
'snippet_list',
'related_total_snippets',
'related_published_jobs',
]
fieldsets = [
('ID', {
'fields': (
'name',
'description',
)
}),
('Snippets', {
'fields': (
'related_published_jobs',
'related_total_snippets',
'snippet_list',
),
}),
('Other Info', {
'fields': ('creator', ('created', 'modified')),
}),
]
search_fields = [
'name',
'description',
]
list_display = [
'name',
'related_published_jobs',
'related_total_snippets',
]
list_filter = [
filters.RelatedPublishedASRSnippetFilter,
]

class Media:
css = {
'all': (
'css/admin/ListSnippetsJobs.css',
)
}
js = (
'js/admin/jquery.are-you-sure.js',
'js/admin/alert-page-leaving.js',
)

def save_model(self, request, obj, form, change):
if not obj.creator_id:
obj.creator = request.user
statsd.incr('save.product')
super().save_model(request, obj, form, change)


class TargetAdmin(RelatedJobsMixin, admin.ModelAdmin):
form = forms.TargetAdminForm
save_on_top = True
Expand Down
36 changes: 36 additions & 0 deletions snippets/base/migrations/0031_auto_20200219_0949.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# Generated by Django 2.2.6 on 2020-02-19 09:49

from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion


class Migration(migrations.Migration):

dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('base', '0030_auto_20200219_0909'),
]

operations = [
migrations.CreateModel(
name='Product',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('created', models.DateTimeField(auto_now_add=True)),
('modified', models.DateTimeField(auto_now=True)),
('name', models.CharField(max_length=255, unique=True)),
('description', models.TextField()),
('creator', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL)),
],
options={
'verbose_name_plural': 'products',
'ordering': ('name',),
},
),
migrations.AddField(
model_name='asrsnippet',
name='product',
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.PROTECT, related_name='snippets', to='base.Product'),
),
]
18 changes: 18 additions & 0 deletions snippets/base/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -570,6 +570,22 @@ def __str__(self):
return '{}: {}'.format(self.name, self.description)


class Product(models.Model):
creator = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.PROTECT)
created = models.DateTimeField(auto_now_add=True)
modified = models.DateTimeField(auto_now=True)

name = models.CharField(max_length=255, unique=True)
description = models.TextField(blank=False)

class Meta:
verbose_name_plural = 'products'
ordering = ('name',)

def __str__(self):
return self.name


class Icon(models.Model):
creator = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.PROTECT)
created = models.DateTimeField(auto_now_add=True)
Expand Down Expand Up @@ -2036,6 +2052,8 @@ class ASRSnippet(models.Model):
name = models.CharField(max_length=255, unique=True)

category = models.ForeignKey(Category, on_delete=models.PROTECT, related_name='snippets')
product = models.ForeignKey(Product, null=True, on_delete=models.PROTECT,
related_name='snippets')

tags = TaggableManager(blank=True)

Expand Down
10 changes: 9 additions & 1 deletion snippets/base/tests/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,14 @@ class Meta:
model = models.Category


class ProductFactory(factory.django.DjangoModelFactory):
name = factory.Sequence(lambda n: 'Campaign {0}'.format(n))
creator = factory.SubFactory(UserFactory)

class Meta:
model = models.Product


class IconFactory(factory.django.DjangoModelFactory):
name = factory.Sequence(lambda n: 'Icon {0}'.format(n))
creator = factory.SubFactory(UserFactory)
Expand All @@ -162,7 +170,7 @@ class ASRSnippetFactory(factory.django.DjangoModelFactory):
creator = factory.SubFactory(UserFactory)
name = factory.Sequence(lambda n: 'ASRSnippet {0}'.format(n))
category = factory.SubFactory(CategoryFactory, creator=factory.SelfAttribute('..creator'))

product = factory.SubFactory(ProductFactory, creator=factory.SelfAttribute('..creator'))
template_relation = factory.RelatedFactory(SimpleTemplateFactory, 'snippet')
status = models.STATUS_CHOICES['Approved']

Expand Down
1 change: 1 addition & 0 deletions snippets/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -330,6 +330,7 @@
'base.Job',
'base.Campaign',
'base.Category',
'base.Product',
'base.Target',
'base.Icon',
'base.Addon',
Expand Down

0 comments on commit 59fa454

Please sign in to comment.