80 lines
2.5 KiB
Python
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
|