Skip to content

Commit

Permalink
refactor models and update dependencies
Browse files Browse the repository at this point in the history
  • Loading branch information
Tim Jacobi committed Dec 17, 2013
1 parent 095de0b commit e8fd142
Show file tree
Hide file tree
Showing 4 changed files with 29 additions and 25 deletions.
6 changes: 3 additions & 3 deletions oscar/apps/dashboard/promotions/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@
from oscar.forms.fields import ExtendedURLField
from oscar.core.loading import get_classes, get_class

HandPickedProductList, RawHTML, SingleProduct, PagePromotion, OrderedProduct = get_classes(
OrderedProductList, HandPickedProductList, RawHTML, SingleProduct, PagePromotion, OrderedProduct = get_classes(
'promotions.models',
['HandPickedProductList', 'RawHTML', 'SingleProduct', 'PagePromotion',
['OrderedProductList', 'HandPickedProductList', 'RawHTML', 'SingleProduct', 'PagePromotion',
'OrderedProduct'])
ProductSelect = get_class('dashboard.catalogue.widgets', 'ProductSelect')

Expand Down Expand Up @@ -51,7 +51,7 @@ class Meta:


OrderedProductFormSet = inlineformset_factory(
HandPickedProductList, OrderedProduct, form=OrderedProductForm, extra=2)
OrderedProductList, OrderedProduct, form=OrderedProductForm, extra=2)


class PagePromotionForm(forms.ModelForm):
Expand Down
2 changes: 1 addition & 1 deletion oscar/apps/dashboard/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
from django.db.models import Avg, Sum, Count

from oscar.core.compat import get_user_model
from oscar.apps.promotions.models import AbstractPromotion
from oscar.apps.promotions.abstract_models import AbstractPromotion

ConditionalOffer = get_model('offer', 'ConditionalOffer')
Voucher = get_model('voucher', 'Voucher')
Expand Down
37 changes: 18 additions & 19 deletions oscar/apps/promotions/abstract_models.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,10 +52,6 @@ class Meta:
verbose_name_plural = _("Page Promotions")


class PagePromotion(AbstractPagePromotion):
pass


class AbstractKeywordPromotion(LinkedPromotion):
"""
A promotion linked to a specific keyword.
Expand All @@ -79,17 +75,14 @@ class Meta:
verbose_name_plural = _("Keyword Promotions")


class KeywordPromotion(AbstractKeywordPromotion):
pass

class AbstractPromotion(models.Model):
"""
Abstract base promotion that defines the interface
that subclasses must implement.
"""
_type = 'Promotion'
keywords = generic.GenericRelation(KeywordPromotion, verbose_name=_('Keywords'))
pages = generic.GenericRelation(PagePromotion, verbose_name=_('Pages'))
keywords = generic.GenericRelation('KeywordPromotion', verbose_name=_('Keywords'))
pages = generic.GenericRelation('PagePromotion', verbose_name=_('Pages'))

class Meta:
abstract = True
Expand Down Expand Up @@ -124,9 +117,9 @@ def content_type(self):
@property
def num_times_used(self):
ctype = self.content_type
page_count = PagePromotion.objects.filter(content_type=ctype,
page_count = self.pages.objects.filter(content_type=ctype,
object_id=self.id).count()
keyword_count = KeywordPromotion.objects.filter(content_type=ctype,
keyword_count = self.keywords.objects.filter(content_type=ctype,
object_id=self.id).count()
return page_count + keyword_count

Expand Down Expand Up @@ -253,11 +246,11 @@ class AbstractHandPickedProductList(AbstractProductList):
products.
"""
_type = 'Product list'
products = models.ManyToManyField('catalogue.Product', through='OrderedProduct', blank=True, null=True,
products = models.ManyToManyField('catalogue.Product', through='HandPickedProduct', blank=True, null=True,
verbose_name=_("Products"))

def get_queryset(self):
return self.products.all().order_by('%s.display_order' % OrderedProduct._meta.db_table)
# def get_queryset(self):
# return self.products.all().order_by('%s.display_order' % OrderedProduct._meta.db_table)

def get_products(self):
return self.get_queryset()
Expand All @@ -268,9 +261,8 @@ class Meta:
verbose_name_plural = _("Hand Picked Product Lists")


class AbstractOrderedProduct(models.Model):
class AbstractProduct(models.Model):

list = models.ForeignKey('promotions.HandPickedProductList', verbose_name=_("List"))
product = models.ForeignKey('catalogue.Product', verbose_name=_("Product"))
display_order = models.PositiveIntegerField(_('Display Order'), default=0)

Expand All @@ -281,8 +273,12 @@ class Meta:
verbose_name_plural = _("Ordered Product")


class OrderedProduct(AbstractOrderedProduct):
pass
class AbstractOrderedProduct(AbstractProduct):
list = models.ForeignKey('promotions.OrderedProductList', verbose_name=_("List"))


class AbstractHandPickedProduct(AbstractProduct):
list = models.ForeignKey('promotions.HandPickedProductList', verbose_name=_("List"))


class AbstractAutomaticProductList(AbstractProductList):
Expand Down Expand Up @@ -317,11 +313,14 @@ class Meta:
verbose_name_plural = _("Automatic Product Lists")


class AbstractOrderedProductList(AbstractHandPickedProductList):
class AbstractOrderedProductList(AbstractProductList):
tabbed_block = models.ForeignKey('promotions.TabbedBlock',
related_name='tabs', verbose_name=_("Tabbed Block"))
display_order = models.PositiveIntegerField(_('Display Order'), default=0)

products = models.ManyToManyField('catalogue.Product', through='OrderedProduct', blank=True, null=True,
verbose_name=_("Products"))

class Meta:
abstract = True
ordering = ('display_order',)
Expand Down
9 changes: 7 additions & 2 deletions oscar/apps/promotions/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,9 @@
AbstractPagePromotion, AbstractKeywordPromotion,
AbstractRawHTML, AbstractImage, AbstractMultiImage,
AbstractSingleProduct, AbstractHandPickedProductList,
AbstractOrderedProduct, AbstractAutomaticProductList,
AbstractOrderedProductList, AbstractTabbedBlock)
AbstractOrderedProduct, AbstractHandPickedProduct,
AbstractAutomaticProductList, AbstractOrderedProductList,
AbstractTabbedBlock)

Item = get_model('product', 'Item')

Expand Down Expand Up @@ -45,6 +46,10 @@ class OrderedProduct(AbstractOrderedProduct):
pass


class HandPickedProduct(AbstractHandPickedProduct):
pass


class AutomaticProductList(AbstractAutomaticProductList):
pass

Expand Down

0 comments on commit e8fd142

Please sign in to comment.