Source code for shuup.admin.modules.service_providers.views._wizard

# -*- coding: utf-8 -*-
# This file is part of Shuup.
#
# Copyright (c) 2012-2021, Shuup Commerce Inc. 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 django import forms
from django.utils.translation import ugettext_lazy as _

from shuup.admin.views.wizard import TemplatedWizardFormDef, WizardPane
from shuup.apps.provides import get_provide_objects
from shuup.core.models import PaymentMethod, ShippingMethod


class ServiceProviderTypeForm(forms.Form):
    providers = forms.CharField(label=_("Provider"), required=False, widget=forms.HiddenInput())

    def __init__(self, *args, **kwargs):
        self.provider_label = kwargs.pop("label", "")
        super(ServiceProviderTypeForm, self).__init__(*args, **kwargs)

    def clean_providers(self):
        data = self.cleaned_data.get("providers", None)
        if not data:
            self.add_error(None, _("Please activate at least one %s." % self.provider_label))
        return data


class ServiceWizardFormPartMixin(object):
    def visible(self):
        return not self.service_model.objects.for_shop(shop=self.object).exists()

    def _get_service_provider_form_defs(self):
        form_defs = []
        for form_def in get_provide_objects(self.form_def_provide_key):
            inst = form_def(request=self.request)
            if inst.visible():
                form_defs.append(inst)
        form_defs.sort(key=lambda form_def: getattr(form_def, "priority", 0))
        return form_defs

    def get_form_defs(self):
        service_provider_form_defs = self._get_service_provider_form_defs()

        if self.request.method == "POST":
            active_providers = self.request.POST.get(self.base_name + "-providers").split(",")
            service_provider_form_defs = list(filter(lambda x: x.name in active_providers, service_provider_form_defs))
        return [
            TemplatedWizardFormDef(
                name=self.base_name,
                template_name="shuup/admin/service_providers/_wizard_service_provider_base_form.jinja",
                extra_js="shuup/admin/service_providers/_wizard_script.jinja",
                form_class=ServiceProviderTypeForm,
                kwargs={"label": self.provider_label},
            )
        ] + service_provider_form_defs

    def form_valid(self, form_group):
        providers = form_group[self.base_name].cleaned_data.get("providers").split(",")
        for provider in providers:
            provider_form = form_group.forms.get(provider, None)
            if provider_form:
                form_group[provider].request = self.request
                form_group[provider].save()


[docs]class CarrierWizardPane(ServiceWizardFormPartMixin, WizardPane): identifier = "carrier" title = _("Carrier") text = _("To start shipping products right away, please add shipping methods for your shop") icon = "shuup_admin/img/shipping.png" service_model = ShippingMethod base_name = "shipping_method_base" provider_label = _("shipping method") form_def_provide_key = "carrier_wizard_form_def"
[docs] def valid(self): from shuup.admin.utils.permissions import has_permission return has_permission(self.request.user, "shipping_method.edit")
[docs]class PaymentWizardPane(ServiceWizardFormPartMixin, WizardPane): identifier = "payment" title = _("Payment Provider") text = _("To start accepting payments right away, please add payment methods for your shop") icon = "shuup_admin/img/payment.png" service_model = PaymentMethod base_name = "payment_method_base" provider_label = _("payment method") form_def_provide_key = "payment_processor_wizard_form_def"
[docs] def valid(self): from shuup.admin.utils.permissions import has_permission return has_permission(self.request.user, "payment_method.edit")