Source code for shuup.admin.modules.contacts.views.edit

# -*- 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 __future__ import unicode_literals

from django.db.transaction import atomic
from django.utils.translation import ugettext_lazy as _

from shuup.admin.form_part import FormPartsViewMixin, SaveFormPartsMixin
from shuup.admin.modules.contacts.form_parts import (
    CompanyContactBaseFormPart,
    ContactAddressesFormPart,
    PersonContactBaseFormPart,
)
from shuup.admin.modules.contacts.utils import check_contact_permission, request_limited
from shuup.admin.shop_provider import get_shop
from shuup.admin.toolbar import get_default_edit_toolbar
from shuup.admin.utils.urls import get_model_url
from shuup.admin.utils.views import CreateOrUpdateView
from shuup.apps.provides import get_provide_objects
from shuup.core.models import Contact, PersonContact


[docs]class ContactEditView(SaveFormPartsMixin, FormPartsViewMixin, CreateOrUpdateView): model = Contact template_name = "shuup/admin/contacts/edit.jinja" context_object_name = "contact" form_part_class_provide_key = "admin_contact_form_part"
[docs] def get_object(self, queryset=None): if not self.kwargs.get(self.pk_url_kwarg): return self.model() contact = super(CreateOrUpdateView, self).get_object(queryset) check_contact_permission(self.request, contact) return contact
[docs] def get_contact_type(self): contact_type = self.request.GET.get("type", "") if self.object.pk: if type(self.object) is PersonContact: contact_type = "person" else: contact_type = "company" return contact_type
[docs] def get_queryset(self): qs = super(ContactEditView, self).get_queryset() if request_limited(self.request): qs = qs.filter(shops=get_shop(self.request)) # non superusers can't see superusers contacts if not self.request.user.is_superuser: qs = qs.exclude(PersonContact___user__is_superuser=True) return qs
[docs] def get_form_part_classes(self): form_part_classes = [] contact_type = self.get_contact_type() if contact_type == "person": form_part_classes.append(PersonContactBaseFormPart) else: form_part_classes.append(CompanyContactBaseFormPart) form_part_classes += list(get_provide_objects(self.form_part_class_provide_key)) if self.object.pk: form_part_classes.append(ContactAddressesFormPart) return form_part_classes
@atomic
[docs] def form_valid(self, form): response = self.save_form_parts(form) self.object.add_to_shop(get_shop(self.request)) return response
[docs] def get_toolbar(self): toolbar = get_default_edit_toolbar( self, self.get_save_form_id(), discard_url=(get_model_url(self.object) if self.object.pk else None) ) for button in get_provide_objects("admin_contact_edit_toolbar_button"): toolbar.append(button(self.object)) return toolbar
[docs] def get_context_data(self, **kwargs): context = super(ContactEditView, self).get_context_data(**kwargs) contact_type = self.get_contact_type() context["contact_type"] = contact_type if not self.object.pk: context["title"] = _("New Company") if contact_type == "company" else _("New Contact") return context