Files
edx-platform/lms/djangoapps/commerce/models.py
2016-09-02 08:28:18 +00:00

80 lines
2.5 KiB
Python

"""
Commerce-related models.
"""
from django.contrib.sites.models import Site
from django.db import models
from django.utils.translation import ugettext_lazy as _
from config_models.models import ConfigurationModel
from openedx.core.djangoapps.site_configuration.models import SiteConfiguration
from logging import getLogger
logger = getLogger(__name__) # pylint: disable=invalid-name
class CommerceConfiguration(ConfigurationModel):
""" Commerce configuration """
class Meta(object):
app_label = "commerce"
API_NAME = 'commerce'
CACHE_KEY = 'commerce.api.data'
checkout_on_ecommerce_service = models.BooleanField(
default=False,
help_text=_('Use the checkout page hosted by the E-Commerce service.')
)
single_course_checkout_page = models.CharField(
max_length=255,
default='/basket/single-item/',
help_text=_('Path to single course checkout page hosted by the E-Commerce service.')
)
cache_ttl = models.PositiveIntegerField(
verbose_name=_('Cache Time To Live'),
default=0,
help_text=_(
'Specified in seconds. Enable caching by setting this to a value greater than 0.'
)
)
site = models.ForeignKey(
Site,
on_delete=models.SET_NULL,
blank=True,
null=True
)
def __unicode__(self):
return "Commerce configuration"
def get_receipt_page_url(self, order_number):
"""
Return absolute receipt page URL.
Arguments:
order_number (str): Order number
Returns:
Absolute receipt page URL, consisting of site domain and site receipt page.
"""
site = self.site
if site:
try:
return '{site_domain}{receipt_page_url}{order_number}'.format(
site_domain=site.domain,
receipt_page_url=site.configuration.receipt_page_url, # pylint: disable=no-member
order_number=order_number
)
except AttributeError:
logger.info("Site Configuration is not enabled for site (%s).", site)
return '{default_receipt_page_url}{order_number}'.format(
default_receipt_page_url=SiteConfiguration.DEFAULT_RECEIPT_PAGE_URL,
order_number=order_number
)
@property
def is_cache_enabled(self):
"""Whether responses from the Ecommerce API will be cached."""
return self.cache_ttl > 0