Source code for shoop.admin.modules.products.views.toolbars
# -*- coding: utf-8 -*-
# This file is part of Shoop.
#
# Copyright (c) 2012-2016, Shoop Ltd. All rights reserved.
#
# This source code is licensed under the AGPLv3 license found in the
# LICENSE file in the root directory of this source tree.
from __future__ import unicode_literals
from django.core.urlresolvers import reverse
from django.utils.translation import ugettext as _
from shoop.admin.toolbar import (
DropdownActionButton, DropdownDivider, DropdownHeader, DropdownItem,
get_default_edit_toolbar, Toolbar
)
from shoop.admin.utils.urls import get_model_url
[docs]class EditProductToolbar(Toolbar):
def __init__(self, view):
super(EditProductToolbar, self).__init__()
self.view = view
self.request = view.request
self.product = view.object
self.extend(get_default_edit_toolbar(
self.view, "product_form",
delete_url="shoop_admin:product.delete"
))
if self.product.pk:
self._build_existing_product()
def _build_existing_product(self):
product = self.product
# :type product: shoop.core.models.Product
cross_sell_button = DropdownItem(
text=_("Manage Cross-Selling"),
icon="fa fa-random",
url=reverse("shoop_admin:product.edit_cross_sell", kwargs={"pk": product.pk}),
)
menu_items = [
DropdownHeader(text=_("Cross-Selling")),
cross_sell_button
]
for item in self._get_variation_and_package_menu_items(product):
menu_items.append(item)
self.append(DropdownActionButton(
menu_items,
icon="fa fa-star",
text=_(u"Actions"),
extra_css_class="btn-info",
))
def _get_header_item(self, header):
yield DropdownDivider()
yield DropdownHeader(text=header)
def _get_package_url(self, product):
return reverse("shoop_admin:product.edit_package", kwargs={"pk": product.pk})
def _get_variation_url(self, product):
return reverse("shoop_admin:product.edit_variation", kwargs={"pk": product.pk})
def _get_children_items(self, children):
for child in children:
yield DropdownItem(
text=_("Child: %s") % child,
icon="fa fa-eye",
url=get_model_url(child),
)
def _get_parent_and_sibling_items(self, parent, siblings):
yield DropdownItem(
text=_("Parent: %s") % parent,
icon="fa fa-eye",
url=get_model_url(parent),
)
for sib in siblings:
yield DropdownItem(
text=_("Sibling: %s") % sib,
icon="fa fa-eye",
url=get_model_url(sib),
)
def _get_variation_menu_items(self, product):
for item in self._get_header_item(_("Variations")):
yield item
yield DropdownItem(
text=_("Manage Variations"),
icon="fa fa-sitemap",
url=self._get_variation_url(product),
)
if product.is_variation_parent():
for child in self._get_children_items(product.variation_children.all()):
yield child
elif product.is_variation_child():
for item in self._get_parent_and_sibling_items(product.variation_parent, product.get_variation_siblings()):
yield item
def _get_package_menu_items(self, product):
for item in self._get_header_item(_("Packages")):
yield item
yield DropdownItem(
text=_("Manage Package"),
icon="fa fa-cube",
url=self._get_package_url(product),
)
if product.is_package_parent():
for child in self._get_children_items(product.get_all_package_children()):
yield child
elif product.is_package_child():
for parent in product.get_all_package_parents():
for item in self._get_parent_and_sibling_items(
parent, [sib for sib in parent.get_all_package_children() if sib != product]):
yield item
def _get_variation_and_package_menu_items(self, product):
is_variation_product = (product.is_variation_parent() or product.is_variation_child())
if is_variation_product:
for item in self._get_variation_menu_items(product):
yield item
is_package_product = (product.is_package_parent() or product.is_package_child())
if is_package_product:
for item in self._get_package_menu_items(product):
yield item
if not (is_variation_product or is_package_product):
for item in self._get_header_item(_("Packages")):
yield item
yield DropdownItem(
text=_("Convert to Package Parent"),
icon="fa fa-retweet",
url=self._get_package_url(product),
)
for item in self._get_header_item(_("Variations")):
yield item
yield DropdownItem(
text=_("Convert to Variation Parent"),
icon="fa fa-retweet",
url=self._get_variation_url(product),
)