from typing import Iterable
from django.conf import settings
from django.utils.translation import gettext_lazy as _
from shuup.admin.base import AdminModule, MenuEntry
from shuup.admin.menu import CAMPAIGNS_MENU_CATEGORY
from shuup.admin.utils.object_selector import get_object_selector_permission_name
from shuup.admin.utils.urls import derive_model_url, get_edit_and_list_urls
from shuup.admin.views.home import HelpBlockCategory, SimpleHelpBlock
from shuup.campaigns.admin_module.utils import get_extra_permissions_for_admin_module
from shuup.campaigns.models import BasketCampaign, Coupon
[docs]
class CampaignAdminModule(AdminModule):
name = _("Campaigns")
[docs]
def get_urls(self):
basket_campaign_urls = get_edit_and_list_urls(
url_prefix="^campaigns/basket",
view_template="shuup.campaigns.admin_module.views.BasketCampaign%sView",
name_template="basket_campaign.%s",
)
coupon_urls = get_edit_and_list_urls(
url_prefix="^campaigns/coupons",
view_template="shuup.campaigns.admin_module.views.Coupon%sView",
name_template="coupon.%s",
)
catalog_campaign_urls = (
get_edit_and_list_urls(
url_prefix="^campaigns/catalog",
view_template="shuup.campaigns.admin_module.views.CatalogCampaign%sView",
name_template="catalog_campaign.%s",
)
if _show_catalog_campaigns_in_admin()
else []
)
return basket_campaign_urls + catalog_campaign_urls + coupon_urls
[docs]
def get_help_blocks(self, request, kind):
if kind == "quicklink":
yield SimpleHelpBlock(
text=_("Set up a sales campaign"),
actions=[
{
"text": _("New basket campaign"),
"url": self.get_model_url(BasketCampaign, "new"),
},
{"text": _("New coupon"), "url": self.get_model_url(Coupon, "new")},
],
priority=1,
category=HelpBlockCategory.CAMPAIGNS,
icon_url="shuup/campaigns/img/campaign.png",
)
[docs]
def get_model_url(self, object, kind, shop=None):
if not hasattr(object, "admin_url_suffix"):
return super().get_model_url(object, kind)
admin_url = f"shuup_admin:{object.admin_url_suffix}"
return derive_model_url(type(object), admin_url, object, kind)
[docs]
def get_permissions_help_texts(self) -> Iterable[str]:
return {
get_object_selector_permission_name(Coupon): _("Allow the user to select coupons in admin."),
}
def _show_catalog_campaigns_in_admin():
return bool("catalog_campaigns" in settings.SHUUP_DISCOUNT_MODULES)