from django.utils.translation import ugettext_lazy as _ from django.core.urlresolvers import reverse_lazy OSCAR_SHOP_NAME = 'Oscar' OSCAR_SHOP_TAGLINE = '' OSCAR_HOMEPAGE = reverse_lazy('promotions:home') # Basket settings OSCAR_BASKET_COOKIE_LIFETIME = 7 * 24 * 60 * 60 OSCAR_BASKET_COOKIE_OPEN = 'oscar_open_basket' OSCAR_BASKET_COOKIE_SAVED = 'oscar_saved_basket' OSCAR_MAX_BASKET_QUANTITY_THRESHOLD = 10000 # Recently-viewed products OSCAR_RECENTLY_VIEWED_COOKIE_LIFETIME = 7 * 24 * 60 * 60 OSCAR_RECENTLY_VIEWED_COOKIE_NAME = 'oscar_history' OSCAR_RECENTLY_VIEWED_PRODUCTS = 20 # Currency OSCAR_DEFAULT_CURRENCY = 'GBP' OSCAR_CURRENCY_LOCALE = 'en_GB' # Paths OSCAR_IMAGE_FOLDER = 'images/products/%Y/%m/' OSCAR_PROMOTION_FOLDER = 'images/promotions/' # Copy this image from oscar/static/img to your MEDIA_ROOT folder. # It needs to be there so Sorl can resize it. OSCAR_MISSING_IMAGE_URL = 'image_not_found.jpg' OSCAR_UPLOAD_ROOT = '/tmp' # Address settings OSCAR_REQUIRED_ADDRESS_FIELDS = ('first_name', 'last_name', 'line1', 'line4', 'postcode', 'country') # Product list settings OSCAR_PRODUCTS_PER_PAGE = 20 # Checkout OSCAR_ALLOW_ANON_CHECKOUT = False # Partners OSCAR_PARTNER_WRAPPERS = {} # Promotions COUNTDOWN, LIST, SINGLE_PRODUCT, TABBED_BLOCK = ( 'Countdown', 'List', 'SingleProduct', 'TabbedBlock') OSCAR_PROMOTION_MERCHANDISING_BLOCK_TYPES = ( (COUNTDOWN, "Vertical list"), (LIST, "Horizontal list"), (TABBED_BLOCK, "Tabbed block"), (SINGLE_PRODUCT, "Single product"), ) OSCAR_PROMOTION_POSITIONS = (('page', 'Page'), ('right', 'Right-hand sidebar'), ('left', 'Left-hand sidebar')) # Reviews OSCAR_ALLOW_ANON_REVIEWS = True OSCAR_MODERATE_REVIEWS = False # Accounts OSCAR_ACCOUNTS_REDIRECT_URL = 'customer:profile-view' # This enables sending alert notifications/emails instantly when products get # back in stock by listening to stock record update signals. # This might impact performance for large numbers of stock record updates. # Alternatively, the management command ``oscar_send_alerts`` can be used to # run periodically, e.g. as a cron job. In this case eager alerts should be # disabled. OSCAR_EAGER_ALERTS = True # Registration OSCAR_SEND_REGISTRATION_EMAIL = True OSCAR_FROM_EMAIL = 'oscar@example.com' # Offers OSCAR_OFFER_BLACKLIST_PRODUCT = None # Cookies OSCAR_COOKIES_DELETE_ON_LOGOUT = ['oscar_recently_viewed_products', ] # Hidden Oscar features, e.g. wishlists or reviews OSCAR_HIDDEN_FEATURES = [] # Menu structure of the dashboard navigation OSCAR_DASHBOARD_NAVIGATION = [ { 'label': _('Dashboard'), 'icon': 'icon-th-list', 'url_name': 'dashboard:index', }, { 'label': _('Catalogue'), 'icon': 'icon-sitemap', 'children': [ { 'label': _('Products'), 'url_name': 'dashboard:catalogue-product-list', }, { 'label': _('Product Types'), 'url_name': 'dashboard:catalogue-class-list', }, { 'label': _('Categories'), 'url_name': 'dashboard:catalogue-category-list', }, { 'label': _('Ranges'), 'url_name': 'dashboard:range-list', }, { 'label': _('Low stock alerts'), 'url_name': 'dashboard:stock-alert-list', }, ] }, { 'label': _('Fulfilment'), 'icon': 'icon-shopping-cart', 'children': [ { 'label': _('Order management'), 'url_name': 'dashboard:order-list', }, { 'label': _('Statistics'), 'url_name': 'dashboard:order-stats', }, { 'label': _('Partners'), 'url_name': 'dashboard:partner-list', }, ] }, { 'label': _('Customers'), 'icon': 'icon-group', 'children': [ { 'label': _('Customer management'), 'url_name': 'dashboard:users-index', }, { 'label': _('Stock alert requests'), 'url_name': 'dashboard:user-alert-list', }, ] }, { 'label': _('Offers'), 'icon': 'icon-bullhorn', 'children': [ { 'label': _('Offer management'), 'url_name': 'dashboard:offer-list', }, { 'label': _('Vouchers'), 'url_name': 'dashboard:voucher-list', }, ], }, { 'label': _('Content'), 'icon': 'icon-folder-close', 'children': [ { 'label': _('Content blocks'), 'url_name': 'dashboard:promotion-list', }, { 'label': _('Content blocks by page'), 'url_name': 'dashboard:promotion-list-by-page', }, { 'label': _('Pages'), 'url_name': 'dashboard:page-list', }, { 'label': _('Email templates'), 'url_name': 'dashboard:comms-list', }, { 'label': _('Reviews'), 'url_name': 'dashboard:reviews-list', }, ] }, { 'label': _('Reports'), 'icon': 'icon-bar-chart', 'url_name': 'dashboard:reports-index', }, ] OSCAR_DASHBOARD_DEFAULT_ACCESS_FUNCTION = 'dashboard.nav.default_access_fn' # Search facets OSCAR_SEARCH_FACETS = { 'fields': { # The key for these dicts will be used when passing facet data # to the template. Same for the 'queries' dict below. 'category': { 'name': _('Category'), 'field': 'category' }, 'product_class': { 'name': _('Type'), 'field': 'product_class' }, 'rating': { 'name': _('Rating'), 'field': 'rating', # You can specify an 'options' element that will be passed to the # SearchQuerySet.facet() call. It's hard to get 'missing' to work # correctly though as of Solr's hilarious syntax for selecting # items without a specific facet: # http://wiki.apache.org/solr/SimpleFacetParameters#facet.method # 'options': {'missing': 'true'} } }, 'queries': { 'price_range': { 'name': _('Price range'), 'field': 'price', 'queries': [ # This is a list of (name, query) tuples where the name will # be displayed on the front-end. (_('0 to 20'), '[0 TO 20]'), (_('20 to 40'), '[20 TO 40]'), (_('40 to 60'), '[40 TO 60]'), (_('60+'), '[60 TO *]'), ] }, } } OSCAR_SETTINGS = dict( [(k, v) for k, v in locals().items() if k.startswith('OSCAR_')])