Added Shop app with pricing for amiibo
This commit is contained in:
parent
122de410b3
commit
8af1c02015
|
@ -0,0 +1,7 @@
|
|||
# coding: utf-8
|
||||
|
||||
# py3
|
||||
from __future__ import unicode_literals
|
||||
|
||||
|
||||
default_app_config = 'amiibofindr.apps.amiibo.apps.AmiiboAppConfig'
|
|
@ -10,7 +10,7 @@ import reversion
|
|||
|
||||
|
||||
# amiibo
|
||||
from .models import Collection, Amiibo
|
||||
from .models import Collection, Amiibo, AmiiboPrice, AmiiboPriceHistory
|
||||
|
||||
|
||||
class ColectionResource(resources.ModelResource):
|
||||
|
@ -49,5 +49,14 @@ class AmiiboAdmin(ImportExportModelAdmin, reversion.VersionAdmin):
|
|||
box_image.allow_tags = True
|
||||
|
||||
|
||||
class AmiiboPriceAdmin(reversion.VersionAdmin):
|
||||
pass
|
||||
|
||||
class AmiiboPriceHistoryAdmin(admin.ModelAdmin):
|
||||
pass
|
||||
|
||||
|
||||
admin.site.register(Collection, CollectionAdmin)
|
||||
admin.site.register(Amiibo, AmiiboAdmin)
|
||||
admin.site.register(AmiiboPrice, AmiiboPriceAdmin)
|
||||
admin.site.register(AmiiboPriceHistory, AmiiboPriceHistoryAdmin)
|
||||
|
|
|
@ -0,0 +1,31 @@
|
|||
# coding: utf-8
|
||||
|
||||
# py3
|
||||
from __future__ import unicode_literals
|
||||
|
||||
# django
|
||||
from django.apps import AppConfig
|
||||
from django.db.models.signals import pre_save, post_save
|
||||
|
||||
# amiibo
|
||||
from .handlers import (
|
||||
pre_check_price_change, post_check_price_change,
|
||||
save_historical_price
|
||||
)
|
||||
from .signals import amiibo_price_changed
|
||||
|
||||
|
||||
class AmiiboAppConfig(AppConfig):
|
||||
name = 'amiibofindr.apps.amiibo'
|
||||
|
||||
def ready(self):
|
||||
AmiiboPrice = self.get_model('AmiiboPrice')
|
||||
|
||||
# pre_save.connect(pre_check_price_change,
|
||||
# sender=AmiiboPrice)
|
||||
|
||||
post_save.connect(post_check_price_change,
|
||||
sender=AmiiboPrice)
|
||||
|
||||
amiibo_price_changed.connect(save_historical_price,
|
||||
sender=AmiiboPrice)
|
|
@ -0,0 +1,31 @@
|
|||
# coding: utf-8
|
||||
|
||||
# py3
|
||||
from __future__ import unicode_literals
|
||||
|
||||
# python
|
||||
import copy
|
||||
|
||||
# amiibo
|
||||
from .signals import amiibo_price_changed
|
||||
|
||||
|
||||
def save_historical_price(sender, instance, **kwargs):
|
||||
old_price = kwargs.get('old_price')
|
||||
new_price = kwargs.get('new_price')
|
||||
instance.save_history(old_price, new_price)
|
||||
|
||||
|
||||
def pre_check_price_change(sender, instance, **kwargs):
|
||||
instance.old_price = copy.deepcopy(instance.price)
|
||||
|
||||
|
||||
def post_check_price_change(sender, instance, created, **kwargs):
|
||||
if instance.price != instance.old_price:
|
||||
amiibo_price_changed.send(
|
||||
sender=instance.__class__,
|
||||
instance=instance,
|
||||
amiibo=instance.amiibo,
|
||||
old_price=instance.old_price,
|
||||
new_price=instance.price
|
||||
)
|
|
@ -0,0 +1,43 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import models, migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('shop', '0001_initial'),
|
||||
('amiibo', '0005_auto_20150616_2142'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='AmiiboPrice',
|
||||
fields=[
|
||||
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
|
||||
('price', models.DecimalField(max_digits=6, decimal_places=2)),
|
||||
('currency', models.CharField(default=b'EUR', max_length=3)),
|
||||
('date', models.DateTimeField(auto_now_add=True)),
|
||||
('amiibo', models.ForeignKey(to='amiibo.Amiibo')),
|
||||
('shop', models.ForeignKey(to='shop.Shop')),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='AmiiboPriceHistory',
|
||||
fields=[
|
||||
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
|
||||
('price', models.DecimalField(max_digits=6, decimal_places=2)),
|
||||
('currency', models.CharField(default=b'EUR', max_length=3)),
|
||||
('date', models.DateTimeField(auto_now_add=True)),
|
||||
('amiibo', models.ForeignKey(to='amiibo.Amiibo')),
|
||||
('shop', models.ForeignKey(to='shop.Shop')),
|
||||
],
|
||||
options={
|
||||
'abstract': False,
|
||||
},
|
||||
),
|
||||
]
|
|
@ -0,0 +1,20 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import models, migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('amiibo', '0006_amiiboprice_amiibopricehistory'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='amiibopricehistory',
|
||||
name='diff',
|
||||
field=models.DecimalField(default=0, max_digits=6, decimal_places=2),
|
||||
preserve_default=False,
|
||||
),
|
||||
]
|
|
@ -87,3 +87,50 @@ class Amiibo(models.Model):
|
|||
@property
|
||||
def name(self):
|
||||
return self.name_eu
|
||||
|
||||
|
||||
class AmiiboPrice(models.Model):
|
||||
amiibo = models.ForeignKey(Amiibo)
|
||||
shop = models.ForeignKey('shop.Shop')
|
||||
price = models.DecimalField(max_digits=6, decimal_places=2)
|
||||
currency = models.CharField(default='EUR', max_length=3)
|
||||
date = models.DateTimeField(auto_now_add=True)
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(AmiiboPrice, self).__init__(*args, **kwargs)
|
||||
self.old_price = self.price
|
||||
|
||||
def __unicode__(self):
|
||||
return u'{} price for {}: {}{}'.format(
|
||||
self.amiibo.name,
|
||||
self.shop.name,
|
||||
self.price, self.currency
|
||||
)
|
||||
|
||||
def save_history(self, old_price, new_price):
|
||||
history = AmiiboPriceHistory(
|
||||
amiibo=self.amiibo,
|
||||
shop_id=self.shop_id,
|
||||
price=self.price,
|
||||
currency=self.currency,
|
||||
diff=new_price-old_price
|
||||
)
|
||||
return history.save()
|
||||
|
||||
|
||||
class AmiiboPriceHistory(models.Model):
|
||||
amiibo = models.ForeignKey(Amiibo)
|
||||
shop = models.ForeignKey('shop.Shop')
|
||||
price = models.DecimalField(max_digits=6, decimal_places=2)
|
||||
currency = models.CharField(default='EUR', max_length=3)
|
||||
date = models.DateTimeField(auto_now_add=True)
|
||||
diff = models.DecimalField(max_digits=6, decimal_places=2)
|
||||
|
||||
def __unicode__(self):
|
||||
return u'{} price for {}: {}{} [{}{}] ({})'.format(
|
||||
self.amiibo.name,
|
||||
self.shop.name,
|
||||
self.price, self.currency,
|
||||
self.diff, self.currency,
|
||||
self.date
|
||||
)
|
||||
|
|
|
@ -0,0 +1,12 @@
|
|||
# coding: utf-8
|
||||
|
||||
# py3
|
||||
from __future__ import unicode_literals
|
||||
|
||||
# django
|
||||
from django import dispatch
|
||||
|
||||
|
||||
amiibo_price_changed = dispatch.Signal(
|
||||
providing_args=["instance", "amiibo", "old_price", "new_price"]
|
||||
)
|
|
@ -0,0 +1,16 @@
|
|||
# coding: utf-8
|
||||
|
||||
# django
|
||||
from django.contrib import admin
|
||||
|
||||
# third party
|
||||
import reversion
|
||||
|
||||
# shop
|
||||
from amiibofindr.apps.shop.models import Shop
|
||||
|
||||
|
||||
class ShopAdmin(reversion.VersionAdmin):
|
||||
pass
|
||||
|
||||
admin.site.register(Shop, ShopAdmin)
|
|
@ -0,0 +1,23 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import models, migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='Shop',
|
||||
fields=[
|
||||
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
|
||||
('name', models.CharField(max_length=64)),
|
||||
('slug', models.CharField(max_length=64)),
|
||||
('url', models.CharField(max_length=64)),
|
||||
('referer_id', models.CharField(max_length=64, null=True, blank=True)),
|
||||
],
|
||||
),
|
||||
]
|
|
@ -0,0 +1,17 @@
|
|||
# coding: utf-8
|
||||
|
||||
# py3
|
||||
from __future__ import unicode_literals
|
||||
|
||||
# django
|
||||
from django.db import models
|
||||
|
||||
|
||||
class Shop(models.Model):
|
||||
name = models.CharField(max_length=64)
|
||||
slug = models.CharField(max_length=64)
|
||||
url = models.CharField(max_length=64)
|
||||
referer_id = models.CharField(max_length=64, blank=True, null=True)
|
||||
|
||||
def __unicode__(self):
|
||||
return self.name
|
|
@ -0,0 +1,3 @@
|
|||
from django.test import TestCase
|
||||
|
||||
# Create your tests here.
|
|
@ -0,0 +1,3 @@
|
|||
from django.shortcuts import render
|
||||
|
||||
# Create your views here.
|
|
@ -45,6 +45,7 @@ INSTALLED_APPS = (
|
|||
# own apps
|
||||
'amiibofindr.apps.core',
|
||||
'amiibofindr.apps.amiibo',
|
||||
'amiibofindr.apps.shop',
|
||||
'amiibofindr.apps.home',
|
||||
)
|
||||
|
||||
|
|
Loading…
Reference in New Issue