You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

defaults.py 7.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242
  1. from django.utils.translation import ugettext_lazy as _
  2. from django.core.urlresolvers import reverse_lazy
  3. OSCAR_SHOP_NAME = 'Oscar'
  4. OSCAR_SHOP_TAGLINE = ''
  5. OSCAR_HOMEPAGE = reverse_lazy('promotions:home')
  6. # Basket settings
  7. OSCAR_BASKET_COOKIE_LIFETIME = 7 * 24 * 60 * 60
  8. OSCAR_BASKET_COOKIE_OPEN = 'oscar_open_basket'
  9. OSCAR_MAX_BASKET_QUANTITY_THRESHOLD = 10000
  10. # Recently-viewed products
  11. OSCAR_RECENTLY_VIEWED_COOKIE_LIFETIME = 7 * 24 * 60 * 60
  12. OSCAR_RECENTLY_VIEWED_COOKIE_NAME = 'oscar_history'
  13. OSCAR_RECENTLY_VIEWED_PRODUCTS = 20
  14. # Currency
  15. OSCAR_DEFAULT_CURRENCY = 'GBP'
  16. # Paths
  17. OSCAR_IMAGE_FOLDER = 'images/products/%Y/%m/'
  18. OSCAR_PROMOTION_FOLDER = 'images/promotions/'
  19. OSCAR_DELETE_IMAGE_FILES = True
  20. # Copy this image from oscar/static/img to your MEDIA_ROOT folder.
  21. # It needs to be there so Sorl can resize it.
  22. OSCAR_MISSING_IMAGE_URL = 'image_not_found.jpg'
  23. OSCAR_UPLOAD_ROOT = '/tmp'
  24. # Address settings
  25. OSCAR_REQUIRED_ADDRESS_FIELDS = ('first_name', 'last_name', 'line1',
  26. 'line4', 'postcode', 'country')
  27. # Product list settings
  28. OSCAR_PRODUCTS_PER_PAGE = 20
  29. # Checkout
  30. OSCAR_ALLOW_ANON_CHECKOUT = False
  31. # Promotions
  32. COUNTDOWN, LIST, SINGLE_PRODUCT, TABBED_BLOCK = (
  33. 'Countdown', 'List', 'SingleProduct', 'TabbedBlock')
  34. OSCAR_PROMOTION_MERCHANDISING_BLOCK_TYPES = (
  35. (COUNTDOWN, "Vertical list"),
  36. (LIST, "Horizontal list"),
  37. (TABBED_BLOCK, "Tabbed block"),
  38. (SINGLE_PRODUCT, "Single product"),
  39. )
  40. OSCAR_PROMOTION_POSITIONS = (('page', 'Page'),
  41. ('right', 'Right-hand sidebar'),
  42. ('left', 'Left-hand sidebar'))
  43. # Reviews
  44. OSCAR_ALLOW_ANON_REVIEWS = True
  45. OSCAR_MODERATE_REVIEWS = False
  46. # Accounts
  47. OSCAR_ACCOUNTS_REDIRECT_URL = 'customer:profile-view'
  48. # This enables sending alert notifications/emails instantly when products get
  49. # back in stock by listening to stock record update signals.
  50. # This might impact performance for large numbers of stock record updates.
  51. # Alternatively, the management command ``oscar_send_alerts`` can be used to
  52. # run periodically, e.g. as a cron job. In this case eager alerts should be
  53. # disabled.
  54. OSCAR_EAGER_ALERTS = True
  55. # Registration
  56. OSCAR_SEND_REGISTRATION_EMAIL = True
  57. OSCAR_FROM_EMAIL = 'oscar@example.com'
  58. # Slug handling
  59. OSCAR_SLUG_FUNCTION = 'oscar.core.utils.default_slugifier'
  60. OSCAR_SLUG_MAP = {}
  61. OSCAR_SLUG_BLACKLIST = []
  62. # Cookies
  63. OSCAR_COOKIES_DELETE_ON_LOGOUT = ['oscar_recently_viewed_products', ]
  64. # Hidden Oscar features, e.g. wishlists or reviews
  65. OSCAR_HIDDEN_FEATURES = []
  66. # Menu structure of the dashboard navigation
  67. OSCAR_DASHBOARD_NAVIGATION = [
  68. {
  69. 'label': _('Dashboard'),
  70. 'icon': 'icon-th-list',
  71. 'url_name': 'dashboard:index',
  72. },
  73. {
  74. 'label': _('Catalogue'),
  75. 'icon': 'icon-sitemap',
  76. 'children': [
  77. {
  78. 'label': _('Products'),
  79. 'url_name': 'dashboard:catalogue-product-list',
  80. },
  81. {
  82. 'label': _('Product Types'),
  83. 'url_name': 'dashboard:catalogue-class-list',
  84. },
  85. {
  86. 'label': _('Categories'),
  87. 'url_name': 'dashboard:catalogue-category-list',
  88. },
  89. {
  90. 'label': _('Ranges'),
  91. 'url_name': 'dashboard:range-list',
  92. },
  93. {
  94. 'label': _('Low stock alerts'),
  95. 'url_name': 'dashboard:stock-alert-list',
  96. },
  97. ]
  98. },
  99. {
  100. 'label': _('Fulfilment'),
  101. 'icon': 'icon-shopping-cart',
  102. 'children': [
  103. {
  104. 'label': _('Orders'),
  105. 'url_name': 'dashboard:order-list',
  106. },
  107. {
  108. 'label': _('Statistics'),
  109. 'url_name': 'dashboard:order-stats',
  110. },
  111. {
  112. 'label': _('Partners'),
  113. 'url_name': 'dashboard:partner-list',
  114. },
  115. # The shipping method dashboard is disabled by default as it might
  116. # be confusing. Weight-based shipping methods aren't hooked into
  117. # the shipping repository by default (as it would make
  118. # customising the repository slightly more difficult).
  119. # {
  120. # 'label': _('Shipping charges'),
  121. # 'url_name': 'dashboard:shipping-method-list',
  122. # },
  123. ]
  124. },
  125. {
  126. 'label': _('Customers'),
  127. 'icon': 'icon-group',
  128. 'children': [
  129. {
  130. 'label': _('Customers'),
  131. 'url_name': 'dashboard:users-index',
  132. },
  133. {
  134. 'label': _('Stock alert requests'),
  135. 'url_name': 'dashboard:user-alert-list',
  136. },
  137. ]
  138. },
  139. {
  140. 'label': _('Offers'),
  141. 'icon': 'icon-bullhorn',
  142. 'children': [
  143. {
  144. 'label': _('Offers'),
  145. 'url_name': 'dashboard:offer-list',
  146. },
  147. {
  148. 'label': _('Vouchers'),
  149. 'url_name': 'dashboard:voucher-list',
  150. },
  151. ],
  152. },
  153. {
  154. 'label': _('Content'),
  155. 'icon': 'icon-folder-close',
  156. 'children': [
  157. {
  158. 'label': _('Content blocks'),
  159. 'url_name': 'dashboard:promotion-list',
  160. },
  161. {
  162. 'label': _('Content blocks by page'),
  163. 'url_name': 'dashboard:promotion-list-by-page',
  164. },
  165. {
  166. 'label': _('Pages'),
  167. 'url_name': 'dashboard:page-list',
  168. },
  169. {
  170. 'label': _('Email templates'),
  171. 'url_name': 'dashboard:comms-list',
  172. },
  173. {
  174. 'label': _('Reviews'),
  175. 'url_name': 'dashboard:reviews-list',
  176. },
  177. ]
  178. },
  179. {
  180. 'label': _('Reports'),
  181. 'icon': 'icon-bar-chart',
  182. 'url_name': 'dashboard:reports-index',
  183. },
  184. ]
  185. OSCAR_DASHBOARD_DEFAULT_ACCESS_FUNCTION = 'oscar.apps.dashboard.nav.default_access_fn' # noqa
  186. # Search facets
  187. OSCAR_SEARCH_FACETS = {
  188. 'fields': {
  189. # The key for these dicts will be used when passing facet data
  190. # to the template. Same for the 'queries' dict below.
  191. 'product_class': {
  192. 'name': _('Type'),
  193. 'field': 'product_class'
  194. },
  195. 'rating': {
  196. 'name': _('Rating'),
  197. 'field': 'rating',
  198. # You can specify an 'options' element that will be passed to the
  199. # SearchQuerySet.facet() call. It's hard to get 'missing' to work
  200. # correctly though as of Solr's hilarious syntax for selecting
  201. # items without a specific facet:
  202. # http://wiki.apache.org/solr/SimpleFacetParameters#facet.method
  203. # 'options': {'missing': 'true'}
  204. }
  205. },
  206. 'queries': {
  207. 'price_range': {
  208. 'name': _('Price range'),
  209. 'field': 'price',
  210. 'queries': [
  211. # This is a list of (name, query) tuples where the name will
  212. # be displayed on the front-end.
  213. (_('0 to 20'), u'[0 TO 20]'),
  214. (_('20 to 40'), u'[20 TO 40]'),
  215. (_('40 to 60'), u'[40 TO 60]'),
  216. (_('60+'), u'[60 TO *]'),
  217. ]
  218. },
  219. }
  220. }
  221. OSCAR_SETTINGS = dict(
  222. [(k, v) for k, v in locals().items() if k.startswith('OSCAR_')])