Source code for shuup.admin.modules.settings.form_parts.shop

# -*- coding: utf-8 -*-
# This file is part of Shuup.
#
# Copyright (c) 2012-2017, Shoop Commerce Ltd. All rights reserved.
#
# This source code is licensed under the OSL-3.0 license found in the
# LICENSE file in the root directory of this source tree.
from __future__ import unicode_literals

from decimal import Decimal

import babel.core
import six
from django import forms
from django.conf import settings
from django.utils.translation import ugettext_lazy as _

from shuup import configuration
from shuup.admin.form_part import FormPart, TemplatedFormDef
from shuup.core.fields import (
    FORMATTED_DECIMAL_FIELD_MAX_DIGITS, FormattedDecimalFormField
)
from shuup.core.models import ConfigurationItem
from shuup.core.order_creator.constants import ORDER_MIN_TOTAL_CONFIG_KEY


[docs]class ShopOrderConfigurationForm(forms.Form): order_reference_number_length = forms.IntegerField( label=_("Reference number length"), initial=29, min_value=17, max_value=69, help_text=_("Length of the order reference number not including the checksum number. " "This can vary based on the country your shop is in. " "If you set the length to 19, the actual length is going to be 20 " "because the checksum is being added."), ) order_reference_number_prefix = forms.IntegerField(label=_("Reference number prefix"), required=False) def __init__(self, *args, **kwargs): from shuup.admin.modules.settings import consts from shuup.admin.modules.settings.enums import OrderReferenceNumberMethod shop = kwargs.pop("shop") kwargs["initial"] = { consts.ORDER_REFERENCE_NUMBER_LENGTH_FIELD: configuration.get( shop, consts.ORDER_REFERENCE_NUMBER_LENGTH_FIELD, settings.SHUUP_REFERENCE_NUMBER_LENGTH), consts.ORDER_REFERENCE_NUMBER_PREFIX_FIELD: configuration.get( shop, consts.ORDER_REFERENCE_NUMBER_PREFIX_FIELD, settings.SHUUP_REFERENCE_NUMBER_PREFIX), } super(ShopOrderConfigurationForm, self).__init__(*args, **kwargs) reference_method = configuration.get( shop, consts.ORDER_REFERENCE_NUMBER_METHOD_FIELD, settings.SHUUP_REFERENCE_NUMBER_METHOD) self.prefix_disabled = (reference_method in [OrderReferenceNumberMethod.UNIQUE.value, OrderReferenceNumberMethod.SHOP_RUNNING.value]) self.fields[consts.ORDER_REFERENCE_NUMBER_PREFIX_FIELD].disabled = self.prefix_disabled decimal_places = 2 # default if shop.currency in babel.core.get_global('currency_fractions'): decimal_places = babel.core.get_global('currency_fractions')[shop.currency][0] self.fields[ORDER_MIN_TOTAL_CONFIG_KEY] = FormattedDecimalFormField( label=_("Order minimum total"), decimal_places=decimal_places, max_digits=FORMATTED_DECIMAL_FIELD_MAX_DIGITS, min_value=0, required=False, initial=configuration.get(shop, ORDER_MIN_TOTAL_CONFIG_KEY, Decimal(0)), help_text=_("The minimum sum that an order needs to reach to be created.") )
[docs]class OrderConfigurationFormPart(FormPart): priority = 7 name = "order_configuration" form = ShopOrderConfigurationForm
[docs] def get_form_defs(self): if not self.object.pk: return yield TemplatedFormDef( name=self.name, form_class=self.form, template_name="shuup/admin/settings/form_parts/shop.jinja", required=False, kwargs={"shop": self.object} )
[docs] def form_valid(self, form): if self.name in form.forms: used_form = form[self.name] for key in used_form.fields.keys(): try: ConfigurationItem.objects.get(shop=self.object, key=key).delete() except ConfigurationItem.DoesNotExist: continue for key, value in six.iteritems(used_form.cleaned_data): configuration.set(shop=self.object, key=key, value=value)