Source code for shuup.admin.modules.contacts.form_parts

# -*- 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.contrib.auth import get_user_model
from django.utils.translation import ugettext_lazy as _

from shuup.admin.form_part import FormPart, TemplatedFormDef
from shuup.admin.modules.contacts.forms import CompanyContactBaseForm, PersonContactBaseForm
from shuup.core.models import PersonContact
from shuup.utils.excs import Problem
from shuup.utils.form_group import FormDef
from shuup.utils.importing import cached_load


[docs]class CompanyContactBaseFormPart(FormPart): priority = -1000
[docs] def get_form_defs(self): yield TemplatedFormDef( "base", CompanyContactBaseForm, template_name="shuup/admin/contacts/_edit_base_form.jinja", required=True, kwargs={"instance": self.object if self.object.pk else None, "request": self.request}, )
[docs] def form_valid(self, form): self.object = form["base"].save() return self.object # Identity may have changed (not the original object we put in)
[docs]class PersonContactBaseFormPart(FormPart): priority = -1000
[docs] def get_user(self): bind_user_id = self.request.GET.get("user_id") if bind_user_id: bind_user = get_user_model().objects.get(pk=bind_user_id) if PersonContact.objects.filter(user=bind_user).exists(): raise Problem(_("User `%(bind_user)s` already has a contact.", bind_user=bind_user)) else: bind_user = None return bind_user
[docs] def get_form_defs(self): yield TemplatedFormDef( "base", PersonContactBaseForm, template_name="shuup/admin/contacts/_edit_base_form.jinja", required=True, kwargs={ "instance": self.object if self.object.pk else None, "user": self.get_user(), "request": self.request, }, )
[docs] def form_valid(self, form): self.object = form["base"].save() return self.object # Identity may have changed (not the original object we put in)
[docs]class ContactAddressesFormPart(FormPart): priority = -900
[docs] def get_form_defs(self): initial = {} # TODO: should we do this? model_to_dict(self.object, AddressForm._meta.fields) address_form_class = cached_load("SHUUP_ADDRESS_MODEL_FORM") yield FormDef( name="shipping_address", form_class=address_form_class, required=False, kwargs={"instance": self.object.default_shipping_address, "initial": initial}, ) yield FormDef( name="billing_address", form_class=address_form_class, required=False, kwargs={"instance": self.object.default_billing_address, "initial": initial}, ) # Using a pseudo formdef to group the two actual formdefs... yield TemplatedFormDef( name="addresses", form_class=forms.Form, required=False, template_name="shuup/admin/contacts/_edit_addresses_form.jinja", )
[docs] def form_valid(self, form): for obj_key, form_name in [ ("default_shipping_address", "shipping_address"), ("default_billing_address", "billing_address"), ]: addr_form = form[form_name] if addr_form.changed_data: addr = addr_form.save() setattr(self.object, obj_key, addr) self.object.save()