-
Notifications
You must be signed in to change notification settings - Fork 58
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #8 from a-musing-moose/store_stock
Adding store stock models and template tag
- Loading branch information
Showing
17 changed files
with
425 additions
and
17 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -11,6 +11,7 @@ Contents: | |
.. toctree:: | ||
:maxdepth: 2 | ||
|
||
settings | ||
|
||
|
||
Indices and tables | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
Settings | ||
======== | ||
|
||
STORES_SRID | ||
----------- | ||
|
||
Default: ``4326`` (i.e. WGS 84) | ||
|
||
This sets the SRID for the stores location field. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -190,3 +190,5 @@ | |
}, | ||
} | ||
} | ||
|
||
STORES_SRID = 32140, # Flat projection so spatialite can do distances |
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -15,4 +15,3 @@ def get_query_set(self): | |
|
||
def pickup_stores(self): | ||
return self.get_query_set().pickup_stores() | ||
|
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Empty file.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
from django import template | ||
from django.db.models import get_model | ||
|
||
StoreStock = get_model('stores', 'StoreStock') | ||
|
||
register = template.Library() | ||
|
||
|
||
@register.assignment_tag | ||
def store_stock_for_product(product, location=None, limit=20): | ||
query_set = StoreStock.objects.filter(product=product) | ||
if location: | ||
query_set = query_set.distance( | ||
location, | ||
field_name='store__location' | ||
).order_by('distance') | ||
else: | ||
query_set = query_set.order_by('store__name') | ||
return query_set[0:limit] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,62 @@ | ||
from django.test import TestCase | ||
from django.contrib.gis.geos.point import Point | ||
from django.template import Template, Context | ||
from django_dynamic_fixture import get as G | ||
|
||
from django.db.models import get_model | ||
|
||
Product = get_model('catalogue', 'Product') | ||
Store = get_model('stores', 'Store') | ||
StoreStock = get_model('stores', 'StoreStock') | ||
|
||
|
||
class StoreStockTest(TestCase): | ||
|
||
def setUp(self): | ||
self.product = G(Product) | ||
self.store1_location = '{"type": "Point", "coordinates": [87.39,12.02]}' | ||
self.store2_location = '{"type": "Point", "coordinates": [88.39,11.02]}' | ||
self.store1 = G(Store, is_pickup_store=True, location=self.store1_location) | ||
self.store2 = G(Store, is_pickup_store=True, location=self.store2_location) | ||
self.store_stock1 = G(StoreStock, store=self.store1, product=self.product) | ||
self.store_stock1 = G(StoreStock, store=self.store2, product=self.product) | ||
|
||
def test_store_stock_loads(self): | ||
rendered = Template( | ||
'{% load store_stock %}' | ||
).render(Context()) | ||
|
||
def test_store_stock_for_product_returns_stock_lines(self): | ||
rendered = Template( | ||
""" | ||
{% load store_stock %} {% store_stock_for_product product as store_stock %} | ||
{% for stock in store_stock %} {{ stock.store.name }} {% endfor %} | ||
""" | ||
).render(Context({ | ||
'product': self.product | ||
})) | ||
self.assertTrue(self.store1.name in rendered) | ||
self.assertTrue(self.store2.name in rendered) | ||
|
||
def test_store_stock_for_product_limits_when_asked(self): | ||
rendered = Template( | ||
""" | ||
{% load store_stock %} {% store_stock_for_product product limit=1 as store_stock %} | ||
{% for stock in store_stock %} {{ stock.store.name }} {% endfor %} | ||
""" | ||
).render(Context({ | ||
'product': self.product | ||
})) | ||
self.assertTrue(self.store1.name in rendered) | ||
|
||
def test_store_stock_for_product_order_by_closed(self): | ||
rendered = Template( | ||
""" | ||
{% load store_stock %} {% store_stock_for_product product location=loc as store_stock %} | ||
{% for stock in store_stock %}{{ stock.store.name }}{% endfor %} | ||
""" | ||
).render(Context({ | ||
'product': self.product, | ||
'loc': '{"type": "Point", "coordinates": [88.39,11.02]}' | ||
})) | ||
self.assertTrue("%s%s" % (self.store2.name, self.store1.name) in rendered) |